@marinoscar/platform-web 0.1.0-next.17 → 0.1.0-next.19
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 +31 -0
- package/README.md +3 -2
- package/dist/ai/headless/errors.d.ts +7 -0
- package/dist/ai/headless/errors.d.ts.map +1 -1
- package/dist/ai/headless/errors.js +2 -0
- package/dist/ai/headless/errors.js.map +1 -1
- package/dist/ai/headless/schema-presets.js +1 -1
- package/dist/ai/headless/schema-presets.js.map +1 -1
- package/dist/ai/headless/types.d.ts +30 -5
- package/dist/ai/headless/types.d.ts.map +1 -1
- package/dist/ai/headless/types.js +22 -10
- package/dist/ai/headless/types.js.map +1 -1
- package/dist/ai/headless/use-ai-usage.d.ts +5 -2
- package/dist/ai/headless/use-ai-usage.d.ts.map +1 -1
- package/dist/ai/headless/use-ai-usage.js +15 -5
- package/dist/ai/headless/use-ai-usage.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/AiUsagePage.d.ts.map +1 -1
- package/dist/ai/ui/AiUsagePage.js +7 -5
- package/dist/ai/ui/AiUsagePage.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/shared/AiErrorAlert.d.ts.map +1 -1
- package/dist/ai/ui/shared/AiErrorAlert.js +5 -1
- package/dist/ai/ui/shared/AiErrorAlert.js.map +1 -1
- package/dist/ai/ui/usage/aiUsageFormat.d.ts +9 -6
- package/dist/ai/ui/usage/aiUsageFormat.d.ts.map +1 -1
- package/dist/ai/ui/usage/aiUsageFormat.js +28 -12
- package/dist/ai/ui/usage/aiUsageFormat.js.map +1 -1
- package/dist/ai/ui/user/MyAiUsageSection.d.ts.map +1 -1
- package/dist/ai/ui/user/MyAiUsageSection.js +5 -2
- package/dist/ai/ui/user/MyAiUsageSection.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/ai/ui/user/aiErrorText.d.ts +4 -1
- package/dist/ai/ui/user/aiErrorText.d.ts.map +1 -1
- package/dist/ai/ui/user/aiErrorText.js +10 -2
- package/dist/ai/ui/user/aiErrorText.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/http/client.d.ts.map +1 -1
- package/dist/core/http/client.js +7 -0
- package/dist/core/http/client.js.map +1 -1
- package/dist/core/http/sse.d.ts.map +1 -1
- package/dist/core/http/sse.js +3 -1
- package/dist/core/http/sse.js.map +1 -1
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/time-zone/format.d.ts +139 -0
- package/dist/core/time-zone/format.d.ts.map +1 -0
- package/dist/core/time-zone/format.js +230 -0
- package/dist/core/time-zone/format.js.map +1 -0
- package/dist/core/time-zone/request.d.ts +17 -0
- package/dist/core/time-zone/request.d.ts.map +1 -0
- package/dist/core/time-zone/request.js +26 -0
- package/dist/core/time-zone/request.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/datatable/headless/export/exportModel.d.ts +7 -1
- package/dist/datatable/headless/export/exportModel.d.ts.map +1 -1
- package/dist/datatable/headless/export/exportModel.js +10 -2
- package/dist/datatable/headless/export/exportModel.js.map +1 -1
- package/dist/datatable/headless/filter/dateRange.d.ts +40 -0
- package/dist/datatable/headless/filter/dateRange.d.ts.map +1 -0
- package/dist/datatable/headless/filter/dateRange.js +53 -0
- package/dist/datatable/headless/filter/dateRange.js.map +1 -0
- package/dist/datatable/headless/filter/filterTypes.d.ts.map +1 -1
- package/dist/datatable/headless/filter/filterTypes.js +24 -4
- package/dist/datatable/headless/filter/filterTypes.js.map +1 -1
- package/dist/datatable/headless/index.d.ts +2 -0
- package/dist/datatable/headless/index.d.ts.map +1 -1
- package/dist/datatable/headless/index.js +1 -0
- package/dist/datatable/headless/index.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/internal/time-zones.d.ts +3 -0
- package/dist/db-backup/internal/time-zones.d.ts.map +1 -0
- package/dist/db-backup/internal/time-zones.js +24 -0
- package/dist/db-backup/internal/time-zones.js.map +1 -0
- package/dist/db-backup/ui/DbBackupConfigPanel.d.ts +11 -6
- package/dist/db-backup/ui/DbBackupConfigPanel.d.ts.map +1 -1
- package/dist/db-backup/ui/DbBackupConfigPanel.js +22 -12
- 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 +17 -0
- package/dist/identity/ui/tokens/CreatePatDialog.d.ts.map +1 -1
- package/dist/identity/ui/tokens/CreatePatDialog.js +35 -10
- 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 +11 -1
- package/dist/sharing/internal/format.d.ts.map +1 -1
- package/dist/sharing/internal/format.js +13 -7
- 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
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `localStorage` key the chosen zone is cached under, so a reload renders
|
|
3
|
+
* in the right zone before the settings fetch lands.
|
|
4
|
+
*
|
|
5
|
+
* @stability experimental
|
|
6
|
+
*/
|
|
7
|
+
export declare const TIME_ZONE_STORAGE_KEY = "platform.timezone";
|
|
8
|
+
/**
|
|
9
|
+
* The IANA zone this device reports (`Europe/Paris`), or `'UTC'` when the
|
|
10
|
+
* runtime does not say.
|
|
11
|
+
*
|
|
12
|
+
* @returns the device's zone id.
|
|
13
|
+
*
|
|
14
|
+
* @stability experimental
|
|
15
|
+
*/
|
|
16
|
+
export declare function deviceTimeZone(): string;
|
|
17
|
+
/**
|
|
18
|
+
* The zone the user chose (`profile.timezone`), or `null` when they follow the
|
|
19
|
+
* device.
|
|
20
|
+
*
|
|
21
|
+
* @returns the stored choice.
|
|
22
|
+
*
|
|
23
|
+
* @stability experimental
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPreferredTimeZone(): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* The zone every packaged time is rendered in: the user's choice, else the
|
|
28
|
+
* device's zone, else `'UTC'`.
|
|
29
|
+
*
|
|
30
|
+
* @returns an IANA zone id.
|
|
31
|
+
*
|
|
32
|
+
* @stability experimental
|
|
33
|
+
*/
|
|
34
|
+
export declare function getDisplayTimeZone(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Sets the user's choice (`null` follows the device again) and notifies every
|
|
37
|
+
* subscriber. An id the runtime does not know is ignored. The value is cached
|
|
38
|
+
* in `localStorage` (`platform.timezone`) when the browser allows it.
|
|
39
|
+
*
|
|
40
|
+
* @param id - an IANA zone id, or `null`.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* setPreferredTimeZone(settings.profile.timezone ?? null);
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @stability experimental
|
|
48
|
+
*/
|
|
49
|
+
export declare function setPreferredTimeZone(id: string | null): void;
|
|
50
|
+
/**
|
|
51
|
+
* Calls `listener` whenever the display zone may have changed.
|
|
52
|
+
*
|
|
53
|
+
* @param listener - called with no argument.
|
|
54
|
+
* @returns the unsubscribe function.
|
|
55
|
+
*
|
|
56
|
+
* @stability experimental
|
|
57
|
+
*/
|
|
58
|
+
export declare function subscribeDisplayTimeZone(listener: () => void): () => void;
|
|
59
|
+
/**
|
|
60
|
+
* The display zone, re-rendering the component when it changes. Use it in a
|
|
61
|
+
* component that formats times, so a saved profile re-renders them.
|
|
62
|
+
*
|
|
63
|
+
* @returns the effective IANA zone id ({@link getDisplayTimeZone}).
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```tsx
|
|
67
|
+
* const zone = useDisplayTimeZone();
|
|
68
|
+
* return <span>{formatDateTime(job.createdAt, { timeZone: zone })}</span>;
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @extensionPoint hook
|
|
72
|
+
* @stability experimental
|
|
73
|
+
*/
|
|
74
|
+
export declare function useDisplayTimeZone(): string;
|
|
75
|
+
/**
|
|
76
|
+
* The user's stored choice, re-rendering on change (`null`: follow the device).
|
|
77
|
+
*
|
|
78
|
+
* @returns the choice ({@link getPreferredTimeZone}).
|
|
79
|
+
*
|
|
80
|
+
* @stability experimental
|
|
81
|
+
*/
|
|
82
|
+
export declare function usePreferredTimeZone(): string | null;
|
|
83
|
+
/**
|
|
84
|
+
* `profile.timezone` out of a settings profile: the id when it is a valid zone,
|
|
85
|
+
* else `null`.
|
|
86
|
+
*
|
|
87
|
+
* @param profile - a stored profile (any shape).
|
|
88
|
+
* @returns the zone id, or `null`.
|
|
89
|
+
*
|
|
90
|
+
* @stability experimental
|
|
91
|
+
*/
|
|
92
|
+
export declare function timeZoneFromProfile(profile: unknown): string | null;
|
|
93
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/core/time-zone/store.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AA2BzD;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAWvC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAEpD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAM5D;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKzE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAEpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAInE"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// The display time zone: one module-level store, so a pure formatter, a hook
|
|
2
|
+
// and code outside React all read the same answer. The user's choice comes
|
|
3
|
+
// from `profile.timezone` (pushed here by `UserTimeZoneSync` of the timezone
|
|
4
|
+
// slice and by `useUserSettings` of the settings slice); without one, the
|
|
5
|
+
// device's zone. It lives in `core`, not in the timezone slice, because every
|
|
6
|
+
// slice renders dates (identity included, which the timezone slice depends
|
|
7
|
+
// on): core is the one place all of them may import without a cycle. The
|
|
8
|
+
// timezone slice re-exports it from `/timezone/headless`.
|
|
9
|
+
import { isValidTimeZone } from '@marinoscar/platform-contract/settings';
|
|
10
|
+
import { useSyncExternalStore } from 'react';
|
|
11
|
+
/**
|
|
12
|
+
* The `localStorage` key the chosen zone is cached under, so a reload renders
|
|
13
|
+
* in the right zone before the settings fetch lands.
|
|
14
|
+
*
|
|
15
|
+
* @stability experimental
|
|
16
|
+
*/
|
|
17
|
+
export const TIME_ZONE_STORAGE_KEY = 'platform.timezone';
|
|
18
|
+
const listeners = new Set();
|
|
19
|
+
function readCache() {
|
|
20
|
+
try {
|
|
21
|
+
const cached = globalThis.localStorage?.getItem(TIME_ZONE_STORAGE_KEY) ?? null;
|
|
22
|
+
return isValidTimeZone(cached) ? cached : null;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function writeCache(id) {
|
|
29
|
+
try {
|
|
30
|
+
const storage = globalThis.localStorage;
|
|
31
|
+
if (!storage)
|
|
32
|
+
return;
|
|
33
|
+
if (id === null)
|
|
34
|
+
storage.removeItem(TIME_ZONE_STORAGE_KEY);
|
|
35
|
+
else
|
|
36
|
+
storage.setItem(TIME_ZONE_STORAGE_KEY, id);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Private mode or blocked storage: the choice still applies to this page.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
let preferred = readCache();
|
|
43
|
+
let device;
|
|
44
|
+
/**
|
|
45
|
+
* The IANA zone this device reports (`Europe/Paris`), or `'UTC'` when the
|
|
46
|
+
* runtime does not say.
|
|
47
|
+
*
|
|
48
|
+
* @returns the device's zone id.
|
|
49
|
+
*
|
|
50
|
+
* @stability experimental
|
|
51
|
+
*/
|
|
52
|
+
export function deviceTimeZone() {
|
|
53
|
+
if (device !== undefined)
|
|
54
|
+
return device;
|
|
55
|
+
let zone = 'UTC';
|
|
56
|
+
try {
|
|
57
|
+
const resolved = new Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
58
|
+
if (isValidTimeZone(resolved))
|
|
59
|
+
zone = resolved;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// An engine without Intl time zone support: UTC.
|
|
63
|
+
}
|
|
64
|
+
device = zone;
|
|
65
|
+
return zone;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The zone the user chose (`profile.timezone`), or `null` when they follow the
|
|
69
|
+
* device.
|
|
70
|
+
*
|
|
71
|
+
* @returns the stored choice.
|
|
72
|
+
*
|
|
73
|
+
* @stability experimental
|
|
74
|
+
*/
|
|
75
|
+
export function getPreferredTimeZone() {
|
|
76
|
+
return preferred;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The zone every packaged time is rendered in: the user's choice, else the
|
|
80
|
+
* device's zone, else `'UTC'`.
|
|
81
|
+
*
|
|
82
|
+
* @returns an IANA zone id.
|
|
83
|
+
*
|
|
84
|
+
* @stability experimental
|
|
85
|
+
*/
|
|
86
|
+
export function getDisplayTimeZone() {
|
|
87
|
+
return preferred ?? deviceTimeZone();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Sets the user's choice (`null` follows the device again) and notifies every
|
|
91
|
+
* subscriber. An id the runtime does not know is ignored. The value is cached
|
|
92
|
+
* in `localStorage` (`platform.timezone`) when the browser allows it.
|
|
93
|
+
*
|
|
94
|
+
* @param id - an IANA zone id, or `null`.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* setPreferredTimeZone(settings.profile.timezone ?? null);
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @stability experimental
|
|
102
|
+
*/
|
|
103
|
+
export function setPreferredTimeZone(id) {
|
|
104
|
+
if (id !== null && !isValidTimeZone(id))
|
|
105
|
+
return;
|
|
106
|
+
if (id === preferred)
|
|
107
|
+
return;
|
|
108
|
+
preferred = id;
|
|
109
|
+
writeCache(id);
|
|
110
|
+
for (const listener of [...listeners])
|
|
111
|
+
listener();
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Calls `listener` whenever the display zone may have changed.
|
|
115
|
+
*
|
|
116
|
+
* @param listener - called with no argument.
|
|
117
|
+
* @returns the unsubscribe function.
|
|
118
|
+
*
|
|
119
|
+
* @stability experimental
|
|
120
|
+
*/
|
|
121
|
+
export function subscribeDisplayTimeZone(listener) {
|
|
122
|
+
listeners.add(listener);
|
|
123
|
+
return () => {
|
|
124
|
+
listeners.delete(listener);
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The display zone, re-rendering the component when it changes. Use it in a
|
|
129
|
+
* component that formats times, so a saved profile re-renders them.
|
|
130
|
+
*
|
|
131
|
+
* @returns the effective IANA zone id ({@link getDisplayTimeZone}).
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```tsx
|
|
135
|
+
* const zone = useDisplayTimeZone();
|
|
136
|
+
* return <span>{formatDateTime(job.createdAt, { timeZone: zone })}</span>;
|
|
137
|
+
* ```
|
|
138
|
+
*
|
|
139
|
+
* @extensionPoint hook
|
|
140
|
+
* @stability experimental
|
|
141
|
+
*/
|
|
142
|
+
export function useDisplayTimeZone() {
|
|
143
|
+
return useSyncExternalStore(subscribeDisplayTimeZone, getDisplayTimeZone, getDisplayTimeZone);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The user's stored choice, re-rendering on change (`null`: follow the device).
|
|
147
|
+
*
|
|
148
|
+
* @returns the choice ({@link getPreferredTimeZone}).
|
|
149
|
+
*
|
|
150
|
+
* @stability experimental
|
|
151
|
+
*/
|
|
152
|
+
export function usePreferredTimeZone() {
|
|
153
|
+
return useSyncExternalStore(subscribeDisplayTimeZone, getPreferredTimeZone, getPreferredTimeZone);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* `profile.timezone` out of a settings profile: the id when it is a valid zone,
|
|
157
|
+
* else `null`.
|
|
158
|
+
*
|
|
159
|
+
* @param profile - a stored profile (any shape).
|
|
160
|
+
* @returns the zone id, or `null`.
|
|
161
|
+
*
|
|
162
|
+
* @stability experimental
|
|
163
|
+
*/
|
|
164
|
+
export function timeZoneFromProfile(profile) {
|
|
165
|
+
if (!profile || typeof profile !== 'object')
|
|
166
|
+
return null;
|
|
167
|
+
const value = profile.timezone;
|
|
168
|
+
return isValidTimeZone(value) ? value : null;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/time-zone/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ export interface SavedSecretHelperTextOptions {
|
|
|
31
31
|
/**
|
|
32
32
|
* Formats the last-change date.
|
|
33
33
|
*
|
|
34
|
-
* @defaultValue `
|
|
34
|
+
* @defaultValue the numeric date (`toLocaleDateString()`'s fields) in the display time zone
|
|
35
35
|
*/
|
|
36
36
|
readonly formatDate?: (date: Date) => string;
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-secret.d.ts","sourceRoot":"","sources":["../../../src/credentials/headless/saved-secret.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"saved-secret.d.ts","sourceRoot":"","sources":["../../../src/credentials/headless/saved-secret.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAGnF;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,GAAG;IAC1C,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEJ;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;CAC9C;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EACxC,OAAO,GAAE,4BAAiC,GACzC,MAAM,CASR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
// stored", which is what the sentence tells the user and what
|
|
13
13
|
// `secretForSubmit` sends.
|
|
14
14
|
// =============================================================================
|
|
15
|
+
import { NUMERIC_DATE, formatDate } from '../../core/index.js';
|
|
15
16
|
/** `a key`, `an access key`. */
|
|
16
17
|
function withArticle(noun) {
|
|
17
18
|
return /^[aeiou]/i.test(noun) ? `An ${noun}` : `A ${noun}`;
|
|
@@ -41,7 +42,7 @@ export function savedSecretHelperText(info, options = {}) {
|
|
|
41
42
|
return options.emptyHelp ?? `No ${noun} is saved yet.`;
|
|
42
43
|
const which = info.hint ? ` (${info.hint})` : '';
|
|
43
44
|
const date = info.updatedAt ? new Date(info.updatedAt) : null;
|
|
44
|
-
const format = options.formatDate ?? ((d) => d
|
|
45
|
+
const format = options.formatDate ?? ((d) => formatDate(d, NUMERIC_DATE));
|
|
45
46
|
const when = date && !Number.isNaN(date.getTime()) ? `, updated ${format(date)}` : '';
|
|
46
47
|
return `${withArticle(noun)} is saved${which}${when}. Leave this blank to keep it, or type a new one to replace it.`;
|
|
47
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-secret.js","sourceRoot":"","sources":["../../../src/credentials/headless/saved-secret.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wDAAwD;AACxD,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,gFAAgF;AAChF,oEAAoE;AACpE,EAAE;AACF,sEAAsE;AACtE,8EAA8E;AAC9E,8DAA8D;AAC9D,2BAA2B;AAC3B,gFAAgF;
|
|
1
|
+
{"version":3,"file":"saved-secret.js","sourceRoot":"","sources":["../../../src/credentials/headless/saved-secret.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wDAAwD;AACxD,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,gFAAgF;AAChF,oEAAoE;AACpE,EAAE;AACF,sEAAsE;AACtE,8EAA8E;AAC9E,8DAA8D;AAC9D,2BAA2B;AAC3B,gFAAgF;AAGhF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAyC/D,gCAAgC;AAChC,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAwC,EACxC,UAAwC,EAAE;IAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,SAAS,IAAI,MAAM,IAAI,gBAAgB,CAAC;IAElE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,KAAK,GAAG,IAAI,iEAAiE,CAAC;AACvH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,CAAC"}
|
|
@@ -20,7 +20,7 @@ export interface SecretFieldProps {
|
|
|
20
20
|
emptyHelp?: string;
|
|
21
21
|
/** What the secret is called in the helper text; default `'key'`. */
|
|
22
22
|
noun?: string;
|
|
23
|
-
/** Formats the last-change date; default
|
|
23
|
+
/** Formats the last-change date; default the numeric date in the display time zone. */
|
|
24
24
|
formatDate?: SavedSecretHelperTextOptions['formatDate'];
|
|
25
25
|
/** Disables the input (a viewer without the write permission). */
|
|
26
26
|
disabled?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-field.d.ts","sourceRoot":"","sources":["../../../src/credentials/ui/secret-field.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"secret-field.d.ts","sourceRoot":"","sources":["../../../src/credentials/ui/secret-field.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG1F;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wFAAwF;IACxF,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,UAAU,CAAC,EAAE,4BAA4B,CAAC,YAAY,CAAC,CAAC;IACxD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;CAC1E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CA6BjE"}
|
|
@@ -13,6 +13,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
13
13
|
import { TextField } from '@mui/material';
|
|
14
14
|
import { useId } from 'react';
|
|
15
15
|
import { savedSecretHelperText } from '../headless/index.js';
|
|
16
|
+
import { useDisplayTimeZone } from '../../core/index.js';
|
|
16
17
|
/**
|
|
17
18
|
* A write-only secret input with the unified "saved secret" helper text.
|
|
18
19
|
*
|
|
@@ -34,6 +35,7 @@ import { savedSecretHelperText } from '../headless/index.js';
|
|
|
34
35
|
* @stability experimental
|
|
35
36
|
*/
|
|
36
37
|
export function SecretField(props) {
|
|
38
|
+
useDisplayTimeZone(); // "updated" renders in the display zone.
|
|
37
39
|
const generatedId = useId();
|
|
38
40
|
const id = props.id ?? `secret-field-${generatedId.replace(/[^A-Za-z0-9_-]/g, '')}`;
|
|
39
41
|
const helper = props.error ??
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-field.js","sourceRoot":"","sources":["../../../src/credentials/ui/secret-field.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,8DAA8D;AAC9D,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,wEAAwE;AACxE,8EAA8E;AAC9E,4EAA4E;AAC5E,4DAA4D;AAC5D,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"secret-field.js","sourceRoot":"","sources":["../../../src/credentials/ui/secret-field.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,8DAA8D;AAC9D,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,wEAAwE;AACxE,8EAA8E;AAC9E,4EAA4E;AAC5E,4DAA4D;AAC5D,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAkDzD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,kBAAkB,EAAE,CAAC,CAAC,yCAAyC;IAC/D,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,gBAAgB,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC;IACpF,MAAM,MAAM,GACV,KAAK,CAAC,KAAK;QACX,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE;YACjC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC,CAAC;IAEL,OAAO,CACL,KAAC,SAAS,IACR,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAC3B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAC,cAAc,EAC3B,SAAS,QACT,EAAE,EAAE,KAAK,CAAC,EAAE,KACR,KAAK,CAAC,KAAK,EAAE,SAAS,EAC1B,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GACvD,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -109,10 +109,16 @@ export declare function slugifyExportName(name: string | undefined | null): stri
|
|
|
109
109
|
*
|
|
110
110
|
* Dated because an export is a snapshot: two files downloaded a week apart must
|
|
111
111
|
* not collide in a Downloads folder, and `jobs (3).csv` tells nobody anything.
|
|
112
|
+
* The date is today in the viewer's display zone (`zonedDateKey`), so a file
|
|
113
|
+
* saved at 9 PM in Costa Rica is named for that day, not tomorrow's UTC date.
|
|
114
|
+
*
|
|
115
|
+
* @param base - the table's name; slugified.
|
|
116
|
+
* @param now - the instant of the export; default now.
|
|
117
|
+
* @param timeZone - the zone the date is read in; default the display zone.
|
|
112
118
|
*
|
|
113
119
|
* @stability experimental
|
|
114
120
|
*/
|
|
115
|
-
export declare function exportFilename(base: string | undefined | null, now?: Date): string;
|
|
121
|
+
export declare function exportFilename(base: string | undefined | null, now?: Date, timeZone?: string): string;
|
|
116
122
|
/**
|
|
117
123
|
* Hand a CSV string to the browser as a file download.
|
|
118
124
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportModel.d.ts","sourceRoot":"","sources":["../../../../src/datatable/headless/export/exportModel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"exportModel.d.ts","sourceRoot":"","sources":["../../../../src/datatable/headless/export/exportModel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAS7E;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD;;;;;;;;GAQG;AACH,eAAO,MAAM,iCAAiC,MAAM,CAAC;AASrD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,OAAO,CAE7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAC/B,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,EAC/B,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACrC,eAAe,CAAC,GAAG,CAAC,EAAE,CAKxB;AAMD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mDAAmD;IACnD,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EACnC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,EAC/B,IAAI,EAAE,SAAS,GAAG,EAAE,GACnB,YAAY,CAKd;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EACjC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,EAC/B,IAAI,EAAE,SAAS,GAAG,EAAE,EACpB,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACrC,MAAM,CAIR;AAMD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAOzE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAC/B,GAAG,GAAE,IAAiB,EACtB,QAAQ,GAAE,MAA6B,GACtC,MAAM,CAIR;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAoBtE;AAMD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB,CAAC,GAAG;IACxC,6EAA6E;IAC7E,SAAS,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC;IACzC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB,CAAC,GAAG;IACvC,0BAA0B;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;;CAK9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,EACxC,SAAS,EACT,QAA4C,EAC5C,OAAoC,EACpC,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CA6BjE"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* page's OWN fetch callback, so it is subject to exactly the same
|
|
23
23
|
* authorization and the same active filters as the table itself.
|
|
24
24
|
*/
|
|
25
|
+
import { getDisplayTimeZone, zonedDateKey } from '../../../core/index.js';
|
|
25
26
|
import { extractColumnValue } from '../columns.js';
|
|
26
27
|
import { toCsvFile } from './csv.js';
|
|
27
28
|
// ---------------------------------------------------------------------------
|
|
@@ -130,11 +131,18 @@ export function slugifyExportName(name) {
|
|
|
130
131
|
*
|
|
131
132
|
* Dated because an export is a snapshot: two files downloaded a week apart must
|
|
132
133
|
* not collide in a Downloads folder, and `jobs (3).csv` tells nobody anything.
|
|
134
|
+
* The date is today in the viewer's display zone (`zonedDateKey`), so a file
|
|
135
|
+
* saved at 9 PM in Costa Rica is named for that day, not tomorrow's UTC date.
|
|
136
|
+
*
|
|
137
|
+
* @param base - the table's name; slugified.
|
|
138
|
+
* @param now - the instant of the export; default now.
|
|
139
|
+
* @param timeZone - the zone the date is read in; default the display zone.
|
|
133
140
|
*
|
|
134
141
|
* @stability experimental
|
|
135
142
|
*/
|
|
136
|
-
export function exportFilename(base, now = new Date()) {
|
|
137
|
-
const
|
|
143
|
+
export function exportFilename(base, now = new Date(), timeZone = getDisplayTimeZone()) {
|
|
144
|
+
const day = zonedDateKey(now, timeZone);
|
|
145
|
+
const iso = day === null ? '' : `-${day}`;
|
|
138
146
|
return `${slugifyExportName(base)}${iso}.csv`;
|
|
139
147
|
}
|
|
140
148
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportModel.js","sourceRoot":"","sources":["../../../../src/datatable/headless/export/exportModel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,CAAC;AAErD,kEAAkE;AAClE,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAM,MAA4B;IAClE,OAAO,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA+B,EAC/B,gBAAsC;IAEtC,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,MAAM,EAAE,EAAE,CACT,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CACvF,CAAC;AACJ,CAAC;AAkBD;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA+B,EAC/B,IAAoB;IAEpB,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;KAClF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA+B,EAC/B,IAAoB,EACpB,gBAAsC;IAEtC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA+B;IAC/D,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;SACtB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"exportModel.js","sourceRoot":"","sources":["../../../../src/datatable/headless/export/exportModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What {@link zonedDayRangeToInstants} returns: a half-open instant range.
|
|
3
|
+
*
|
|
4
|
+
* @stability experimental
|
|
5
|
+
*/
|
|
6
|
+
export interface ZonedDayInstantRange {
|
|
7
|
+
/** Local midnight at the start of the first day, ISO 8601 (inclusive). */
|
|
8
|
+
from: string;
|
|
9
|
+
/** Local midnight at the start of the day after the last day, ISO 8601 (exclusive). */
|
|
10
|
+
to: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The ISO instants that bound the calendar days `fromKey` to `toKey`
|
|
14
|
+
* (inclusive) in `tz`: `from` is local midnight at the start of `fromKey`,
|
|
15
|
+
* `to` is local midnight at the start of the day after `toKey`, so a server
|
|
16
|
+
* filters `createdAt >= from AND createdAt < to`. DST-safe: a 23- or 25-hour
|
|
17
|
+
* day is covered exactly, and a skipped midnight starts at the first instant
|
|
18
|
+
* after the gap.
|
|
19
|
+
*
|
|
20
|
+
* Use it to turn a `date` filter (`between`, `after`, `before`) into server
|
|
21
|
+
* query parameters, rather than sending the bare days (which a server would
|
|
22
|
+
* read in its own zone) or `new Date(key)` (which is UTC midnight).
|
|
23
|
+
*
|
|
24
|
+
* @param fromKey - the first day, `YYYY-MM-DD`.
|
|
25
|
+
* @param toKey - the last day included, `YYYY-MM-DD`; default `fromKey` (one day).
|
|
26
|
+
* @param tz - an IANA zone id; default the display zone. An unknown zone reads as UTC.
|
|
27
|
+
* @returns the half-open range as ISO 8601 instants.
|
|
28
|
+
* @throws RangeError when a key is not a real `YYYY-MM-DD` day.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* // A "between 2026-10-01 and 2026-10-31" filter, for a viewer in Costa Rica:
|
|
33
|
+
* zonedDayRangeToInstants('2026-10-01', '2026-10-31', 'America/Costa_Rica');
|
|
34
|
+
* // { from: '2026-10-01T06:00:00.000Z', to: '2026-11-01T06:00:00.000Z' }
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @stability experimental
|
|
38
|
+
*/
|
|
39
|
+
export declare function zonedDayRangeToInstants(fromKey: string, toKey?: string, tz?: string): ZonedDayInstantRange;
|
|
40
|
+
//# sourceMappingURL=dateRange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateRange.d.ts","sourceRoot":"","sources":["../../../../src/datatable/headless/filter/dateRange.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAgB,EACvB,EAAE,GAAE,MAA6B,GAChC,oBAAoB,CActB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Mapping a date filter onto a server query. A DataTable date filter carries
|
|
2
|
+
// calendar days (`YYYY-MM-DD`); a server filters instants. The honest mapping
|
|
3
|
+
// is the half-open instant range [start of `from`, start of the day after
|
|
4
|
+
// `to`) in the viewer's zone, computed with the contract's DST-safe
|
|
5
|
+
// `zonedDayStart`, the same function the API uses to cut days.
|
|
6
|
+
import { addDaysToDateKey, isDateKey, zonedDayStart } from '@marinoscar/platform-contract/timezone';
|
|
7
|
+
import { getDisplayTimeZone } from '../../../core/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* The ISO instants that bound the calendar days `fromKey` to `toKey`
|
|
10
|
+
* (inclusive) in `tz`: `from` is local midnight at the start of `fromKey`,
|
|
11
|
+
* `to` is local midnight at the start of the day after `toKey`, so a server
|
|
12
|
+
* filters `createdAt >= from AND createdAt < to`. DST-safe: a 23- or 25-hour
|
|
13
|
+
* day is covered exactly, and a skipped midnight starts at the first instant
|
|
14
|
+
* after the gap.
|
|
15
|
+
*
|
|
16
|
+
* Use it to turn a `date` filter (`between`, `after`, `before`) into server
|
|
17
|
+
* query parameters, rather than sending the bare days (which a server would
|
|
18
|
+
* read in its own zone) or `new Date(key)` (which is UTC midnight).
|
|
19
|
+
*
|
|
20
|
+
* @param fromKey - the first day, `YYYY-MM-DD`.
|
|
21
|
+
* @param toKey - the last day included, `YYYY-MM-DD`; default `fromKey` (one day).
|
|
22
|
+
* @param tz - an IANA zone id; default the display zone. An unknown zone reads as UTC.
|
|
23
|
+
* @returns the half-open range as ISO 8601 instants.
|
|
24
|
+
* @throws RangeError when a key is not a real `YYYY-MM-DD` day.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* // A "between 2026-10-01 and 2026-10-31" filter, for a viewer in Costa Rica:
|
|
29
|
+
* zonedDayRangeToInstants('2026-10-01', '2026-10-31', 'America/Costa_Rica');
|
|
30
|
+
* // { from: '2026-10-01T06:00:00.000Z', to: '2026-11-01T06:00:00.000Z' }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @stability experimental
|
|
34
|
+
*/
|
|
35
|
+
export function zonedDayRangeToInstants(fromKey, toKey = fromKey, tz = getDisplayTimeZone()) {
|
|
36
|
+
if (!isDateKey(fromKey))
|
|
37
|
+
throw new RangeError(`Not a YYYY-MM-DD day: ${fromKey}`);
|
|
38
|
+
if (!isDateKey(toKey))
|
|
39
|
+
throw new RangeError(`Not a YYYY-MM-DD day: ${toKey}`);
|
|
40
|
+
const start = (day) => {
|
|
41
|
+
try {
|
|
42
|
+
return zonedDayStart(day, tz);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return zonedDayStart(day, 'UTC');
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
from: start(fromKey).toISOString(),
|
|
50
|
+
to: start(addDaysToDateKey(toKey, 1)).toISOString(),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=dateRange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateRange.js","sourceRoot":"","sources":["../../../../src/datatable/headless/filter/dateRange.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,0EAA0E;AAC1E,oEAAoE;AACpE,+DAA+D;AAE/D,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEpG,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAc5D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,QAAgB,OAAO,EACvB,KAAa,kBAAkB,EAAE;IAEjC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IAClF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,CAAC,GAAW,EAAQ,EAAE;QAClC,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IACF,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;QAClC,EAAE,EAAE,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;KACpD,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterTypes.d.ts","sourceRoot":"","sources":["../../../../src/datatable/headless/filter/filterTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"filterTypes.d.ts","sourceRoot":"","sources":["../../../../src/datatable/headless/filter/filterTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EAEV,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,EACd,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,mGAAmG;IACnG,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACxC;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAC1F,uGAAuG;IACvG,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,kFAAkF;IAClF,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC;CAC/F;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAA0B,CAAC;AAE9D;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAkBvF,CAAC;AAyBH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,IAAI,CAoBnF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,sBAAsB,GAAG,SAAS,CAEpG;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,sBAAsB,EAAE,CAEnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAE1E;AAID;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,GAAG,IAAI,CAW9F"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* first render), exactly like the settings and doctor registries of this
|
|
15
15
|
* package.
|
|
16
16
|
*/
|
|
17
|
+
import { zonedDateKey } from '../../../core/index.js';
|
|
17
18
|
/**
|
|
18
19
|
* What a filter type id looks like: lower case letters and digits, 2 to 32
|
|
19
20
|
* characters, starting with a letter.
|
|
@@ -173,6 +174,23 @@ export function learnColumnOperators(operators) {
|
|
|
173
174
|
const text = (value) => (value === null || value === undefined ? '' : String(value));
|
|
174
175
|
const isEmptyValue = (value) => value === null || value === undefined || value === '';
|
|
175
176
|
const asList = (operand) => (Array.isArray(operand) ? operand : operand === null ? [] : [operand]);
|
|
177
|
+
/** A bare `YYYY-MM-DD` (no time part): a calendar day, not an instant. */
|
|
178
|
+
const BARE_DAY = /^\d{4}-\d{2}-\d{2}$/;
|
|
179
|
+
/**
|
|
180
|
+
* The calendar day a filter value names: a bare `YYYY-MM-DD` as is; an instant
|
|
181
|
+
* (ISO string with a time, epoch milliseconds, a `Date`) as its day in the
|
|
182
|
+
* display zone; anything unparsable by its first ten characters, as before.
|
|
183
|
+
*/
|
|
184
|
+
function calendarDayOf(value) {
|
|
185
|
+
if (typeof value === 'string' && BARE_DAY.test(value))
|
|
186
|
+
return value;
|
|
187
|
+
if (typeof value === 'string' || typeof value === 'number' || value instanceof Date) {
|
|
188
|
+
const key = zonedDateKey(value);
|
|
189
|
+
if (key !== null)
|
|
190
|
+
return key;
|
|
191
|
+
}
|
|
192
|
+
return text(value).slice(0, 10);
|
|
193
|
+
}
|
|
176
194
|
function matchesEmptiness(value, operator) {
|
|
177
195
|
if (operator === 'isEmpty')
|
|
178
196
|
return isEmptyValue(value);
|
|
@@ -255,13 +273,15 @@ const BUILTIN_TYPES = [
|
|
|
255
273
|
return empty;
|
|
256
274
|
if (isEmptyValue(value))
|
|
257
275
|
return false;
|
|
258
|
-
//
|
|
259
|
-
|
|
276
|
+
// Operands travel as YYYY-MM-DD days. A bare day compares as is; an
|
|
277
|
+
// instant compares by the calendar day it falls on in the display zone
|
|
278
|
+
// (never its UTC `.slice(0, 10)`, which is the wrong day near midnight).
|
|
279
|
+
const day = calendarDayOf(value);
|
|
260
280
|
if (operator === 'between') {
|
|
261
|
-
const [from, to] = asList(operand).map(
|
|
281
|
+
const [from, to] = asList(operand).map(calendarDayOf);
|
|
262
282
|
return from !== undefined && to !== undefined && day >= from && day <= to;
|
|
263
283
|
}
|
|
264
|
-
const other =
|
|
284
|
+
const other = calendarDayOf(operand);
|
|
265
285
|
if (operator === 'before')
|
|
266
286
|
return day < other;
|
|
267
287
|
if (operator === 'after')
|