@marinoscar/platform-web 0.1.0-next.16 → 0.1.0-next.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +3 -2
- package/dist/ai/headless/schema-presets.js +1 -1
- package/dist/ai/headless/schema-presets.js.map +1 -1
- package/dist/ai/ui/AiConfigPage.d.ts.map +1 -1
- package/dist/ai/ui/AiConfigPage.js +3 -2
- package/dist/ai/ui/AiConfigPage.js.map +1 -1
- package/dist/ai/ui/AiModelsPage.d.ts.map +1 -1
- package/dist/ai/ui/AiModelsPage.js +4 -2
- package/dist/ai/ui/AiModelsPage.js.map +1 -1
- package/dist/ai/ui/OrgAiKeysPage.d.ts.map +1 -1
- package/dist/ai/ui/OrgAiKeysPage.js +3 -2
- package/dist/ai/ui/OrgAiKeysPage.js.map +1 -1
- package/dist/ai/ui/admin/AiGenericProviderCard.d.ts.map +1 -1
- package/dist/ai/ui/admin/AiGenericProviderCard.js +2 -0
- package/dist/ai/ui/admin/AiGenericProviderCard.js.map +1 -1
- package/dist/ai/ui/admin/AiProviderCard.d.ts.map +1 -1
- package/dist/ai/ui/admin/AiProviderCard.js +2 -0
- package/dist/ai/ui/admin/AiProviderCard.js.map +1 -1
- package/dist/ai/ui/admin/AiProviderKeyActions.d.ts.map +1 -1
- package/dist/ai/ui/admin/AiProviderKeyActions.js +2 -1
- package/dist/ai/ui/admin/AiProviderKeyActions.js.map +1 -1
- package/dist/ai/ui/admin/aiModelColumns.d.ts.map +1 -1
- package/dist/ai/ui/admin/aiModelColumns.js +2 -1
- package/dist/ai/ui/admin/aiModelColumns.js.map +1 -1
- package/dist/ai/ui/user/UserAiKeyCard.d.ts.map +1 -1
- package/dist/ai/ui/user/UserAiKeyCard.js +6 -4
- package/dist/ai/ui/user/UserAiKeyCard.js.map +1 -1
- package/dist/android-app/ui/AndroidAppPage.d.ts.map +1 -1
- package/dist/android-app/ui/AndroidAppPage.js +3 -2
- package/dist/android-app/ui/AndroidAppPage.js.map +1 -1
- package/dist/core/host.d.ts +2 -2
- package/dist/core/host.js +2 -2
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/time-zone/format.d.ts +135 -0
- package/dist/core/time-zone/format.d.ts.map +1 -0
- package/dist/core/time-zone/format.js +228 -0
- package/dist/core/time-zone/format.js.map +1 -0
- package/dist/core/time-zone/store.d.ts +93 -0
- package/dist/core/time-zone/store.d.ts.map +1 -0
- package/dist/core/time-zone/store.js +170 -0
- package/dist/core/time-zone/store.js.map +1 -0
- package/dist/credentials/headless/saved-secret.d.ts +1 -1
- package/dist/credentials/headless/saved-secret.d.ts.map +1 -1
- package/dist/credentials/headless/saved-secret.js +2 -1
- package/dist/credentials/headless/saved-secret.js.map +1 -1
- package/dist/credentials/ui/secret-field.d.ts +1 -1
- package/dist/credentials/ui/secret-field.d.ts.map +1 -1
- package/dist/credentials/ui/secret-field.js +2 -0
- package/dist/credentials/ui/secret-field.js.map +1 -1
- package/dist/db-backup/internal/format.d.ts +4 -1
- package/dist/db-backup/internal/format.d.ts.map +1 -1
- package/dist/db-backup/internal/format.js +6 -2
- package/dist/db-backup/internal/format.js.map +1 -1
- package/dist/db-backup/ui/DbBackupConfigPanel.d.ts.map +1 -1
- package/dist/db-backup/ui/DbBackupConfigPanel.js +4 -1
- package/dist/db-backup/ui/DbBackupConfigPanel.js.map +1 -1
- package/dist/db-backup/ui/DbBackupPage.d.ts.map +1 -1
- package/dist/db-backup/ui/DbBackupPage.js +7 -4
- package/dist/db-backup/ui/DbBackupPage.js.map +1 -1
- package/dist/db-backup/ui/DbBackupRestoreDialog.d.ts.map +1 -1
- package/dist/db-backup/ui/DbBackupRestoreDialog.js +4 -1
- package/dist/db-backup/ui/DbBackupRestoreDialog.js.map +1 -1
- package/dist/email/ui/EmailSettingsPage.d.ts.map +1 -1
- package/dist/email/ui/EmailSettingsPage.js +3 -2
- package/dist/email/ui/EmailSettingsPage.js.map +1 -1
- package/dist/email/ui/SesTransportPanel.d.ts.map +1 -1
- package/dist/email/ui/SesTransportPanel.js +3 -1
- package/dist/email/ui/SesTransportPanel.js.map +1 -1
- package/dist/email/ui/SmtpTransportPanel.d.ts.map +1 -1
- package/dist/email/ui/SmtpTransportPanel.js +3 -1
- package/dist/email/ui/SmtpTransportPanel.js.map +1 -1
- package/dist/exports/ui/ExportsList.d.ts.map +1 -1
- package/dist/exports/ui/ExportsList.js +5 -2
- package/dist/exports/ui/ExportsList.js.map +1 -1
- package/dist/host/ui/about-page.d.ts.map +1 -1
- package/dist/host/ui/about-page.js +7 -5
- package/dist/host/ui/about-page.js.map +1 -1
- package/dist/host/ui/maintenance-page.d.ts.map +1 -1
- package/dist/host/ui/maintenance-page.js +3 -2
- package/dist/host/ui/maintenance-page.js.map +1 -1
- package/dist/identity/index.d.ts +1 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +3 -2
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/ui/org/OrgInvitesPanel.d.ts.map +1 -1
- package/dist/identity/ui/org/OrgInvitesPanel.js +2 -0
- package/dist/identity/ui/org/OrgInvitesPanel.js.map +1 -1
- package/dist/identity/ui/org/OrgMembersPanel.d.ts.map +1 -1
- package/dist/identity/ui/org/OrgMembersPanel.js +2 -0
- package/dist/identity/ui/org/OrgMembersPanel.js.map +1 -1
- package/dist/identity/ui/org/orgLabels.d.ts +1 -1
- package/dist/identity/ui/org/orgLabels.d.ts.map +1 -1
- package/dist/identity/ui/org/orgLabels.js +3 -5
- package/dist/identity/ui/org/orgLabels.js.map +1 -1
- package/dist/identity/ui/tokens/CreatePatDialog.d.ts.map +1 -1
- package/dist/identity/ui/tokens/CreatePatDialog.js +3 -1
- package/dist/identity/ui/tokens/CreatePatDialog.js.map +1 -1
- package/dist/identity/ui/tokens/PersonalAccessTokens.d.ts.map +1 -1
- package/dist/identity/ui/tokens/PersonalAccessTokens.js +4 -1
- package/dist/identity/ui/tokens/PersonalAccessTokens.js.map +1 -1
- package/dist/identity/ui/tokens/patColumns.d.ts.map +1 -1
- package/dist/identity/ui/tokens/patColumns.js +7 -5
- package/dist/identity/ui/tokens/patColumns.js.map +1 -1
- package/dist/identity/ui/users/AllowlistTable.d.ts.map +1 -1
- package/dist/identity/ui/users/AllowlistTable.js +4 -1
- package/dist/identity/ui/users/AllowlistTable.js.map +1 -1
- package/dist/identity/ui/users/UserList.d.ts.map +1 -1
- package/dist/identity/ui/users/UserList.js +4 -2
- package/dist/identity/ui/users/UserList.js.map +1 -1
- package/dist/identity/ui/users/allowlistColumns.d.ts.map +1 -1
- package/dist/identity/ui/users/allowlistColumns.js +5 -3
- package/dist/identity/ui/users/allowlistColumns.js.map +1 -1
- package/dist/identity/ui/users/userListColumns.d.ts.map +1 -1
- package/dist/identity/ui/users/userListColumns.js +5 -3
- package/dist/identity/ui/users/userListColumns.js.map +1 -1
- package/dist/jobs/headless/format.d.ts +4 -1
- package/dist/jobs/headless/format.d.ts.map +1 -1
- package/dist/jobs/headless/format.js +6 -2
- package/dist/jobs/headless/format.js.map +1 -1
- package/dist/jobs/ui/JobInsightsPage.d.ts.map +1 -1
- package/dist/jobs/ui/JobInsightsPage.js +2 -1
- package/dist/jobs/ui/JobInsightsPage.js.map +1 -1
- package/dist/jobs/ui/JobsPage.d.ts.map +1 -1
- package/dist/jobs/ui/JobsPage.js +4 -2
- package/dist/jobs/ui/JobsPage.js.map +1 -1
- package/dist/nodes/headless/format.d.ts +4 -1
- package/dist/nodes/headless/format.d.ts.map +1 -1
- package/dist/nodes/headless/format.js +6 -2
- package/dist/nodes/headless/format.js.map +1 -1
- package/dist/nodes/ui/NodeCredentialRevealDialog.d.ts.map +1 -1
- package/dist/nodes/ui/NodeCredentialRevealDialog.js +3 -1
- package/dist/nodes/ui/NodeCredentialRevealDialog.js.map +1 -1
- package/dist/nodes/ui/NodeCredentials.d.ts.map +1 -1
- package/dist/nodes/ui/NodeCredentials.js +4 -1
- package/dist/nodes/ui/NodeCredentials.js.map +1 -1
- package/dist/nodes/ui/NodeVitalsDialog.d.ts.map +1 -1
- package/dist/nodes/ui/NodeVitalsDialog.js +2 -0
- package/dist/nodes/ui/NodeVitalsDialog.js.map +1 -1
- package/dist/nodes/ui/WorkersPage.d.ts.map +1 -1
- package/dist/nodes/ui/WorkersPage.js +4 -2
- package/dist/nodes/ui/WorkersPage.js.map +1 -1
- package/dist/notifications/headless/broadcasts.d.ts +26 -17
- package/dist/notifications/headless/broadcasts.d.ts.map +1 -1
- package/dist/notifications/headless/broadcasts.js +76 -36
- package/dist/notifications/headless/broadcasts.js.map +1 -1
- package/dist/notifications/ui/BroadcastComposer.d.ts.map +1 -1
- package/dist/notifications/ui/BroadcastComposer.js +11 -6
- package/dist/notifications/ui/BroadcastComposer.js.map +1 -1
- package/dist/notifications/ui/BroadcastDetailDialog.d.ts.map +1 -1
- package/dist/notifications/ui/BroadcastDetailDialog.js +2 -0
- package/dist/notifications/ui/BroadcastDetailDialog.js.map +1 -1
- package/dist/notifications/ui/BroadcastsPage.d.ts.map +1 -1
- package/dist/notifications/ui/BroadcastsPage.js +4 -2
- package/dist/notifications/ui/BroadcastsPage.js.map +1 -1
- package/dist/notifications/ui/NotificationBell.d.ts.map +1 -1
- package/dist/notifications/ui/NotificationBell.js +3 -1
- package/dist/notifications/ui/NotificationBell.js.map +1 -1
- package/dist/notifications/ui/PushConfigPage.d.ts.map +1 -1
- package/dist/notifications/ui/PushConfigPage.js +4 -3
- package/dist/notifications/ui/PushConfigPage.js.map +1 -1
- package/dist/notifications/ui/PushTestPanel.d.ts.map +1 -1
- package/dist/notifications/ui/PushTestPanel.js +6 -3
- package/dist/notifications/ui/PushTestPanel.js.map +1 -1
- package/dist/notifications/ui/SystemSettingsSection.d.ts.map +1 -1
- package/dist/notifications/ui/SystemSettingsSection.js +3 -2
- package/dist/notifications/ui/SystemSettingsSection.js.map +1 -1
- package/dist/notifications/ui/broadcastsTable.d.ts +4 -1
- package/dist/notifications/ui/broadcastsTable.d.ts.map +1 -1
- package/dist/notifications/ui/broadcastsTable.js +6 -2
- package/dist/notifications/ui/broadcastsTable.js.map +1 -1
- package/dist/settings/headless/use-user-settings.d.ts +7 -0
- package/dist/settings/headless/use-user-settings.d.ts.map +1 -1
- package/dist/settings/headless/use-user-settings.js +12 -4
- package/dist/settings/headless/use-user-settings.js.map +1 -1
- package/dist/settings/ui/ProfileSettings.d.ts +13 -4
- package/dist/settings/ui/ProfileSettings.d.ts.map +1 -1
- package/dist/settings/ui/ProfileSettings.js +15 -2
- package/dist/settings/ui/ProfileSettings.js.map +1 -1
- package/dist/settings/ui/UserProfilePage.d.ts +2 -2
- package/dist/settings/ui/UserProfilePage.js +3 -3
- package/dist/settings/ui/UserProfilePage.js.map +1 -1
- package/dist/settings/ui/UserSettingsSection.d.ts +5 -2
- package/dist/settings/ui/UserSettingsSection.d.ts.map +1 -1
- package/dist/settings/ui/UserSettingsSection.js.map +1 -1
- package/dist/sharing/internal/format.d.ts +1 -0
- package/dist/sharing/internal/format.d.ts.map +1 -1
- package/dist/sharing/internal/format.js +3 -6
- package/dist/sharing/internal/format.js.map +1 -1
- package/dist/sharing/ui/GroupDetailPage.d.ts.map +1 -1
- package/dist/sharing/ui/GroupDetailPage.js +2 -0
- package/dist/sharing/ui/GroupDetailPage.js.map +1 -1
- package/dist/sharing/ui/PendingGroupInvites.d.ts.map +1 -1
- package/dist/sharing/ui/PendingGroupInvites.js +2 -0
- package/dist/sharing/ui/PendingGroupInvites.js.map +1 -1
- package/dist/sharing/ui/ShareDialog.d.ts.map +1 -1
- package/dist/sharing/ui/ShareDialog.js +2 -0
- package/dist/sharing/ui/ShareDialog.js.map +1 -1
- package/dist/sharing/ui/SharedWithMeList.d.ts.map +1 -1
- package/dist/sharing/ui/SharedWithMeList.js +2 -0
- package/dist/sharing/ui/SharedWithMeList.js.map +1 -1
- package/dist/storage/ui/S3FamilyDriverPanel.d.ts.map +1 -1
- package/dist/storage/ui/S3FamilyDriverPanel.js +3 -1
- package/dist/storage/ui/S3FamilyDriverPanel.js.map +1 -1
- package/dist/storage/ui/StorageConfigPage.d.ts.map +1 -1
- package/dist/storage/ui/StorageConfigPage.js +3 -2
- package/dist/storage/ui/StorageConfigPage.js.map +1 -1
- package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts +1 -1
- package/dist/telemetry/headless/lib/format.d.ts +4 -2
- package/dist/telemetry/headless/lib/format.d.ts.map +1 -1
- package/dist/telemetry/headless/lib/format.js +8 -6
- package/dist/telemetry/headless/lib/format.js.map +1 -1
- package/dist/telemetry/ui/components/TelemetryConnectionSection.d.ts.map +1 -1
- package/dist/telemetry/ui/components/TelemetryConnectionSection.js +3 -1
- package/dist/telemetry/ui/components/TelemetryConnectionSection.js.map +1 -1
- package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.js +2 -0
- package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.js.map +1 -1
- package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.js +2 -0
- package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.js.map +1 -1
- package/dist/telemetry/ui/components/dashboard/EventsFeed.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/EventsFeed.js +3 -0
- package/dist/telemetry/ui/components/dashboard/EventsFeed.js.map +1 -1
- package/dist/telemetry/ui/components/dashboard/KpiTiles.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/KpiTiles.js +2 -0
- package/dist/telemetry/ui/components/dashboard/KpiTiles.js.map +1 -1
- package/dist/telemetry/ui/components/dashboard/LogSeverityChart.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/LogSeverityChart.js +2 -0
- package/dist/telemetry/ui/components/dashboard/LogSeverityChart.js.map +1 -1
- package/dist/telemetry/ui/components/dashboard/TopProblems.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/TopProblems.js +2 -0
- package/dist/telemetry/ui/components/dashboard/TopProblems.js.map +1 -1
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.js +2 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.js.map +1 -1
- package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.js +2 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.js.map +1 -1
- package/dist/telemetry/ui/pages/TelemetrySettingsPage.d.ts.map +1 -1
- package/dist/telemetry/ui/pages/TelemetrySettingsPage.js +3 -2
- package/dist/telemetry/ui/pages/TelemetrySettingsPage.js.map +1 -1
- package/dist/timezone/headless/catalog.d.ts +82 -0
- package/dist/timezone/headless/catalog.d.ts.map +1 -0
- package/dist/timezone/headless/catalog.js +192 -0
- package/dist/timezone/headless/catalog.js.map +1 -0
- package/dist/timezone/headless/format.d.ts +3 -0
- package/dist/timezone/headless/format.d.ts.map +1 -0
- package/dist/timezone/headless/format.js +5 -0
- package/dist/timezone/headless/format.js.map +1 -0
- package/dist/timezone/headless/index.d.ts +10 -0
- package/dist/timezone/headless/index.d.ts.map +1 -0
- package/dist/timezone/headless/index.js +10 -0
- package/dist/timezone/headless/index.js.map +1 -0
- package/dist/timezone/headless/map-data.d.ts +13 -0
- package/dist/timezone/headless/map-data.d.ts.map +1 -0
- package/dist/timezone/headless/map-data.js +530 -0
- package/dist/timezone/headless/map-data.js.map +1 -0
- package/dist/timezone/headless/map-geometry.d.ts +77 -0
- package/dist/timezone/headless/map-geometry.d.ts.map +1 -0
- package/dist/timezone/headless/map-geometry.js +104 -0
- package/dist/timezone/headless/map-geometry.js.map +1 -0
- package/dist/timezone/headless/store.d.ts +2 -0
- package/dist/timezone/headless/store.d.ts.map +1 -0
- package/dist/timezone/headless/store.js +6 -0
- package/dist/timezone/headless/store.js.map +1 -0
- package/dist/timezone/headless/sync.d.ts +39 -0
- package/dist/timezone/headless/sync.d.ts.map +1 -0
- package/dist/timezone/headless/sync.js +66 -0
- package/dist/timezone/headless/sync.js.map +1 -0
- package/dist/timezone/index.d.ts +4 -0
- package/dist/timezone/index.d.ts.map +1 -0
- package/dist/timezone/index.js +11 -0
- package/dist/timezone/index.js.map +1 -0
- package/dist/timezone/internal/use-now.d.ts +3 -0
- package/dist/timezone/internal/use-now.d.ts.map +1 -0
- package/dist/timezone/internal/use-now.js +13 -0
- package/dist/timezone/internal/use-now.js.map +1 -0
- package/dist/timezone/ui/TimeZoneField.d.ts +33 -0
- package/dist/timezone/ui/TimeZoneField.d.ts.map +1 -0
- package/dist/timezone/ui/TimeZoneField.js +50 -0
- package/dist/timezone/ui/TimeZoneField.js.map +1 -0
- package/dist/timezone/ui/TimeZoneMap.d.ts +38 -0
- package/dist/timezone/ui/TimeZoneMap.d.ts.map +1 -0
- package/dist/timezone/ui/TimeZoneMap.js +231 -0
- package/dist/timezone/ui/TimeZoneMap.js.map +1 -0
- package/dist/timezone/ui/TimeZonePickerDialog.d.ts +34 -0
- package/dist/timezone/ui/TimeZonePickerDialog.d.ts.map +1 -0
- package/dist/timezone/ui/TimeZonePickerDialog.js +85 -0
- package/dist/timezone/ui/TimeZonePickerDialog.js.map +1 -0
- package/dist/timezone/ui/index.d.ts +7 -0
- package/dist/timezone/ui/index.d.ts.map +1 -0
- package/dist/timezone/ui/index.js +7 -0
- package/dist/timezone/ui/index.js.map +1 -0
- package/package.json +10 -2
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// page never reads "1500ms" beside one reading "1.5 s" for the same number.
|
|
8
8
|
// Pure functions, no markup, so they live in the headless entry.
|
|
9
9
|
// =============================================================================
|
|
10
|
+
import { NUMERIC_DATE_TIME, formatDateTime as formatZonedDateTime } from '../../core/index.js';
|
|
10
11
|
/**
|
|
11
12
|
* A duration, in the largest unit that still says something: `850 ms`,
|
|
12
13
|
* `1.5 s`, `4m 05s`, `2h 03m`, `3d 4h`.
|
|
@@ -40,7 +41,10 @@ export function formatDuration(ms) {
|
|
|
40
41
|
return `${days}d ${hours % 24}h`;
|
|
41
42
|
}
|
|
42
43
|
/**
|
|
43
|
-
* A timestamp in the viewer's locale
|
|
44
|
+
* A timestamp in the viewer's locale and display time zone (the user's
|
|
45
|
+
* `profile.timezone`, else the device's), or an em dash when the API sent `null`.
|
|
46
|
+
* A component that renders it calls `useDisplayTimeZone()` so a zone change
|
|
47
|
+
* re-renders it.
|
|
44
48
|
*
|
|
45
49
|
* @param value - an ISO 8601 timestamp, or `null`.
|
|
46
50
|
* @returns the localized date and time, or an em dash.
|
|
@@ -48,7 +52,7 @@ export function formatDuration(ms) {
|
|
|
48
52
|
* @stability experimental
|
|
49
53
|
*/
|
|
50
54
|
export function formatDateTime(value) {
|
|
51
|
-
return value
|
|
55
|
+
return formatZonedDateTime(value, NUMERIC_DATE_TIME);
|
|
52
56
|
}
|
|
53
57
|
/**
|
|
54
58
|
* The first 8 characters of a UUID: enough to tell two rows apart by eye.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/nodes/headless/format.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oDAAoD;AACpD,gFAAgF;AAChF,EAAE;AACF,gFAAgF;AAChF,+FAA+F;AAC/F,4EAA4E;AAC5E,iEAAiE;AACjE,gFAAgF;AAEhF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,EAA6B;IAC1D,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IACxE,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;IAE7C,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,YAAY,GAAG,EAAE;QAAE,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAE5E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;IACtC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAEjF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC;AACnC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/nodes/headless/format.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oDAAoD;AACpD,gFAAgF;AAChF,EAAE;AACF,gFAAgF;AAChF,+FAA+F;AAC/F,4EAA4E;AAC5E,iEAAiE;AACjE,gFAAgF;AAEhF,OAAO,EAAE,iBAAiB,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/F;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,EAA6B;IAC1D,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IACxE,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;IAE7C,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,YAAY,GAAG,EAAE;QAAE,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAE5E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;IACtC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAEjF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC;AACnC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,OAAO,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeCredentialRevealDialog.d.ts","sourceRoot":"","sources":["../../../src/nodes/ui/NodeCredentialRevealDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAmBH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeCredentialRevealDialog.d.ts","sourceRoot":"","sources":["../../../src/nodes/ui/NodeCredentialRevealDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAmBH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGlE,UAAU,+BAA+B;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yEAAyE;IACzE,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CAAC,EACzC,IAAI,EACJ,OAAO,EACP,UAAU,GACX,EAAE,+BAA+B,+BAsFjC"}
|
|
@@ -39,7 +39,9 @@ import { useState } from 'react';
|
|
|
39
39
|
import { Alert, Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, InputAdornment, TextField, Tooltip, Typography, } from '@mui/material';
|
|
40
40
|
import CheckIcon from '@mui/icons-material/Check';
|
|
41
41
|
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
|
|
42
|
+
import { NUMERIC_DATE_TIME, formatDateTime, useDisplayTimeZone } from '../../core/index.js';
|
|
42
43
|
export function NodeCredentialRevealDialog({ open, onClose, credential, }) {
|
|
44
|
+
useDisplayTimeZone(); // "Expires" renders in the display zone.
|
|
43
45
|
const [copied, setCopied] = useState(false);
|
|
44
46
|
const handleCopy = async () => {
|
|
45
47
|
if (!credential)
|
|
@@ -66,7 +68,7 @@ export function NodeCredentialRevealDialog({ open, onClose, credential, }) {
|
|
|
66
68
|
endAdornment: (_jsx(InputAdornment, { position: "end", children: _jsx(Tooltip, { title: copied ? 'Copied' : 'Copy credential', children: _jsx(IconButton, { onClick: () => void handleCopy(), edge: "end", "aria-label": "copy node credential", children: copied ? _jsx(CheckIcon, { color: "success" }) : _jsx(ContentCopyIcon, {}) }) }) })),
|
|
67
69
|
},
|
|
68
70
|
} }), copied && (_jsx(Alert, { severity: "success", sx: { mt: 1 }, children: "Credential copied to clipboard" })), credential && (_jsxs(Typography, { variant: "body2", color: "text.secondary", sx: { mt: 2 }, children: [_jsx("strong", { children: credential.name }), " \u00B7", ' ', credential.expiresAt
|
|
69
|
-
? `Expires ${
|
|
71
|
+
? `Expires ${formatDateTime(credential.expiresAt, NUMERIC_DATE_TIME)}`
|
|
70
72
|
: 'Never expires — revoke it to cut the node off'] })), _jsx(Typography, { variant: "body2", color: "text.secondary", sx: { mt: 1 }, children: "Give it to the worker as its node credential. It can reach the worker API and nothing else, and it cannot create further credentials." })] }) }), _jsx(DialogActions, { children: _jsx(Button, { variant: "contained", onClick: handleClose, children: "Done" }) })] }));
|
|
71
73
|
}
|
|
72
74
|
//# sourceMappingURL=NodeCredentialRevealDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeCredentialRevealDialog.js","sourceRoot":"","sources":["../../../src/nodes/ui/NodeCredentialRevealDialog.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,KAAK,EACL,GAAG,EACH,MAAM,EACN,MAAM,EACN,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,SAAS,MAAM,2BAA2B,CAAC;AAClD,OAAO,eAAe,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeCredentialRevealDialog.js","sourceRoot":"","sources":["../../../src/nodes/ui/NodeCredentialRevealDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeCredentials.d.ts","sourceRoot":"","sources":["../../../src/nodes/ui/NodeCredentials.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAaH,OAAO,KAAK,EACV,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeCredentials.d.ts","sourceRoot":"","sources":["../../../src/nodes/ui/NodeCredentials.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAaH,OAAO,KAAK,EACV,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAO9B;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,8CAA8C;IAC9C,SAAS,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,gHAAgH;IAChH,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;IACtF,0DAA0D;IAC1D,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C;;;;OAIG;IACH,GAAG,EAAE,IAAI,CAAC;CACX;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,GAAG,GACJ,EAAE,oBAAoB,+BAoItB"}
|
|
@@ -57,6 +57,7 @@ import { NODE_CREDENTIALS_TABLE_ID, buildNodeCredentialColumns, } from './worker
|
|
|
57
57
|
import { nodeCredentialStatus } from '../headless/index.js';
|
|
58
58
|
import { CreateNodeCredentialDialog } from './CreateNodeCredentialDialog.js';
|
|
59
59
|
import { NodeCredentialRevealDialog } from './NodeCredentialRevealDialog.js';
|
|
60
|
+
import { useDisplayTimeZone } from '../../core/index.js';
|
|
60
61
|
/**
|
|
61
62
|
* The node-credential section: the credential table, the create dialog and the
|
|
62
63
|
* show-once reveal dialog. It is the Worker Nodes page's second half and is
|
|
@@ -80,7 +81,9 @@ export function NodeCredentials({ credentials, isLoading, canWrite, isWorking, o
|
|
|
80
81
|
* displays it.
|
|
81
82
|
*/
|
|
82
83
|
const [revealed, setRevealed] = useState(null);
|
|
83
|
-
|
|
84
|
+
// The date columns render in the display zone: rebuild on a zone change.
|
|
85
|
+
const timeZone = useDisplayTimeZone();
|
|
86
|
+
const columns = useMemo(() => buildNodeCredentialColumns(now), [now, timeZone]);
|
|
84
87
|
const rowActions = useMemo(() => {
|
|
85
88
|
// The ARRAY is gated, never a rendered-then-hidden control: a reader
|
|
86
89
|
// without `nodes:write` gets an array that does not CONTAIN this action, so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeCredentials.js","sourceRoot":"","sources":["../../../src/nodes/ui/NodeCredentials.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,OAAO,MAAM,yBAAyB,CAAC;AAC9C,OAAO,SAAS,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAE,UAAU,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAM5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"NodeCredentials.js","sourceRoot":"","sources":["../../../src/nodes/ui/NodeCredentials.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeVitalsDialog.d.ts","sourceRoot":"","sources":["../../../src/nodes/ui/NodeVitalsDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"NodeVitalsDialog.d.ts","sourceRoot":"","sources":["../../../src/nodes/ui/NodeVitalsDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAyBH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAe3E,UAAU,qBAAqB;IAC7B,8CAA8C;IAC9C,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,8DAA8D;IAC9D,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,sEAAsE;IACtE,WAAW,CAAC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC;CAClD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC,qCAAqC;IACrC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,EAAE;IAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAWjF,CAAC;AAsDF,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,qBAAqB,+BAuM1F"}
|
|
@@ -19,6 +19,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
19
19
|
*/
|
|
20
20
|
import { Alert, Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, LinearProgress, Stack, Table, TableBody, TableCell, TableHead, TableRow, Tooltip, Typography, useMediaQuery, useTheme, } from '@mui/material';
|
|
21
21
|
import { useId } from 'react';
|
|
22
|
+
import { useDisplayTimeZone } from '../../core/index.js';
|
|
22
23
|
import { formatDateTime, nodeCapabilityItems, nodeVitalRows } from '../headless/index.js';
|
|
23
24
|
import { areVitalsStale, diskFreeRatio, formatBytes, formatCpu, formatEventLoopDelay, formatOptionalBytes, formatPercent, formatUptime, formatVitalsReported, isLowDisk, ratio, } from './workerVitals.js';
|
|
24
25
|
/** The counters shown, in reading order, with the words an operator uses. */
|
|
@@ -45,6 +46,7 @@ function formatCount(value) {
|
|
|
45
46
|
return value === undefined ? '—' : value.toLocaleString();
|
|
46
47
|
}
|
|
47
48
|
export function NodeVitalsDialog({ node, now, onClose, VitalsPanel }) {
|
|
49
|
+
useDisplayTimeZone(); // "Vitals reported" renders in the display zone.
|
|
48
50
|
const theme = useTheme();
|
|
49
51
|
// The same `down('sm')` compact-window read the settings UI uses (CLAUDE.md
|
|
50
52
|
// rule 5): a full screen on a phone rather than a dialog that scrolls inside
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeVitalsDialog.js","sourceRoot":"","sources":["../../../src/nodes/ui/NodeVitalsDialog.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,KAAK,EACL,GAAG,EACH,MAAM,EACN,MAAM,EACN,aAAa,EACb,aAAa,EACb,WAAW,EACX,cAAc,EACd,KAAK,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,UAAU,EACV,aAAa,EACb,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeVitalsDialog.js","sourceRoot":"","sources":["../../../src/nodes/ui/NodeVitalsDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkersPage.d.ts","sourceRoot":"","sources":["../../../src/nodes/ui/WorkersPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAe1C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQ/E,OAAO,KAAK,EAAE,gBAAgB,EAAuB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAI9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAO5D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAiB,SAAQ,aAAa,EAAE,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3G,6CAA6C;IAC7C,MAAM,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACxC,gEAAgE;IAChE,WAAW,CAAC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC;CAClD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAwCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,KAAK,GAAE,gBAAqB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"WorkersPage.d.ts","sourceRoot":"","sources":["../../../src/nodes/ui/WorkersPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAe1C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQ/E,OAAO,KAAK,EAAE,gBAAgB,EAAuB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAI9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAO5D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAiB,SAAQ,aAAa,EAAE,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3G,6CAA6C;IAC7C,MAAM,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACxC,gEAAgE;IAChE,WAAW,CAAC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC;CAClD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAwCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,KAAK,GAAE,gBAAqB,GAAG,YAAY,CAkUtE"}
|
|
@@ -95,7 +95,7 @@ import { Alert, Box, Container, Paper, Snackbar, Stack, Typography, } from '@mui
|
|
|
95
95
|
import DeleteIcon from '@mui/icons-material/Delete';
|
|
96
96
|
import MonitorHeartIcon from '@mui/icons-material/MonitorHeart';
|
|
97
97
|
import { Navigate } from 'react-router-dom';
|
|
98
|
-
import { usePlatformViewer, useTableSlotColumns } from '../../core/index.js';
|
|
98
|
+
import { useDisplayTimeZone, usePlatformViewer, useTableSlotColumns } from '../../core/index.js';
|
|
99
99
|
import { WORKER_NODES_POLL_INTERVAL_MS, useNodeActions, useNodeCredentials, useVisiblePolling, useWorkerNodes, } from '../headless/index.js';
|
|
100
100
|
import { WORKER_NODES_PAGE_DESCRIPTION as PAGE_DESCRIPTION, WORKER_NODES_PAGE_TITLE as PAGE_TITLE } from './copy.js';
|
|
101
101
|
import { NodeCredentials } from './NodeCredentials.js';
|
|
@@ -182,7 +182,9 @@ export function WorkersPage(props = {}) {
|
|
|
182
182
|
}, [refresh, refreshCredentials]);
|
|
183
183
|
const actions = useNodeActions(refreshAll);
|
|
184
184
|
useVisiblePolling(refreshAll, WORKER_NODES_POLL_INTERVAL_MS);
|
|
185
|
-
|
|
185
|
+
// The time columns render in the display zone: rebuild on a zone change.
|
|
186
|
+
const timeZone = useDisplayTimeZone();
|
|
187
|
+
const baseColumns = useMemo(() => buildWorkerNodeColumns(renderedAt), [renderedAt, timeZone]);
|
|
186
188
|
const columns = useTableSlotColumns(baseColumns, slots);
|
|
187
189
|
const canWrite = hasPermission('nodes:write');
|
|
188
190
|
const rowActions = useMemo(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkersPage.js","sourceRoot":"","sources":["../../../src/nodes/ui/WorkersPage.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EACL,KAAK,EACL,GAAG,EACH,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,UAAU,MAAM,4BAA4B,CAAC;AACpD,OAAO,gBAAgB,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkersPage.js","sourceRoot":"","sources":["../../../src/nodes/ui/WorkersPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -238,35 +238,44 @@ export declare function isBroadcastResumable(broadcast: Pick<Broadcast, 'status'
|
|
|
238
238
|
*/
|
|
239
239
|
export declare function isBroadcastDeletable(broadcast: Pick<Broadcast, 'status'>): boolean;
|
|
240
240
|
/**
|
|
241
|
-
* A `datetime-local` value
|
|
241
|
+
* A `datetime-local` value, read as wall-clock time in `timeZone` → the
|
|
242
|
+
* ISO-8601 instant the API stores.
|
|
242
243
|
*
|
|
243
|
-
*
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
* the admin mean by that wall-clock time" question being asked.
|
|
244
|
+
* The value is parsed field by field (never `new Date(value)`, which would read
|
|
245
|
+
* it in the browser's zone), then resolved against the zone's offset AT that
|
|
246
|
+
* moment, so a date either side of a DST change gets its own offset. A wall
|
|
247
|
+
* clock that occurs twice (the autumn overlap) resolves to the earlier
|
|
248
|
+
* instant; one that never occurs (the spring gap) moves forward by the gap,
|
|
249
|
+
* as a native control does: `02:30` on a spring-forward night is `03:30`.
|
|
250
250
|
*
|
|
251
251
|
* Returns `null` for an empty or unparseable value rather than the string
|
|
252
252
|
* `"Invalid Date"`, so a caller cannot post garbage the API will reject with a
|
|
253
253
|
* message about a malformed date the admin never typed.
|
|
254
|
+
*
|
|
255
|
+
* @param value - the control's value.
|
|
256
|
+
* @param timeZone - the zone the wall clock is in; default the display zone.
|
|
254
257
|
*/
|
|
255
|
-
export declare function localInputToIso(value: string): string | null;
|
|
258
|
+
export declare function localInputToIso(value: string, timeZone?: string): string | null;
|
|
256
259
|
/**
|
|
257
|
-
* An ISO-8601 instant → the `datetime-local` value that displays it
|
|
260
|
+
* An ISO-8601 instant → the `datetime-local` value that displays it in
|
|
261
|
+
* `timeZone`.
|
|
258
262
|
*
|
|
259
|
-
* ⚠
|
|
263
|
+
* ⚠ SHIFTED BY THE ZONE'S OFFSET, DELIBERATELY. The tempting one-liner —
|
|
260
264
|
* `new Date(iso).toISOString().slice(0, 16)` — is the classic bug in this
|
|
261
265
|
* conversion: `toISOString` is UTC, so an admin in UTC+2 who scheduled a send
|
|
262
266
|
* for 09:00 reopens the form and reads 07:00, "corrects" it, and moves the
|
|
263
267
|
* broadcast two hours earlier. The offset is invisible in the control, so
|
|
264
|
-
* nothing on screen would have told them.
|
|
268
|
+
* nothing on screen would have told them. Here the instant is moved by the
|
|
269
|
+
* zone's offset at that moment and read with the UTC getters, which is the
|
|
270
|
+
* wall clock in the zone.
|
|
271
|
+
*
|
|
272
|
+
* The year is padded to four digits so a year before 1000 cannot produce a
|
|
273
|
+
* value the input silently rejects. Round-trips with `localInputToIso` (same
|
|
274
|
+
* zone) to the minute — seconds are truncated, which is all a
|
|
275
|
+
* minute-resolution control can represent.
|
|
265
276
|
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
* Round-trips with `localInputToIso` to the minute — seconds are truncated,
|
|
269
|
-
* which is all a minute-resolution control can represent.
|
|
277
|
+
* @param iso - the instant.
|
|
278
|
+
* @param timeZone - the zone to display it in; default the display zone.
|
|
270
279
|
*/
|
|
271
|
-
export declare function isoToLocalInput(iso: string): string;
|
|
280
|
+
export declare function isoToLocalInput(iso: string, timeZone?: string): string;
|
|
272
281
|
//# sourceMappingURL=broadcasts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcasts.d.ts","sourceRoot":"","sources":["../../../src/notifications/headless/broadcasts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAWtD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,6CAA6C,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"broadcasts.d.ts","sourceRoot":"","sources":["../../../src/notifications/headless/broadcasts.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,7 @@ import { api } from './api.js';
|
|
|
58
58
|
// validator it previews. `BROADCAST_CHUNK_SIZE` is the fan-out's page size,
|
|
59
59
|
// which the cancel confirmation names out loud.
|
|
60
60
|
export { BROADCAST_BODY_MAX, BROADCAST_CHUNK_SIZE, BROADCAST_CTA_LABEL_MAX, BROADCAST_LINK_MAX, BROADCAST_STATUSES, BROADCAST_TITLE_MAX, } from '@marinoscar/platform-contract/notifications';
|
|
61
|
+
import { getDisplayTimeZone, getTimeZoneOffsetMinutes } from '../../core/index.js';
|
|
61
62
|
export async function getBroadcasts(params = {}) {
|
|
62
63
|
const query = new URLSearchParams();
|
|
63
64
|
if (params.page)
|
|
@@ -171,65 +172,104 @@ export function isBroadcastDeletable(broadcast) {
|
|
|
171
172
|
// `datetime-local` ⇄ ISO-8601
|
|
172
173
|
// =============================================================================
|
|
173
174
|
//
|
|
174
|
-
// A NATIVE `<input type="datetime-local">` VALUE IS
|
|
175
|
-
//
|
|
176
|
-
//
|
|
177
|
-
//
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
//
|
|
181
|
-
//
|
|
175
|
+
// A NATIVE `<input type="datetime-local">` VALUE IS WALL-CLOCK WITH NO ZONE.
|
|
176
|
+
// The string `"2026-03-08T02:30"` means half past two in the morning in SOME
|
|
177
|
+
// zone, and carries nothing that says which. The API, correctly, takes an
|
|
178
|
+
// instant. These two functions are the entire bridge between the two
|
|
179
|
+
// representations, and they are separated out here — rather than inlined in
|
|
180
|
+
// the composer — so they can be unit-tested directly, including across a DST
|
|
181
|
+
// boundary, which is the case that breaks every naive implementation.
|
|
182
|
+
//
|
|
183
|
+
// The zone is the administrator's DISPLAY zone (`getDisplayTimeZone()` of
|
|
184
|
+
// core: their `profile.timezone`, else the device's), not the browser's: every
|
|
185
|
+
// other time on the page renders in it, so the field must too, or a user who
|
|
186
|
+
// chose Tokyo on a laptop set to Paris types 09:00 and schedules 16:00 Tokyo.
|
|
187
|
+
/** `YYYY-MM-DDTHH:mm`, optionally with seconds and milliseconds (the shapes a `datetime-local` control produces). */
|
|
188
|
+
const LOCAL_INPUT = /^(\d{4,})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,3}))?)?$/;
|
|
189
|
+
const MINUTE_MS = 60_000;
|
|
182
190
|
/**
|
|
183
|
-
* A `datetime-local` value
|
|
191
|
+
* A `datetime-local` value, read as wall-clock time in `timeZone` → the
|
|
192
|
+
* ISO-8601 instant the API stores.
|
|
184
193
|
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
* the admin mean by that wall-clock time" question being asked.
|
|
194
|
+
* The value is parsed field by field (never `new Date(value)`, which would read
|
|
195
|
+
* it in the browser's zone), then resolved against the zone's offset AT that
|
|
196
|
+
* moment, so a date either side of a DST change gets its own offset. A wall
|
|
197
|
+
* clock that occurs twice (the autumn overlap) resolves to the earlier
|
|
198
|
+
* instant; one that never occurs (the spring gap) moves forward by the gap,
|
|
199
|
+
* as a native control does: `02:30` on a spring-forward night is `03:30`.
|
|
192
200
|
*
|
|
193
201
|
* Returns `null` for an empty or unparseable value rather than the string
|
|
194
202
|
* `"Invalid Date"`, so a caller cannot post garbage the API will reject with a
|
|
195
203
|
* message about a malformed date the admin never typed.
|
|
204
|
+
*
|
|
205
|
+
* @param value - the control's value.
|
|
206
|
+
* @param timeZone - the zone the wall clock is in; default the display zone.
|
|
196
207
|
*/
|
|
197
|
-
export function localInputToIso(value) {
|
|
198
|
-
|
|
208
|
+
export function localInputToIso(value, timeZone = getDisplayTimeZone()) {
|
|
209
|
+
const match = value ? LOCAL_INPUT.exec(value) : null;
|
|
210
|
+
if (!match)
|
|
199
211
|
return null;
|
|
200
|
-
const
|
|
201
|
-
|
|
212
|
+
const [year, month, day, hours, minutes] = match.slice(1, 6).map(Number);
|
|
213
|
+
const seconds = Number(match[6] ?? 0);
|
|
214
|
+
const millis = Number((match[7] ?? '0').padEnd(3, '0'));
|
|
215
|
+
const wall = new Date(0);
|
|
216
|
+
wall.setUTCFullYear(year, month - 1, day);
|
|
217
|
+
wall.setUTCHours(hours, minutes, seconds, millis);
|
|
218
|
+
// An overflowing field (month 13, February 30th, 25:00) is not a date the admin typed.
|
|
219
|
+
if (wall.getUTCFullYear() !== year ||
|
|
220
|
+
wall.getUTCMonth() !== month - 1 ||
|
|
221
|
+
wall.getUTCDate() !== day ||
|
|
222
|
+
wall.getUTCHours() !== hours ||
|
|
223
|
+
wall.getUTCMinutes() !== minutes) {
|
|
202
224
|
return null;
|
|
203
|
-
|
|
225
|
+
}
|
|
226
|
+
const wallMs = wall.getTime();
|
|
227
|
+
const offsetAt = (ms) => getTimeZoneOffsetMinutes(timeZone, new Date(ms)) * MINUTE_MS;
|
|
228
|
+
const first = wallMs - offsetAt(wallMs);
|
|
229
|
+
const second = wallMs - offsetAt(first);
|
|
230
|
+
// Consistent when the offset at the candidate is the one used to reach it.
|
|
231
|
+
if (offsetAt(first) === wallMs - first)
|
|
232
|
+
return new Date(first).toISOString();
|
|
233
|
+
if (offsetAt(second) === wallMs - second)
|
|
234
|
+
return new Date(second).toISOString();
|
|
235
|
+
// Neither: the wall clock falls in a spring-forward gap; move forward by it.
|
|
236
|
+
return new Date(Math.max(first, second)).toISOString();
|
|
204
237
|
}
|
|
205
238
|
/** Two digits, zero-padded — the shape every `datetime-local` field expects. */
|
|
206
239
|
function pad(value) {
|
|
207
240
|
return String(value).padStart(2, '0');
|
|
208
241
|
}
|
|
209
242
|
/**
|
|
210
|
-
* An ISO-8601 instant → the `datetime-local` value that displays it
|
|
243
|
+
* An ISO-8601 instant → the `datetime-local` value that displays it in
|
|
244
|
+
* `timeZone`.
|
|
211
245
|
*
|
|
212
|
-
* ⚠
|
|
246
|
+
* ⚠ SHIFTED BY THE ZONE'S OFFSET, DELIBERATELY. The tempting one-liner —
|
|
213
247
|
* `new Date(iso).toISOString().slice(0, 16)` — is the classic bug in this
|
|
214
248
|
* conversion: `toISOString` is UTC, so an admin in UTC+2 who scheduled a send
|
|
215
249
|
* for 09:00 reopens the form and reads 07:00, "corrects" it, and moves the
|
|
216
250
|
* broadcast two hours earlier. The offset is invisible in the control, so
|
|
217
|
-
* nothing on screen would have told them.
|
|
251
|
+
* nothing on screen would have told them. Here the instant is moved by the
|
|
252
|
+
* zone's offset at that moment and read with the UTC getters, which is the
|
|
253
|
+
* wall clock in the zone.
|
|
254
|
+
*
|
|
255
|
+
* The year is padded to four digits so a year before 1000 cannot produce a
|
|
256
|
+
* value the input silently rejects. Round-trips with `localInputToIso` (same
|
|
257
|
+
* zone) to the minute — seconds are truncated, which is all a
|
|
258
|
+
* minute-resolution control can represent.
|
|
218
259
|
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* Round-trips with `localInputToIso` to the minute — seconds are truncated,
|
|
222
|
-
* which is all a minute-resolution control can represent.
|
|
260
|
+
* @param iso - the instant.
|
|
261
|
+
* @param timeZone - the zone to display it in; default the display zone.
|
|
223
262
|
*/
|
|
224
|
-
export function isoToLocalInput(iso) {
|
|
225
|
-
const
|
|
226
|
-
if (Number.isNaN(
|
|
263
|
+
export function isoToLocalInput(iso, timeZone = getDisplayTimeZone()) {
|
|
264
|
+
const instant = new Date(iso);
|
|
265
|
+
if (Number.isNaN(instant.getTime()))
|
|
227
266
|
return '';
|
|
228
|
-
const
|
|
229
|
-
const
|
|
230
|
-
const
|
|
231
|
-
const
|
|
232
|
-
const
|
|
267
|
+
const date = new Date(instant.getTime() + getTimeZoneOffsetMinutes(timeZone, instant) * MINUTE_MS);
|
|
268
|
+
const year = String(date.getUTCFullYear()).padStart(4, '0');
|
|
269
|
+
const month = pad(date.getUTCMonth() + 1);
|
|
270
|
+
const day = pad(date.getUTCDate());
|
|
271
|
+
const hours = pad(date.getUTCHours());
|
|
272
|
+
const minutes = pad(date.getUTCMinutes());
|
|
233
273
|
return `${year}-${month}-${day}T${hours}:${minutes}`;
|
|
234
274
|
}
|
|
235
275
|
//# sourceMappingURL=broadcasts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcasts.js","sourceRoot":"","sources":["../../../src/notifications/headless/broadcasts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,gFAAgF;AAChF,kFAAkF;AAClF,gFAAgF;AAEhF,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,gDAAgD;AAChD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"broadcasts.js","sourceRoot":"","sources":["../../../src/notifications/headless/broadcasts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BroadcastComposer.d.ts","sourceRoot":"","sources":["../../../src/notifications/ui/BroadcastComposer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAuCH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"BroadcastComposer.d.ts","sourceRoot":"","sources":["../../../src/notifications/ui/BroadcastComposer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAuCH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAexE,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqBvD;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAE/D;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,yEAAyE;IACzE,UAAU,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,GACX,EAAE,sBAAsB,+BAmjBxB;AAED,eAAe,iBAAiB,CAAC"}
|