From bcd0064e3536aa6e5f9d7b86481f9212488bb609 Mon Sep 17 00:00:00 2001 From: Manus AI Date: Tue, 10 Feb 2026 21:08:30 -0500 Subject: [PATCH 01/10] feat: Add event tracking to FleetOps controllers - Added @service events injection to 30 controllers - Track resource created events in NEW controllers - Track resource updated events in EDIT controllers - Added standard event tracking to customer/create-order-form component - Maintains backward compatibility with existing custom events Controllers updated: - Analytics: reports (2) - Connectivity: devices, sensors, telematics (6) - Management: contacts, drivers, fleets, fuel-reports, issues, places, vehicles, vendors (16) - Operations: orders, service-rates (4) Events emitted: - Generic: resource.created, resource.updated - Specific: {model}.created, {model}.updated These events will be consumed by internals analytics-listener for PostHog tracking in cloud deployments. --- EVENTS_TRACKING_SUMMARY.md | 169 ++++++++++++++++++ .../components/customer/create-order-form.js | 5 + .../analytics/reports/index/edit.js | 2 + .../analytics/reports/index/new.js | 2 + .../connectivity/devices/index/edit.js | 2 + .../connectivity/devices/index/new.js | 2 + .../connectivity/sensors/index/edit.js | 2 + .../connectivity/sensors/index/new.js | 2 + .../connectivity/telematics/index/edit.js | 2 + .../connectivity/telematics/index/new.js | 2 + .../management/contacts/customers/edit.js | 2 + .../management/contacts/customers/new.js | 2 + .../management/contacts/index/edit.js | 2 + .../management/contacts/index/new.js | 2 + .../management/drivers/index/edit.js | 2 + .../management/drivers/index/new.js | 2 + .../management/fleets/index/edit.js | 2 + .../management/fleets/index/new.js | 2 + .../management/fuel-reports/index/edit.js | 2 + .../management/fuel-reports/index/new.js | 2 + .../management/issues/index/edit.js | 2 + .../management/issues/index/new.js | 2 + .../management/places/index/edit.js | 2 + .../management/places/index/new.js | 2 + .../management/vehicles/index/edit.js | 2 + .../management/vehicles/index/new.js | 2 + .../management/vendors/index/edit.js | 2 + .../management/vendors/index/new.js | 2 + .../operations/orders/index/new.js | 2 + .../operations/routes/index/new.js | 1 + .../operations/service-rates/index/edit.js | 2 + .../operations/service-rates/index/new.js | 2 + 32 files changed, 233 insertions(+) create mode 100644 EVENTS_TRACKING_SUMMARY.md diff --git a/EVENTS_TRACKING_SUMMARY.md b/EVENTS_TRACKING_SUMMARY.md new file mode 100644 index 00000000..eecfd231 --- /dev/null +++ b/EVENTS_TRACKING_SUMMARY.md @@ -0,0 +1,169 @@ +# FleetOps Event Tracking Implementation Summary + +## Overview +Added event tracking to FleetOps controllers using the `events` service from `@fleetbase/ember-core`. + +## Controllers Updated + +### Total: 30 controllers with active save tasks + +#### Analytics (2) +- ✅ `analytics/reports/index/new.js` - Track report created +- ✅ `analytics/reports/index/edit.js` - Track report updated + +#### Connectivity (6) +- ✅ `connectivity/devices/index/new.js` - Track device created +- ✅ `connectivity/devices/index/edit.js` - Track device updated +- ✅ `connectivity/sensors/index/new.js` - Track sensor created +- ✅ `connectivity/sensors/index/edit.js` - Track sensor updated +- ✅ `connectivity/telematics/index/new.js` - Track telematics created +- ✅ `connectivity/telematics/index/edit.js` - Track telematics updated + +#### Management (16) +- ✅ `management/contacts/customers/new.js` - Track customer created +- ✅ `management/contacts/customers/edit.js` - Track customer updated +- ✅ `management/contacts/index/new.js` - Track contact created +- ✅ `management/contacts/index/edit.js` - Track contact updated +- ✅ `management/drivers/index/new.js` - Track driver created +- ✅ `management/drivers/index/edit.js` - Track driver updated +- ✅ `management/fleets/index/new.js` - Track fleet created +- ✅ `management/fleets/index/edit.js` - Track fleet updated +- ✅ `management/fuel-reports/index/new.js` - Track fuel report created +- ✅ `management/fuel-reports/index/edit.js` - Track fuel report updated +- ✅ `management/issues/index/new.js` - Track issue created +- ✅ `management/issues/index/edit.js` - Track issue updated +- ✅ `management/places/index/new.js` - Track place created +- ✅ `management/places/index/edit.js` - Track place updated +- ✅ `management/vehicles/index/new.js` - Track vehicle created +- ✅ `management/vehicles/index/edit.js` - Track vehicle updated +- ✅ `management/vendors/index/new.js` - Track vendor created +- ✅ `management/vendors/index/edit.js` - Track vendor updated + +#### Operations (4) +- ✅ `operations/orders/index/new.js` - Track order created +- ✅ `operations/service-rates/index/new.js` - Track service rate created +- ✅ `operations/service-rates/index/edit.js` - Track service rate updated + +## Components Updated + +### Total: 1 component + +- ✅ `customer/create-order-form.js` - Added standard event tracking alongside existing custom events + +## Controllers Skipped (Empty/No Save Task) + +### Maintenance (6) +- ⏭️ `maintenance/equipment/index/new.js` - Empty controller +- ⏭️ `maintenance/equipment/index/edit.js` - Empty controller +- ⏭️ `maintenance/parts/index/new.js` - Empty controller +- ⏭️ `maintenance/parts/index/edit.js` - Empty controller +- ⏭️ `maintenance/work-orders/index/new.js` - Empty controller +- ⏭️ `maintenance/work-orders/index/edit.js` - Empty controller + +### Management (2) +- ⏭️ `management/vendors/integrated/new.js` - Empty controller +- ⏭️ `management/vendors/integrated/edit.js` - Empty controller + +### Operations (1) +- ⏭️ `operations/routes/index/new.js` - No save task + +## Implementation Pattern + +### NEW Controllers (Create) +```javascript +@service events; + +@task *save(resource) { + try { + yield resource.save(); + this.events.trackResourceCreated(resource); + // ... rest of code + } catch (err) { + this.notifications.serverError(err); + } +} +``` + +### EDIT Controllers (Update) +```javascript +@service events; + +@task *save(resource) { + try { + yield resource.save(); + this.events.trackResourceUpdated(resource); + // ... rest of code + } catch (err) { + this.notifications.serverError(err); + } +} +``` + +### Component (Dual Tracking) +```javascript +@service events; + +yield order.save(); + +// Standard event tracking +this.events.trackResourceCreated(order); + +// Keep existing custom event +this.universe.trigger('fleet-ops.order.created', order); +``` + +## Events Emitted + +For each tracked resource, two events are emitted: + +1. **Generic event**: `resource.created` or `resource.updated` +2. **Specific event**: `{model}.created` or `{model}.updated` + +### Examples +- `resource.created` + `order.created` +- `resource.updated` + `vehicle.updated` +- `resource.created` + `driver.created` +- `resource.updated` + `place.updated` + +## Resource Types Tracked + +- `report` (analytics) +- `device`, `sensor`, `telematic` (connectivity) +- `customer`, `contact`, `driver`, `fleet`, `fuel-report`, `issue`, `place`, `vehicle`, `vendor` (management) +- `order`, `service-rate` (operations) + +## Integration with Internals + +These events will be consumed by the `internals` analytics-listener for PostHog tracking: + +```javascript +// In internals/addon/instance-initializers/analytics-listener.js +universe.on('order.created', (order) => { + posthog.trackEvent('order_created', { + order_id: order.id, + // ... other properties + }); +}); +``` + +## Testing + +To verify events are firing: + +1. **In development console:** +```javascript +// Listen to all events +window.universe = owner.lookup('service:universe'); +universe.on('resource.created', (resource) => console.log('Created:', resource)); +universe.on('resource.updated', (resource) => console.log('Updated:', resource)); +``` + +2. **Check PostHog (in cloud):** +- Events should appear in PostHog Activity tab +- Event names will be snake_case: `order_created`, `vehicle_updated`, etc. + +## Dependencies + +Requires: +- `@fleetbase/ember-core` with `events` service +- `@fleetbase/internals` with analytics-listener (for PostHog tracking in cloud) diff --git a/addon/components/customer/create-order-form.js b/addon/components/customer/create-order-form.js index 059c753d..177aa2f7 100644 --- a/addon/components/customer/create-order-form.js +++ b/addon/components/customer/create-order-form.js @@ -31,6 +31,7 @@ export default class CustomerCreateOrderFormComponent extends Component { @service fetch; @service intl; @service universe; + @service events; @tracked order; @tracked customer; @tracked payload = this.store.createRecord('payload'); @@ -194,6 +195,10 @@ export default class CustomerCreateOrderFormComponent extends Component { try { yield order.save(); + + // Track with standard events service + this.events.trackResourceCreated(order); + // trigger event that fleet-ops created an order this.universe.trigger('fleet-ops.order.created', order); diff --git a/addon/controllers/analytics/reports/index/edit.js b/addon/controllers/analytics/reports/index/edit.js index feab9b4f..e046ac8e 100644 --- a/addon/controllers/analytics/reports/index/edit.js +++ b/addon/controllers/analytics/reports/index/edit.js @@ -9,6 +9,7 @@ export default class AnalyticsReportsIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -26,6 +27,7 @@ export default class AnalyticsReportsIndexEditController extends Controller { report.fillResult(result); yield report.save(); + this.events.trackResourceUpdated(report); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.analytics.reports.index.details', report); diff --git a/addon/controllers/analytics/reports/index/new.js b/addon/controllers/analytics/reports/index/new.js index 440ef610..4163e0b2 100644 --- a/addon/controllers/analytics/reports/index/new.js +++ b/addon/controllers/analytics/reports/index/new.js @@ -9,6 +9,7 @@ export default class AnalyticsReportsIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked validationErrors = []; @tracked report = this.reportActions.createNewInstance({ type: 'fleet-ops' }); @@ -22,6 +23,7 @@ export default class AnalyticsReportsIndexNewController extends Controller { report.fillResult(result); yield report.save(); + this.events.trackResourceCreated(report); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/connectivity/devices/index/edit.js b/addon/controllers/connectivity/devices/index/edit.js index 862cdc9e..de450044 100644 --- a/addon/controllers/connectivity/devices/index/edit.js +++ b/addon/controllers/connectivity/devices/index/edit.js @@ -9,6 +9,7 @@ export default class ConnectivityDevicesIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; get actionButtons() { @@ -23,6 +24,7 @@ export default class ConnectivityDevicesIndexEditController extends Controller { @task *save(device) { try { yield device.save(); + this.events.trackResourceUpdated(device); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.devices.index.details', device); diff --git a/addon/controllers/connectivity/devices/index/new.js b/addon/controllers/connectivity/devices/index/new.js index 7cfc15e1..0c64641c 100644 --- a/addon/controllers/connectivity/devices/index/new.js +++ b/addon/controllers/connectivity/devices/index/new.js @@ -9,12 +9,14 @@ export default class ConnectivityDevicesIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked device = this.deviceActions.createNewInstance(); @task *save(device) { try { yield device.save(); + this.events.trackResourceCreated(device); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/connectivity/sensors/index/edit.js b/addon/controllers/connectivity/sensors/index/edit.js index 9d7755ac..97730a97 100644 --- a/addon/controllers/connectivity/sensors/index/edit.js +++ b/addon/controllers/connectivity/sensors/index/edit.js @@ -9,6 +9,7 @@ export default class ConnectivitySensorsIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; get actionButtons() { @@ -23,6 +24,7 @@ export default class ConnectivitySensorsIndexEditController extends Controller { @task *save(sensor) { try { yield sensor.save(); + this.events.trackResourceUpdated(sensor); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.sensors.index.details', sensor); diff --git a/addon/controllers/connectivity/sensors/index/new.js b/addon/controllers/connectivity/sensors/index/new.js index 79f84cc3..fee7b449 100644 --- a/addon/controllers/connectivity/sensors/index/new.js +++ b/addon/controllers/connectivity/sensors/index/new.js @@ -9,12 +9,14 @@ export default class ConnectivitySensorsIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked sensor = this.sensorActions.createNewInstance(); @task *save(sensor) { try { yield sensor.save(); + this.events.trackResourceCreated(sensor); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/connectivity/telematics/index/edit.js b/addon/controllers/connectivity/telematics/index/edit.js index 4cee97da..868be04b 100644 --- a/addon/controllers/connectivity/telematics/index/edit.js +++ b/addon/controllers/connectivity/telematics/index/edit.js @@ -9,6 +9,7 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; get actionButtons() { @@ -23,6 +24,7 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle @task *save(telematic) { try { yield telematic.save(); + this.events.trackResourceUpdated(telematic); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.index.details', telematic); diff --git a/addon/controllers/connectivity/telematics/index/new.js b/addon/controllers/connectivity/telematics/index/new.js index 72684c30..9e34b310 100644 --- a/addon/controllers/connectivity/telematics/index/new.js +++ b/addon/controllers/connectivity/telematics/index/new.js @@ -9,12 +9,14 @@ export default class ConnectivityTelematicsIndexNewController extends Controller @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked telematic = this.telematicActions.createNewInstance(); @task *save(telematic) { try { yield telematic.save(); + this.events.trackResourceCreated(telematic); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/contacts/customers/edit.js b/addon/controllers/management/contacts/customers/edit.js index 9ede4b24..0a0aa3af 100644 --- a/addon/controllers/management/contacts/customers/edit.js +++ b/addon/controllers/management/contacts/customers/edit.js @@ -9,6 +9,7 @@ export default class ManagementContactsCustomersEditController extends Controlle @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -20,6 +21,7 @@ export default class ManagementContactsCustomersEditController extends Controlle @task *save(customer) { try { yield customer.save(); + this.events.trackResourceUpdated(customer); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.contacts.customers.details', customer); diff --git a/addon/controllers/management/contacts/customers/new.js b/addon/controllers/management/contacts/customers/new.js index ce42d2bf..c9ae6058 100644 --- a/addon/controllers/management/contacts/customers/new.js +++ b/addon/controllers/management/contacts/customers/new.js @@ -9,12 +9,14 @@ export default class ManagementContactsCustomersNewController extends Controller @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked customer = this.customerActions.createNewInstance(); @task *save(customer) { try { yield customer.save(); + this.events.trackResourceCreated(customer); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/contacts/index/edit.js b/addon/controllers/management/contacts/index/edit.js index 808b8e1e..25cb8376 100644 --- a/addon/controllers/management/contacts/index/edit.js +++ b/addon/controllers/management/contacts/index/edit.js @@ -9,6 +9,7 @@ export default class ManagementContactsIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -20,6 +21,7 @@ export default class ManagementContactsIndexEditController extends Controller { @task *save(contact) { try { yield contact.save(); + this.events.trackResourceUpdated(contact); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.contacts.index.details', contact); diff --git a/addon/controllers/management/contacts/index/new.js b/addon/controllers/management/contacts/index/new.js index e73d7ccc..d78b8e30 100644 --- a/addon/controllers/management/contacts/index/new.js +++ b/addon/controllers/management/contacts/index/new.js @@ -9,12 +9,14 @@ export default class ManagementContactsIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked contact = this.contactActions.createNewInstance(); @task *save(contact) { try { yield contact.save(); + this.events.trackResourceCreated(contact); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/drivers/index/edit.js b/addon/controllers/management/drivers/index/edit.js index dbc462ae..24169bc4 100644 --- a/addon/controllers/management/drivers/index/edit.js +++ b/addon/controllers/management/drivers/index/edit.js @@ -9,6 +9,7 @@ export default class ManagementDriversIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -20,6 +21,7 @@ export default class ManagementDriversIndexEditController extends Controller { @task *save(driver) { try { yield driver.save(); + this.events.trackResourceUpdated(driver); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.drivers.index.details', driver); diff --git a/addon/controllers/management/drivers/index/new.js b/addon/controllers/management/drivers/index/new.js index b959547c..6cc8fd01 100644 --- a/addon/controllers/management/drivers/index/new.js +++ b/addon/controllers/management/drivers/index/new.js @@ -9,12 +9,14 @@ export default class ManagementDriversIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked driver = this.driverActions.createNewInstance(); @task *save(driver) { try { yield driver.save(); + this.events.trackResourceCreated(driver); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/fleets/index/edit.js b/addon/controllers/management/fleets/index/edit.js index c0abd404..321bc138 100644 --- a/addon/controllers/management/fleets/index/edit.js +++ b/addon/controllers/management/fleets/index/edit.js @@ -9,6 +9,7 @@ export default class ManagementFleetsIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; get actionButtons() { @@ -23,6 +24,7 @@ export default class ManagementFleetsIndexEditController extends Controller { @task *save(fleet) { try { yield fleet.save(); + this.events.trackResourceUpdated(fleet); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.fleets.index.details', fleet); diff --git a/addon/controllers/management/fleets/index/new.js b/addon/controllers/management/fleets/index/new.js index 9e7c6c52..7b92ca70 100644 --- a/addon/controllers/management/fleets/index/new.js +++ b/addon/controllers/management/fleets/index/new.js @@ -9,12 +9,14 @@ export default class ManagementFleetsIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked fleet = this.fleetActions.createNewInstance(); @task *save(fleet) { try { yield fleet.save(); + this.events.trackResourceCreated(fleet); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/fuel-reports/index/edit.js b/addon/controllers/management/fuel-reports/index/edit.js index d8da2ea9..0aba2638 100644 --- a/addon/controllers/management/fuel-reports/index/edit.js +++ b/addon/controllers/management/fuel-reports/index/edit.js @@ -9,6 +9,7 @@ export default class ManagementFuelReportsIndexEditController extends Controller @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -20,6 +21,7 @@ export default class ManagementFuelReportsIndexEditController extends Controller @task *save(fuelReport) { try { yield fuelReport.save(); + this.events.trackResourceUpdated(fuelReport); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.fuel-reports.index.details', fuelReport); diff --git a/addon/controllers/management/fuel-reports/index/new.js b/addon/controllers/management/fuel-reports/index/new.js index fafdb41c..ba3df6d9 100644 --- a/addon/controllers/management/fuel-reports/index/new.js +++ b/addon/controllers/management/fuel-reports/index/new.js @@ -10,12 +10,14 @@ export default class ManagementFuelReportsIndexNewController extends Controller @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked fuelReport = this.fuelReportActions.createNewInstance({ reporter: this.currentUser.user }); @task *save(fuelReport) { try { yield fuelReport.save(); + this.events.trackResourceCreated(fuelReport); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/issues/index/edit.js b/addon/controllers/management/issues/index/edit.js index 50434d65..6c36540e 100644 --- a/addon/controllers/management/issues/index/edit.js +++ b/addon/controllers/management/issues/index/edit.js @@ -9,6 +9,7 @@ export default class ManagementIssuesIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -20,6 +21,7 @@ export default class ManagementIssuesIndexEditController extends Controller { @task *save(issue) { try { yield issue.save(); + this.events.trackResourceUpdated(issue); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.issues.index.details', issue); diff --git a/addon/controllers/management/issues/index/new.js b/addon/controllers/management/issues/index/new.js index e5cfc6ff..831889c0 100644 --- a/addon/controllers/management/issues/index/new.js +++ b/addon/controllers/management/issues/index/new.js @@ -10,12 +10,14 @@ export default class ManagementIssuesIndexNewController extends Controller { @service intl; @service currentUser; @service notifications; + @service events; @tracked overlay; @tracked issue = this.issueActions.createNewInstance({ reporter: this.currentUser.user }); @task *save(issue) { try { yield issue.save(); + this.events.trackResourceCreated(issue); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/places/index/edit.js b/addon/controllers/management/places/index/edit.js index ffecadff..f802cc45 100644 --- a/addon/controllers/management/places/index/edit.js +++ b/addon/controllers/management/places/index/edit.js @@ -9,6 +9,7 @@ export default class ManagementPlacesIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -20,6 +21,7 @@ export default class ManagementPlacesIndexEditController extends Controller { @task *save(place) { try { yield place.save(); + this.events.trackResourceUpdated(place); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.places.index.details', place); diff --git a/addon/controllers/management/places/index/new.js b/addon/controllers/management/places/index/new.js index ae9b5cc3..283818aa 100644 --- a/addon/controllers/management/places/index/new.js +++ b/addon/controllers/management/places/index/new.js @@ -9,12 +9,14 @@ export default class ManagementPlacesIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked place = this.placeActions.createNewInstance(); @task *save(place) { try { yield place.save(); + this.events.trackResourceCreated(place); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/vehicles/index/edit.js b/addon/controllers/management/vehicles/index/edit.js index 8fc0ef4a..aae9781b 100644 --- a/addon/controllers/management/vehicles/index/edit.js +++ b/addon/controllers/management/vehicles/index/edit.js @@ -9,6 +9,7 @@ export default class ManagementVehiclesIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -20,6 +21,7 @@ export default class ManagementVehiclesIndexEditController extends Controller { @task *save(vehicle) { try { yield vehicle.save(); + this.events.trackResourceUpdated(vehicle); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.vehicles.index.details', vehicle); diff --git a/addon/controllers/management/vehicles/index/new.js b/addon/controllers/management/vehicles/index/new.js index b42568c2..3c225e60 100644 --- a/addon/controllers/management/vehicles/index/new.js +++ b/addon/controllers/management/vehicles/index/new.js @@ -11,12 +11,14 @@ export default class ManagementVehiclesIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked vehicle = this.store.createRecord('vehicle', DEFAULT_PROPERTIES); @task *save(vehicle) { try { yield vehicle.save(); + this.events.trackResourceCreated(vehicle); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/management/vendors/index/edit.js b/addon/controllers/management/vendors/index/edit.js index 0c286abe..4323276d 100644 --- a/addon/controllers/management/vendors/index/edit.js +++ b/addon/controllers/management/vendors/index/edit.js @@ -9,6 +9,7 @@ export default class ManagementVendorsIndexEditController extends Controller { @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -20,6 +21,7 @@ export default class ManagementVendorsIndexEditController extends Controller { @task *save(vendor) { try { yield vendor.save(); + this.events.trackResourceUpdated(vendor); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.management.vendors.index.details', vendor); diff --git a/addon/controllers/management/vendors/index/new.js b/addon/controllers/management/vendors/index/new.js index 40bd75e6..ff3d0acc 100644 --- a/addon/controllers/management/vendors/index/new.js +++ b/addon/controllers/management/vendors/index/new.js @@ -9,6 +9,7 @@ export default class ManagementVendorsIndexNewController extends Controller { @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked vendor = this.vendorActions.createNewInstance(); @tracked integratedVendor; @@ -18,6 +19,7 @@ export default class ManagementVendorsIndexNewController extends Controller { try { yield vendor.save(); + this.events.trackResourceCreated(vendor); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/addon/controllers/operations/orders/index/new.js b/addon/controllers/operations/orders/index/new.js index 3732c48f..a49f69ed 100644 --- a/addon/controllers/operations/orders/index/new.js +++ b/addon/controllers/operations/orders/index/new.js @@ -19,6 +19,7 @@ export default class OperationsOrdersIndexNewController extends Controller { @service orderImport; @service orderCreation; @service orderValidation; + @service events; @tracked order = this.orderCreation.newOrder(); @tracked overlay; @@ -73,6 +74,7 @@ export default class OperationsOrdersIndexNewController extends Controller { // Save order const createdOrder = yield order.save(); + this.events.trackResourceCreated(order); // Trigger created event this.universe.trigger('fleet-ops.order.created', createdOrder); diff --git a/addon/controllers/operations/routes/index/new.js b/addon/controllers/operations/routes/index/new.js index cdc46df8..ca3ec786 100644 --- a/addon/controllers/operations/routes/index/new.js +++ b/addon/controllers/operations/routes/index/new.js @@ -6,6 +6,7 @@ import { task } from 'ember-concurrency'; export default class OperationsRoutesIndexNewController extends Controller { @service store; + @service events; @tracked panel; @tracked selectedOrders = ''; @tracked waypoints = []; diff --git a/addon/controllers/operations/service-rates/index/edit.js b/addon/controllers/operations/service-rates/index/edit.js index 2d212306..4d2d39ce 100644 --- a/addon/controllers/operations/service-rates/index/edit.js +++ b/addon/controllers/operations/service-rates/index/edit.js @@ -10,6 +10,7 @@ export default class OperationsServiceRatesIndexEditController extends Controlle @service intl; @service notifications; @service modalsManager; + @service events; @tracked overlay; @tracked actionButtons = [ { @@ -21,6 +22,7 @@ export default class OperationsServiceRatesIndexEditController extends Controlle @task *save(serviceRate) { try { yield serviceRate.save(); + this.events.trackResourceUpdated(serviceRate); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.operations.service-rates.index.details', serviceRate); diff --git a/addon/controllers/operations/service-rates/index/new.js b/addon/controllers/operations/service-rates/index/new.js index 86951005..eac50956 100644 --- a/addon/controllers/operations/service-rates/index/new.js +++ b/addon/controllers/operations/service-rates/index/new.js @@ -9,12 +9,14 @@ export default class OperationsServiceRatesIndexNewController extends Controller @service hostRouter; @service intl; @service notifications; + @service events; @tracked overlay; @tracked serviceRate = this.serviceRateActions.createNewInstance(); @task *save(serviceRate) { try { yield serviceRate.save(); + this.events.trackResourceCreated(serviceRate); this.overlay?.close(); yield this.hostRouter.refresh(); From 039c9be1c676c6a77916dd02365e943373ca6dba Mon Sep 17 00:00:00 2001 From: Manus AI Date: Wed, 11 Feb 2026 05:28:25 -0500 Subject: [PATCH 02/10] feat: Add resource count tracking to import responses Implements import count tracking across all import operations to enable accurate analytics event tracking in PostHog. Changes: Import Classes (8 files): - Added public $imported counter property to track successfully imported rows - Incremented counter for each processed row in collection() method - Files: ContactImport, DriverImport, FleetImport, FuelReportImport, IssueImport, PlaceImport, VehicleImport, VendorImport Controllers (8 files): - Added $importedCount variable to accumulate counts across multiple files - Instantiate import class to access the counter - Return 'imported' field in JSON response with total count - Files: ContactController, DriverController, FleetController, FuelReportController, IssueController, PlaceController, VehicleController, VendorController Response Format: { "status": "ok", "message": "Import completed", "imported": 47 } Benefits: - Frontend can now track exact import counts in PostHog analytics - Better UX - users see how many records were imported - Consistent with existing patterns (OrderController.importFromFiles) - Enables accurate resource.imported event tracking Related: - Complements ember-core events service implementation - Supports PostHog analytics integration in internals --- .../Http/Controllers/Internal/v1/ContactController.php | 7 +++++-- .../src/Http/Controllers/Internal/v1/DriverController.php | 7 +++++-- .../src/Http/Controllers/Internal/v1/FleetController.php | 7 +++++-- .../Http/Controllers/Internal/v1/FuelReportController.php | 7 +++++-- .../src/Http/Controllers/Internal/v1/IssueController.php | 7 +++++-- .../src/Http/Controllers/Internal/v1/PlaceController.php | 7 +++++-- .../Http/Controllers/Internal/v1/VehicleController.php | 7 +++++-- .../src/Http/Controllers/Internal/v1/VendorController.php | 7 +++++-- server/src/Imports/ContactImport.php | 7 +++++++ server/src/Imports/DriverImport.php | 7 +++++++ server/src/Imports/FleetImport.php | 7 +++++++ server/src/Imports/FuelReportImport.php | 8 ++++++++ server/src/Imports/IssueImport.php | 8 ++++++++ server/src/Imports/PlaceImport.php | 8 ++++++++ server/src/Imports/VehicleImport.php | 8 ++++++++ server/src/Imports/VendorImport.php | 8 ++++++++ 16 files changed, 101 insertions(+), 16 deletions(-) diff --git a/server/src/Http/Controllers/Internal/v1/ContactController.php b/server/src/Http/Controllers/Internal/v1/ContactController.php index ff3b54ea..3b6a1564 100644 --- a/server/src/Http/Controllers/Internal/v1/ContactController.php +++ b/server/src/Http/Controllers/Internal/v1/ContactController.php @@ -91,15 +91,18 @@ public function import(ImportRequest $request) { $disk = $request->input('disk', config('filesystems.default')); $files = $request->resolveFilesFromIds(); + $importedCount = 0; foreach ($files as $file) { try { - Excel::import(new ContactImport(), $file->path, $disk); + $import = new ContactImport(); + Excel::import($import, $file->path, $disk); + $importedCount += $import->imported; } catch (\Throwable $e) { return response()->error('Invalid file, unable to proccess.'); } } - return response()->json(['status' => 'ok', 'message' => 'Import completed']); + return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]); } } diff --git a/server/src/Http/Controllers/Internal/v1/DriverController.php b/server/src/Http/Controllers/Internal/v1/DriverController.php index 6e7968e3..48a9eb93 100644 --- a/server/src/Http/Controllers/Internal/v1/DriverController.php +++ b/server/src/Http/Controllers/Internal/v1/DriverController.php @@ -513,15 +513,18 @@ public function import(ImportRequest $request) { $disk = $request->input('disk', config('filesystems.default')); $files = $request->resolveFilesFromIds(); + $importedCount = 0; foreach ($files as $file) { try { - Excel::import(new DriverImport(), $file->path, $disk); + $import = new DriverImport(); + Excel::import($import, $file->path, $disk); + $importedCount += $import->imported; } catch (\Throwable $e) { return response()->error('Invalid file, unable to proccess.'); } } - return response()->json(['status' => 'ok', 'message' => 'Import completed']); + return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]); } } diff --git a/server/src/Http/Controllers/Internal/v1/FleetController.php b/server/src/Http/Controllers/Internal/v1/FleetController.php index a9c9fbab..b5d3d5bc 100644 --- a/server/src/Http/Controllers/Internal/v1/FleetController.php +++ b/server/src/Http/Controllers/Internal/v1/FleetController.php @@ -221,15 +221,18 @@ public function import(ImportRequest $request) { $disk = $request->input('disk', config('filesystems.default')); $files = $request->resolveFilesFromIds(); + $importedCount = 0; foreach ($files as $file) { try { - Excel::import(new FleetImport(), $file->path, $disk); + $import = new FleetImport(); + Excel::import($import, $file->path, $disk); + $importedCount += $import->imported; } catch (\Throwable $e) { return response()->error('Invalid file, unable to proccess.'); } } - return response()->json(['status' => 'ok', 'message' => 'Import completed']); + return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]); } } diff --git a/server/src/Http/Controllers/Internal/v1/FuelReportController.php b/server/src/Http/Controllers/Internal/v1/FuelReportController.php index 94228df2..57f90265 100644 --- a/server/src/Http/Controllers/Internal/v1/FuelReportController.php +++ b/server/src/Http/Controllers/Internal/v1/FuelReportController.php @@ -50,15 +50,18 @@ public function import(ImportRequest $request) { $disk = $request->input('disk', config('filesystems.default')); $files = $request->resolveFilesFromIds(); + $importedCount = 0; foreach ($files as $file) { try { - Excel::import(new FuelReportImport(), $file->path, $disk); + $import = new FuelReportImport(); + Excel::import($import, $file->path, $disk); + $importedCount += $import->imported; } catch (\Throwable $e) { return response()->error('Invalid file, unable to proccess.'); } } - return response()->json(['status' => 'ok', 'message' => 'Import completed']); + return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]); } } diff --git a/server/src/Http/Controllers/Internal/v1/IssueController.php b/server/src/Http/Controllers/Internal/v1/IssueController.php index 6da6050b..1fa1d723 100644 --- a/server/src/Http/Controllers/Internal/v1/IssueController.php +++ b/server/src/Http/Controllers/Internal/v1/IssueController.php @@ -55,15 +55,18 @@ public function import(ImportRequest $request) { $disk = $request->input('disk', config('filesystems.default')); $files = $request->resolveFilesFromIds(); + $importedCount = 0; foreach ($files as $file) { try { - Excel::import(new IssueImport(), $file->path, $disk); + $import = new IssueImport(); + Excel::import($import, $file->path, $disk); + $importedCount += $import->imported; } catch (\Throwable $e) { return response()->error('Invalid file, unable to proccess.'); } } - return response()->json(['status' => 'ok', 'message' => 'Import completed']); + return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]); } } diff --git a/server/src/Http/Controllers/Internal/v1/PlaceController.php b/server/src/Http/Controllers/Internal/v1/PlaceController.php index 4636eaae..37f6aac8 100644 --- a/server/src/Http/Controllers/Internal/v1/PlaceController.php +++ b/server/src/Http/Controllers/Internal/v1/PlaceController.php @@ -170,15 +170,18 @@ public function import(ImportRequest $request) { $disk = $request->input('disk', config('filesystems.default')); $files = $request->resolveFilesFromIds(); + $importedCount = 0; foreach ($files as $file) { try { - Excel::import(new PlaceImport(), $file->path, $disk); + $import = new PlaceImport(); + Excel::import($import, $file->path, $disk); + $importedCount += $import->imported; } catch (\Throwable $e) { return response()->error('Invalid file, unable to proccess.'); } } - return response()->json(['status' => 'ok', 'message' => 'Import completed']); + return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]); } } diff --git a/server/src/Http/Controllers/Internal/v1/VehicleController.php b/server/src/Http/Controllers/Internal/v1/VehicleController.php index 3ef7a930..1f3c65a9 100644 --- a/server/src/Http/Controllers/Internal/v1/VehicleController.php +++ b/server/src/Http/Controllers/Internal/v1/VehicleController.php @@ -87,15 +87,18 @@ public function import(ImportRequest $request) { $disk = $request->input('disk', config('filesystems.default')); $files = $request->resolveFilesFromIds(); + $importedCount = 0; foreach ($files as $file) { try { - Excel::import(new VehicleImport(), $file->path, $disk); + $import = new VehicleImport(); + Excel::import($import, $file->path, $disk); + $importedCount += $import->imported; } catch (\Throwable $e) { return response()->error('Invalid file, unable to proccess.'); } } - return response()->json(['status' => 'ok', 'message' => 'Import completed']); + return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]); } } diff --git a/server/src/Http/Controllers/Internal/v1/VendorController.php b/server/src/Http/Controllers/Internal/v1/VendorController.php index 57d1e9e1..eba85875 100644 --- a/server/src/Http/Controllers/Internal/v1/VendorController.php +++ b/server/src/Http/Controllers/Internal/v1/VendorController.php @@ -112,16 +112,19 @@ public function import(ImportRequest $request) { $disk = $request->input('disk', config('filesystems.default')); $files = $request->resolveFilesFromIds(); + $importedCount = 0; foreach ($files as $file) { try { - Excel::import(new VendorImport(), $file->path, $disk); + $import = new VendorImport(); + Excel::import($import, $file->path, $disk); + $importedCount += $import->imported; } catch (\Throwable $e) { return response()->error('Invalid file, unable to proccess.'); } } - return response()->json(['status' => 'ok', 'message' => 'Import completed']); + return response()->json(['status' => 'ok', 'message' => 'Import completed', 'imported' => $importedCount]); } /** diff --git a/server/src/Imports/ContactImport.php b/server/src/Imports/ContactImport.php index c921efb6..44e5a88b 100644 --- a/server/src/Imports/ContactImport.php +++ b/server/src/Imports/ContactImport.php @@ -9,6 +9,12 @@ class ContactImport implements ToCollection, WithHeadingRow { + /** + * Counter for successfully imported rows. + * + * @var int + */ + public int $imported = 0; /** * @return Collection */ @@ -20,6 +26,7 @@ public function collection(Collection $rows) } Contact::createFromImport($row, true); + $this->imported++; } } } diff --git a/server/src/Imports/DriverImport.php b/server/src/Imports/DriverImport.php index fa4efc7f..23933ef0 100644 --- a/server/src/Imports/DriverImport.php +++ b/server/src/Imports/DriverImport.php @@ -9,6 +9,12 @@ class DriverImport implements ToCollection, WithHeadingRow { + /** + * Counter for successfully imported rows. + * + * @var int + */ + public int $imported = 0; /** * @return Collection */ @@ -20,6 +26,7 @@ public function collection(Collection $rows) } Driver::createFromImport($row, true); + $this->imported++; } } } diff --git a/server/src/Imports/FleetImport.php b/server/src/Imports/FleetImport.php index da6c8ce5..d89b99ea 100644 --- a/server/src/Imports/FleetImport.php +++ b/server/src/Imports/FleetImport.php @@ -9,6 +9,12 @@ class FleetImport implements ToCollection, WithHeadingRow { + /** + * Counter for successfully imported rows. + * + * @var int + */ + public int $imported = 0; /** * @return Collection */ @@ -20,6 +26,7 @@ public function collection(Collection $rows) } Fleet::createFromImport($row, true); + $this->imported++; } } } diff --git a/server/src/Imports/FuelReportImport.php b/server/src/Imports/FuelReportImport.php index 0bc54bcf..8c28a245 100644 --- a/server/src/Imports/FuelReportImport.php +++ b/server/src/Imports/FuelReportImport.php @@ -9,6 +9,13 @@ class FuelReportImport implements ToCollection, WithHeadingRow { + /** + * Counter for successfully imported rows. + * + * @var int + */ + public int $imported = 0; + /** * @return Collection */ @@ -20,6 +27,7 @@ public function collection(Collection $rows) } FuelReport::createFromImport($row, true); + $this->imported++; } } } diff --git a/server/src/Imports/IssueImport.php b/server/src/Imports/IssueImport.php index b9697de7..5f6d9873 100644 --- a/server/src/Imports/IssueImport.php +++ b/server/src/Imports/IssueImport.php @@ -9,6 +9,13 @@ class IssueImport implements ToCollection, WithHeadingRow { + /** + * Counter for successfully imported rows. + * + * @var int + */ + public int $imported = 0; + /** * @return Collection */ @@ -20,6 +27,7 @@ public function collection(Collection $rows) } Issue::createFromImport($row, true); + $this->imported++; } } } diff --git a/server/src/Imports/PlaceImport.php b/server/src/Imports/PlaceImport.php index 31bec267..138e3b5e 100644 --- a/server/src/Imports/PlaceImport.php +++ b/server/src/Imports/PlaceImport.php @@ -9,6 +9,13 @@ class PlaceImport implements ToCollection, WithHeadingRow { + /** + * Counter for successfully imported rows. + * + * @var int + */ + public int $imported = 0; + /** * @return Collection */ @@ -20,6 +27,7 @@ public function collection(Collection $rows) } Place::createFromImport($row, true); + $this->imported++; } } } diff --git a/server/src/Imports/VehicleImport.php b/server/src/Imports/VehicleImport.php index 9e6f7f32..91bc11e0 100644 --- a/server/src/Imports/VehicleImport.php +++ b/server/src/Imports/VehicleImport.php @@ -9,6 +9,13 @@ class VehicleImport implements ToCollection, WithHeadingRow { + /** + * Counter for successfully imported rows. + * + * @var int + */ + public int $imported = 0; + /** * @return Collection */ @@ -20,6 +27,7 @@ public function collection(Collection $rows) } Vehicle::createFromImport($row, true); + $this->imported++; } } } diff --git a/server/src/Imports/VendorImport.php b/server/src/Imports/VendorImport.php index 3f05ec09..d25d95b1 100644 --- a/server/src/Imports/VendorImport.php +++ b/server/src/Imports/VendorImport.php @@ -9,6 +9,13 @@ class VendorImport implements ToCollection, WithHeadingRow { + /** + * Counter for successfully imported rows. + * + * @var int + */ + public int $imported = 0; + /** * @return Collection */ @@ -20,6 +27,7 @@ public function collection(Collection $rows) } Vendor::createFromImport($row, true); + $this->imported++; } } } From 8a95dd362fbb38cec7fe4cbe9fef9c84f19c43db Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Thu, 12 Feb 2026 14:41:01 +0800 Subject: [PATCH 03/10] v0.6.36 --- composer.json | 2 +- extension.json | 2 +- package.json | 6 +- pnpm-lock.yaml | 1271 ++++++++++++++++++++++++++---------------------- 4 files changed, 695 insertions(+), 586 deletions(-) diff --git a/composer.json b/composer.json index 4965a917..00e138af 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "fleetbase/fleetops-api", - "version": "0.6.35", + "version": "0.6.36", "description": "Fleet & Transport Management Extension for Fleetbase", "keywords": [ "fleetbase-extension", diff --git a/extension.json b/extension.json index 7c6bb7f1..5136cfa8 100644 --- a/extension.json +++ b/extension.json @@ -1,6 +1,6 @@ { "name": "Fleet-Ops", - "version": "0.6.35", + "version": "0.6.36", "description": "Fleet & Transport Management Extension for Fleetbase", "repository": "https://github.com/fleetbase/fleetops", "license": "AGPL-3.0-or-later", diff --git a/package.json b/package.json index 736d564a..18b0a93a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fleetbase/fleetops-engine", - "version": "0.6.35", + "version": "0.6.36", "description": "Fleet & Transport Management Extension for Fleetbase", "fleetbase": { "route": "fleet-ops" @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/core": "^7.23.2", - "@fleetbase/ember-core": "^0.3.10", - "@fleetbase/ember-ui": "^0.3.17", + "@fleetbase/ember-core": "^0.3.11", + "@fleetbase/ember-ui": "^0.3.19", "@fleetbase/fleetops-data": "^0.1.25", "@fleetbase/leaflet-routing-machine": "^3.2.17", "@fortawesome/ember-fontawesome": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbf7f643..29835142 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,11 +12,11 @@ importers: specifier: ^7.23.2 version: 7.27.1 '@fleetbase/ember-core': - specifier: ^0.3.10 - version: 0.3.10(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) + specifier: ^0.3.11 + version: 0.3.11(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) '@fleetbase/ember-ui': - specifier: ^0.3.17 - version: 0.3.17(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(postcss@8.5.3)(rollup@2.79.2)(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8) + specifier: ^0.3.19 + version: 0.3.19(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(postcss@8.5.3)(rollup@2.79.2)(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8) '@fleetbase/fleetops-data': specifier: ^0.1.25 version: 0.1.25(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) @@ -249,16 +249,24 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.27.2': resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.27.1': resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} '@babel/eslint-parser@7.27.1': @@ -276,6 +284,10 @@ packages: resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.1': resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==} engines: {node: '>=6.9.0'} @@ -284,6 +296,10 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.27.1': resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} engines: {node: '>=6.9.0'} @@ -313,6 +329,10 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.27.1': resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} engines: {node: '>=6.9.0'} @@ -325,6 +345,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} @@ -373,8 +399,8 @@ packages: resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} '@babel/parser@7.27.2': @@ -387,6 +413,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} engines: {node: '>=6.9.0'} @@ -834,6 +865,10 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.27.1': resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} engines: {node: '>=6.9.0'} @@ -842,6 +877,10 @@ packages: resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.27.1': resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} engines: {node: '>=6.9.0'} @@ -850,6 +889,10 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@cnakazawa/watch@1.0.4': resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} @@ -1361,12 +1404,12 @@ packages: peerDependencies: ember-source: '>= 4.0.0' - '@fleetbase/ember-core@0.3.10': - resolution: {integrity: sha512-qPavjAd/WuRiu1E3KbJ58NUMv1elpkvTQZ51X1XeN2W2P4m9Q2bubrwv8TrOpUOOI15lIaG8optlbHMxeCNzig==} + '@fleetbase/ember-core@0.3.11': + resolution: {integrity: sha512-3ZXlLY9Tz/y07/IEu+ohknus2DhT7cDdtxnPYa8pqlkVGxrAe6FiRxX/vBnShaDFQiwqC9owcIKkK1L7KsKz7A==} engines: {node: '>= 18'} - '@fleetbase/ember-ui@0.3.17': - resolution: {integrity: sha512-hRPa+QAo/Sx7oDmyzw2AGmNw6T4GBJnAe4/bJ3O/ZCm/nsdhsmre4CuY+sK3CagC4cYWii3iOtEf4AHNEB86Og==} + '@fleetbase/ember-ui@0.3.19': + resolution: {integrity: sha512-nJVf3AUP5JzCTigASzbbq86tkjwkNcsgu+zrT5psL/SIvXsGFx8iRbl5ipF2VCR/umnbSvmUtQ9JZJLjMj9/8w==} engines: {node: '>= 18'} '@fleetbase/fleetops-data@0.1.25': @@ -1380,11 +1423,11 @@ packages: '@fleetbase/leaflet-routing-machine@3.2.17': resolution: {integrity: sha512-2S/XLPzf25ZKV7cFJwfeu4voYQboF9JiDfpRUTrif4XCfgdrQ2Zim7O5iTpoNv2l8Ne8D+Ed7BGJsKWjJFLcsw==} - '@floating-ui/core@1.7.3': - resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + '@floating-ui/core@1.7.4': + resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} - '@floating-ui/dom@1.7.4': - resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + '@floating-ui/dom@1.7.5': + resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} @@ -1732,190 +1775,190 @@ packages: '@terraformer/spatial@2.2.1': resolution: {integrity: sha512-Zq2WbKJgZspurToBJ7KjmmHC7HbvNt/fH8Bh/kj+RgcGoM9OzurAXlEfIMrVQQIh3ypSbJn+hHQ33n/d805uBQ==} - '@tiptap/core@2.27.1': - resolution: {integrity: sha512-nkerkl8syHj44ZzAB7oA2GPmmZINKBKCa79FuNvmGJrJ4qyZwlkDzszud23YteFZEytbc87kVd/fP76ROS6sLg==} + '@tiptap/core@2.27.2': + resolution: {integrity: sha512-ABL1N6eoxzDzC1bYvkMbvyexHacszsKdVPYqhl5GwHLOvpZcv9VE9QaKwDILTyz5voCA0lGcAAXZp+qnXOk5lQ==} peerDependencies: '@tiptap/pm': ^2.7.0 - '@tiptap/extension-blockquote@2.27.1': - resolution: {integrity: sha512-QrUX3muElDrNjKM3nqCSAtm3H3pT33c6ON8kwRiQboOAjT/9D57Cs7XEVY7r6rMaJPeKztrRUrNVF9w/w/6B0A==} + '@tiptap/extension-blockquote@2.27.2': + resolution: {integrity: sha512-oIGZgiAeA4tG3YxbTDfrmENL4/CIwGuP3THtHsNhwRqwsl9SfMk58Ucopi2GXTQSdYXpRJ0ahE6nPqB5D6j/Zw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-bold@2.27.1': - resolution: {integrity: sha512-g4l4p892x/r7mhea8syp3fNYODxsDrimgouQ+q4DKXIgQmm5+uNhyuEPexP3I8TFNXqQ4DlMNFoM9yCqk97etQ==} + '@tiptap/extension-bold@2.27.2': + resolution: {integrity: sha512-bR7J5IwjCGQ0s3CIxyMvOCnMFMzIvsc5OVZKscTN5UkXzFsaY6muUAIqtKxayBUucjtUskm5qZowJITCeCb1/A==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-bullet-list@2.27.1': - resolution: {integrity: sha512-5FmnfXkJ76wN4EbJNzBhAlmQxho8yEMIJLchTGmXdsD/n/tsyVVtewnQYaIOj/Z7naaGySTGDmjVtLgTuQ+Sxw==} + '@tiptap/extension-bullet-list@2.27.2': + resolution: {integrity: sha512-gmFuKi97u5f8uFc/GQs+zmezjiulZmFiDYTh3trVoLRoc2SAHOjGEB7qxdx7dsqmMN7gwiAWAEVurLKIi1lnnw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-code-block@2.27.1': - resolution: {integrity: sha512-wCI5VIOfSAdkenCWFvh4m8FFCJ51EOK+CUmOC/PWUjyo2Dgn8QC8HMi015q8XF7886T0KvYVVoqxmxJSUDAYNg==} + '@tiptap/extension-code-block@2.27.2': + resolution: {integrity: sha512-KgvdQHS4jXr79aU3wZOGBIZYYl9vCB7uDEuRFV4so2rYrfmiYMw3T8bTnlNEEGe4RUeAms1i4fdwwvQp9nR1Dw==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-code@2.27.1': - resolution: {integrity: sha512-i65wUGJevzBTIIUBHBc1ggVa27bgemvGl/tY1/89fEuS/0Xmre+OQjw8rCtSLevoHSiYYLgLRlvjtUSUhE4kgg==} + '@tiptap/extension-code@2.27.2': + resolution: {integrity: sha512-7X9AgwqiIGXoZX7uvdHQsGsjILnN/JaEVtqfXZnPECzKGaWHeK/Ao4sYvIIIffsyZJA8k5DC7ny2/0sAgr2TuA==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-color@2.27.1': - resolution: {integrity: sha512-raYRsdG2tZvVvY1LV/VTZnDG44Y0xRBwo5CZEat0OUqdx34dfvCtYm8HIOTyWBwr7OOW+yR4O1Vc2zFkmfthZw==} + '@tiptap/extension-color@2.27.2': + resolution: {integrity: sha512-sOKCP8/2V3sRM3FdWgMe1lFE5ewsWNCRafiVoujS1+TTHGCj4jw6W+LiumBUk7cRI8kXW/rqGWVC4RVdknYUCA==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/extension-text-style': ^2.7.0 - '@tiptap/extension-document@2.27.1': - resolution: {integrity: sha512-NtJzJY7Q/6XWjpOm5OXKrnEaofrcc1XOTYlo/SaTwl8k2bZo918Vl0IDBWhPVDsUN7kx767uHwbtuQZ+9I82hA==} + '@tiptap/extension-document@2.27.2': + resolution: {integrity: sha512-CFhAYsPnyYnosDC4639sCJnBUnYH4Cat9qH5NZWHVvdgtDwu8GZgZn2eSzaKSYXWH1vJ9DSlCK+7UyC3SNXIBA==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-dropcursor@2.27.1': - resolution: {integrity: sha512-3MBQRGHHZ0by3OT0CWbLKS7J3PH9PpobrXjmIR7kr0nde7+bHqxXiVNuuIf501oKU9rnEUSedipSHkLYGkmfsA==} + '@tiptap/extension-dropcursor@2.27.2': + resolution: {integrity: sha512-oEu/OrktNoQXq1x29NnH/GOIzQZm8ieTQl3FK27nxfBPA89cNoH4mFEUmBL5/OFIENIjiYG3qWpg6voIqzswNw==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-font-family@2.27.1': - resolution: {integrity: sha512-0j6Qma7A2Ivv4fVKIju40gW6PBwUpu7wAgY3mnh3VFuFH+B/0Yv+hDzuMCMyeW3VYXlwnBL6G4fbDdH3hPU0KA==} + '@tiptap/extension-font-family@2.27.2': + resolution: {integrity: sha512-Lc3fAF/t3QXuG5AiOjGiCoyxJH7QyAOj5P+X4O6NfFtHST2wxoqIKqnlXkROv+g49Th/ypVGQ/z47wb6EG4iQg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/extension-text-style': ^2.7.0 - '@tiptap/extension-gapcursor@2.27.1': - resolution: {integrity: sha512-A9e1jr+jGhDWzNSXtIO6PYVYhf5j/udjbZwMja+wCE/3KvZU9V3IrnGKz1xNW+2Q2BDOe1QO7j5uVL9ElR6nTA==} + '@tiptap/extension-gapcursor@2.27.2': + resolution: {integrity: sha512-/c9VF1HBxj+AP54XGVgCmD9bEGYc5w5OofYCFQgM7l7PB1J00A4vOke0oPkHJnqnOOyPlFaxO/7N6l3XwFcnKA==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-hard-break@2.27.1': - resolution: {integrity: sha512-W4hHa4Io6QCTwpyTlN6UAvqMIQ7t56kIUByZhyY9EWrg/+JpbfpxE1kXFLPB4ZGgwBknFOw+e4bJ1j3oAbTJFw==} + '@tiptap/extension-hard-break@2.27.2': + resolution: {integrity: sha512-kSRVGKlCYK6AGR0h8xRkk0WOFGXHIIndod3GKgWU49APuIGDiXd8sziXsSlniUsWmqgDmDXcNnSzPcV7AQ8YNg==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-heading@2.27.1': - resolution: {integrity: sha512-6xoC7igZlW1EmnQ5WVH9IL7P1nCQb3bBUaIDLvk7LbweEogcTUECI4Xg1vxMOVmj9tlDe1I4BsgfcKpB5KEsZw==} + '@tiptap/extension-heading@2.27.2': + resolution: {integrity: sha512-iM3yeRWuuQR/IRQ1djwNooJGfn9Jts9zF43qZIUf+U2NY8IlvdNsk2wTOdBgh6E0CamrStPxYGuln3ZS4fuglw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-highlight@2.27.1': - resolution: {integrity: sha512-ntuYX09tvHQE/R/8WbTOxbFuQhRr2jhTkKz/gLwDD2o8IhccSy3f0nm+mVmVamKQnbsBBbLohojd5IGOnX9f1A==} + '@tiptap/extension-highlight@2.27.2': + resolution: {integrity: sha512-ZjlktDdMjruMJFAVz0TbQf0v92Jqkc7Ri1iZJqBXuLid+r+GxUzl2CVAV7qq5yagkGQgvAG+WGsMk880HgR3MA==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-history@2.27.1': - resolution: {integrity: sha512-K8PHC9gegSAt0wzSlsd4aUpoEyIJYOmVVeyniHr1P1mIblW1KYEDbRGbDlrLALTyUEfMcBhdIm8zrB9X2Nihvg==} + '@tiptap/extension-history@2.27.2': + resolution: {integrity: sha512-+hSyqERoFNTWPiZx4/FCyZ/0eFqB9fuMdTB4AC/q9iwu3RNWAQtlsJg5230bf/qmyO6bZxRUc0k8p4hrV6ybAw==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-horizontal-rule@2.27.1': - resolution: {integrity: sha512-WxXWGEEsqDmGIF2o9av+3r9Qje4CKrqrpeQY6aRO5bxvWX9AabQCfasepayBok6uwtvNzh3Xpsn9zbbSk09dNA==} + '@tiptap/extension-horizontal-rule@2.27.2': + resolution: {integrity: sha512-WGWUSgX+jCsbtf9Y9OCUUgRZYuwjVoieW5n6mAUohJ9/6gc6sGIOrUpBShf+HHo6WD+gtQjRd+PssmX3NPWMpg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-image@2.27.1': - resolution: {integrity: sha512-wu3vMKDYWJwKS6Hrw5PPCKBO2RxyHNeFLiA/uDErEV7axzNpievK/U9DyaDXmtK3K/h1XzJAJz19X+2d/pY68w==} + '@tiptap/extension-image@2.27.2': + resolution: {integrity: sha512-5zL/BY41FIt72azVrCrv3n+2YJ/JyO8wxCcA4Dk1eXIobcgVyIdo4rG39gCqIOiqziAsqnqoj12QHTBtHsJ6mQ==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-italic@2.27.1': - resolution: {integrity: sha512-rcm0GyniWW0UhcNI9+1eIK64GqWQLyIIrWGINslvqSUoBc+WkfocLvv4CMpRkzKlfsAxwVIBuH2eLxHKDtAREA==} + '@tiptap/extension-italic@2.27.2': + resolution: {integrity: sha512-1OFsw2SZqfaqx5Fa5v90iNlPRcqyt+lVSjBwTDzuPxTPFY4Q0mL89mKgkq2gVHYNCiaRkXvFLDxaSvBWbmthgg==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-list-item@2.27.1': - resolution: {integrity: sha512-dtsxvtzxfwOJP6dKGf0vb2MJAoDF2NxoiWzpq0XTvo7NGGYUHfuHjX07Zp0dYqb4seaDXjwsi5BIQUOp3+WMFQ==} + '@tiptap/extension-list-item@2.27.2': + resolution: {integrity: sha512-eJNee7IEGXMnmygM5SdMGDC8m/lMWmwNGf9fPCK6xk0NxuQRgmZHL6uApKcdH6gyNcRPHCqvTTkhEP7pbny/fg==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-ordered-list@2.27.1': - resolution: {integrity: sha512-U1/sWxc2TciozQsZjH35temyidYUjvroHj3PUPzPyh19w2fwKh1NSbFybWuoYs6jS3XnMSwnM2vF52tOwvfEmA==} + '@tiptap/extension-ordered-list@2.27.2': + resolution: {integrity: sha512-M7A4tLGJcLPYdLC4CI2Gwl8LOrENQW59u3cMVa+KkwG1hzSJyPsbDpa1DI6oXPC2WtYiTf22zrbq3gVvH+KA2w==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-paragraph@2.27.1': - resolution: {integrity: sha512-R3QdrHcUdFAsdsn2UAIvhY0yWyHjqGyP/Rv8RRdN0OyFiTKtwTPqreKMHKJOflgX4sMJl/OpHTpNG1Kaf7Lo2A==} + '@tiptap/extension-paragraph@2.27.2': + resolution: {integrity: sha512-elYVn2wHJJ+zB9LESENWOAfI4TNT0jqEN34sMA/hCtA4im1ZG2DdLHwkHIshj/c4H0dzQhmsS/YmNC5Vbqab/A==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-placeholder@2.27.1': - resolution: {integrity: sha512-UbXaibHHFE+lOTlw/vs3jPzBoj1sAfbXuTAhXChjgYIcTTY5Cr6yxwcymLcimbQ79gf04Xkua2FCN3YsJxIFmw==} + '@tiptap/extension-placeholder@2.27.2': + resolution: {integrity: sha512-IjsgSVYJRjpAKmIoapU0E2R4E2FPY3kpvU7/1i7PUYisylqejSJxmtJPGYw0FOMQY9oxnEEvfZHMBA610tqKpg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-strike@2.27.1': - resolution: {integrity: sha512-S9I//K8KPgfFTC5I5lorClzXk0g4lrAv9y5qHzHO5EOWt7AFl0YTg2oN8NKSIBK4bHRnPIrjJJKv+dDFnUp5jQ==} + '@tiptap/extension-strike@2.27.2': + resolution: {integrity: sha512-HHIjhafLhS2lHgfAsCwC1okqMsQzR4/mkGDm4M583Yftyjri1TNA7lzhzXWRFWiiMfJxKtdjHjUAQaHuteRTZw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-subscript@2.27.1': - resolution: {integrity: sha512-n2jTaYriewwz3ES1o6Wt/OwREvPwi97n+yEsJ7i31wiuxGTdCP31eAuppC6DvixEvDt3/rZMZcNp8Ah9crlbnw==} + '@tiptap/extension-subscript@2.27.2': + resolution: {integrity: sha512-x2Oz7hrI4KvzzB9pWChFRm6JnKdYAUQDyrlSROngtzXT7VpNQNoD5s8OlICzDeNsaRKzhR8omIz2z17S1VB48g==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-superscript@2.27.1': - resolution: {integrity: sha512-zTYOD7k3txm21rjeYHsf/VIpBe9IvVfNHSNayyY/JOgyQ/fW40cgX0gADNoT2ayAtRes4TvpcUYdgF9vC5bkJw==} + '@tiptap/extension-superscript@2.27.2': + resolution: {integrity: sha512-VTGJDuNqdesibSVW94Q71VaGVGr/bwBppdaNLn7k6beOegALfIH7ncArlkD/eihOlJ2qaWiT7FoWNLTb/Fdv1w==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table-cell@2.27.1': - resolution: {integrity: sha512-VowNmz1kub2qfntWkU8jGA6DoCl9xjJBWSypuQIeiN/IRId3BMrJodT26pTNJ3ChDMtYaanWaUvYqckRxgTC2A==} + '@tiptap/extension-table-cell@2.27.2': + resolution: {integrity: sha512-9Lk46MjZMFzVZfOj9Kd7VgC6Odt6vmEhlCYVumErShUY7EkFqCw3b2IYoUtQkntfOEx/Afnhff/okNQwPsJeUA==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table-header@2.27.1': - resolution: {integrity: sha512-lSbGB6kBp/sTVzAWl4v7v7ztL5XU3aTdlS7FhfGjpdsxd4zPKYG8kx+Uxgq25W9/BlCbnqHnO0poAMfOlspDQw==} + '@tiptap/extension-table-header@2.27.2': + resolution: {integrity: sha512-ZEb6lbG0NbbodWLV0b4BS/QrDIPlUbCcuOsUxzqVvlMUY1Vg6Fj6fKwLaBcsIUDHi8sxZDBEgYEDw3BR/zcO6A==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table-row@2.27.1': - resolution: {integrity: sha512-3xtlmZ6NWDi5a42gK0qQQTeBUpJ2j1o7qyXTFkhQaJAeIFEqsemgSRhgXZxbwSmQQZsPJ/86KWBNVkT0FaRFDw==} + '@tiptap/extension-table-row@2.27.2': + resolution: {integrity: sha512-Nw9+tA56Y5HtLVP01NGCZSUuTQhJPtfK9OfmDgGgcxynn2cRVdEtj+9FNZqRhQ1iRVaAI+Rd4xRvX9qYePMOxw==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-table@2.27.1': - resolution: {integrity: sha512-iOoOo0vYFzAogAZlw36DgmFfNM5vOkLqnApm81soO/YWpqtKAvBn+TMY4ss4OMDsOefUzBa6xqOJ0gJR5ZygjA==} + '@tiptap/extension-table@2.27.2': + resolution: {integrity: sha512-pDbhOpT5phZkcsyPjGBQlXv0+0hmdrvqHJ+dJjkGcCtlfy2pHiEIhmIItOFagc7wXy8G9iUFZ9Jie4zvDf+brg==} peerDependencies: '@tiptap/core': ^2.7.0 '@tiptap/pm': ^2.7.0 - '@tiptap/extension-text-align@2.27.1': - resolution: {integrity: sha512-D7dLPk7y5mDn9ZNANQ4K2gCq4vy+Emm5AdeWOGzNeqJsYrBotiQYXd9rb1QYjdup2kzAoKduMTUXV92ujo5cEg==} + '@tiptap/extension-text-align@2.27.2': + resolution: {integrity: sha512-0Pyks6Hu+Q/+9+5/osoSv0SP6jIerdWMYbi13aaZLsJoj3lBj5WNaE11JtAwSFN5sx0IbqhDSlp1zkvRnzgZ8g==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-text-style@2.27.1': - resolution: {integrity: sha512-NagQ9qLk0Ril83gfrk+C65SvTqPjL3WVnLF2arsEVnCrxcx3uDOvdJW67f/K5HEwEHsoqJ4Zq9Irco/koXrOXA==} + '@tiptap/extension-text-style@2.27.2': + resolution: {integrity: sha512-Omk+uxjJLyEY69KStpCw5fA9asvV+MGcAX2HOxyISDFoLaL49TMrNjhGAuz09P1L1b0KGXo4ml7Q3v/Lfy4WPA==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-text@2.27.1': - resolution: {integrity: sha512-a4GCT+GZ9tUwl82F4CEum9/+WsuW0/De9Be/NqrMmi7eNfAwbUTbLCTFU0gEvv25WMHCoUzaeNk/qGmzeVPJ1Q==} + '@tiptap/extension-text@2.27.2': + resolution: {integrity: sha512-Xk7nYcigljAY0GO9hAQpZ65ZCxqOqaAlTPDFcKerXmlkQZP/8ndx95OgUb1Xf63kmPOh3xypurGS2is3v0MXSA==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-underline@2.27.1': - resolution: {integrity: sha512-fPTmfJFAQWg1O/os1pYSPVdtvly6eW/w5sDofG7pre+bdQUN+8s1cZYelSuj/ltNVioRaB2Ws7tvNgnHL0aAJQ==} + '@tiptap/extension-underline@2.27.2': + resolution: {integrity: sha512-gPOsbAcw1S07ezpAISwoO8f0RxpjcSH7VsHEFDVuXm4ODE32nhvSinvHQjv2icRLOXev+bnA7oIBu7Oy859gWQ==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/extension-youtube@2.27.1': - resolution: {integrity: sha512-HjBBgE0Zbch/S2UP0YYQXervfoBd4Trw0dYmlZbX9cXJcZv+QFx0vsPGmjAGlqzXf9Y8ZioWm8fso4u6AsUfTw==} + '@tiptap/extension-youtube@2.27.2': + resolution: {integrity: sha512-3l/tfJ8wO8/tALo1tpAfN7TTJQQ00V52XaYamjQPVzPGelm/ECCfSCGQ4oRv8gbyzjUbZkNpkSV1Bj2V7QcGDg==} peerDependencies: '@tiptap/core': ^2.7.0 - '@tiptap/pm@2.27.1': - resolution: {integrity: sha512-ijKo3+kIjALthYsnBmkRXAuw2Tswd9gd7BUR5OMfIcjGp8v576vKxOxrRfuYiUM78GPt//P0sVc1WV82H5N0PQ==} + '@tiptap/pm@2.27.2': + resolution: {integrity: sha512-kaEg7BfiJPDQMKbjVIzEPO3wlcA+pZb2tlcK9gPrdDnEFaec2QTF1sXz2ak2IIb2curvnIrQ4yrfHgLlVA72wA==} - '@tiptap/starter-kit@2.27.1': - resolution: {integrity: sha512-uQQlP0Nmn9eq19qm8YoOeloEfmcGbPpB1cujq54Q6nPgxaBozR7rE7tXbFTinxRW2+Hr7XyNWhpjB7DMNkdU2Q==} + '@tiptap/starter-kit@2.27.2': + resolution: {integrity: sha512-bb0gJvPoDuyRUQ/iuN52j1//EtWWttw+RXAv1uJxfR0uKf8X7uAqzaOOgwjknoCIDC97+1YHwpGdnRjpDkOBxw==} '@turf/boolean-point-in-polygon@7.2.0': resolution: {integrity: sha512-lvEOjxeXIp+wPXgl9kJA97dqzMfNexjqHou+XHVcfxQgolctoJiRYmcVCWGpiZ9CBf/CJha1KmD1qQoRIsjLaA==} @@ -2433,8 +2476,8 @@ packages: autonumeric@4.10.9: resolution: {integrity: sha512-7aStLD5zn0x8mUDvYsl7YY11xzI6NgOK8u40UB6SvdoqItfzfOz6sfVZv4CyADy2nlbM0zHJ992SXGVVJEzCGA==} - autoprefixer@10.4.23: - resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} + autoprefixer@10.4.24: + resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -2591,8 +2634,8 @@ packages: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} - baseline-browser-mapping@2.9.11: - resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} + baseline-browser-mapping@2.9.19: + resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true basic-auth@2.0.1: @@ -2972,8 +3015,8 @@ packages: caniuse-lite@1.0.30001718: resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} - caniuse-lite@1.0.30001761: - resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} + caniuse-lite@1.0.30001769: + resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -3537,8 +3580,8 @@ packages: css-unit-converter@1.1.2: resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==} - cssdb@8.6.0: - resolution: {integrity: sha512-7ZrRi/Z3cRL1d5I8RuXEWAkRFP3J4GeQRiyVknI4KC70RAU8hT4LysUZDe0y+fYNOktCbxE8sOPUOhyR12UqGQ==} + cssdb@8.7.1: + resolution: {integrity: sha512-+F6LKx48RrdGOtE4DT5jz7Uo+VeyKXpK797FAevIkzjV8bMHz6xTO5F7gNDcRCHmPgD5jj2g6QCsY9zmVrh38A==} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -3781,8 +3824,8 @@ packages: electron-to-chromium@1.5.155: resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} - electron-to-chromium@1.5.267: - resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + electron-to-chromium@1.5.286: + resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} element-closest@3.0.2: resolution: {integrity: sha512-JxKQiJKX0Zr5Q2/bCaTx8P+UbfyMET1OQd61qu5xQFeWr1km3fGaxelSJtnfT27XQ5Uoztn2yIyeamAc/VX13g==} @@ -4183,8 +4226,8 @@ packages: resolution: {integrity: sha512-ezcPQhH8jUfcJQbbHji4/ZG/h0yyj1jRDknfYue/ypQS8fM8LrGcCMo0rjDZLzL1Vd11InjNs3BD7BdxFlzGoA==} engines: {node: 12.* || >= 14} - ember-modifier@4.2.2: - resolution: {integrity: sha512-pPYBAGyczX0hedGWQFQOEiL9s45KS9efKxJxUQkMLjQyh+1Uef1mcmAGsdw2KmvNupITkE/nXxmVO1kZ9tt3ag==} + ember-modifier@4.3.0: + resolution: {integrity: sha512-O0rirSLQbGg0VJ/NqoQ4uN1bh2iAekZC/Ykma+FkjCM2ofrO38u+d8n3+AK6uVWeMJmogGX2KL+Is5fofoInJg==} ember-on-helper@0.1.0: resolution: {integrity: sha512-jjafBnWfoA4VSSje476ft5G+urlvvuSDddwAJjKDCjKY9mbe3hAEsJiMBAaPObJRMm1FOglCuKjQZfwDDls6MQ==} @@ -5025,6 +5068,7 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@5.0.15: @@ -5979,8 +6023,8 @@ packages: resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} hasBin: true - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} hasBin: true matcher-collection@1.1.2: @@ -6216,8 +6260,8 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.24.0: - resolution: {integrity: sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==} + nan@2.25.0: + resolution: {integrity: sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==} nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} @@ -7033,8 +7077,8 @@ packages: prosemirror-keymap@1.2.3: resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} - prosemirror-markdown@1.13.2: - resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==} + prosemirror-markdown@1.13.4: + resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==} prosemirror-menu@1.2.5: resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==} @@ -7061,11 +7105,11 @@ packages: prosemirror-state: ^1.4.2 prosemirror-view: ^1.33.8 - prosemirror-transform@1.10.5: - resolution: {integrity: sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==} + prosemirror-transform@1.11.0: + resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} - prosemirror-view@1.41.4: - resolution: {integrity: sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==} + prosemirror-view@1.41.6: + resolution: {integrity: sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==} proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -8600,8 +8644,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.27.2': {} + '@babel/compat-data@7.29.0': {} + '@babel/core@7.27.1': dependencies: '@ampproject/remapping': 2.3.0 @@ -8622,17 +8674,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/core@7.28.5': + '@babel/core@7.29.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -8666,6 +8718,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.1': dependencies: '@babel/types': 7.27.1 @@ -8678,6 +8738,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.5 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -8691,13 +8759,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.5)': + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.27.1 semver: 6.3.1 @@ -8711,9 +8779,9 @@ snapshots: regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.5)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.1 regexpu-core: 6.2.0 semver: 6.3.1 @@ -8729,9 +8797,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.28.5)': + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 @@ -8756,6 +8824,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -8765,9 +8840,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.1(@babel/core@7.28.5)': + '@babel/helper-module-transforms@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.27.1 @@ -8783,15 +8858,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.27.1': dependencies: '@babel/types': 7.27.1 @@ -8807,9 +8891,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-wrap-function': 7.27.1 '@babel/traverse': 7.28.5 @@ -8825,9 +8909,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.27.1 @@ -8862,10 +8946,10 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.27.1 - '@babel/helpers@7.28.4': + '@babel/helpers@7.28.6': dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 '@babel/parser@7.27.2': dependencies: @@ -8875,6 +8959,10 @@ snapshots: dependencies: '@babel/types': 7.28.5 + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -8883,9 +8971,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.5 transitivePeerDependencies: @@ -8896,9 +8984,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1)': @@ -8906,9 +8994,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1)': @@ -8920,12 +9008,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -8937,9 +9025,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.5 transitivePeerDependencies: @@ -8953,10 +9041,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.28.5)': + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -8970,12 +9058,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -8987,10 +9075,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.5)': + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -8999,9 +9087,9 @@ snapshots: dependencies: '@babel/core': 7.27.1 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.27.1)': dependencies: @@ -9013,13 +9101,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.28.5)': + '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -9028,9 +9116,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)': @@ -9038,9 +9126,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1)': @@ -9048,9 +9136,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.1)': @@ -9058,9 +9146,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.1)': @@ -9068,9 +9156,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1)': @@ -9079,10 +9167,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1)': @@ -9090,9 +9178,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.1)': @@ -9104,11 +9192,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -9122,12 +9210,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -9136,9 +9224,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.1)': @@ -9146,9 +9234,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.1)': @@ -9159,10 +9247,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -9175,10 +9263,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -9195,13 +9283,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) '@babel/traverse': 7.28.5 globals: 11.12.0 transitivePeerDependencies: @@ -9213,9 +9301,9 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 @@ -9224,9 +9312,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.1)': @@ -9235,10 +9323,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1)': @@ -9246,9 +9334,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': @@ -9257,10 +9345,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1)': @@ -9268,9 +9356,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.1)': @@ -9278,9 +9366,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1)': @@ -9288,9 +9376,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1)': @@ -9301,9 +9389,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: @@ -9318,9 +9406,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.5 @@ -9332,9 +9420,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1)': @@ -9342,9 +9430,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.1)': @@ -9352,9 +9440,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1)': @@ -9362,9 +9450,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1)': @@ -9375,10 +9463,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -9391,10 +9479,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -9409,10 +9497,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.28.5 @@ -9427,10 +9515,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -9441,10 +9529,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1)': @@ -9452,9 +9540,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.1)': @@ -9462,9 +9550,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.1)': @@ -9472,9 +9560,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.1)': @@ -9485,13 +9573,13 @@ snapshots: '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.28.5)': + '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1)': dependencies: @@ -9501,11 +9589,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -9514,9 +9602,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.1)': @@ -9527,9 +9615,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: @@ -9540,9 +9628,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.1)': @@ -9553,10 +9641,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -9570,11 +9658,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -9584,9 +9672,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.1)': @@ -9594,9 +9682,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.1)': @@ -9605,10 +9693,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1)': @@ -9616,9 +9704,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-runtime@7.27.1(@babel/core@7.27.1)': @@ -9633,14 +9721,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-runtime@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-runtime@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.28.5) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.28.5) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.28.5) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9650,9 +9738,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.1)': @@ -9663,9 +9751,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: @@ -9676,9 +9764,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1)': @@ -9686,9 +9774,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1)': @@ -9696,9 +9784,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.1)': @@ -9712,14 +9800,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -9743,9 +9831,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.1)': @@ -9754,10 +9842,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1)': @@ -9766,10 +9854,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.1)': @@ -9778,10 +9866,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/polyfill@7.12.1': @@ -9864,76 +9952,76 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-env@7.27.2(@babel/core@7.28.5)': + '@babel/preset-env@7.27.2(@babel/core@7.29.0)': dependencies: '@babel/compat-data': 7.27.2 - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.28.5) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5) - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.28.5) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.28.5) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.28.5) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.29.0) core-js-compat: 3.42.0 semver: 6.3.1 transitivePeerDependencies: @@ -9946,9 +10034,9 @@ snapshots: '@babel/types': 7.28.5 esutils: 2.0.3 - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/types': 7.28.5 esutils: 2.0.3 @@ -9965,6 +10053,12 @@ snapshots: '@babel/parser': 7.27.2 '@babel/types': 7.27.1 + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@babel/traverse@7.27.1': dependencies: '@babel/code-frame': 7.27.1 @@ -9989,6 +10083,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.27.1': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -9999,6 +10105,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@cnakazawa/watch@1.0.4': dependencies: exec-sh: 0.3.6 @@ -10673,7 +10784,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@fleetbase/ember-core@0.3.10(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8)': + '@fleetbase/ember-core@0.3.11(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8)': dependencies: '@babel/core': 7.27.1 compress-json: 3.4.0 @@ -10706,7 +10817,7 @@ snapshots: - utf-8-validate - webpack - '@fleetbase/ember-ui@0.3.17(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(postcss@8.5.3)(rollup@2.79.2)(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8)': + '@fleetbase/ember-ui@0.3.19(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(postcss@8.5.3)(rollup@2.79.2)(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8)': dependencies: '@babel/core': 7.27.1 '@ember/render-modifiers': 2.1.0(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) @@ -10714,7 +10825,7 @@ snapshots: '@embroider/addon': 0.30.0 '@embroider/macros': 1.19.5 '@fleetbase/ember-accounting': 0.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) - '@floating-ui/dom': 1.7.4 + '@floating-ui/dom': 1.7.5 '@fortawesome/ember-fontawesome': 2.0.0(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(rollup@2.79.2)(webpack@5.99.8) '@fortawesome/fontawesome-svg-core': 6.4.0 '@fortawesome/free-brands-svg-icons': 6.4.0 @@ -10724,27 +10835,27 @@ snapshots: '@fullcalendar/interaction': 6.1.20(@fullcalendar/core@6.1.20) '@makepanic/ember-power-calendar-date-fns': 0.4.2 '@tailwindcss/forms': 0.5.11(tailwindcss@3.4.19) - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-color': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))) - '@tiptap/extension-font-family': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))) - '@tiptap/extension-highlight': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-image': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-placeholder': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) - '@tiptap/extension-subscript': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-superscript': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-table': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) - '@tiptap/extension-table-cell': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-table-header': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-table-row': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-text-align': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-text-style': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-underline': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-youtube': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/pm': 2.27.1 - '@tiptap/starter-kit': 2.27.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/extension-color': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))) + '@tiptap/extension-font-family': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))) + '@tiptap/extension-highlight': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-image': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-placeholder': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-subscript': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-superscript': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-table': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-table-cell': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-table-header': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-table-row': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-text-align': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-text-style': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-underline': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-youtube': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/pm': 2.27.2 + '@tiptap/starter-kit': 2.27.2 air-datepicker: 3.6.0 autonumeric: 4.10.9 - autoprefixer: 10.4.23(postcss@8.5.3) + autoprefixer: 10.4.24(postcss@8.5.3) chart.js: 4.5.1 chartjs-adapter-date-fns: 3.0.0(chart.js@4.5.1)(date-fns@2.30.0) date-fns: 2.30.0 @@ -10759,7 +10870,7 @@ snapshots: ember-composable-helpers: 5.0.0 ember-concurrency: 4.0.4(@babel/core@7.27.1) ember-drag-sort: 4.2.0(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8) - ember-file-upload: 8.4.0(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-modifier@4.2.2(@babel/core@7.27.1))(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8) + ember-file-upload: 8.4.0(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-modifier@4.3.0(@babel/core@7.27.1))(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8) ember-focus-trap: 1.1.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) ember-get-config: 2.1.1 ember-gridstack: 4.0.0(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8) @@ -10767,7 +10878,7 @@ snapshots: ember-leaflet: 5.1.3(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(leaflet@1.9.4)(webpack@5.99.8) ember-loading: 2.0.0(@babel/core@7.27.1) ember-math-helpers: 4.2.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) - ember-modifier: 4.2.2(@babel/core@7.27.1) + ember-modifier: 4.3.0(@babel/core@7.27.1) ember-on-helper: 0.1.0 ember-power-calendar: 0.18.0(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) ember-power-select: 8.6.2(@babel/core@7.27.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-basic-dropdown@8.4.0(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-concurrency@4.0.4(@babel/core@7.27.1))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) @@ -10812,7 +10923,7 @@ snapshots: '@fleetbase/fleetops-data@0.1.25(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8)': dependencies: '@babel/core': 7.27.1 - '@fleetbase/ember-core': 0.3.10(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) + '@fleetbase/ember-core': 0.3.11(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) date-fns: 2.30.0 ember-cli-babel: 8.2.0(@babel/core@7.27.1) ember-cli-htmlbars: 6.3.0 @@ -10840,13 +10951,13 @@ snapshots: '@mapbox/polyline': 0.2.0 osrm-text-instructions: 0.13.4 - '@floating-ui/core@1.7.3': + '@floating-ui/core@1.7.4': dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.4': + '@floating-ui/dom@1.7.5': dependencies: - '@floating-ui/core': 1.7.3 + '@floating-ui/core': 1.7.4 '@floating-ui/utils': 0.2.10 '@floating-ui/utils@0.2.10': {} @@ -11346,152 +11457,152 @@ snapshots: dependencies: '@terraformer/common': 2.1.2 - '@tiptap/core@2.27.1(@tiptap/pm@2.27.1)': + '@tiptap/core@2.27.2(@tiptap/pm@2.27.2)': dependencies: - '@tiptap/pm': 2.27.1 + '@tiptap/pm': 2.27.2 - '@tiptap/extension-blockquote@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-blockquote@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-bold@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-bold@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-bullet-list@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-bullet-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-code-block@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': + '@tiptap/extension-code-block@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/pm': 2.27.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 - '@tiptap/extension-code@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-code@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-color@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)))': + '@tiptap/extension-color@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-text-style': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/extension-text-style': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-document@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-document@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-dropcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': + '@tiptap/extension-dropcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/pm': 2.27.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 - '@tiptap/extension-font-family@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)))': + '@tiptap/extension-font-family@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-text-style': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/extension-text-style': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-gapcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': + '@tiptap/extension-gapcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/pm': 2.27.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 - '@tiptap/extension-hard-break@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-hard-break@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-heading@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-heading@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-highlight@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-highlight@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-history@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': + '@tiptap/extension-history@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/pm': 2.27.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 - '@tiptap/extension-horizontal-rule@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': + '@tiptap/extension-horizontal-rule@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/pm': 2.27.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 - '@tiptap/extension-image@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-image@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-italic@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-italic@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-list-item@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-list-item@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-ordered-list@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-ordered-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-paragraph@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-paragraph@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-placeholder@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': + '@tiptap/extension-placeholder@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/pm': 2.27.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 - '@tiptap/extension-strike@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-strike@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-subscript@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-subscript@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-superscript@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-superscript@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-table-cell@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-table-cell@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-table-header@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-table-header@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-table-row@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-table-row@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-table@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': + '@tiptap/extension-table@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/pm': 2.27.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 - '@tiptap/extension-text-align@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-text-align@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-text@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-text@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-underline@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-underline@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-youtube@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': + '@tiptap/extension-youtube@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm@2.27.1': + '@tiptap/pm@2.27.2': dependencies: prosemirror-changeset: 2.3.1 prosemirror-collab: 1.3.1 @@ -11501,40 +11612,40 @@ snapshots: prosemirror-history: 1.5.0 prosemirror-inputrules: 1.5.1 prosemirror-keymap: 1.2.3 - prosemirror-markdown: 1.13.2 + prosemirror-markdown: 1.13.4 prosemirror-menu: 1.2.5 prosemirror-model: 1.25.4 prosemirror-schema-basic: 1.2.4 prosemirror-schema-list: 1.5.1 prosemirror-state: 1.4.4 prosemirror-tables: 1.8.5 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4) - prosemirror-transform: 1.10.5 - prosemirror-view: 1.41.4 - - '@tiptap/starter-kit@2.27.1': - dependencies: - '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) - '@tiptap/extension-blockquote': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-bold': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-bullet-list': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-code': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-code-block': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) - '@tiptap/extension-document': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-dropcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) - '@tiptap/extension-gapcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) - '@tiptap/extension-hard-break': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-heading': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-history': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) - '@tiptap/extension-horizontal-rule': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) - '@tiptap/extension-italic': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-list-item': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-ordered-list': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-paragraph': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-strike': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-text': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/extension-text-style': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) - '@tiptap/pm': 2.27.1 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6) + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + '@tiptap/starter-kit@2.27.2': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/extension-blockquote': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-bold': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-bullet-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-code': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-code-block': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-document': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-dropcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-gapcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-hard-break': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-heading': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-history': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-horizontal-rule': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-italic': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-list-item': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-ordered-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-paragraph': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-strike': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-text': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-text-style': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/pm': 2.27.2 '@turf/boolean-point-in-polygon@7.2.0': dependencies: @@ -12131,10 +12242,10 @@ snapshots: autonumeric@4.10.9: {} - autoprefixer@10.4.23(postcss@8.5.3): + autoprefixer@10.4.24(postcss@8.5.3): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001761 + caniuse-lite: 1.0.30001769 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.3 @@ -12234,9 +12345,9 @@ snapshots: '@babel/core': 7.27.1 semver: 5.7.2 - babel-plugin-debug-macros@0.3.4(@babel/core@7.28.5): + babel-plugin-debug-macros@0.3.4(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 semver: 5.7.2 babel-plugin-ember-data-packages-polyfill@0.1.2: @@ -12292,11 +12403,11 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.28.5): + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.27.2 - '@babel/core': 7.28.5 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -12309,10 +12420,10 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.28.5): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.29.0) core-js-compat: 3.42.0 transitivePeerDependencies: - supports-color @@ -12324,10 +12435,10 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.28.5): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -12409,7 +12520,7 @@ snapshots: mixin-deep: 1.3.2 pascalcase: 0.1.1 - baseline-browser-mapping@2.9.11: {} + baseline-browser-mapping@2.9.19: {} basic-auth@2.0.1: dependencies: @@ -12554,9 +12665,9 @@ snapshots: transitivePeerDependencies: - supports-color - broccoli-babel-transpiler@8.0.2(@babel/core@7.28.5): + broccoli-babel-transpiler@8.0.2(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 broccoli-persistent-filter: 3.1.3 clone: 2.1.2 hash-for-dep: 1.5.1 @@ -13100,9 +13211,9 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.11 - caniuse-lite: 1.0.30001761 - electron-to-chromium: 1.5.267 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001769 + electron-to-chromium: 1.5.286 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -13231,7 +13342,7 @@ snapshots: caniuse-lite@1.0.30001718: {} - caniuse-lite@1.0.30001761: {} + caniuse-lite@1.0.30001769: {} capture-exit@2.0.0: dependencies: @@ -13693,7 +13804,7 @@ snapshots: css-unit-converter@1.1.2: {} - cssdb@8.6.0: {} + cssdb@8.7.1: {} cssesc@3.0.0: {} @@ -13904,7 +14015,7 @@ snapshots: electron-to-chromium@1.5.155: {} - electron-to-chromium@1.5.267: {} + electron-to-chromium@1.5.286: {} element-closest@3.0.2: {} @@ -14050,7 +14161,7 @@ snapshots: decorator-transforms: 2.3.0(@babel/core@7.27.1) ember-element-helper: 0.8.8 ember-lifeline: 7.0.0(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8)) - ember-modifier: 4.2.2(@babel/core@7.27.1) + ember-modifier: 4.3.0(@babel/core@7.27.1) ember-source: 5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8) ember-style-modifier: 4.5.1(@babel/core@7.27.1)(@ember/string@3.1.1) ember-truth-helpers: 4.0.3(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) @@ -14166,26 +14277,26 @@ snapshots: transitivePeerDependencies: - supports-color - ember-cli-babel@8.2.0(@babel/core@7.28.5): + ember-cli-babel@8.2.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.27.2 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.28.5) - '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.28.5) - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-runtime': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.28.5) - '@babel/preset-env': 7.27.2(@babel/core@7.28.5) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-runtime': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.29.0) + '@babel/preset-env': 7.27.2(@babel/core@7.29.0) '@babel/runtime': 7.12.18 amd-name-resolver: 1.3.1 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.28.5) + babel-plugin-debug-macros: 0.3.4(@babel/core@7.29.0) babel-plugin-ember-data-packages-polyfill: 0.1.2 babel-plugin-ember-modules-api-polyfill: 3.5.0 babel-plugin-module-resolver: 5.0.2 - broccoli-babel-transpiler: 8.0.2(@babel/core@7.28.5) + broccoli-babel-transpiler: 8.0.2(@babel/core@7.29.0) broccoli-debug: 0.6.5 broccoli-funnel: 3.0.8 broccoli-source: 3.0.1 @@ -14760,9 +14871,9 @@ snapshots: ember-drag-sort@4.2.0(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 ember-auto-import: 2.10.0(webpack@5.99.8) - ember-cli-babel: 8.2.0(@babel/core@7.28.5) + ember-cli-babel: 8.2.0(@babel/core@7.29.0) ember-cli-htmlbars: 6.3.0 ember-element-helper: 0.8.8 ember-source: 5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8) @@ -14813,7 +14924,7 @@ snapshots: - '@glint/template' - supports-color - ember-file-upload@8.4.0(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-modifier@4.2.2(@babel/core@7.27.1))(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8): + ember-file-upload@8.4.0(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-modifier@4.3.0(@babel/core@7.27.1))(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8): dependencies: '@ember/test-helpers': 3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8) '@ember/test-waiters': 3.1.0 @@ -14822,7 +14933,7 @@ snapshots: '@glimmer/component': 1.1.2(@babel/core@7.27.1) '@glimmer/tracking': 1.1.2 ember-auto-import: 2.10.0(webpack@5.99.8) - ember-modifier: 4.2.2(@babel/core@7.27.1) + ember-modifier: 4.3.0(@babel/core@7.27.1) tracked-built-ins: 3.4.0(@babel/core@7.27.1) transitivePeerDependencies: - '@glint/template' @@ -14860,7 +14971,7 @@ snapshots: ember-auto-import: 2.10.0(webpack@5.99.8) ember-cli-babel: 7.26.11 ember-cli-htmlbars: 6.3.0 - ember-modifier: 4.2.2(@babel/core@7.27.1) + ember-modifier: 4.3.0(@babel/core@7.27.1) ember-source: 5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8) gridstack: 7.3.0 transitivePeerDependencies: @@ -15012,12 +15123,10 @@ snapshots: - '@babel/core' - supports-color - ember-modifier@4.2.2(@babel/core@7.27.1): + ember-modifier@4.3.0(@babel/core@7.27.1): dependencies: '@embroider/addon-shim': 1.10.2 decorator-transforms: 2.3.0(@babel/core@7.27.1) - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-string-utils: 1.1.0 transitivePeerDependencies: - '@babel/core' - supports-color @@ -15065,7 +15174,7 @@ snapshots: ember-basic-dropdown: 8.4.0(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) ember-concurrency: 4.0.4(@babel/core@7.27.1) ember-lifeline: 7.0.0(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8)) - ember-modifier: 4.2.2(@babel/core@7.27.1) + ember-modifier: 4.3.0(@babel/core@7.27.1) ember-source: 5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8) ember-truth-helpers: 4.0.3(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) transitivePeerDependencies: @@ -15223,7 +15332,7 @@ snapshots: '@ember/string': 3.1.1 ember-auto-import: 2.10.0(webpack@5.99.8) ember-cli-babel: 7.26.11 - ember-modifier: 4.2.2(@babel/core@7.27.1) + ember-modifier: 4.3.0(@babel/core@7.27.1) transitivePeerDependencies: - '@babel/core' - '@glint/template' @@ -15236,7 +15345,7 @@ snapshots: '@embroider/addon-shim': 1.10.2 csstype: 3.2.3 decorator-transforms: 2.3.0(@babel/core@7.27.1) - ember-modifier: 4.2.2(@babel/core@7.27.1) + ember-modifier: 4.3.0(@babel/core@7.27.1) transitivePeerDependencies: - '@babel/core' - supports-color @@ -16218,7 +16327,7 @@ snapshots: fsevents@1.2.13: dependencies: bindings: 1.5.0 - nan: 2.24.0 + nan: 2.25.0 optional: true fsevents@2.3.3: @@ -17325,7 +17434,7 @@ snapshots: mdurl: 1.0.1 uc.micro: 1.0.6 - markdown-it@14.1.0: + markdown-it@14.1.1: dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -17592,7 +17701,7 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.24.0: + nan@2.25.0: optional: true nanoid@3.3.11: {} @@ -18270,12 +18379,12 @@ snapshots: '@csstools/postcss-text-decoration-shorthand': 3.0.7(postcss@8.5.3) '@csstools/postcss-trigonometric-functions': 3.0.10(postcss@8.5.3) '@csstools/postcss-unset-value': 3.0.1(postcss@8.5.3) - autoprefixer: 10.4.23(postcss@8.5.3) + autoprefixer: 10.4.24(postcss@8.5.3) browserslist: 4.24.5 css-blank-pseudo: 6.0.2(postcss@8.5.3) css-has-pseudo: 6.0.5(postcss@8.5.3) css-prefers-color-scheme: 9.0.1(postcss@8.5.3) - cssdb: 8.6.0 + cssdb: 8.7.1 postcss: 8.5.3 postcss-attribute-case-insensitive: 6.0.3(postcss@8.5.3) postcss-clamp: 4.1.0(postcss@8.5.3) @@ -18397,7 +18506,7 @@ snapshots: prosemirror-changeset@2.3.1: dependencies: - prosemirror-transform: 1.10.5 + prosemirror-transform: 1.11.0 prosemirror-collab@1.3.1: dependencies: @@ -18407,42 +18516,42 @@ snapshots: dependencies: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.10.5 + prosemirror-transform: 1.11.0 prosemirror-dropcursor@1.8.2: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.10.5 - prosemirror-view: 1.41.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 prosemirror-gapcursor@1.4.0: dependencies: prosemirror-keymap: 1.2.3 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.41.4 + prosemirror-view: 1.41.6 prosemirror-history@1.5.0: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.10.5 - prosemirror-view: 1.41.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 rope-sequence: 1.3.4 prosemirror-inputrules@1.5.1: dependencies: prosemirror-state: 1.4.4 - prosemirror-transform: 1.10.5 + prosemirror-transform: 1.11.0 prosemirror-keymap@1.2.3: dependencies: prosemirror-state: 1.4.4 w3c-keyname: 2.2.8 - prosemirror-markdown@1.13.2: + prosemirror-markdown@1.13.4: dependencies: '@types/markdown-it': 14.1.2 - markdown-it: 14.1.0 + markdown-it: 14.1.1 prosemirror-model: 1.25.4 prosemirror-menu@1.2.5: @@ -18464,39 +18573,39 @@ snapshots: dependencies: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.10.5 + prosemirror-transform: 1.11.0 prosemirror-state@1.4.4: dependencies: prosemirror-model: 1.25.4 - prosemirror-transform: 1.10.5 - prosemirror-view: 1.41.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 prosemirror-tables@1.8.5: dependencies: prosemirror-keymap: 1.2.3 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.10.5 - prosemirror-view: 1.41.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 - prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4): + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6): dependencies: '@remirror/core-constants': 3.0.0 escape-string-regexp: 4.0.0 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.41.4 + prosemirror-view: 1.41.6 - prosemirror-transform@1.10.5: + prosemirror-transform@1.11.0: dependencies: prosemirror-model: 1.25.4 - prosemirror-view@1.41.4: + prosemirror-view@1.41.6: dependencies: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-transform: 1.10.5 + prosemirror-transform: 1.11.0 proxy-addr@2.0.7: dependencies: From eddd1bf1d81d7a694dafaf19b881b3bc34da35bf Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Thu, 12 Feb 2026 14:54:13 +0800 Subject: [PATCH 04/10] ran formatters --- addon/components/customer/create-order-form.js | 4 ++-- addon/controllers/analytics/reports/index/edit.js | 2 +- addon/controllers/analytics/reports/index/new.js | 2 +- server/src/Imports/ContactImport.php | 3 +-- server/src/Imports/DriverImport.php | 3 +-- server/src/Imports/FleetImport.php | 3 +-- server/src/Imports/FuelReportImport.php | 2 -- server/src/Imports/IssueImport.php | 2 -- server/src/Imports/PlaceImport.php | 2 -- server/src/Imports/VehicleImport.php | 2 -- server/src/Imports/VendorImport.php | 2 -- 11 files changed, 7 insertions(+), 20 deletions(-) diff --git a/addon/components/customer/create-order-form.js b/addon/components/customer/create-order-form.js index 177aa2f7..5efea77a 100644 --- a/addon/components/customer/create-order-form.js +++ b/addon/components/customer/create-order-form.js @@ -195,10 +195,10 @@ export default class CustomerCreateOrderFormComponent extends Component { try { yield order.save(); - + // Track with standard events service this.events.trackResourceCreated(order); - + // trigger event that fleet-ops created an order this.universe.trigger('fleet-ops.order.created', order); diff --git a/addon/controllers/analytics/reports/index/edit.js b/addon/controllers/analytics/reports/index/edit.js index e046ac8e..a1f2dc74 100644 --- a/addon/controllers/analytics/reports/index/edit.js +++ b/addon/controllers/analytics/reports/index/edit.js @@ -27,7 +27,7 @@ export default class AnalyticsReportsIndexEditController extends Controller { report.fillResult(result); yield report.save(); - this.events.trackResourceUpdated(report); + this.events.trackResourceUpdated(report); this.overlay?.close(); yield this.hostRouter.transitionTo('console.fleet-ops.analytics.reports.index.details', report); diff --git a/addon/controllers/analytics/reports/index/new.js b/addon/controllers/analytics/reports/index/new.js index 4163e0b2..ca6ab515 100644 --- a/addon/controllers/analytics/reports/index/new.js +++ b/addon/controllers/analytics/reports/index/new.js @@ -23,7 +23,7 @@ export default class AnalyticsReportsIndexNewController extends Controller { report.fillResult(result); yield report.save(); - this.events.trackResourceCreated(report); + this.events.trackResourceCreated(report); this.overlay?.close(); yield this.hostRouter.refresh(); diff --git a/server/src/Imports/ContactImport.php b/server/src/Imports/ContactImport.php index 44e5a88b..7e83bad1 100644 --- a/server/src/Imports/ContactImport.php +++ b/server/src/Imports/ContactImport.php @@ -11,10 +11,9 @@ class ContactImport implements ToCollection, WithHeadingRow { /** * Counter for successfully imported rows. - * - * @var int */ public int $imported = 0; + /** * @return Collection */ diff --git a/server/src/Imports/DriverImport.php b/server/src/Imports/DriverImport.php index 23933ef0..319b9cc9 100644 --- a/server/src/Imports/DriverImport.php +++ b/server/src/Imports/DriverImport.php @@ -11,10 +11,9 @@ class DriverImport implements ToCollection, WithHeadingRow { /** * Counter for successfully imported rows. - * - * @var int */ public int $imported = 0; + /** * @return Collection */ diff --git a/server/src/Imports/FleetImport.php b/server/src/Imports/FleetImport.php index d89b99ea..dd5e9aac 100644 --- a/server/src/Imports/FleetImport.php +++ b/server/src/Imports/FleetImport.php @@ -11,10 +11,9 @@ class FleetImport implements ToCollection, WithHeadingRow { /** * Counter for successfully imported rows. - * - * @var int */ public int $imported = 0; + /** * @return Collection */ diff --git a/server/src/Imports/FuelReportImport.php b/server/src/Imports/FuelReportImport.php index 8c28a245..ae7e9e32 100644 --- a/server/src/Imports/FuelReportImport.php +++ b/server/src/Imports/FuelReportImport.php @@ -11,8 +11,6 @@ class FuelReportImport implements ToCollection, WithHeadingRow { /** * Counter for successfully imported rows. - * - * @var int */ public int $imported = 0; diff --git a/server/src/Imports/IssueImport.php b/server/src/Imports/IssueImport.php index 5f6d9873..0f0e0142 100644 --- a/server/src/Imports/IssueImport.php +++ b/server/src/Imports/IssueImport.php @@ -11,8 +11,6 @@ class IssueImport implements ToCollection, WithHeadingRow { /** * Counter for successfully imported rows. - * - * @var int */ public int $imported = 0; diff --git a/server/src/Imports/PlaceImport.php b/server/src/Imports/PlaceImport.php index 138e3b5e..7228f943 100644 --- a/server/src/Imports/PlaceImport.php +++ b/server/src/Imports/PlaceImport.php @@ -11,8 +11,6 @@ class PlaceImport implements ToCollection, WithHeadingRow { /** * Counter for successfully imported rows. - * - * @var int */ public int $imported = 0; diff --git a/server/src/Imports/VehicleImport.php b/server/src/Imports/VehicleImport.php index 91bc11e0..b2b6e88f 100644 --- a/server/src/Imports/VehicleImport.php +++ b/server/src/Imports/VehicleImport.php @@ -11,8 +11,6 @@ class VehicleImport implements ToCollection, WithHeadingRow { /** * Counter for successfully imported rows. - * - * @var int */ public int $imported = 0; diff --git a/server/src/Imports/VendorImport.php b/server/src/Imports/VendorImport.php index d25d95b1..0a3d0a69 100644 --- a/server/src/Imports/VendorImport.php +++ b/server/src/Imports/VendorImport.php @@ -11,8 +11,6 @@ class VendorImport implements ToCollection, WithHeadingRow { /** * Counter for successfully imported rows. - * - * @var int */ public int $imported = 0; From 9a7faea0e425f35236656c753b2da98db54dd1fe Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Fri, 13 Feb 2026 20:18:43 +0800 Subject: [PATCH 05/10] moved avatar management to fleetops settings --- DRIVER_SCHEDULING.md | 186 ------------------ EVENTS_TRACKING_SUMMARY.md | 169 ---------------- addon/components/avatar-manager.hbs | 86 ++++++++ addon/components/avatar-manager.js | 165 ++++++++++++++++ addon/components/layout/fleet-ops-sidebar.js | 8 + addon/controllers/settings/avatars.js | 3 + addon/extension.js | 7 +- addon/routes.js | 1 + addon/routes/settings/avatars.js | 3 + addon/templates/settings/avatars.hbs | 10 + app/components/avatar-manager.js | 1 + app/controllers/settings/avatars.js | 1 + app/routes/settings/avatars.js | 1 + app/templates/settings/avatars.js | 1 + server/src/Auth/Schemas/FleetOps.php | 4 + .../Internal/v1/VehicleController.php | 4 +- server/src/Models/Vehicle.php | 11 +- .../components/avatar-manager-test.js | 26 +++ .../unit/controllers/settings/avatars-test.js | 12 ++ tests/unit/routes/settings/avatars-test.js | 11 ++ translations/en-us.yaml | 2 + 21 files changed, 348 insertions(+), 364 deletions(-) delete mode 100644 DRIVER_SCHEDULING.md delete mode 100644 EVENTS_TRACKING_SUMMARY.md create mode 100644 addon/components/avatar-manager.hbs create mode 100644 addon/components/avatar-manager.js create mode 100644 addon/controllers/settings/avatars.js create mode 100644 addon/routes/settings/avatars.js create mode 100644 addon/templates/settings/avatars.hbs create mode 100644 app/components/avatar-manager.js create mode 100644 app/controllers/settings/avatars.js create mode 100644 app/routes/settings/avatars.js create mode 100644 app/templates/settings/avatars.js create mode 100644 tests/integration/components/avatar-manager-test.js create mode 100644 tests/unit/controllers/settings/avatars-test.js create mode 100644 tests/unit/routes/settings/avatars-test.js diff --git a/DRIVER_SCHEDULING.md b/DRIVER_SCHEDULING.md deleted file mode 100644 index ba463636..00000000 --- a/DRIVER_SCHEDULING.md +++ /dev/null @@ -1,186 +0,0 @@ -# FleetOps Driver Scheduling Module - -This module implements driver scheduling with Hours of Service (HOS) compliance for FleetOps. - -## Features - -- **Fleet-Wide Scheduler**: Manage all drivers' schedules in a single calendar view -- **Driver Schedule Management**: Create, edit, and manage driver shifts -- **HOS Compliance**: Real-time validation against FMCSA regulations -- **Calendar View**: Visual schedule management with drag-and-drop -- **Resource Timeline**: View multiple drivers' schedules simultaneously -- **Individual Driver Schedules**: Dedicated schedule view on driver detail pages -- **Availability Management**: Track driver availability and time-off requests -- **Conflict Detection**: Automatic detection of scheduling conflicts -- **Dual View Modes**: Toggle between order scheduling and driver scheduling - -## Components - -### Operations/Scheduler (Fleet-Wide View) - -The main scheduler view at `operations/scheduler` now supports both order scheduling and driver scheduling. - -**Location**: `addon/controllers/operations/scheduler/index.js` - -**Features**: -- **View Mode Toggle**: Switch between "Orders" and "Driver Schedules" modes -- **Resource Timeline**: In driver mode, shows all drivers as resources with their shifts -- **Drag-and-Drop**: Drag shifts between drivers or reschedule by dragging -- **Add Shift**: Quick action button to create new driver shifts -- **Real-Time Updates**: Calendar updates automatically when shifts are modified -- **Status Colors**: Visual indicators for shift status (pending, confirmed, etc.) - -**View Modes**: -1. **Orders Mode** (default): - - Month calendar view - - Drag unscheduled orders to calendar - - Manage order scheduling - -2. **Driver Schedules Mode**: - - Resource timeline view (week view with drivers as resources) - - View all drivers' shifts simultaneously - - Drag shifts between drivers - - Reschedule shifts by dragging - - Click shifts to view/edit details - -**Usage**: -Navigate to Operations → Scheduler, then toggle between "Orders" and "Driver Schedules" using the header buttons. - -### Driver::Schedule - -Displays and manages a driver's schedule from their detail page. - -**Location**: `addon/components/driver/schedule.js` - -**Features**: -- HOS compliance dashboard with visual indicators -- Weekly calendar view of driver shifts -- Upcoming shifts list (next 5 shifts) -- Availability and time-off management -- Quick actions for adding shifts and requesting time off - -**Usage**: -```handlebars - -``` - -**Integration**: Add a "Schedule" tab to the driver detail page. - -## Backend Components - -### HOSConstraint - -Validates schedule items against FMCSA Hours of Service regulations. - -**Location**: `server/src/Constraints/HOSConstraint.php` - -**Regulations Enforced**: -1. **11-Hour Driving Limit**: Maximum 11 hours driving after 10 consecutive hours off duty -2. **14-Hour Duty Window**: Cannot drive beyond 14th hour after coming on duty -3. **60/70-Hour Weekly Limit**: Cannot drive after 60/70 hours in 7/8 consecutive days -4. **30-Minute Break**: Required after 8 cumulative hours of driving - -**Violation Severity**: -- `critical`: Immediate compliance issue, shift cannot be scheduled -- `warning`: Approaching limit, requires attention - -**Registration**: -```php -// In FleetOps ServiceProvider boot() method -$constraintService = app(\Fleetbase\Services\Scheduling\ConstraintService::class); -$constraintService->register('driver', \Fleetbase\FleetOps\Constraints\HOSConstraint::class); -``` - -## HOS Compliance Dashboard - -The HOS dashboard displays: -- **Daily Driving Hours**: X/11 hours with circular progress indicator -- **Weekly Hours**: X/70 hours with circular progress indicator -- **Compliance Status**: Badge indicating compliance level - - Green: Compliant - - Yellow: Approaching Limit - - Red: At Limit - -## API Endpoints - -FleetOps extends the core scheduling endpoints with driver-specific functionality: - -- `GET /drivers/{id}/hos-status` - Get HOS compliance status for a driver -- `GET /drivers/{id}/schedule` - Get schedule items for a driver -- `POST /drivers/{id}/schedule` - Create a new shift for a driver -- `PUT /schedule-items/{id}` - Update a shift (with HOS validation) -- `DELETE /schedule-items/{id}` - Delete a shift - -## Workflow - -### Creating a Driver Shift - -1. User clicks "Add Shift" button -2. Modal opens with shift form -3. User selects date, time, vehicle, and other details -4. System validates against HOS constraints -5. If violations found, display warnings/errors -6. If valid, create schedule item -7. Update driver schedule view and HOS dashboard - -### HOS Validation - -1. When a schedule item is created/updated -2. `HOSConstraint::validate()` is called -3. Checks all four HOS regulations -4. Returns violations array if any -5. Frontend displays violations to user -6. User can adjust shift or override (with proper permissions) - -## Integration with Core Scheduling - -FleetOps uses the core scheduling module with driver-specific customizations: - -**Core Components Used**: -- `Schedule` model (subject_type: 'fleet', subject_uuid: fleet.id) -- `ScheduleItem` model (assignee_type: 'driver', assignee_uuid: driver.id) -- `ScheduleAvailability` model (subject_type: 'driver') -- `ScheduleConstraint` model (subject_type: 'driver') - -**FleetOps Extensions**: -- `HOSConstraint` for compliance validation -- `Driver::Schedule` component for driver-specific UI -- HOS status API endpoint -- Driver-specific scheduling logic - -## Future Enhancements - -- **Automatic Schedule Generation**: AI-powered schedule optimization -- **ELD Integration**: Sync with Electronic Logging Devices -- **Predictive HOS**: Forecast HOS availability for future dates -- **Mobile App**: Driver-facing mobile app for schedule viewing -- **Notifications**: Real-time alerts for schedule changes and HOS warnings -- **Reporting**: HOS compliance reports and analytics - -## Testing - -### HOS Constraint Tests - -Test cases should cover: -- 11-hour driving limit enforcement -- 14-hour duty window enforcement -- 60/70-hour weekly limit enforcement -- 30-minute break requirement -- Edge cases (consecutive shifts, split shifts, etc.) - -### Integration Tests - -- Create driver shift via API -- Validate HOS constraints are enforced -- Update shift and verify re-validation -- Delete shift and verify HOS recalculation -- Test driver schedule view rendering - -## Compliance Notes - -This implementation follows FMCSA Hours of Service regulations as of 2025. Regulations may vary by: -- Jurisdiction (US Federal, state-specific, Canada, etc.) -- Vehicle type (property-carrying vs. passenger-carrying) -- Industry (short-haul vs. long-haul) - -**Important**: This is a software implementation and should not be the sole method of HOS compliance. Proper driver training, ELD integration, and regular audits are essential for full compliance. diff --git a/EVENTS_TRACKING_SUMMARY.md b/EVENTS_TRACKING_SUMMARY.md deleted file mode 100644 index eecfd231..00000000 --- a/EVENTS_TRACKING_SUMMARY.md +++ /dev/null @@ -1,169 +0,0 @@ -# FleetOps Event Tracking Implementation Summary - -## Overview -Added event tracking to FleetOps controllers using the `events` service from `@fleetbase/ember-core`. - -## Controllers Updated - -### Total: 30 controllers with active save tasks - -#### Analytics (2) -- ✅ `analytics/reports/index/new.js` - Track report created -- ✅ `analytics/reports/index/edit.js` - Track report updated - -#### Connectivity (6) -- ✅ `connectivity/devices/index/new.js` - Track device created -- ✅ `connectivity/devices/index/edit.js` - Track device updated -- ✅ `connectivity/sensors/index/new.js` - Track sensor created -- ✅ `connectivity/sensors/index/edit.js` - Track sensor updated -- ✅ `connectivity/telematics/index/new.js` - Track telematics created -- ✅ `connectivity/telematics/index/edit.js` - Track telematics updated - -#### Management (16) -- ✅ `management/contacts/customers/new.js` - Track customer created -- ✅ `management/contacts/customers/edit.js` - Track customer updated -- ✅ `management/contacts/index/new.js` - Track contact created -- ✅ `management/contacts/index/edit.js` - Track contact updated -- ✅ `management/drivers/index/new.js` - Track driver created -- ✅ `management/drivers/index/edit.js` - Track driver updated -- ✅ `management/fleets/index/new.js` - Track fleet created -- ✅ `management/fleets/index/edit.js` - Track fleet updated -- ✅ `management/fuel-reports/index/new.js` - Track fuel report created -- ✅ `management/fuel-reports/index/edit.js` - Track fuel report updated -- ✅ `management/issues/index/new.js` - Track issue created -- ✅ `management/issues/index/edit.js` - Track issue updated -- ✅ `management/places/index/new.js` - Track place created -- ✅ `management/places/index/edit.js` - Track place updated -- ✅ `management/vehicles/index/new.js` - Track vehicle created -- ✅ `management/vehicles/index/edit.js` - Track vehicle updated -- ✅ `management/vendors/index/new.js` - Track vendor created -- ✅ `management/vendors/index/edit.js` - Track vendor updated - -#### Operations (4) -- ✅ `operations/orders/index/new.js` - Track order created -- ✅ `operations/service-rates/index/new.js` - Track service rate created -- ✅ `operations/service-rates/index/edit.js` - Track service rate updated - -## Components Updated - -### Total: 1 component - -- ✅ `customer/create-order-form.js` - Added standard event tracking alongside existing custom events - -## Controllers Skipped (Empty/No Save Task) - -### Maintenance (6) -- ⏭️ `maintenance/equipment/index/new.js` - Empty controller -- ⏭️ `maintenance/equipment/index/edit.js` - Empty controller -- ⏭️ `maintenance/parts/index/new.js` - Empty controller -- ⏭️ `maintenance/parts/index/edit.js` - Empty controller -- ⏭️ `maintenance/work-orders/index/new.js` - Empty controller -- ⏭️ `maintenance/work-orders/index/edit.js` - Empty controller - -### Management (2) -- ⏭️ `management/vendors/integrated/new.js` - Empty controller -- ⏭️ `management/vendors/integrated/edit.js` - Empty controller - -### Operations (1) -- ⏭️ `operations/routes/index/new.js` - No save task - -## Implementation Pattern - -### NEW Controllers (Create) -```javascript -@service events; - -@task *save(resource) { - try { - yield resource.save(); - this.events.trackResourceCreated(resource); - // ... rest of code - } catch (err) { - this.notifications.serverError(err); - } -} -``` - -### EDIT Controllers (Update) -```javascript -@service events; - -@task *save(resource) { - try { - yield resource.save(); - this.events.trackResourceUpdated(resource); - // ... rest of code - } catch (err) { - this.notifications.serverError(err); - } -} -``` - -### Component (Dual Tracking) -```javascript -@service events; - -yield order.save(); - -// Standard event tracking -this.events.trackResourceCreated(order); - -// Keep existing custom event -this.universe.trigger('fleet-ops.order.created', order); -``` - -## Events Emitted - -For each tracked resource, two events are emitted: - -1. **Generic event**: `resource.created` or `resource.updated` -2. **Specific event**: `{model}.created` or `{model}.updated` - -### Examples -- `resource.created` + `order.created` -- `resource.updated` + `vehicle.updated` -- `resource.created` + `driver.created` -- `resource.updated` + `place.updated` - -## Resource Types Tracked - -- `report` (analytics) -- `device`, `sensor`, `telematic` (connectivity) -- `customer`, `contact`, `driver`, `fleet`, `fuel-report`, `issue`, `place`, `vehicle`, `vendor` (management) -- `order`, `service-rate` (operations) - -## Integration with Internals - -These events will be consumed by the `internals` analytics-listener for PostHog tracking: - -```javascript -// In internals/addon/instance-initializers/analytics-listener.js -universe.on('order.created', (order) => { - posthog.trackEvent('order_created', { - order_id: order.id, - // ... other properties - }); -}); -``` - -## Testing - -To verify events are firing: - -1. **In development console:** -```javascript -// Listen to all events -window.universe = owner.lookup('service:universe'); -universe.on('resource.created', (resource) => console.log('Created:', resource)); -universe.on('resource.updated', (resource) => console.log('Updated:', resource)); -``` - -2. **Check PostHog (in cloud):** -- Events should appear in PostHog Activity tab -- Event names will be snake_case: `order_created`, `vehicle_updated`, etc. - -## Dependencies - -Requires: -- `@fleetbase/ember-core` with `events` service -- `@fleetbase/internals` with analytics-listener (for PostHog tracking in cloud) diff --git a/addon/components/avatar-manager.hbs b/addon/components/avatar-manager.hbs new file mode 100644 index 00000000..0401ef1d --- /dev/null +++ b/addon/components/avatar-manager.hbs @@ -0,0 +1,86 @@ +
+
+
+ {{#each this.categories as |category index|}} + +
+ +
+
{{category.name}}
+
+ {{/each}} +
+
+
+ {{#if this.isUploading}} +
+
+ +
+
+ {{else}} + {{#let (file-queue name="files" onFileAdded=this.queueFile accept=(join "," this.acceptedFileTypes)) as |queue|}} + + {{#if dropzone.active}} + {{#if dropzone.valid}} + {{t "dropzone.drop-to-upload"}} + {{else}} + {{t "dropzone.invalid"}} + {{/if}} + {{else if queue.files.length}} +
+ + {{t "dropzone.files-ready-for-upload" numOfFiles=(pluralize queue.files.length (t "dropzone.file"))}} +
+
({{queue.progress}}%)
+ {{else}} +

+ + {{t "dropzone.upload-avatar-files"}} +

+
+ {{#if dropzone.supported}} +

{{t "dropzone.dropzone-supported-avatars"}}

+ {{/if}} + + {{t "dropzone.or-select-button-text"}} + +
+ {{/if}} +
+ {{/let}} + {{/if}} +
+ {{#if this.uploadQueue}} +
+ {{#each this.uploadQueue as |file|}} +
+
{{truncate-filename file.name 50}}
+
+ + {{round file.progress}}% +
+
+ {{/each}} +
+ {{/if}} +
+
+ {{#each this.currentCategory.avatars as |file|}} + + {{/each}} +
+
+
+
+
+
+
\ No newline at end of file diff --git a/addon/components/avatar-manager.js b/addon/components/avatar-manager.js new file mode 100644 index 00000000..d206321b --- /dev/null +++ b/addon/components/avatar-manager.js @@ -0,0 +1,165 @@ +import Component from '@glimmer/component'; +import { inject as service } from '@ember/service'; +import { action } from '@ember/object'; +import { isArray } from '@ember/array'; +import { tracked } from '@glimmer/tracking'; +import { task } from 'ember-concurrency'; +import { pluralize } from 'ember-inflector'; + +export default class AvatarManagerComponent extends Component { + @service fileQueue; + @service store; + @service fetch; + @service notifications; + @service currentUser; + @service intl; + + /** + * Tracks the files in the upload queue. + * + * @var {Array} + */ + @tracked uploadQueue = []; + + /** + * The current loaded avatars. + * + * @var {Array} + */ + @tracked avatars = []; + + /** + * Tracks the selected category for avatar management. + * + * @var {string|null} + */ + @tracked currentCategory; + + /** + * Selectable categories for avatar management. + * + * @memberof AdminAvatarManagementComponent + */ + @tracked categories = [ + { + name: this.intl.t('resource.vehicles'), + icon: 'car', + type: 'vehicle', + avatars: [], + }, + { + name: this.intl.t('resource.places'), + icon: 'building', + type: 'place', + avatars: [], + }, + { + name: this.intl.t('resource.drivers'), + icon: 'id-card', + type: 'driver', + avatars: [], + }, + ]; + + /** + * The only acceptable file types for avatars, png or svg. + * + * @memberof AdminAvatarManagementComponent + */ + get acceptedFileTypes() { + return ['image/svg+xml', 'image/png']; + } + + /** + * Creates an instance of AdminAvatarManagementComponent. + * @memberof AdminAvatarManagementComponent + */ + constructor() { + super(...arguments); + this.loadAvatars.perform(); + } + + /** + * Action triggered when a category is selected. + * + * @param {string} category - The selected category. + */ + @action switchCategory(category) { + this.currentCategory = category; + } + + /** + * Action triggered when a file is queued for upload. + * + * @param {File} file - The file to be queued. + */ + @action queueFile(file) { + // since we have dropzone and upload button within dropzone validate the file state first + // as this method can be called twice from both functions + if (['queued', 'failed', 'timed_out', 'aborted'].indexOf(file.state) === -1) { + return; + } + + // Get the current category + const category = this.currentCategory; + + // Queue and upload immediatley + this.uploadQueue.pushObject(file); + this.fetch.uploadFile.perform( + file, + { + path: `custom-avatars/${pluralize(category.type)}/${this.currentUser.companyId}`, + type: `${category.type}-avatar`, + }, + (uploadedFile) => { + this.currentCategory.avatars.pushObject(uploadedFile); + this.uploadQueue.removeObject(file); + }, + () => { + this.uploadQueue.removeObject(file); + // remove file from queue + if (file.queue && typeof file.queue.remove === 'function') { + file.queue.remove(file); + } + } + ); + } + + /** + * Action triggered when a file is removed. + * + * @param {File} file - The file to be removed. + * @returns {Promise} - A promise representing the file destruction operation. + */ + @action removeFile(file) { + this.currentCategory.avatars.removeObject(file); + return file.destroyRecord(); + } + + /** + * Task that loads files based on the selected category. + * + * @task + * @generator + * @yields {Array} - The filtered files based on the selected category. + */ + @task *loadAvatars() { + this.avatars = yield this.store.query('file', { type_ends_with: 'avatar' }); + + // Assign avatars to their categories + if (isArray(this.avatars)) { + const categoriesWithAvatars = []; + + for (let i = 0; i < this.categories.length; i++) { + const category = this.categories[i]; + categoriesWithAvatars.pushObject({ + ...category, + avatars: this.avatars.filter((file) => file.type === `${category.type}-avatar`), + }); + } + + this.categories = categoriesWithAvatars; + this.currentCategory = this.currentCategory ? this.categories.find((category) => category.type === this.currentCategory.type) : this.categories[0]; + } + } +} diff --git a/addon/components/layout/fleet-ops-sidebar.js b/addon/components/layout/fleet-ops-sidebar.js index c405ed17..f075267d 100644 --- a/addon/components/layout/fleet-ops-sidebar.js +++ b/addon/components/layout/fleet-ops-sidebar.js @@ -261,6 +261,14 @@ export default class LayoutFleetOpsSidebarComponent extends Component { permission: 'fleet-ops view custom-field', visible: this.abilities.can('fleet-ops see custom-field'), }, + { + intl: 'menu.avatars', + title: this.intl.t('menu.avatars'), + icon: 'icons', + route: 'settings.avatars', + permission: 'fleet-ops view avatar', + visible: this.abilities.can('fleet-ops see avatar'), + }, ]; const createPanel = (intl, routePrefix, items = [], options = {}) => ({ diff --git a/addon/controllers/settings/avatars.js b/addon/controllers/settings/avatars.js new file mode 100644 index 00000000..a0eac920 --- /dev/null +++ b/addon/controllers/settings/avatars.js @@ -0,0 +1,3 @@ +import Controller from '@ember/controller'; + +export default class SettingsAvatarsController extends Controller {} diff --git a/addon/extension.js b/addon/extension.js index f386b3c6..a75d4045 100644 --- a/addon/extension.js +++ b/addon/extension.js @@ -17,12 +17,7 @@ export default { title: 'Navigator App', icon: 'location-arrow', component: new ExtensionComponent('@fleetbase/fleetops-engine', 'admin/navigator-app'), - }), - new MenuItem({ - title: 'Avatar Managemenet', - icon: 'images', - component: new ExtensionComponent('@fleetbase/fleetops-engine', 'admin/avatar-management'), - }), + }) ], { slug: 'fleet-ops', diff --git a/addon/routes.js b/addon/routes.js index c660096a..7c68028c 100644 --- a/addon/routes.js +++ b/addon/routes.js @@ -225,6 +225,7 @@ export default buildRoutes(function () { this.route('navigator-app'); this.route('notifications'); this.route('custom-fields'); + this.route('avatars'); this.route('routing'); this.route('payments', function () { this.route('index', { path: '/' }); diff --git a/addon/routes/settings/avatars.js b/addon/routes/settings/avatars.js new file mode 100644 index 00000000..22582c4e --- /dev/null +++ b/addon/routes/settings/avatars.js @@ -0,0 +1,3 @@ +import Route from '@ember/routing/route'; + +export default class SettingsAvatarsRoute extends Route {} diff --git a/addon/templates/settings/avatars.hbs b/addon/templates/settings/avatars.hbs new file mode 100644 index 00000000..105e799b --- /dev/null +++ b/addon/templates/settings/avatars.hbs @@ -0,0 +1,10 @@ + + + +
+
+ +
+
+ +
\ No newline at end of file diff --git a/app/components/avatar-manager.js b/app/components/avatar-manager.js new file mode 100644 index 00000000..2904e89a --- /dev/null +++ b/app/components/avatar-manager.js @@ -0,0 +1 @@ +export { default } from '@fleetbase/fleetops-engine/components/avatar-manager'; diff --git a/app/controllers/settings/avatars.js b/app/controllers/settings/avatars.js new file mode 100644 index 00000000..0fab77d9 --- /dev/null +++ b/app/controllers/settings/avatars.js @@ -0,0 +1 @@ +export { default } from '@fleetbase/fleetops-engine/controllers/settings/avatars'; diff --git a/app/routes/settings/avatars.js b/app/routes/settings/avatars.js new file mode 100644 index 00000000..903ca368 --- /dev/null +++ b/app/routes/settings/avatars.js @@ -0,0 +1 @@ +export { default } from '@fleetbase/fleetops-engine/routes/settings/avatars'; diff --git a/app/templates/settings/avatars.js b/app/templates/settings/avatars.js new file mode 100644 index 00000000..bab69160 --- /dev/null +++ b/app/templates/settings/avatars.js @@ -0,0 +1 @@ +export { default } from '@fleetbase/fleetops-engine/templates/settings/avatars'; diff --git a/server/src/Auth/Schemas/FleetOps.php b/server/src/Auth/Schemas/FleetOps.php index 5d34b04c..eb2b3660 100644 --- a/server/src/Auth/Schemas/FleetOps.php +++ b/server/src/Auth/Schemas/FleetOps.php @@ -117,6 +117,10 @@ class FleetOps 'name' => 'custom-field', 'actions' => [], ], + [ + 'name' => 'avatar', + 'actions' => [], + ], [ 'name' => 'navigator-settings', // the navigator mobile app used by drivers 'action' => [], diff --git a/server/src/Http/Controllers/Internal/v1/VehicleController.php b/server/src/Http/Controllers/Internal/v1/VehicleController.php index 1f3c65a9..98fa7dca 100644 --- a/server/src/Http/Controllers/Internal/v1/VehicleController.php +++ b/server/src/Http/Controllers/Internal/v1/VehicleController.php @@ -59,7 +59,9 @@ public function statuses() */ public function avatars() { - $options = Vehicle::getAvatarOptions(); + $options = Vehicle::getAvatarOptions(function ($query) { + $query->where('company_uuid', session('company')); + }); return response()->json($options); } diff --git a/server/src/Models/Vehicle.php b/server/src/Models/Vehicle.php index dcdf48e3..01a1b474 100644 --- a/server/src/Models/Vehicle.php +++ b/server/src/Models/Vehicle.php @@ -507,7 +507,7 @@ public static function getAvatar($key = 'mini_bus'): ?string * * @return \Illuminate\Support\Collection */ - public static function getAvatarOptions() + public static function getAvatarOptions(?callable $customQueryCallback = null) { $options = [ '2_door_truck.svg', @@ -540,8 +540,15 @@ public static function getAvatarOptions() 'taxi.svg', ]; + // Query for custom avatars + $customAvatarsQuery = File::where('type', 'vehicle-avatar'); + if (is_callable($customQueryCallback)) { + $customQueryCallback($customAvatarsQuery); + } + $customAvatars = $customAvatarsQuery->get(); + // Get custom avatars - $customAvatars = collect(File::where('type', 'vehicle-avatar')->get()->mapWithKeys( + $customAvatars = collect($customAvatars->mapWithKeys( function ($file) { $key = str_replace(['.svg', '.png'], '', 'Custom: ' . $file->original_filename); diff --git a/tests/integration/components/avatar-manager-test.js b/tests/integration/components/avatar-manager-test.js new file mode 100644 index 00000000..2f1ab8b9 --- /dev/null +++ b/tests/integration/components/avatar-manager-test.js @@ -0,0 +1,26 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'dummy/tests/helpers'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | avatar-manager', function (hooks) { + setupRenderingTest(hooks); + + test('it renders', async function (assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.dom().hasText(''); + + // Template block usage: + await render(hbs` + + template block text + + `); + + assert.dom().hasText('template block text'); + }); +}); diff --git a/tests/unit/controllers/settings/avatars-test.js b/tests/unit/controllers/settings/avatars-test.js new file mode 100644 index 00000000..9468ba6b --- /dev/null +++ b/tests/unit/controllers/settings/avatars-test.js @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'dummy/tests/helpers'; + +module('Unit | Controller | settings/avatars', function (hooks) { + setupTest(hooks); + + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup('controller:settings/avatars'); + assert.ok(controller); + }); +}); diff --git a/tests/unit/routes/settings/avatars-test.js b/tests/unit/routes/settings/avatars-test.js new file mode 100644 index 00000000..eda63621 --- /dev/null +++ b/tests/unit/routes/settings/avatars-test.js @@ -0,0 +1,11 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'dummy/tests/helpers'; + +module('Unit | Route | settings/avatars', function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let route = this.owner.lookup('route:settings/avatars'); + assert.ok(route); + }); +}); diff --git a/translations/en-us.yaml b/translations/en-us.yaml index ba73f354..8affb124 100644 --- a/translations/en-us.yaml +++ b/translations/en-us.yaml @@ -77,6 +77,7 @@ menu: routing: Routing custom-fields: Custom Fields order-board: Order Board + avatars: Avatars resource: asset: Asset @@ -1680,6 +1681,7 @@ route-list: more-waypoints: more waypoints settings: + avatar-management: Avatar Management custom-fields: Custom Fields notifications: fleet-ops-notification-settings: Fleet-Ops Notification Settings From 17cf9ae0c6142a49832df2d8cbe14517bb0e1e3f Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Sat, 14 Feb 2026 09:53:10 +0800 Subject: [PATCH 06/10] fixed linter and upgraded core dependencies --- addon/extension.js | 2 +- pnpm-lock.yaml | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/addon/extension.js b/addon/extension.js index a75d4045..7126b202 100644 --- a/addon/extension.js +++ b/addon/extension.js @@ -17,7 +17,7 @@ export default { title: 'Navigator App', icon: 'location-arrow', component: new ExtensionComponent('@fleetbase/fleetops-engine', 'admin/navigator-app'), - }) + }), ], { slug: 'fleet-ops', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 29835142..22d3f5a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -359,6 +359,10 @@ packages: resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.27.1': resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} engines: {node: '>=6.9.0'} @@ -487,6 +491,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.28.6': + resolution: {integrity: sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.27.1': resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} engines: {node: '>=6.9.0'} @@ -3688,6 +3698,9 @@ packages: decorator-transforms@2.3.0: resolution: {integrity: sha512-jo8c1ss9yFPudHuYYcrJ9jpkDZIoi+lOGvt+Uyp9B+dz32i50icRMx9Bfa8hEt7TnX1FyKWKkjV+cUdT/ep2kA==} + decorator-transforms@2.3.1: + resolution: {integrity: sha512-PDOk74Zqqy0946Lx4ckXxbgG6uhPScOICtrxL/pXmfznxchqNee0TaJISClGJQe6FeT8ohGqsOgdjfahm4FwEw==} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -8882,6 +8895,8 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -9121,6 +9136,11 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -13889,6 +13909,13 @@ snapshots: transitivePeerDependencies: - '@babel/core' + decorator-transforms@2.3.1(@babel/core@7.27.1): + dependencies: + '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.27.1) + babel-import-util: 3.0.1 + transitivePeerDependencies: + - '@babel/core' + deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -19974,7 +20001,7 @@ snapshots: tracked-built-ins@3.4.0(@babel/core@7.27.1): dependencies: '@embroider/addon-shim': 1.10.2 - decorator-transforms: 2.3.0(@babel/core@7.27.1) + decorator-transforms: 2.3.1(@babel/core@7.27.1) ember-tracked-storage-polyfill: 1.0.0 transitivePeerDependencies: - '@babel/core' From 50089ab8d7f3a1653d4e0681e182beb9fc58a712 Mon Sep 17 00:00:00 2001 From: Ronald A Richardson Date: Sun, 15 Feb 2026 22:36:55 -0500 Subject: [PATCH 07/10] feat: expose meta column and transaction relationships in Orders report schema - Remove 'meta' from excludeColumns to make it available in report builder - Add meta column definition with JSON type for custom fields and metadata - Add Transaction relationship with auto-join support for financial reporting - Include nested TransactionItems relationship for line-item details - Add computed columns for transaction amount aggregates (sum, avg, count) This enables users to query and report on: - Order metadata and custom fields - Transaction financial data (amount, currency, gateway, status) - Transaction line items (details, codes, amounts) - Financial aggregates across orders Resolves the limitation where users could not report on critical financial data and custom metadata associated with orders. --- .../Reporting/FleetOpsReportSchema.php | 130 +++++++++++++++++- 1 file changed, 129 insertions(+), 1 deletion(-) diff --git a/server/src/Support/Reporting/FleetOpsReportSchema.php b/server/src/Support/Reporting/FleetOpsReportSchema.php index 4844177b..c52d5923 100644 --- a/server/src/Support/Reporting/FleetOpsReportSchema.php +++ b/server/src/Support/Reporting/FleetOpsReportSchema.php @@ -47,7 +47,7 @@ protected function createOrdersTable(): Table ->description('Delivery and service orders') ->category('Operations') ->extension('fleet-ops') - ->excludeColumns(['uuid', 'deleted_at', 'meta']) // Hide foreign keys and system columns + ->excludeColumns(['uuid', 'deleted_at']) // Hide foreign keys and system columns ->maxRows(50000) ->cacheTtl(3600) ->columns([ @@ -157,6 +157,12 @@ protected function createOrdersTable(): Table ->description('When the order was last updated') ->filterable() ->sortable(), + + Column::make('meta', 'json') + ->label('Metadata') + ->description('Order metadata and custom fields') + ->searchable() + ->filterable(), ]) ->computedColumns([ Column::count('total_orders', 'id') @@ -178,6 +184,18 @@ protected function createOrdersTable(): Table Column::avg('average_time', 'time') ->label('Average Time') ->description('Average duration per order'), + + Column::sum('total_transaction_amount', 'amount') + ->label('Total Transaction Amount') + ->description('Sum of all transaction amounts'), + + Column::avg('average_transaction_amount', 'amount') + ->label('Average Transaction Amount') + ->description('Average transaction amount per order'), + + Column::count('orders_with_transactions', 'transaction_uuid') + ->label('Orders with Transactions') + ->description('Count of orders that have transactions'), ]) ->relationships([ // Auto-join relationships for seamless access @@ -272,6 +290,116 @@ protected function createOrdersTable(): Table Column::make('phone', 'string')->label('Phone'), Column::make('type', 'string')->label('Type'), ]), + + Relationship::hasAutoJoin('transaction', 'transactions') + ->label('Transaction') + ->localKey('transaction_uuid') + ->foreignKey('uuid') + ->columns([ + Column::make('public_id', 'string') + ->label('Transaction ID') + ->description('Public transaction identifier') + ->searchable() + ->filterable() + ->sortable(), + + Column::make('gateway_transaction_id', 'string') + ->label('Gateway Transaction ID') + ->description('Transaction ID from payment gateway') + ->searchable() + ->filterable() + ->sortable(), + + Column::make('gateway', 'string') + ->label('Payment Gateway') + ->description('Payment gateway used for transaction') + ->filterable() + ->aggregatable(), + + Column::make('amount', 'integer') + ->label('Amount') + ->description('Transaction amount (in cents)') + ->aggregatable() + ->sortable() + ->transformer(function ($value) { + // Convert cents to dollars with 2 decimal places + return number_format($value / 100, 2); + }), + + Column::make('currency', 'string') + ->label('Currency') + ->description('Transaction currency code') + ->filterable() + ->aggregatable(), + + Column::make('description', 'string') + ->label('Description') + ->description('Transaction description') + ->searchable() + ->filterable(), + + Column::make('type', 'string') + ->label('Transaction Type') + ->description('Type of transaction') + ->filterable() + ->aggregatable(), + + Column::make('status', 'string') + ->label('Transaction Status') + ->description('Current transaction status') + ->filterable() + ->aggregatable() + ->transformer(function ($value) { + $labels = [ + 'pending' => 'Pending', + 'completed' => 'Completed', + 'failed' => 'Failed', + 'refunded' => 'Refunded', + 'canceled' => 'Canceled', + ]; + + return $labels[$value] ?? ucfirst($value); + }), + + Column::make('created_at', 'datetime') + ->label('Transaction Date') + ->description('When the transaction was created') + ->filterable() + ->sortable() + ->aggregatable(), + ]) + ->with([ + // Nested relationship for transaction items + Relationship::hasAutoJoin('items', 'transaction_items') + ->label('Transaction Items') + ->localKey('uuid') + ->foreignKey('transaction_uuid') + ->columns([ + Column::make('amount', 'string') + ->label('Item Amount') + ->description('Line item amount') + ->aggregatable() + ->sortable(), + + Column::make('currency', 'string') + ->label('Item Currency') + ->description('Line item currency code') + ->filterable(), + + Column::make('details', 'string') + ->label('Item Details') + ->description('Detailed description of the line item') + ->searchable() + ->filterable(), + + Column::make('code', 'string') + ->label('Item Code') + ->description('Item or SKU code') + ->searchable() + ->filterable() + ->sortable(), + ]), + ]), ]); } From 81e97f69f6190b8ec04e373cc6257e3395e849dd Mon Sep 17 00:00:00 2001 From: Ronald A Richardson Date: Wed, 25 Feb 2026 21:35:13 -0500 Subject: [PATCH 08/10] fix: prevent duplicate driver creation for existing user account When a user_uuid is provided during driver creation, check whether a driver profile already exists for that user within the current company before proceeding. If one is found, return a 400 error response with the message 'This user account already belongs to a driver.' rather than silently creating a duplicate record. The existing path that handles email/phone-based lookups already had this guard in place; this change closes the equivalent gap in the user_uuid-based creation path. --- .../src/Http/Controllers/Internal/v1/DriverController.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/src/Http/Controllers/Internal/v1/DriverController.php b/server/src/Http/Controllers/Internal/v1/DriverController.php index 48a9eb93..08b44103 100644 --- a/server/src/Http/Controllers/Internal/v1/DriverController.php +++ b/server/src/Http/Controllers/Internal/v1/DriverController.php @@ -137,6 +137,14 @@ function (&$request, &$input) { if ($input->has('user_uuid')) { $user = User::where('uuid', $input->get('user_uuid'))->first(); + // Check if a driver profile already exists for this user in the current company + if ($user) { + $existingDriver = Driver::where(['user_uuid' => $user->uuid, 'company_uuid' => session('company')])->first(); + if ($existingDriver) { + return response()->error('This user account already belongs to a driver.'); + } + } + // If user doesn't exist with provided UUID, create new user if (!$user) { $userInput = $input From fc3548f0f5af5876ddf84d46c0aa338e160bcb42 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Thu, 26 Feb 2026 10:41:55 +0800 Subject: [PATCH 09/10] upgraded core dependenxies --- package.json | 4 ++-- pnpm-lock.yaml | 22 +++++++++++----------- server/config/fleetops.php | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 18b0a93a..e0b4b294 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/core": "^7.23.2", - "@fleetbase/ember-core": "^0.3.11", - "@fleetbase/ember-ui": "^0.3.19", + "@fleetbase/ember-core": "^0.3.12", + "@fleetbase/ember-ui": "^0.3.21", "@fleetbase/fleetops-data": "^0.1.25", "@fleetbase/leaflet-routing-machine": "^3.2.17", "@fortawesome/ember-fontawesome": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22d3f5a7..e70aa82b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,11 +12,11 @@ importers: specifier: ^7.23.2 version: 7.27.1 '@fleetbase/ember-core': - specifier: ^0.3.11 - version: 0.3.11(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) + specifier: ^0.3.12 + version: 0.3.12(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) '@fleetbase/ember-ui': - specifier: ^0.3.19 - version: 0.3.19(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(postcss@8.5.3)(rollup@2.79.2)(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8) + specifier: ^0.3.21 + version: 0.3.21(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(postcss@8.5.3)(rollup@2.79.2)(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8) '@fleetbase/fleetops-data': specifier: ^0.1.25 version: 0.1.25(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) @@ -1414,12 +1414,12 @@ packages: peerDependencies: ember-source: '>= 4.0.0' - '@fleetbase/ember-core@0.3.11': - resolution: {integrity: sha512-3ZXlLY9Tz/y07/IEu+ohknus2DhT7cDdtxnPYa8pqlkVGxrAe6FiRxX/vBnShaDFQiwqC9owcIKkK1L7KsKz7A==} + '@fleetbase/ember-core@0.3.12': + resolution: {integrity: sha512-XvX8ND36FOKvNPuXvo5usDlSrH1PkfpWrRGtlU4/bDkYZBcNUH3jJAu4Wfl8vfv1Tg232bMpHjgCYUgDlu1YUg==} engines: {node: '>= 18'} - '@fleetbase/ember-ui@0.3.19': - resolution: {integrity: sha512-nJVf3AUP5JzCTigASzbbq86tkjwkNcsgu+zrT5psL/SIvXsGFx8iRbl5ipF2VCR/umnbSvmUtQ9JZJLjMj9/8w==} + '@fleetbase/ember-ui@0.3.21': + resolution: {integrity: sha512-HodjXkqg29/omCxmf4jwPlZcLhbjaLqDIVTprB9+c65Ekzsca2ag51dmpjjUIJisaZQ+OtHHNpOU0pVAYgaqKA==} engines: {node: '>= 18'} '@fleetbase/fleetops-data@0.1.25': @@ -10804,7 +10804,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@fleetbase/ember-core@0.3.11(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8)': + '@fleetbase/ember-core@0.3.12(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8)': dependencies: '@babel/core': 7.27.1 compress-json: 3.4.0 @@ -10837,7 +10837,7 @@ snapshots: - utf-8-validate - webpack - '@fleetbase/ember-ui@0.3.19(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(postcss@8.5.3)(rollup@2.79.2)(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8)': + '@fleetbase/ember-ui@0.3.21(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(@glimmer/component@1.1.2(@babel/core@7.27.1))(@glimmer/tracking@1.1.2)(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(postcss@8.5.3)(rollup@2.79.2)(tracked-built-ins@3.4.0(@babel/core@7.27.1))(webpack@5.99.8)': dependencies: '@babel/core': 7.27.1 '@ember/render-modifiers': 2.1.0(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)) @@ -10943,7 +10943,7 @@ snapshots: '@fleetbase/fleetops-data@0.1.25(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8)': dependencies: '@babel/core': 7.27.1 - '@fleetbase/ember-core': 0.3.11(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) + '@fleetbase/ember-core': 0.3.12(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.27.1)(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8))(ember-resolver@11.0.1(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.4.1(@babel/core@7.27.1)(@glimmer/component@1.1.2(@babel/core@7.27.1))(rsvp@4.8.5)(webpack@5.99.8))(eslint@8.57.1)(webpack@5.99.8) date-fns: 2.30.0 ember-cli-babel: 8.2.0(@babel/core@7.27.1) ember-cli-htmlbars: 6.3.0 diff --git a/server/config/fleetops.php b/server/config/fleetops.php index 91505999..085b1e03 100644 --- a/server/config/fleetops.php +++ b/server/config/fleetops.php @@ -56,7 +56,7 @@ |-------------------------------------------------------------------------- */ 'navigator' => [ - 'bypass_verification_code' => env('NAVIGATOR_BYPASS_VERIFICATION_CODE', '999000'), + 'bypass_verification_code' => env('SMS_AUTH_BYPASS_CODE', env('NAVIGATOR_BYPASS_VERIFICATION_CODE')), 'app_identifier' => env('NAVIGATOR_APP_IDENTIFIER', 'io.fleetbase.navigator') ], From 29c6666a4cfa3f7066a9297db34e325baa5e7427 Mon Sep 17 00:00:00 2001 From: Ronald A Richardson Date: Wed, 25 Feb 2026 22:01:51 -0500 Subject: [PATCH 10/10] fix: use exception instead of response in onBefore callback for duplicate driver check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous fix returned response()->error() directly from inside the createRecordFromRequest onBefore callback. The trait checks for a JsonResponse return and short-circuits correctly, but the outer createRecord method then passed the JsonResponse object as $record into the Driver resource serializer (line 245), causing: ErrorException: Undefined property: Illuminate\Http\JsonResponse::$id in DelegatesToResource.php The correct approach is to throw a \Exception from within the callback, which propagates out of createRecordFromRequest and is caught by the existing catch (\Exception $e) block, which then returns response()->error($e->getMessage()) — producing the correct 400 JSON error response to the frontend. --- server/src/Http/Controllers/Internal/v1/DriverController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/Http/Controllers/Internal/v1/DriverController.php b/server/src/Http/Controllers/Internal/v1/DriverController.php index 08b44103..1e966f61 100644 --- a/server/src/Http/Controllers/Internal/v1/DriverController.php +++ b/server/src/Http/Controllers/Internal/v1/DriverController.php @@ -141,7 +141,7 @@ function (&$request, &$input) { if ($user) { $existingDriver = Driver::where(['user_uuid' => $user->uuid, 'company_uuid' => session('company')])->first(); if ($existingDriver) { - return response()->error('This user account already belongs to a driver.'); + throw new \Exception('This user account already belongs to a driver.'); } }