@k2b/ui 0.49.0 → 0.51.0
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/dist/base.css +70 -1
- package/dist/browser/actions/Button.js.map +1 -1
- package/dist/browser/actions/CommandList.js +861 -0
- package/dist/browser/actions/CommandList.js.map +1 -0
- package/dist/browser/actions/CommandMenu.js +237 -0
- package/dist/browser/actions/CommandMenu.js.map +1 -0
- package/dist/browser/actions/ContextMenu.js +3 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +43 -10
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/command-dock.js +47 -0
- package/dist/browser/actions/command-dock.js.map +1 -0
- package/dist/browser/actions/command-items.js +84 -0
- package/dist/browser/actions/command-items.js.map +1 -0
- package/dist/browser/actions/command-messages.js +42 -0
- package/dist/browser/actions/command-messages.js.map +1 -0
- package/dist/browser/actions/index.js +1 -0
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/charts/core/area.js +188 -0
- package/dist/browser/charts/core/area.js.map +1 -0
- package/dist/browser/charts/core/calendar.js +186 -0
- package/dist/browser/charts/core/calendar.js.map +1 -0
- package/dist/browser/charts/core/chart-map-data.js +9 -0
- package/dist/browser/charts/core/chart-map-data.js.map +1 -0
- package/dist/browser/charts/core/chart-messages.js +17 -0
- package/dist/browser/charts/core/chart-messages.js.map +1 -0
- package/dist/browser/charts/core/hbar-layout.js +118 -0
- package/dist/browser/charts/core/hbar-layout.js.map +1 -0
- package/dist/browser/charts/core/hbar.js +39 -0
- package/dist/browser/charts/core/hbar.js.map +1 -0
- package/dist/browser/charts/core/index.js +17 -0
- package/dist/browser/charts/core/index.js.map +1 -0
- package/dist/browser/charts/core/inspection.js +9 -0
- package/dist/browser/charts/core/inspection.js.map +1 -0
- package/dist/browser/charts/core/map.js +116 -0
- package/dist/browser/charts/core/map.js.map +1 -0
- package/dist/browser/charts/core/registry.js +35 -0
- package/dist/browser/charts/core/registry.js.map +1 -0
- package/dist/browser/charts/core/render-size.js +13 -0
- package/dist/browser/charts/core/render-size.js.map +1 -0
- package/dist/browser/charts/core/render.js +113 -0
- package/dist/browser/charts/core/render.js.map +1 -0
- package/dist/browser/charts/core/snapshot.js +65 -0
- package/dist/browser/charts/core/snapshot.js.map +1 -0
- package/dist/browser/charts/core/svg-renderers.js +2406 -0
- package/dist/browser/charts/core/svg-renderers.js.map +1 -0
- package/dist/browser/charts/core/svg.js +21 -0
- package/dist/browser/charts/core/svg.js.map +1 -0
- package/dist/browser/charts/core/termination.test-fixture.js +162 -0
- package/dist/browser/charts/core/termination.test-fixture.js.map +1 -0
- package/dist/browser/charts/core/text.js +13 -0
- package/dist/browser/charts/core/text.js.map +1 -0
- package/dist/browser/charts/core/types.js +6 -0
- package/dist/browser/charts/core/types.js.map +1 -0
- package/dist/browser/charts/core/waterfall.js +162 -0
- package/dist/browser/charts/core/waterfall.js.map +1 -0
- package/dist/browser/charts/description.js +2 -0
- package/dist/browser/charts/description.js.map +1 -0
- package/dist/browser/charts.js +4 -2
- package/dist/browser/charts.js.map +1 -1
- package/dist/browser/content/BalanceSummary.js +106 -0
- package/dist/browser/content/BalanceSummary.js.map +1 -0
- package/dist/browser/content/Chart.js +21 -616
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +366 -122
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartRoot.js +632 -0
- package/dist/browser/content/ChartRoot.js.map +1 -0
- package/dist/browser/content/ChartSnapshotView.js +16 -9
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/ChartSparkline.js +24 -0
- package/dist/browser/content/ChartSparkline.js.map +1 -0
- package/dist/browser/content/DataTable.js +676 -293
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/DataTableTools.js +119 -0
- package/dist/browser/content/DataTableTools.js.map +1 -0
- package/dist/browser/content/FileView.js +111 -61
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/FlowAmount.js +82 -0
- package/dist/browser/content/FlowAmount.js.map +1 -0
- package/dist/browser/content/Lightbox.js +8 -8
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/MapView.js +30 -28
- package/dist/browser/content/MapView.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +84 -52
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/PdfViewer.js +588 -0
- package/dist/browser/content/PdfViewer.js.map +1 -0
- package/dist/browser/content/balance-summary-messages.js +26 -0
- package/dist/browser/content/balance-summary-messages.js.map +1 -0
- package/dist/browser/content/chart-bar.js +251 -21
- package/dist/browser/content/chart-bar.js.map +1 -1
- package/dist/browser/content/chart-calendar.js +43 -0
- package/dist/browser/content/chart-calendar.js.map +1 -0
- package/dist/browser/content/chart-inspection-core.js +178 -50
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js +2 -2
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-message-catalog.js +174 -0
- package/dist/browser/content/chart-message-catalog.js.map +1 -0
- package/dist/browser/content/chart-messages.js +2 -138
- package/dist/browser/content/chart-messages.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js +1 -62
- package/dist/browser/content/chart-snapshot.js.map +1 -1
- package/dist/browser/content/chart-state-timeline.js +1 -1
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js +4 -2
- package/dist/browser/content/chart-svg.js.map +1 -1
- package/dist/browser/content/chart-time-axis.js +139 -0
- package/dist/browser/content/chart-time-axis.js.map +1 -0
- package/dist/browser/content/data-table-columns.js +160 -0
- package/dist/browser/content/data-table-columns.js.map +1 -0
- package/dist/browser/content/data-table-messages.js +38 -2
- package/dist/browser/content/data-table-messages.js.map +1 -1
- package/dist/browser/content/flow-amount-messages.js +26 -0
- package/dist/browser/content/flow-amount-messages.js.map +1 -0
- package/dist/browser/content/index.js +5 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/pdf-document.js +29 -0
- package/dist/browser/content/pdf-document.js.map +1 -0
- package/dist/browser/content/pdf-limits.js +31 -0
- package/dist/browser/content/pdf-limits.js.map +1 -0
- package/dist/browser/content/pdf-messages.js +34 -2
- package/dist/browser/content/pdf-messages.js.map +1 -1
- package/dist/browser/content/pdf-viewer-engine.js +57 -0
- package/dist/browser/content/pdf-viewer-worker.js +28 -0
- package/dist/browser/inputs/ChoiceInputs.js +94 -51
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/ChoiceSlider.js +75 -58
- package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +118 -102
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/PeriodPicker.js +874 -0
- package/dist/browser/inputs/PeriodPicker.js.map +1 -0
- package/dist/browser/inputs/SelectChip.js +50 -17
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/date-picker.js +13 -0
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/inputs/index.js +4 -1
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/input-messages.js +8 -2
- package/dist/browser/inputs/input-messages.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
- package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
- package/dist/browser/inputs/period-picker-messages.js +71 -0
- package/dist/browser/inputs/period-picker-messages.js.map +1 -0
- package/dist/browser/inputs/period.js +263 -0
- package/dist/browser/inputs/period.js.map +1 -0
- package/dist/browser/intl/Format.js +31 -8
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +7 -1
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +147 -120
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Discussion.js +101 -108
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/surfaces/BudgetList.js +281 -0
- package/dist/browser/surfaces/BudgetList.js.map +1 -0
- package/dist/browser/surfaces/DescriptionList.js +5 -2
- package/dist/browser/surfaces/DescriptionList.js.map +1 -1
- package/dist/browser/surfaces/ProgressBar.js +134 -21
- package/dist/browser/surfaces/ProgressBar.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +327 -146
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/StatGrid.js +75 -57
- package/dist/browser/surfaces/StatGrid.js.map +1 -1
- package/dist/browser/surfaces/budget-messages.js +64 -0
- package/dist/browser/surfaces/budget-messages.js.map +1 -0
- package/dist/browser/surfaces/delta-badge.js +79 -0
- package/dist/browser/surfaces/delta-badge.js.map +1 -0
- package/dist/browser/surfaces/index.js +2 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/surfaces/person-color.js +2 -2
- package/dist/browser/surfaces/person-color.js.map +1 -1
- package/dist/browser/surfaces/stat-cell-messages.js +41 -0
- package/dist/browser/surfaces/stat-cell-messages.js.map +1 -0
- package/dist/browser/widgets/Dashboard.js +137 -0
- package/dist/browser/widgets/Dashboard.js.map +1 -0
- package/dist/browser/widgets/DashboardFrame.js +310 -0
- package/dist/browser/widgets/DashboardFrame.js.map +1 -0
- package/dist/browser/widgets/index.js +2 -0
- package/dist/browser/widgets/index.js.map +1 -1
- package/dist/licenses/pdfjs-dist.txt +177 -0
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/CommandList.js +638 -0
- package/dist/ssr/actions/CommandList.js.map +1 -0
- package/dist/ssr/actions/CommandMenu.js +197 -0
- package/dist/ssr/actions/CommandMenu.js.map +1 -0
- package/dist/ssr/actions/ContextMenu.js +3 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +43 -10
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/command-dock.js +47 -0
- package/dist/ssr/actions/command-dock.js.map +1 -0
- package/dist/ssr/actions/command-items.js +84 -0
- package/dist/ssr/actions/command-items.js.map +1 -0
- package/dist/ssr/actions/command-messages.js +42 -0
- package/dist/ssr/actions/command-messages.js.map +1 -0
- package/dist/ssr/actions/index.js +1 -0
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/charts/core/area.js +188 -0
- package/dist/ssr/charts/core/area.js.map +1 -0
- package/dist/ssr/charts/core/calendar.js +186 -0
- package/dist/ssr/charts/core/calendar.js.map +1 -0
- package/dist/ssr/charts/core/chart-map-data.js +9 -0
- package/dist/ssr/charts/core/chart-map-data.js.map +1 -0
- package/dist/ssr/charts/core/chart-messages.js +17 -0
- package/dist/ssr/charts/core/chart-messages.js.map +1 -0
- package/dist/ssr/charts/core/hbar-layout.js +118 -0
- package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
- package/dist/ssr/charts/core/hbar.js +39 -0
- package/dist/ssr/charts/core/hbar.js.map +1 -0
- package/dist/ssr/charts/core/index.js +17 -0
- package/dist/ssr/charts/core/index.js.map +1 -0
- package/dist/ssr/charts/core/inspection.js +9 -0
- package/dist/ssr/charts/core/inspection.js.map +1 -0
- package/dist/ssr/charts/core/map.js +116 -0
- package/dist/ssr/charts/core/map.js.map +1 -0
- package/dist/ssr/charts/core/registry.js +35 -0
- package/dist/ssr/charts/core/registry.js.map +1 -0
- package/dist/ssr/charts/core/render-size.js +13 -0
- package/dist/ssr/charts/core/render-size.js.map +1 -0
- package/dist/ssr/charts/core/render.js +113 -0
- package/dist/ssr/charts/core/render.js.map +1 -0
- package/dist/ssr/charts/core/snapshot.js +65 -0
- package/dist/ssr/charts/core/snapshot.js.map +1 -0
- package/dist/ssr/charts/core/svg-renderers.js +2406 -0
- package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
- package/dist/ssr/charts/core/svg.js +21 -0
- package/dist/ssr/charts/core/svg.js.map +1 -0
- package/dist/ssr/charts/core/termination.test-fixture.js +162 -0
- package/dist/ssr/charts/core/termination.test-fixture.js.map +1 -0
- package/dist/ssr/charts/core/text.js +13 -0
- package/dist/ssr/charts/core/text.js.map +1 -0
- package/dist/ssr/charts/core/types.js +6 -0
- package/dist/ssr/charts/core/types.js.map +1 -0
- package/dist/ssr/charts/core/waterfall.js +162 -0
- package/dist/ssr/charts/core/waterfall.js.map +1 -0
- package/dist/ssr/charts/description.js +2 -0
- package/dist/ssr/charts/description.js.map +1 -0
- package/dist/ssr/charts.js +4 -2
- package/dist/ssr/charts.js.map +1 -1
- package/dist/ssr/content/BalanceSummary.js +75 -0
- package/dist/ssr/content/BalanceSummary.js.map +1 -0
- package/dist/ssr/content/Chart.js +21 -483
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +190 -46
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartRoot.js +475 -0
- package/dist/ssr/content/ChartRoot.js.map +1 -0
- package/dist/ssr/content/ChartSnapshotView.js +5 -1
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/ChartSparkline.js +24 -0
- package/dist/ssr/content/ChartSparkline.js.map +1 -0
- package/dist/ssr/content/DataTable.js +287 -78
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/DataTableTools.js +106 -0
- package/dist/ssr/content/DataTableTools.js.map +1 -0
- package/dist/ssr/content/FileView.js +56 -7
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/FlowAmount.js +58 -0
- package/dist/ssr/content/FlowAmount.js.map +1 -0
- package/dist/ssr/content/Lightbox.js +8 -8
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/MapView.js +9 -9
- package/dist/ssr/content/MapView.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +49 -20
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/PdfViewer.js +484 -0
- package/dist/ssr/content/PdfViewer.js.map +1 -0
- package/dist/ssr/content/balance-summary-messages.js +26 -0
- package/dist/ssr/content/balance-summary-messages.js.map +1 -0
- package/dist/ssr/content/chart-bar.js +251 -21
- package/dist/ssr/content/chart-bar.js.map +1 -1
- package/dist/ssr/content/chart-calendar.js +43 -0
- package/dist/ssr/content/chart-calendar.js.map +1 -0
- package/dist/ssr/content/chart-inspection-core.js +178 -50
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js +2 -2
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-message-catalog.js +174 -0
- package/dist/ssr/content/chart-message-catalog.js.map +1 -0
- package/dist/ssr/content/chart-messages.js +2 -138
- package/dist/ssr/content/chart-messages.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js +1 -62
- package/dist/ssr/content/chart-snapshot.js.map +1 -1
- package/dist/ssr/content/chart-state-timeline.js +1 -1
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js +4 -2
- package/dist/ssr/content/chart-svg.js.map +1 -1
- package/dist/ssr/content/chart-time-axis.js +139 -0
- package/dist/ssr/content/chart-time-axis.js.map +1 -0
- package/dist/ssr/content/data-table-columns.js +160 -0
- package/dist/ssr/content/data-table-columns.js.map +1 -0
- package/dist/ssr/content/data-table-messages.js +38 -2
- package/dist/ssr/content/data-table-messages.js.map +1 -1
- package/dist/ssr/content/flow-amount-messages.js +26 -0
- package/dist/ssr/content/flow-amount-messages.js.map +1 -0
- package/dist/ssr/content/index.js +5 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/pdf-document.js +29 -0
- package/dist/ssr/content/pdf-document.js.map +1 -0
- package/dist/ssr/content/pdf-limits.js +31 -0
- package/dist/ssr/content/pdf-limits.js.map +1 -0
- package/dist/ssr/content/pdf-messages.js +34 -2
- package/dist/ssr/content/pdf-messages.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +49 -12
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/ChoiceSlider.js +17 -12
- package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +19 -13
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/PeriodPicker.js +598 -0
- package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
- package/dist/ssr/inputs/SelectChip.js +26 -9
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js +13 -0
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/inputs/index.js +4 -1
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/input-messages.js +8 -2
- package/dist/ssr/inputs/input-messages.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
- package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
- package/dist/ssr/inputs/period-picker-messages.js +71 -0
- package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
- package/dist/ssr/inputs/period.js +263 -0
- package/dist/ssr/inputs/period.js.map +1 -0
- package/dist/ssr/intl/Format.js +22 -2
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +7 -1
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +27 -4
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Discussion.js +16 -2
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/surfaces/BudgetList.js +170 -0
- package/dist/ssr/surfaces/BudgetList.js.map +1 -0
- package/dist/ssr/surfaces/DescriptionList.js +1 -1
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
- package/dist/ssr/surfaces/ProgressBar.js +96 -5
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +157 -52
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/StatGrid.js +24 -35
- package/dist/ssr/surfaces/StatGrid.js.map +1 -1
- package/dist/ssr/surfaces/budget-messages.js +64 -0
- package/dist/ssr/surfaces/budget-messages.js.map +1 -0
- package/dist/ssr/surfaces/delta-badge.js +55 -0
- package/dist/ssr/surfaces/delta-badge.js.map +1 -0
- package/dist/ssr/surfaces/index.js +2 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/surfaces/person-color.js +2 -2
- package/dist/ssr/surfaces/person-color.js.map +1 -1
- package/dist/ssr/surfaces/stat-cell-messages.js +41 -0
- package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -0
- package/dist/ssr/widgets/Dashboard.js +84 -0
- package/dist/ssr/widgets/Dashboard.js.map +1 -0
- package/dist/ssr/widgets/DashboardFrame.js +200 -0
- package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
- package/dist/ssr/widgets/index.js +2 -0
- package/dist/ssr/widgets/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Button.d.ts +1 -1
- package/dist/types/actions/CommandList.d.ts +120 -0
- package/dist/types/actions/CommandMenu.d.ts +39 -0
- package/dist/types/actions/Dropdown.d.ts +17 -0
- package/dist/types/actions/command-dock.d.ts +8 -0
- package/dist/types/actions/command-items.d.ts +134 -0
- package/dist/types/actions/command-messages.d.ts +19 -0
- package/dist/types/actions/index.d.ts +3 -0
- package/dist/types/charts/core/area.d.ts +62 -0
- package/dist/types/charts/core/calendar.d.ts +57 -0
- package/dist/types/charts/core/chart-map-data.d.ts +3 -0
- package/dist/types/charts/core/chart-messages.d.ts +5 -0
- package/dist/types/charts/core/hbar-layout.d.ts +74 -0
- package/dist/types/charts/core/hbar.d.ts +13 -0
- package/dist/types/charts/core/index.d.ts +16 -0
- package/dist/types/charts/core/inspection.d.ts +16 -0
- package/dist/types/charts/core/map.d.ts +3 -0
- package/dist/types/charts/core/registry.d.ts +33 -0
- package/dist/types/charts/core/render-size.d.ts +7 -0
- package/dist/types/charts/core/render.d.ts +37 -0
- package/dist/types/charts/core/snapshot.d.ts +27 -0
- package/dist/types/charts/core/svg-renderers.d.ts +722 -0
- package/dist/types/charts/core/svg.d.ts +20 -0
- package/dist/types/charts/core/termination.test-fixture.d.ts +1 -0
- package/dist/types/charts/core/text.d.ts +5 -0
- package/dist/types/charts/core/types.d.ts +20 -0
- package/dist/types/charts/core/waterfall.d.ts +68 -0
- package/dist/types/charts/description.d.ts +226 -0
- package/dist/types/charts.d.ts +5 -2
- package/dist/types/content/BalanceSummary.d.ts +29 -0
- package/dist/types/content/Chart.d.ts +19 -117
- package/dist/types/content/ChartExplorer.d.ts +43 -2
- package/dist/types/content/ChartRoot.d.ts +92 -0
- package/dist/types/content/ChartSnapshotView.d.ts +1 -0
- package/dist/types/content/ChartSparkline.d.ts +5 -0
- package/dist/types/content/DataTable.d.ts +28 -0
- package/dist/types/content/DataTableTools.d.ts +44 -0
- package/dist/types/content/FlowAmount.d.ts +28 -0
- package/dist/types/content/PdfViewer.d.ts +32 -0
- package/dist/types/content/balance-summary-messages.d.ts +11 -0
- package/dist/types/content/chart-bar.d.ts +95 -2
- package/dist/types/content/chart-calendar.d.ts +4 -0
- package/dist/types/content/chart-inspection-core.d.ts +21 -16
- package/dist/types/content/chart-inspection.d.ts +5 -1
- package/dist/types/content/chart-map-viewport.d.ts +1 -1
- package/dist/types/content/chart-message-catalog.d.ts +84 -0
- package/dist/types/content/chart-messages.d.ts +2 -33
- package/dist/types/content/chart-snapshot.d.ts +1 -26
- package/dist/types/content/chart-svg.d.ts +1 -1
- package/dist/types/content/chart-time-axis.d.ts +26 -0
- package/dist/types/content/data-table-columns.d.ts +72 -0
- package/dist/types/content/data-table-messages.d.ts +18 -0
- package/dist/types/content/flow-amount-messages.d.ts +11 -0
- package/dist/types/content/index.d.ts +12 -2
- package/dist/types/content/pdf-document.d.ts +5 -0
- package/dist/types/content/pdf-engine.d.ts +9 -0
- package/dist/types/content/pdf-limits.d.ts +43 -0
- package/dist/types/content/pdf-messages.d.ts +16 -0
- package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
- package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
- package/dist/types/inputs/DatePicker.d.ts +22 -0
- package/dist/types/inputs/PeriodPicker.d.ts +24 -0
- package/dist/types/inputs/SelectChip.d.ts +2 -0
- package/dist/types/inputs/date-picker.d.ts +6 -0
- package/dist/types/inputs/index.d.ts +8 -2
- package/dist/types/inputs/input-messages.d.ts +3 -0
- package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
- package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
- package/dist/types/inputs/period-picker-messages.d.ts +34 -0
- package/dist/types/inputs/period.d.ts +134 -0
- package/dist/types/intl/Format.d.ts +5 -0
- package/dist/types/layout/AppWorkspace.d.ts +5 -0
- package/dist/types/layout/DetailPanel.d.ts +12 -0
- package/dist/types/layout/index.d.ts +1 -1
- package/dist/types/surfaces/BudgetList.d.ts +42 -0
- package/dist/types/surfaces/DescriptionList.d.ts +5 -0
- package/dist/types/surfaces/ProgressBar.d.ts +38 -2
- package/dist/types/surfaces/StatCell.d.ts +40 -2
- package/dist/types/surfaces/StatGrid.d.ts +3 -1
- package/dist/types/surfaces/budget-messages.d.ts +30 -0
- package/dist/types/surfaces/delta-badge.d.ts +10 -0
- package/dist/types/surfaces/index.d.ts +4 -3
- package/dist/types/surfaces/person-color.d.ts +2 -2
- package/dist/types/surfaces/stat-cell-messages.d.ts +19 -0
- package/dist/types/widgets/Dashboard.d.ts +42 -0
- package/dist/types/widgets/DashboardFrame.d.ts +58 -0
- package/dist/types/widgets/index.d.ts +2 -0
- package/package.json +8 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/PeriodPicker.tsx"],"sourcesContent":["import { dates } from \"@k2b/stdlib\";\nimport { batch, createComputed, createEffect, createMemo, createSignal, For, type JSX, on, onCleanup, Show } from \"solid-js\";\nimport { prefersMenuSheet } from \"../actions/phone-sheet\";\nimport { createFieldMeta, Field, fieldDescribedBy } from \"../internal/field\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { useDateConfigLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DatePickerPanel } from \"./DatePicker\";\nimport { dateInputPattern, formatDateInput, parseDateInput } from \"./date-input\";\nimport { resolveDateInputMessages } from \"./date-input-messages\";\nimport { errorText } from \"./date-input-status\";\nimport { type DateRangeValue, parseDateValue, pickRangeDay, previewRange, rangeAnchor } from \"./date-picker\";\nimport type { DateContext, MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport {\n formatPeriodDays,\n formatPeriodRange,\n type PeriodPreset,\n type PeriodRange,\n type PeriodValue,\n periodContext,\n periodDayCount,\n widePeriodRangeSample,\n} from \"./period\";\nimport { builtInPresetLabel, type PeriodPickerMessages, usePeriodPickerMessages } from \"./period-picker-messages\";\n\nexport type PeriodPickerProps = Omit<ValueFieldProps<PeriodValue | null>, \"value\"> & {\n /** A preset key or two explicit days; `null` or an unknown preset key shows the placeholder. */\n value: MaybeAccessor<PeriodValue | null>;\n /** The presets in list order, for example `periodPresets.thisMonth` or an app's own `{ key, label, resolve }`. */\n presets: readonly PeriodPreset[];\n /** Offers \"Custom range\" with a calendar in the same popover. On by default. */\n custom?: boolean;\n /** Time zone, week start and locale. Presets resolve \"today\" in `timeZone`; pass the zone the data uses. */\n dateConfig?: DateContext;\n /** The instant \"today\" is read from. Pass the server's instant so the first render and the browser agree. */\n now?: Date;\n /** Shows that a change is saving: the trigger keeps its size, cannot be opened, and shows a spinner. */\n loading?: boolean;\n};\n\ntype PeriodText = { label: string; detail: string };\ntype View = \"list\" | \"custom\";\n\n/** Two months side by side need room for the list and both calendars. */\nconst TWO_MONTHS_QUERY = \"(min-width: 56rem)\";\n\nconst presetLabel = (preset: PeriodPreset, t: PeriodPickerMessages): string =>\n preset.label ?? builtInPresetLabel(t, preset.key) ?? preset.key;\n\n/** Places the popover under (or over) the trigger; it grows toward the side with room, right-aligned near the right edge. */\nconst placePeriodPopover = (trigger: HTMLElement, popover: HTMLElement): void => {\n const margin = 8;\n const gap = 4;\n const rect = trigger.getBoundingClientRect();\n const box = popover.getBoundingClientRect();\n const width = Math.min(box.width, window.innerWidth - margin * 2);\n const fromLeft = rect.left;\n const fromRight = rect.right - width;\n const left = fromLeft + width <= window.innerWidth - margin ? fromLeft : Math.max(margin, fromRight);\n const roomBelow = window.innerHeight - rect.bottom - gap - margin;\n const roomAbove = rect.top - gap - margin;\n const above = box.height > roomBelow && roomAbove > roomBelow;\n const top = above ? Math.max(margin, rect.top - box.height - gap) : Math.min(rect.bottom + gap, window.innerHeight - box.height - margin);\n popover.style.left = `${Math.max(margin, Math.min(left, window.innerWidth - width - margin))}px`;\n popover.style.top = `${Math.max(margin, top)}px`;\n};\n\nconst popoverIsOpen = (popover: HTMLElement | undefined): boolean => {\n try {\n return Boolean(popover?.matches(\":popover-open\"));\n } catch {\n return false;\n }\n};\n\n/**\n * PeriodPicker — one control for the period an evaluation or dashboard shows: presets such as \"This month\" plus a\n * custom range, edited in the same popover (a bottom sheet on phones). The trigger shows the preset with its days or\n * the custom days with their count, and keeps the width of its longest text so nothing beside it moves.\n */\nexport function PeriodPicker(props: PeriodPickerProps): JSX.Element {\n const t = usePeriodPickerMessages();\n const meta = createFieldMeta(props.id);\n const dateConfig = useDateConfigLocale(() => props.dateConfig);\n const locale = () => dateConfig().locale ?? \"en\";\n const value = () => resolveMaybeAccessor(props.value);\n const custom = () => props.custom ?? true;\n const disabled = createMemo(() => Boolean(props.disabled || props.loading));\n // Read again on every opening, so a picker left open past midnight shows the new day's presets next time.\n const [clockTick, setClockTick] = createSignal(0);\n const context = createMemo(() => {\n clockTick();\n return periodContext({\n now: props.now,\n timeZone: dateConfig().timeZone,\n weekStartsOn: dateConfig().weekStartsOn ?? dateConfig().firstDayOfWeek,\n });\n });\n const since = (date: string) => t().since({ date });\n const presetText = (preset: PeriodPreset): PeriodText => ({\n label: presetLabel(preset, t()),\n detail: formatPeriodDays(preset.resolve(context()), context().today, locale(), since),\n });\n const rangeText = (range: { start: string; end: string }): PeriodText => ({\n label: formatPeriodRange(range, locale()),\n detail: t().days({ count: periodDayCount(range) }),\n });\n const selectedPreset = () => {\n const current = value();\n return current && \"preset\" in current ? props.presets.find((preset) => preset.key === current.preset) : undefined;\n };\n const current = createMemo((): PeriodText | undefined => {\n const selected = value();\n if (!selected) return undefined;\n if (\"preset\" in selected) {\n const preset = selectedPreset();\n return preset ? presetText(preset) : undefined;\n }\n return rangeText(selected);\n });\n const joined = (text: PeriodText) => (text.detail ? `${text.label} · ${text.detail}` : text.label);\n // Every text the trigger can show shares one grid cell, so it keeps the widest one's width.\n const widths = createMemo(() => [\n ...props.presets.map((preset) => joined(presetText(preset))),\n ...(custom() ? [joined(rangeText(widePeriodRangeSample(context().today)))] : []),\n t().choosePeriod,\n ]);\n\n const [open, setOpen] = createSignal(false);\n const [view, setView] = createSignal<View>(\"list\");\n const [sheetOpen, setSheetOpen] = createSignal(false);\n let trigger: HTMLButtonElement | undefined;\n let popover: HTMLDivElement | undefined;\n let openedByKeyboard = false;\n const popoverId = `${meta.controlId}-period`;\n const sheetId = `${meta.controlId}-sheet`;\n const valueId = `${meta.controlId}-value`;\n\n // A trigger disabled while a change saves would drop keyboard focus on the page; it comes back once enabled.\n let refocus = false;\n createComputed(\n on(\n disabled,\n (isDisabled) => {\n if (isDisabled) refocus = trigger !== undefined && document.activeElement === trigger;\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n disabled,\n (isDisabled) => {\n if (isDisabled || !refocus) return;\n refocus = false;\n const active = document.activeElement;\n if (trigger?.isConnected && (active === null || active === document.body)) trigger.focus();\n },\n { defer: true },\n ),\n );\n\n const place = () => {\n if (trigger && popover && open()) placePeriodPopover(trigger, popover);\n };\n createEffect(() => {\n if (!open()) return;\n view();\n queueMicrotask(place);\n window.addEventListener(\"resize\", place);\n window.addEventListener(\"scroll\", place, true);\n onCleanup(() => {\n window.removeEventListener(\"resize\", place);\n window.removeEventListener(\"scroll\", place, true);\n });\n });\n\n const close = () => {\n // Before hiding, so the popover does not return focus on its own.\n if (popover?.contains(document.activeElement)) returnFocus(trigger, openedByKeyboard);\n if (popoverIsOpen(popover)) popover?.hidePopover();\n setOpen(false);\n };\n onCleanup(() => {\n if (popoverIsOpen(popover)) popover?.hidePopover();\n });\n\n const pick = (next: PeriodValue) => {\n close();\n if (sheetOpen()) return;\n commitFieldValue(props, next);\n };\n\n const initialView = (): View => {\n const selected = value();\n return custom() && selected && !(\"preset\" in selected) ? \"custom\" : \"list\";\n };\n\n const openSheet = async () => {\n setSheetOpen(true);\n const { openDateSheet } = await import(\"./date-sheet\");\n const result = await openDateSheet<PeriodValue>({\n title: typeof props.label === \"string\" ? props.label : (props[\"aria-label\"] ?? t().period),\n subtitle: current() ? joined(current()!) : t().choosePeriod,\n ariaLabel: typeof props.label === \"string\" ? props.label : (props[\"aria-label\"] ?? t().period),\n id: sheetId,\n locale: locale(),\n content: (closeSheet) => (\n <PeriodPanel\n sheet\n presets={props.presets}\n custom={custom()}\n value={value}\n initialView={initialView()}\n context={context}\n dateConfig={dateConfig}\n presetText={presetText}\n rangeText={rangeText}\n label={props[\"aria-label\"] ?? t().period}\n onPick={closeSheet}\n />\n ),\n });\n setSheetOpen(false);\n if (result) commitFieldValue(props, result);\n trigger?.focus({ preventScroll: true });\n };\n\n const show = () => {\n if (disabled() || !popover) return;\n setClockTick((tick) => tick + 1);\n openedByKeyboard = ringOnReturn(trigger);\n if (prefersMenuSheet()) return void openSheet();\n setView(initialView());\n popover.showPopover();\n setOpen(true);\n queueMicrotask(() => {\n place();\n popover?.querySelector<HTMLElement>('[role=\"option\"][tabindex=\"0\"]')?.focus();\n });\n };\n\n const name = () =>\n props.label ? undefined : `${props[\"aria-label\"] ?? t().period}: ${current() ? joined(current()!) : t().choosePeriod}`;\n\n return (\n <Field\n class={`k2b-period-picker ${props.class ?? \"\"}`}\n label={props.label}\n description={props.description}\n error={props.error}\n meta={meta}\n required={props.required}\n disabled={disabled()}\n >\n <button\n ref={trigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-period-picker__trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={open() || sheetOpen()}\n aria-controls={sheetOpen() ? sheetId : popoverId}\n aria-label={name()}\n aria-labelledby={props.label ? `${meta.labelId} ${valueId}` : undefined}\n aria-describedby={fieldDescribedBy(meta, props)}\n aria-invalid={resolveMaybeAccessor(props.error) ? \"true\" : undefined}\n aria-busy={props.loading ? \"true\" : undefined}\n disabled={disabled()}\n onClick={() => (open() ? close() : show())}\n onKeyDown={(event) => {\n if ((event.key === \"ArrowDown\" || event.key === \"ArrowUp\") && !open()) {\n event.preventDefault();\n show();\n }\n }}\n >\n <i class=\"ti ti-calendar\" aria-hidden=\"true\" />\n <span class=\"k2b-period-picker__value\" data-placeholder={current() ? undefined : \"true\"}>\n <span id={valueId}>\n <Show when={current()} fallback={t().choosePeriod}>\n {(text) => (\n <>\n {text().label}\n <Show when={text().detail}>\n <span class=\"k2b-period-picker__detail\"> · {text().detail}</span>\n </Show>\n </>\n )}\n </Show>\n </span>\n <For each={widths()}>{(text) => <span aria-hidden=\"true\">{text}</span>}</For>\n </span>\n {/* Both glyphs are one icon wide, so a saving picker keeps its size. */}\n <i class={props.loading ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-chevron-down\"} aria-hidden=\"true\" />\n </button>\n <div\n ref={(element) => {\n popover = element;\n // Light dismiss (a click outside) hides it without us; keep the state in step.\n element.addEventListener(\"toggle\", () => {\n if (!popoverIsOpen(element)) setOpen(false);\n });\n }}\n id={popoverId}\n class=\"k2b-period-picker__popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={props[\"aria-label\"] ?? (typeof props.label === \"string\" ? props.label : t().period)}\n onKeyDown={(event) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n event.stopPropagation();\n close();\n }}\n >\n <Show when={open()}>\n <PeriodPanel\n presets={props.presets}\n custom={custom()}\n value={value}\n initialView={view()}\n onViewChange={setView}\n context={context}\n dateConfig={dateConfig}\n presetText={presetText}\n rangeText={rangeText}\n label={props[\"aria-label\"] ?? t().period}\n onPick={pick}\n />\n </Show>\n </div>\n </Field>\n );\n}\n\nfunction PeriodPanel(props: {\n presets: readonly PeriodPreset[];\n custom: boolean;\n value: () => PeriodValue | null;\n initialView: View;\n onViewChange?: (view: View) => void;\n context: () => { today: string; weekStartsOn: 0 | 1 };\n dateConfig: () => DateContext;\n presetText: (preset: PeriodPreset) => PeriodText;\n rangeText: (range: { start: string; end: string }) => PeriodText;\n label: string;\n sheet?: boolean;\n onPick: (value: PeriodValue) => void;\n}): JSX.Element {\n const t = usePeriodPickerMessages();\n const [view, setViewSignal] = createSignal<View>(props.initialView);\n const setView = (next: View) => {\n setViewSignal(next);\n props.onViewChange?.(next);\n };\n const selected = () => props.value();\n const explicit = () => {\n const current = selected();\n return current && !(\"preset\" in current) ? current : undefined;\n };\n const isSelected = (preset: PeriodPreset) => {\n const current = selected();\n return Boolean(current && \"preset\" in current && current.preset === preset.key);\n };\n const optionCount = () => props.presets.length + (props.custom ? 1 : 0);\n const initialActive = () => {\n const index = props.presets.findIndex(isSelected);\n if (index >= 0) return index;\n return explicit() && props.custom ? props.presets.length : 0;\n };\n const [active, setActive] = createSignal(initialActive());\n let list: HTMLDivElement | undefined;\n const focusOption = (index: number) => {\n setActive(index);\n queueMicrotask(() => list?.querySelector<HTMLElement>(`[data-option-index=\"${index}\"]`)?.focus());\n };\n const onListKeyDown = (event: KeyboardEvent) => {\n const count = optionCount();\n const moves: Partial<Record<string, number>> = {\n ArrowDown: (active() + 1) % count,\n ArrowUp: (active() - 1 + count) % count,\n Home: 0,\n End: count - 1,\n };\n const next = moves[event.key];\n if (next === undefined) return;\n event.preventDefault();\n focusOption(next);\n };\n let panel: HTMLDivElement | undefined;\n const openCustom = () => {\n setActive(props.presets.length);\n setView(\"custom\");\n // In the sheet the list goes away with the focused option; focus continues on the calendar's day.\n if (props.sheet) queueMicrotask(() => panel?.querySelector<HTMLElement>('[data-date-focus=\"true\"]')?.focus());\n };\n\n return (\n <div ref={panel} class=\"k2b-period-picker__panel\" data-view={view()} data-sheet={props.sheet ? \"true\" : undefined}>\n <Show when={!props.sheet || view() === \"list\"}>\n <div ref={list} class=\"k2b-period-picker__list\" role=\"listbox\" aria-label={props.label} onKeyDown={onListKeyDown}>\n <For each={props.presets}>\n {(preset, index) => {\n const text = () => props.presetText(preset);\n return (\n <button\n type=\"button\"\n role=\"option\"\n class=\"k2b-dropdown__item k2b-period-picker__option\"\n data-option-index={index()}\n aria-selected={isSelected(preset) && view() === \"list\"}\n tabIndex={active() === index() ? 0 : -1}\n onFocus={() => setActive(index())}\n onClick={() => props.onPick({ preset: preset.key })}\n >\n <span class=\"k2b-dropdown__copy\">\n <span>{text().label}</span>\n </span>\n <span class=\"k2b-period-picker__hint\">{text().detail}</span>\n <i\n class=\"ti ti-check k2b-dropdown__check\"\n aria-hidden=\"true\"\n data-hidden={isSelected(preset) && view() === \"list\" ? undefined : \"true\"}\n />\n </button>\n );\n }}\n </For>\n <Show when={props.custom}>\n <button\n type=\"button\"\n role=\"option\"\n class=\"k2b-dropdown__item k2b-period-picker__option k2b-period-picker__custom\"\n data-option-index={props.presets.length}\n aria-selected={view() === \"custom\" || Boolean(explicit())}\n tabIndex={active() === props.presets.length ? 0 : -1}\n onFocus={() => setActive(props.presets.length)}\n onClick={openCustom}\n >\n <span class=\"k2b-dropdown__copy\">\n <span>{t().custom}</span>\n </span>\n <span class=\"k2b-period-picker__hint\">{explicit() ? props.rangeText(explicit()!).label : \"\"}</span>\n <i class=\"ti ti-chevron-right k2b-dropdown__check\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Show>\n <Show when={view() === \"custom\"}>\n <RangeEditor\n initial={(() => {\n const current = explicit();\n if (current) return current;\n const preset = props.presets.find(isSelected);\n const range: PeriodRange | undefined = preset?.resolve(props.context());\n return range?.start && range.end ? { start: range.start, end: range.end } : null;\n })()}\n today={props.context().today}\n dateConfig={props.dateConfig}\n rangeText={props.rangeText}\n sheet={props.sheet}\n onBack={() => {\n setView(\"list\");\n focusOption(props.presets.length);\n }}\n onApply={(range) => props.onPick(range)}\n />\n </Show>\n </div>\n );\n}\n\nfunction RangeEditor(props: {\n initial: { start: string; end: string } | null;\n today: string;\n dateConfig: () => DateContext;\n rangeText: (range: { start: string; end: string }) => PeriodText;\n sheet?: boolean;\n onBack: () => void;\n onApply: (range: { start: string; end: string }) => void;\n}): JSX.Element {\n const t = usePeriodPickerMessages();\n const ui = useUiMessages();\n const locale = () => props.dateConfig().locale ?? \"en\";\n const inputT = () => resolveDateInputMessages(locale());\n const config = () => ({ ...props.dateConfig(), weekStartsOn: props.dateConfig().weekStartsOn ?? props.dateConfig().firstDayOfWeek ?? 1 });\n const [draft, setDraft] = createSignal<DateRangeValue>({ start: props.initial?.start ?? null, end: props.initial?.end ?? null });\n const [anchor, setAnchor] = createSignal<string | null>(null);\n const [preview, setPreview] = createSignal<string | null>(null);\n const [startText, setStartText] = createSignal(props.initial ? formatDateInput(props.initial.start, locale()) : \"\");\n const [endText, setEndText] = createSignal(props.initial ? formatDateInput(props.initial.end, locale()) : \"\");\n const [startError, setStartError] = createSignal(\"\");\n const [endError, setEndError] = createSignal(\"\");\n // Follows the window: narrowing it below two months' room drops the second month, widening adds it.\n const query = !props.sheet && typeof matchMedia === \"function\" ? matchMedia(TWO_MONTHS_QUERY) : undefined;\n const [wide, setWide] = createSignal(Boolean(query?.matches));\n if (query) {\n const update = () => setWide(query.matches);\n query.addEventListener(\"change\", update);\n onCleanup(() => query.removeEventListener(\"change\", update));\n }\n const twoMonths = () => !props.sheet && wide();\n // Months are anchored on their 1st: stepping from 31 March or 30 November never skips a month.\n const monthOf = (key: string, offset = 0) => {\n const year = Number(key.slice(0, 4));\n const month = Number(key.slice(5, 7)) - 1 + offset;\n return parseDateValue(`${year + Math.floor(month / 12)}-${String((((month % 12) + 12) % 12) + 1).padStart(2, \"0\")}-01`, config());\n };\n const keyOf = (date: Date) => dates.formatDateKey(date, config());\n // The first visible month: the end's month, and the one before it when two months show.\n const [first, setFirstMonth] = createSignal(monthOf(props.initial?.end ?? props.today, twoMonths() ? -1 : 0));\n const setFirst = (date: Date) => setFirstMonth(monthOf(keyOf(date)));\n const second = createMemo(() => monthOf(keyOf(first()), 1));\n const shown = createMemo(() => previewRange(draft(), anchor(), preview()));\n let months: HTMLDivElement | undefined;\n const startId = createFieldMeta().controlId;\n const endId = createFieldMeta().controlId;\n\n const isShown = (date: Date) =>\n dates.isSameMonth(date, first(), config()) || (twoMonths() && dates.isSameMonth(date, second(), config()));\n\n const fill = (range: DateRangeValue) => {\n setStartText(range.start ? formatDateInput(range.start, locale()) : \"\");\n setEndText(range.end ? formatDateInput(range.end, locale()) : \"\");\n setStartError(\"\");\n setEndError(\"\");\n };\n const pickDay = (key: string) => {\n const next = pickRangeDay(draft(), anchor(), key);\n batch(() => {\n setDraft(next.range);\n setAnchor(next.anchor);\n setPreview(null);\n fill(next.range);\n });\n };\n /** Reads one typed half; returns the day, `null` for empty, or `undefined` after showing an error. */\n const readText = (text: string, setError: (message: string) => void): string | null | undefined => {\n const result = parseDateInput(text, { today: props.today, locale: locale() });\n if (result.kind === \"empty\") return null;\n if (result.kind === \"error\") {\n setError(errorText(result.error, locale(), inputT(), props.today));\n return undefined;\n }\n setError(\"\");\n return result.date;\n };\n const commitTyped = () => {\n const start = readText(startText(), setStartError);\n const end = readText(endText(), setEndError);\n if (start === undefined || end === undefined) return undefined;\n const range = { start, end };\n batch(() => {\n setDraft(range);\n setAnchor(null);\n });\n if (start && end && end < start) {\n setEndError(inputT().endBeforeStart);\n return undefined;\n }\n if (start && !end) setEndError(inputT().missingEnd);\n if (end && !start) setStartError(inputT().missingStart);\n const visible = end ?? start;\n if (visible && !isShown(parseDateValue(visible, config()))) setFirstMonth(monthOf(visible, twoMonths() ? -1 : 0));\n return start && end ? { start, end } : undefined;\n };\n const complete = () => {\n const range = draft();\n return range.start && range.end && !startError() && !endError() ? { start: range.start, end: range.end } : undefined;\n };\n const apply = () => {\n const typed = commitTyped();\n if (typed) props.onApply(typed);\n };\n const fieldKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Enter\") return;\n event.preventDefault();\n apply();\n };\n const placeholder = () =>\n dateInputPattern(locale(), { day: inputT().dayLetters, month: inputT().monthLetters, year: inputT().yearLetters });\n const status = () => {\n const range = shown();\n return range.start && range.end ? props.rangeText({ start: range.start, end: range.end }).detail : \"\";\n };\n\n const field = (fieldProps: { id: string; label: string; text: () => string; setText: (text: string) => void; error: () => string }) => (\n <div class=\"k2b-field k2b-period-picker__field\" data-invalid={fieldProps.error() ? \"true\" : undefined}>\n <label class=\"k2b-field__label\" for={fieldProps.id}>\n {fieldProps.label}\n </label>\n <div class=\"k2b-input-shell\">\n <input\n id={fieldProps.id}\n class=\"k2b-input\"\n type=\"text\"\n inputMode=\"numeric\"\n autocomplete=\"off\"\n spellcheck={false}\n placeholder={placeholder()}\n value={fieldProps.text()}\n aria-invalid={fieldProps.error() ? \"true\" : undefined}\n aria-describedby={fieldProps.error() ? `${fieldProps.id}-error` : undefined}\n onInput={(event) => fieldProps.setText(event.currentTarget.value)}\n onBlur={() => commitTyped()}\n onKeyDown={fieldKeyDown}\n />\n </div>\n <p class=\"k2b-period-picker__error\" id={`${fieldProps.id}-error`}>\n {fieldProps.error()}\n </p>\n </div>\n );\n\n return (\n <div class=\"k2b-period-picker__editor\" role=\"group\" aria-label={t().custom}>\n <Show when={props.sheet}>\n <button type=\"button\" class=\"k2b-period-picker__back\" onClick={() => props.onBack()}>\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n {t().backToPresets}\n </button>\n </Show>\n <div class=\"k2b-period-picker__fields\">\n {field({ id: startId, label: t().from, text: startText, setText: setStartText, error: startError })}\n {field({ id: endId, label: t().to, text: endText, setText: setEndText, error: endError })}\n </div>\n <div ref={months} class=\"k2b-period-picker__months\">\n <DatePickerPanel\n visibleMonth={first}\n setVisibleMonth={setFirst}\n range={shown}\n focusDate={() => draft().start}\n onSelect={pickDay}\n onDayPreview={(key) => setPreview(rangeAnchor(draft(), anchor()) ? key : null)}\n dateConfig={config()}\n nav={twoMonths() ? \"previous\" : \"both\"}\n hideOutside={twoMonths()}\n isShown={isShown}\n focusRoot={() => months}\n />\n <Show when={twoMonths()}>\n <DatePickerPanel\n visibleMonth={second}\n setVisibleMonth={(date) => setFirstMonth(monthOf(keyOf(date), -1))}\n range={shown}\n focusDate={() => draft().end}\n onSelect={pickDay}\n onDayPreview={(key) => setPreview(rangeAnchor(draft(), anchor()) ? key : null)}\n dateConfig={config()}\n nav=\"next\"\n hideOutside\n isShown={isShown}\n focusRoot={() => months}\n />\n </Show>\n </div>\n <div class=\"k2b-period-picker__actions\">\n <span class=\"k2b-date-duration\" aria-live=\"polite\">\n <Show when={shown().start && shown().end}>\n <i class=\"ti ti-hourglass-low\" aria-hidden=\"true\" />\n </Show>\n {status()}\n </span>\n <button type=\"button\" class=\"k2b-date-apply\" disabled={!complete()} onClick={apply}>\n {ui().apply}\n </button>\n </div>\n </div>\n );\n}\n\nexport default PeriodPicker;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,8 +11,9 @@ import { memo as _$memo } from "solid-js/web";
|
|
|
11
11
|
var _tmpl$ = /*#__PURE__*/_$template(`<span>`),
|
|
12
12
|
_tmpl$2 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
13
13
|
_tmpl$3 = /*#__PURE__*/_$template(`<img alt>`),
|
|
14
|
-
_tmpl$4 = /*#__PURE__*/_$template(`<
|
|
15
|
-
|
|
14
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<span aria-hidden=true>`),
|
|
15
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<input type=hidden>`);
|
|
16
|
+
import { createComputed, createEffect, createMemo, For, on, Show } from "solid-js";
|
|
16
17
|
import { Dropdown } from "../actions/Dropdown";
|
|
17
18
|
import { createFieldMeta, Field, fieldControlAria } from "../internal/field";
|
|
18
19
|
import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
|
|
@@ -144,16 +145,16 @@ export function SelectChip(props) {
|
|
|
144
145
|
return selected()?.icon ?? props.icon;
|
|
145
146
|
},
|
|
146
147
|
children: icon => (() => {
|
|
147
|
-
var _el$
|
|
148
|
-
_$effect(() => _$className(_el$
|
|
149
|
-
return _el$
|
|
148
|
+
var _el$4 = _$getNextElement(_tmpl$2);
|
|
149
|
+
_$effect(() => _$className(_el$4, icon()));
|
|
150
|
+
return _el$4;
|
|
150
151
|
})()
|
|
151
152
|
});
|
|
152
153
|
},
|
|
153
154
|
children: image => (() => {
|
|
154
|
-
var _el$
|
|
155
|
-
_$effect(() => _$setAttribute(_el$
|
|
156
|
-
return _el$
|
|
155
|
+
var _el$5 = _$getNextElement(_tmpl$3);
|
|
156
|
+
_$effect(() => _$setAttribute(_el$5, "src", image()));
|
|
157
|
+
return _el$5;
|
|
157
158
|
})()
|
|
158
159
|
}), _$createComponent(Show, {
|
|
159
160
|
get when() {
|
|
@@ -162,13 +163,45 @@ export function SelectChip(props) {
|
|
|
162
163
|
get children() {
|
|
163
164
|
return [(() => {
|
|
164
165
|
var _el$ = _$getNextElement(_tmpl$);
|
|
165
|
-
_$insert(_el$, (
|
|
166
|
-
|
|
166
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
167
|
+
get when() {
|
|
168
|
+
return props.stableWidth;
|
|
169
|
+
},
|
|
170
|
+
get fallback() {
|
|
171
|
+
return selected()?.label ?? props.placeholder ?? "";
|
|
172
|
+
},
|
|
173
|
+
get children() {
|
|
174
|
+
return [(() => {
|
|
175
|
+
var _el$2 = _$getNextElement(_tmpl$);
|
|
176
|
+
_$insert(_el$2, () => selected()?.label ?? props.placeholder ?? "");
|
|
177
|
+
return _el$2;
|
|
178
|
+
})(), _$createComponent(For, {
|
|
179
|
+
get each() {
|
|
180
|
+
return props.options;
|
|
181
|
+
},
|
|
182
|
+
children: option => (() => {
|
|
183
|
+
var _el$6 = _$getNextElement(_tmpl$4);
|
|
184
|
+
_$insert(_el$6, () => option.label);
|
|
185
|
+
return _el$6;
|
|
186
|
+
})()
|
|
187
|
+
})];
|
|
188
|
+
}
|
|
189
|
+
}));
|
|
190
|
+
_$effect(_p$ => {
|
|
191
|
+
var _v$ = selected() ? undefined : "true",
|
|
192
|
+
_v$2 = props.stableWidth ? "true" : undefined;
|
|
193
|
+
_v$ !== _p$.e && _$setAttribute(_el$, "data-placeholder", _p$.e = _v$);
|
|
194
|
+
_v$2 !== _p$.t && _$setAttribute(_el$, "data-stable-width", _p$.t = _v$2);
|
|
195
|
+
return _p$;
|
|
196
|
+
}, {
|
|
197
|
+
e: undefined,
|
|
198
|
+
t: undefined
|
|
199
|
+
});
|
|
167
200
|
return _el$;
|
|
168
201
|
})(), (() => {
|
|
169
|
-
var _el$
|
|
170
|
-
_$effect(() => _$className(_el$
|
|
171
|
-
return _el$
|
|
202
|
+
var _el$3 = _$getNextElement(_tmpl$2);
|
|
203
|
+
_$effect(() => _$className(_el$3, props.loading ? "ti ti-loader-2 k2b-spin" : "ti ti-chevron-down"));
|
|
204
|
+
return _el$3;
|
|
172
205
|
})()];
|
|
173
206
|
}
|
|
174
207
|
})];
|
|
@@ -180,10 +213,10 @@ export function SelectChip(props) {
|
|
|
180
213
|
return props.name;
|
|
181
214
|
},
|
|
182
215
|
children: name => (() => {
|
|
183
|
-
var _el$
|
|
184
|
-
_$effect(() => _$setAttribute(_el$
|
|
185
|
-
_$effect(() => _$setProperty(_el$
|
|
186
|
-
return _el$
|
|
216
|
+
var _el$7 = _$getNextElement(_tmpl$5);
|
|
217
|
+
_$effect(() => _$setAttribute(_el$7, "name", name()));
|
|
218
|
+
_$effect(() => _$setProperty(_el$7, "value", value()));
|
|
219
|
+
return _el$7;
|
|
187
220
|
})()
|
|
188
221
|
})];
|
|
189
222
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/SelectChip.tsx"],"sourcesContent":["import { createComputed, createEffect, createMemo, type JSX, on, Show } from \"solid-js\";\nimport type { ButtonSize } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"../actions/Dropdown\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { useSelectMessages } from \"./select-messages\";\n\nexport type SelectChipOption<T extends string | number = string> = {\n value: T;\n label: string;\n description?: string;\n icon?: string;\n image?: string;\n disabled?: boolean;\n};\n\nexport type SelectChipProps<T extends string | number = string> = ValueFieldProps<T> & {\n value: MaybeAccessor<T>;\n options: SelectChipOption<T>[];\n icon?: string;\n iconOnly?: boolean;\n size?: ButtonSize;\n placeholder?: string;\n position?: DropdownPosition;\n /** Exact menu width as a CSS length. Without it the menu sizes to its options, at least `10rem`. */\n menuWidth?: string;\n name?: string;\n /** Shows that a change from this chip is saving: the chip stays in place with\n * its size, cannot be opened, is marked busy, and shows a spinner where its\n * chevron (or, icon-only, its icon) is. */\n loading?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport function SelectChip<T extends string | number = string>(props: SelectChipProps<T>): JSX.Element {\n const selectMessages = useSelectMessages();\n const meta = createFieldMeta(props.id);\n const value = () => resolveMaybeAccessor(props.value)!;\n const selected = () => props.options.find((option) => option.value === value());\n const disabled = createMemo(() => Boolean(props.disabled || props.loading));\n // A disabled button loses focus, so a chip disabled while a change saves (its own or one elsewhere) would leave\n // keyboard focus on the page. Focus returns to the chip once it is enabled again, unless it has moved on\n // meanwhile. The check runs as a computation, before the DOM update disables the button.\n let trigger: HTMLButtonElement | undefined;\n let refocus = false;\n createComputed(\n on(\n disabled,\n (isDisabled) => {\n if (isDisabled) refocus = trigger !== undefined && document.activeElement === trigger;\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n disabled,\n (isDisabled) => {\n if (isDisabled || !refocus) return;\n refocus = false;\n const active = document.activeElement;\n if (trigger?.isConnected && (active === null || active === document.body)) trigger.focus();\n },\n { defer: true },\n ),\n );\n const triggerLabel = () => props[\"aria-label\"] ?? (typeof props.label === \"string\" ? props.label : selectMessages().chooseOption);\n const items = createMemo<DropdownItem[]>(() =>\n props.options.map((option) => ({\n action: () => commitFieldValue(props, option.value),\n checked: () => option.value === value(),\n choice: \"radio\" as const,\n class: \"k2b-select-chip__option\",\n description: option.description,\n disabled: option.disabled,\n icon: option.icon,\n image: option.image,\n label: option.label,\n })),\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n meta={meta}\n required={props.required}\n disabled={disabled()}\n >\n <Dropdown.Root\n // A controlled `open` cannot bypass a disabled or saving chip.\n open={props.open === undefined ? undefined : props.open && !disabled()}\n onOpenChange={props.onOpenChange}\n disabled={disabled()}\n position={props.position ?? \"bottom-right\"}\n /* Cloud opens this menu at `w-40`; the stylesheet keeps that as its floor. */\n width={props.menuWidth}\n menuClass=\"k2b-select-chip__menu\"\n label={triggerLabel()}\n items={items()}\n >\n <Dropdown.Trigger\n appearance={props.iconOnly ? \"button\" : \"plain\"}\n id={meta.controlId}\n ref={(element: HTMLButtonElement) => {\n trigger = element;\n }}\n class={props.iconOnly ? undefined : \"k2b-select-chip\"}\n disabled={disabled()}\n aria-busy={props.loading ? \"true\" : undefined}\n iconOnly={props.iconOnly}\n loading={props.iconOnly ? props.loading : undefined}\n label={triggerLabel()}\n size={props.iconOnly ? props.size : undefined}\n title={props.iconOnly ? triggerLabel() : undefined}\n {...fieldControlAria(meta, props)}\n >\n <Show\n when={selected()?.image}\n fallback={<Show when={selected()?.icon ?? props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(image) => <img src={image()} alt=\"\" />}\n </Show>\n <Show when={!props.iconOnly}>\n <span data-placeholder={selected() ? undefined : \"true\"}>{selected()?.label ?? props.placeholder ?? \"\"}</span>\n {/* Both glyphs are one icon wide, so a saving chip keeps its size. */}\n <i class={props.loading ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-chevron-down\"} aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown.Root>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value()} />}</Show>\n </Field>\n );\n}\n\nexport default SelectChip;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/SelectChip.tsx"],"sourcesContent":["import { createComputed, createEffect, createMemo, For, type JSX, on, Show } from \"solid-js\";\nimport type { ButtonSize } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"../actions/Dropdown\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { useSelectMessages } from \"./select-messages\";\n\nexport type SelectChipOption<T extends string | number = string> = {\n value: T;\n label: string;\n description?: string;\n icon?: string;\n image?: string;\n disabled?: boolean;\n};\n\nexport type SelectChipProps<T extends string | number = string> = ValueFieldProps<T> & {\n value: MaybeAccessor<T>;\n options: SelectChipOption<T>[];\n icon?: string;\n iconOnly?: boolean;\n size?: ButtonSize;\n placeholder?: string;\n position?: DropdownPosition;\n /** Exact menu width as a CSS length. Without it the menu sizes to its options, at least `10rem`. */\n menuWidth?: string;\n name?: string;\n /** Shows that a change from this chip is saving: the chip stays in place with\n * its size, cannot be opened, is marked busy, and shows a spinner where its\n * chevron (or, icon-only, its icon) is. */\n loading?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Keeps the width of the longest option label, so a new choice never moves what sits beside the chip. */\n stableWidth?: boolean;\n};\n\nexport function SelectChip<T extends string | number = string>(props: SelectChipProps<T>): JSX.Element {\n const selectMessages = useSelectMessages();\n const meta = createFieldMeta(props.id);\n const value = () => resolveMaybeAccessor(props.value)!;\n const selected = () => props.options.find((option) => option.value === value());\n const disabled = createMemo(() => Boolean(props.disabled || props.loading));\n // A disabled button loses focus, so a chip disabled while a change saves (its own or one elsewhere) would leave\n // keyboard focus on the page. Focus returns to the chip once it is enabled again, unless it has moved on\n // meanwhile. The check runs as a computation, before the DOM update disables the button.\n let trigger: HTMLButtonElement | undefined;\n let refocus = false;\n createComputed(\n on(\n disabled,\n (isDisabled) => {\n if (isDisabled) refocus = trigger !== undefined && document.activeElement === trigger;\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n disabled,\n (isDisabled) => {\n if (isDisabled || !refocus) return;\n refocus = false;\n const active = document.activeElement;\n if (trigger?.isConnected && (active === null || active === document.body)) trigger.focus();\n },\n { defer: true },\n ),\n );\n const triggerLabel = () => props[\"aria-label\"] ?? (typeof props.label === \"string\" ? props.label : selectMessages().chooseOption);\n const items = createMemo<DropdownItem[]>(() =>\n props.options.map((option) => ({\n action: () => commitFieldValue(props, option.value),\n checked: () => option.value === value(),\n choice: \"radio\" as const,\n class: \"k2b-select-chip__option\",\n description: option.description,\n disabled: option.disabled,\n icon: option.icon,\n image: option.image,\n label: option.label,\n })),\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n meta={meta}\n required={props.required}\n disabled={disabled()}\n >\n <Dropdown.Root\n // A controlled `open` cannot bypass a disabled or saving chip.\n open={props.open === undefined ? undefined : props.open && !disabled()}\n onOpenChange={props.onOpenChange}\n disabled={disabled()}\n position={props.position ?? \"bottom-right\"}\n /* Cloud opens this menu at `w-40`; the stylesheet keeps that as its floor. */\n width={props.menuWidth}\n menuClass=\"k2b-select-chip__menu\"\n label={triggerLabel()}\n items={items()}\n >\n <Dropdown.Trigger\n appearance={props.iconOnly ? \"button\" : \"plain\"}\n id={meta.controlId}\n ref={(element: HTMLButtonElement) => {\n trigger = element;\n }}\n class={props.iconOnly ? undefined : \"k2b-select-chip\"}\n disabled={disabled()}\n aria-busy={props.loading ? \"true\" : undefined}\n iconOnly={props.iconOnly}\n loading={props.iconOnly ? props.loading : undefined}\n label={triggerLabel()}\n size={props.iconOnly ? props.size : undefined}\n title={props.iconOnly ? triggerLabel() : undefined}\n {...fieldControlAria(meta, props)}\n >\n <Show\n when={selected()?.image}\n fallback={<Show when={selected()?.icon ?? props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(image) => <img src={image()} alt=\"\" />}\n </Show>\n <Show when={!props.iconOnly}>\n <span data-placeholder={selected() ? undefined : \"true\"} data-stable-width={props.stableWidth ? \"true\" : undefined}>\n <Show when={props.stableWidth} fallback={selected()?.label ?? props.placeholder ?? \"\"}>\n <span>{selected()?.label ?? props.placeholder ?? \"\"}</span>\n <For each={props.options}>{(option) => <span aria-hidden=\"true\">{option.label}</span>}</For>\n </Show>\n </span>\n {/* Both glyphs are one icon wide, so a saving chip keeps its size. */}\n <i class={props.loading ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-chevron-down\"} aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown.Root>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value()} />}</Show>\n </Field>\n );\n}\n\nexport default SelectChip;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -121,6 +121,19 @@ export const toDateTimeValue = (date, time, context) => {
|
|
|
121
121
|
}
|
|
122
122
|
return local;
|
|
123
123
|
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* The value an applied draft commits. An untouched draft keeps the exact value: the panel shows minutes in the
|
|
127
|
+
* picker's zone, and a wall time that a daylight-saving change repeats names two instants, so rebuilding it could
|
|
128
|
+
* move the value by an hour or drop its seconds.
|
|
129
|
+
*/
|
|
130
|
+
export const draftDateTimeValue = (value, date, time, context) => {
|
|
131
|
+
if (value) {
|
|
132
|
+
const current = splitDateTime(value, context);
|
|
133
|
+
if (current.date === date && current.time === time) return value;
|
|
134
|
+
}
|
|
135
|
+
return toDateTimeValue(date, time, context);
|
|
136
|
+
};
|
|
124
137
|
export const formatDateTimeValue = (value, context) => value ? dates.formatDateTime(value, pickerContext(context)) : "";
|
|
125
138
|
export const normalizeTimeInput = value => {
|
|
126
139
|
const [hours = "", minutes = ""] = value.split(":");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/date-picker.ts"],"sourcesContent":["import { type DateContext, dates } from \"@k2b/stdlib\";\n\nexport type DateRangeValue = {\n start: string | null;\n end: string | null;\n};\n\nexport const pickerContext = (context?: DateContext): DateContext => ({\n weekStartsOn: 1,\n ...context,\n});\n\nexport const hasInstantOffset = (value: string): boolean => /[T\\s].*([zZ]|[+-]\\d{2}:?\\d{2})$/.test(value);\n\nexport const dateKey = (date: Date | string, context?: DateContext): string => dates.formatDateKey(date, pickerContext(context));\n\n/**\n * Short month names for the month panel. `dates.months()` only returns the long\n * form (\"September\"), which overflows the three-column month grid, so the short\n * form is derived here while staying locale aware.\n */\nexport const monthNames = (context?: DateContext): string[] => {\n const merged = pickerContext(context);\n const formatter = new Intl.DateTimeFormat(merged.locale, { month: \"short\", timeZone: \"UTC\" });\n return Array.from({ length: 12 }, (_, index) => formatter.format(Date.UTC(2024, index, 15)));\n};\n\n/**\n * Picks the roving-tabindex day for a rendered month grid. The preferred day is\n * used when the grid actually contains it, otherwise the first day of the\n * visible month keeps exactly one cell reachable by Tab.\n */\nexport const resolveFocusDay = (monthDayKeys: readonly string[], preferred: string | null | undefined): string | undefined =>\n preferred && monthDayKeys.includes(preferred) ? preferred : monthDayKeys[0];\n\nexport const yearMonth = (date: Date, context?: DateContext): { year: number; month: number } => {\n const [year = \"1970\", month = \"1\"] = dateKey(date, context).split(\"-\");\n return { year: Number(year), month: Number(month) - 1 };\n};\n\nexport const monthDate = (year: number, month: number, context?: DateContext): Date => {\n const value = `${year}-${String(month + 1).padStart(2, \"0\")}-01T12:00`;\n if (context?.timeZone) {\n return new Date(dates.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n }\n return new Date(year, month, 1, 12);\n};\n\n/**\n * Milliseconds from `now` until the next calendar day starts in the picker's\n * time zone, so a panel left open past midnight moves its today mark on time.\n * The next day's start is resolved from its date key: where a DST change skips\n * or repeats midnight, the day starts at its first existing instant.\n */\nexport const msUntilNextDay = (now: Date, context?: DateContext): number => {\n const merged = pickerContext(context);\n const { timeZone } = merged;\n const next = timeZone\n ? Date.parse(\n dates.zonedDateTimeToInstant(dates.addZoned(`${dateKey(now, merged)}T00:00`, { timeZone, days: 1 }), timeZone, {\n disambiguation: \"compatible\",\n }),\n )\n : dates.addDays(now, 1, merged).getTime();\n const delay = next - now.getTime();\n // The timer re-arms after every tick, so it must never fire at once. Should a\n // zone's rules still put the next day behind `now`, look again in a minute,\n // the finest unit the pickers show.\n return delay > 0 ? delay : 60_000;\n};\n\n/** Whether `value` is a date key such as `2026-10-24`, a date without a time. */\nexport const isDateKey = (value: string): boolean => /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n\nexport const parseDateValue = (value: string | null | undefined, context?: DateContext): Date => {\n if (!value) return dates.today(pickerContext(context));\n return dates.parseCalendarDate(value.slice(0, 10), pickerContext(context));\n};\n\n/** A date key names a calendar day, so it is formatted at noon UTC in UTC: no runtime or picker zone can move it. */\nexport const displayDate = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDate(`${value.slice(0, 10)}T12:00:00.000Z`, { ...pickerContext(context), timeZone: \"UTC\" }) : \"\";\n\nconst localDateTimeInput = (value: string): string => {\n if (!hasInstantOffset(value)) return value.slice(0, 16);\n const date = new Date(value);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\nexport const dateTimeInput = (value: string | null | undefined, context?: DateContext): string => {\n if (!value) return \"\";\n if (context?.timeZone && hasInstantOffset(value)) return dates.instantToZonedInput(value, context.timeZone);\n return localDateTimeInput(value);\n};\n\nexport const splitDateTime = (value: string | null | undefined, context?: DateContext): { date: string; time: string } => {\n const input = dateTimeInput(value, context);\n const [date = \"\", time = \"\"] = input.split(\"T\");\n return { date, time: time.slice(0, 5) };\n};\n\nexport const isCompleteTime = (value: string): boolean => {\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\n const [hours, minutes] = value.split(\":\").map(Number);\n return hours! >= 0 && hours! <= 23 && minutes! >= 0 && minutes! <= 59;\n};\n\nexport const toDateTimeValue = (date: string, time: string, context?: DateContext): string | null => {\n if (!date) return null;\n const resolvedTime = time || \"00:00\";\n if (!isCompleteTime(resolvedTime)) return null;\n const local = `${date}T${resolvedTime}`;\n if (context?.timeZone) {\n return dates.zonedDateTimeToInstant(local, context.timeZone, { disambiguation: \"compatible\" });\n }\n return local;\n};\n\nexport const formatDateTimeValue = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDateTime(value, pickerContext(context)) : \"\";\n\nexport const normalizeTimeInput = (value: string): string => {\n const [hours = \"\", minutes = \"\"] = value.split(\":\");\n const hour = Math.max(0, Math.min(23, Number(hours || 0)));\n const minute = Math.max(0, Math.min(59, Number(minutes || 0)));\n return `${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n};\n\nexport const filterTimeInput = (value: string): string => {\n const digits = value.replace(/\\D/g, \"\").slice(0, 4);\n return digits.length <= 2 ? digits : `${digits.slice(0, 2)}:${digits.slice(2)}`;\n};\n\nexport const orderedRange = (start: string, end: string): DateRangeValue =>\n end.localeCompare(start) < 0 ? { start: end, end: start } : { start, end };\n\n/**\n * The range a click picks. A click starts a complete one-day range on its day, and it becomes the anchor; the next\n * click on another day extends the range from the anchor, whichever side it lies on. A click on the anchor keeps the\n * one-day range. After an extension, the next click starts a new one-day range.\n */\nexport const pickRangeDay = (\n range: DateRangeValue,\n anchor: string | null,\n day: string,\n): { range: DateRangeValue; anchor: string | null } => {\n if (rangeAnchor(range, anchor) && day !== anchor) return { range: orderedRange(anchor!, day), anchor: null };\n return { range: { start: day, end: day }, anchor: day };\n};\n\n/** The anchor that the next click extends from: only while the range is still the one-day range of its click. */\nexport const rangeAnchor = (range: DateRangeValue, anchor: string | null): string | null =>\n anchor && range.start === anchor && range.end === anchor ? anchor : null;\n\n/** The range shown while the pointer or focus rests on `preview`: the extension that a click there would pick. */\nexport const previewRange = (range: DateRangeValue, anchor: string | null, preview: string | null): DateRangeValue => {\n const from = rangeAnchor(range, anchor);\n return from && preview ? orderedRange(from, preview) : range;\n};\n\nexport const inRange = (day: string, range: DateRangeValue): boolean =>\n Boolean(range.start && range.end && day >= range.start && day <= range.end);\n\nexport const isRangeEdge = (day: string, range: DateRangeValue): boolean => day === range.start || day === range.end;\n\nexport const formatDateOnlyRangeDuration = (range: DateRangeValue, context?: DateContext): string => {\n if (!range.start || !range.end) return \"\";\n const start = Date.parse(`${dateKey(range.start, context)}T00:00:00.000Z`);\n const end = Date.parse(`${dateKey(range.end, context)}T00:00:00.000Z`);\n const days = Math.floor(Math.abs(end - start) / 86_400_000) + 1;\n return new Intl.NumberFormat(pickerContext(context).locale ?? \"en\", { style: \"unit\", unit: \"day\", unitDisplay: \"long\" }).format(days);\n};\n\n/**\n * The weekend bands of a week row: one band per run of adjacent weekend columns, as a zero-based start column and a\n * number of columns. Saturday and Sunday in a week from Monday are one band of two; in a week from Sunday they are\n * two bands at both ends.\n */\nexport const weekendBands = (weekend: readonly boolean[]): { start: number; span: number }[] => {\n const bands: { start: number; span: number }[] = [];\n weekend.forEach((isWeekend, column) => {\n if (!isWeekend) return;\n const last = bands.at(-1);\n if (last && last.start + last.span === column) last.span += 1;\n else bands.push({ start: column, span: 1 });\n });\n return bands;\n};\n"],"mappings":"AAAA,SAA2B,KAAK,QAAQ,aAAa;AAOrD,OAAO,MAAM,aAAa,GAAI,OAAqB,KAAmB;EACpE,YAAY,EAAE,CAAC;EACf,GAAG;AACL,CAAC,CAAC;AAEF,OAAO,MAAM,gBAAgB,GAAI,KAAa,IAAc,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC;AAEzG,OAAO,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,OAAqB,KAAa,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;;AAEhI;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,UAAU,GAAI,OAAqB,IAAe;EAC7D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;EACrC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,OAAO;IAAE,QAAQ,EAAE;EAAM,CAAC,CAAC;EAC7F,OAAO,KAAK,CAAC,IAAI,CAAC;IAAE,MAAM,EAAE;EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,eAAe,GAAG,CAAC,YAA+B,EAAE,SAAoC,KACnG,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;AAE7E,OAAO,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAsC;EAC/F,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EACtE,OAAO;IAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;EAAE,CAAC;AACzD,CAAC;AAED,OAAO,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,OAAqB,KAAW;EACrF,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW;EACtE,IAAI,OAAO,EAAE,QAAQ,EAAE;IACrB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;MAAE,cAAc,EAAE;IAAa,CAAC,CAAC,CAAC;EAC1G;EACA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;AACrC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,cAAc,GAAG,CAAC,GAAS,EAAE,OAAqB,KAAa;EAC1E,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;EACrC,MAAM;IAAE;EAAS,CAAC,GAAG,MAAM;EAC3B,MAAM,IAAI,GAAG,QAAQ,GACjB,IAAI,CAAC,KAAK,CACR,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE;IAAE,QAAQ;IAAE,IAAI,EAAE;EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE;IAC7G,cAAc,EAAE;EAClB,CAAC,CACH,CAAC,GACD,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;EAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;EAClC;EACA;EACA;EACA,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM;AACnC,CAAC;;AAED;AACA,OAAO,MAAM,SAAS,GAAI,KAAa,IAAc,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;AAEtF,OAAO,MAAM,cAAc,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAW;EAC/F,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EACtD,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5E,CAAC;;AAED;AACA,OAAO,MAAM,WAAW,GAAG,CAAC,KAAgC,EAAE,OAAqB,KACjF,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,EAAE;EAAE,GAAG,aAAa,CAAC,OAAO,CAAC;EAAE,QAAQ,EAAE;AAAM,CAAC,CAAC,GAAG,EAAE;AAEtH,MAAM,kBAAkB,GAAI,KAAa,IAAa;EACpD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;EACvD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;EAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;EAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC1D,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,EAAE;AACtD,CAAC;AAED,OAAO,MAAM,aAAa,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAa;EAChG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;EACrB,IAAI,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;EAC3G,OAAO,kBAAkB,CAAC,KAAK,CAAC;AAClC,CAAC;AAED,OAAO,MAAM,aAAa,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAqC;EACxH,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;EAC3C,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;EAC/C,OAAO;IAAE,IAAI;IAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;EAAE,CAAC;AACzC,CAAC;AAED,OAAO,MAAM,cAAc,GAAI,KAAa,IAAc;EACxD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;EAC9C,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;EACrD,OAAO,KAAK,IAAK,CAAC,IAAI,KAAK,IAAK,EAAE,IAAI,OAAO,IAAK,CAAC,IAAI,OAAO,IAAK,EAAE;AACvE,CAAC;AAED,OAAO,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAAqB,KAAoB;EACnG,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI;EACtB,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO;EACpC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,OAAO,IAAI;EAC9C,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,YAAY,EAAE;EACvC,IAAI,OAAO,EAAE,QAAQ,EAAE;IACrB,OAAO,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;MAAE,cAAc,EAAE;IAAa,CAAC,CAAC;EAChG;EACA,OAAO,KAAK;AACd,CAAC;AAED,OAAO,MAAM,mBAAmB,GAAG,CAAC,KAAgC,EAAE,OAAqB,KACzF,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAElE,OAAO,MAAM,kBAAkB,GAAI,KAAa,IAAa;EAC3D,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;EACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;EAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;EAC9D,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAC9E,CAAC;AAED,OAAO,MAAM,eAAe,GAAI,KAAa,IAAa;EACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EACnD,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACjF,CAAC;AAED,OAAO,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,GAAW,KACrD,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;EAAE,KAAK,EAAE,GAAG;EAAE,GAAG,EAAE;AAAM,CAAC,GAAG;EAAE,KAAK;EAAE;AAAI,CAAC;;AAE5E;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,YAAY,GAAG,CAC1B,KAAqB,EACrB,MAAqB,EACrB,GAAW,KAC0C;EACrD,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE,OAAO;IAAE,KAAK,EAAE,YAAY,CAAC,MAAM,EAAG,GAAG,CAAC;IAAE,MAAM,EAAE;EAAK,CAAC;EAC5G,OAAO;IAAE,KAAK,EAAE;MAAE,KAAK,EAAE,GAAG;MAAE,GAAG,EAAE;IAAI,CAAC;IAAE,MAAM,EAAE;EAAI,CAAC;AACzD,CAAC;;AAED;AACA,OAAO,MAAM,WAAW,GAAG,CAAC,KAAqB,EAAE,MAAqB,KACtE,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI;;AAE1E;AACA,OAAO,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,MAAqB,EAAE,OAAsB,KAAqB;EACpH,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;EACvC,OAAO,IAAI,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK;AAC9D,CAAC;AAED,OAAO,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAqB,KACxD,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;AAE7E,OAAO,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,KAAqB,KAAc,GAAG,KAAK,KAAK,CAAC,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG;AAEpH,OAAO,MAAM,2BAA2B,GAAG,CAAC,KAAqB,EAAE,OAAqB,KAAa;EACnG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE;EACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;EAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC;EACtE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;EAC/D,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM;IAAE,IAAI,EAAE,KAAK;IAAE,WAAW,EAAE;EAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AACvI,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,YAAY,GAAI,OAA2B,IAAwC;EAC9F,MAAM,KAAwC,GAAG,EAAE;EACnD,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK;IACrC,IAAI,CAAC,SAAS,EAAE;IAChB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KACzD,KAAK,CAAC,IAAI,CAAC;MAAE,KAAK,EAAE,MAAM;MAAE,IAAI,EAAE;IAAE,CAAC,CAAC;EAC7C,CAAC,CAAC;EACF,OAAO,KAAK;AACd,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/date-picker.ts"],"sourcesContent":["import { type DateContext, dates } from \"@k2b/stdlib\";\n\nexport type DateRangeValue = {\n start: string | null;\n end: string | null;\n};\n\nexport const pickerContext = (context?: DateContext): DateContext => ({\n weekStartsOn: 1,\n ...context,\n});\n\nexport const hasInstantOffset = (value: string): boolean => /[T\\s].*([zZ]|[+-]\\d{2}:?\\d{2})$/.test(value);\n\nexport const dateKey = (date: Date | string, context?: DateContext): string => dates.formatDateKey(date, pickerContext(context));\n\n/**\n * Short month names for the month panel. `dates.months()` only returns the long\n * form (\"September\"), which overflows the three-column month grid, so the short\n * form is derived here while staying locale aware.\n */\nexport const monthNames = (context?: DateContext): string[] => {\n const merged = pickerContext(context);\n const formatter = new Intl.DateTimeFormat(merged.locale, { month: \"short\", timeZone: \"UTC\" });\n return Array.from({ length: 12 }, (_, index) => formatter.format(Date.UTC(2024, index, 15)));\n};\n\n/**\n * Picks the roving-tabindex day for a rendered month grid. The preferred day is\n * used when the grid actually contains it, otherwise the first day of the\n * visible month keeps exactly one cell reachable by Tab.\n */\nexport const resolveFocusDay = (monthDayKeys: readonly string[], preferred: string | null | undefined): string | undefined =>\n preferred && monthDayKeys.includes(preferred) ? preferred : monthDayKeys[0];\n\nexport const yearMonth = (date: Date, context?: DateContext): { year: number; month: number } => {\n const [year = \"1970\", month = \"1\"] = dateKey(date, context).split(\"-\");\n return { year: Number(year), month: Number(month) - 1 };\n};\n\nexport const monthDate = (year: number, month: number, context?: DateContext): Date => {\n const value = `${year}-${String(month + 1).padStart(2, \"0\")}-01T12:00`;\n if (context?.timeZone) {\n return new Date(dates.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n }\n return new Date(year, month, 1, 12);\n};\n\n/**\n * Milliseconds from `now` until the next calendar day starts in the picker's\n * time zone, so a panel left open past midnight moves its today mark on time.\n * The next day's start is resolved from its date key: where a DST change skips\n * or repeats midnight, the day starts at its first existing instant.\n */\nexport const msUntilNextDay = (now: Date, context?: DateContext): number => {\n const merged = pickerContext(context);\n const { timeZone } = merged;\n const next = timeZone\n ? Date.parse(\n dates.zonedDateTimeToInstant(dates.addZoned(`${dateKey(now, merged)}T00:00`, { timeZone, days: 1 }), timeZone, {\n disambiguation: \"compatible\",\n }),\n )\n : dates.addDays(now, 1, merged).getTime();\n const delay = next - now.getTime();\n // The timer re-arms after every tick, so it must never fire at once. Should a\n // zone's rules still put the next day behind `now`, look again in a minute,\n // the finest unit the pickers show.\n return delay > 0 ? delay : 60_000;\n};\n\n/** Whether `value` is a date key such as `2026-10-24`, a date without a time. */\nexport const isDateKey = (value: string): boolean => /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n\nexport const parseDateValue = (value: string | null | undefined, context?: DateContext): Date => {\n if (!value) return dates.today(pickerContext(context));\n return dates.parseCalendarDate(value.slice(0, 10), pickerContext(context));\n};\n\n/** A date key names a calendar day, so it is formatted at noon UTC in UTC: no runtime or picker zone can move it. */\nexport const displayDate = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDate(`${value.slice(0, 10)}T12:00:00.000Z`, { ...pickerContext(context), timeZone: \"UTC\" }) : \"\";\n\nconst localDateTimeInput = (value: string): string => {\n if (!hasInstantOffset(value)) return value.slice(0, 16);\n const date = new Date(value);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\nexport const dateTimeInput = (value: string | null | undefined, context?: DateContext): string => {\n if (!value) return \"\";\n if (context?.timeZone && hasInstantOffset(value)) return dates.instantToZonedInput(value, context.timeZone);\n return localDateTimeInput(value);\n};\n\nexport const splitDateTime = (value: string | null | undefined, context?: DateContext): { date: string; time: string } => {\n const input = dateTimeInput(value, context);\n const [date = \"\", time = \"\"] = input.split(\"T\");\n return { date, time: time.slice(0, 5) };\n};\n\nexport const isCompleteTime = (value: string): boolean => {\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\n const [hours, minutes] = value.split(\":\").map(Number);\n return hours! >= 0 && hours! <= 23 && minutes! >= 0 && minutes! <= 59;\n};\n\nexport const toDateTimeValue = (date: string, time: string, context?: DateContext): string | null => {\n if (!date) return null;\n const resolvedTime = time || \"00:00\";\n if (!isCompleteTime(resolvedTime)) return null;\n const local = `${date}T${resolvedTime}`;\n if (context?.timeZone) {\n return dates.zonedDateTimeToInstant(local, context.timeZone, { disambiguation: \"compatible\" });\n }\n return local;\n};\n\n/**\n * The value an applied draft commits. An untouched draft keeps the exact value: the panel shows minutes in the\n * picker's zone, and a wall time that a daylight-saving change repeats names two instants, so rebuilding it could\n * move the value by an hour or drop its seconds.\n */\nexport const draftDateTimeValue = (value: string | null | undefined, date: string, time: string, context?: DateContext): string | null => {\n if (value) {\n const current = splitDateTime(value, context);\n if (current.date === date && current.time === time) return value;\n }\n return toDateTimeValue(date, time, context);\n};\n\nexport const formatDateTimeValue = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDateTime(value, pickerContext(context)) : \"\";\n\nexport const normalizeTimeInput = (value: string): string => {\n const [hours = \"\", minutes = \"\"] = value.split(\":\");\n const hour = Math.max(0, Math.min(23, Number(hours || 0)));\n const minute = Math.max(0, Math.min(59, Number(minutes || 0)));\n return `${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n};\n\nexport const filterTimeInput = (value: string): string => {\n const digits = value.replace(/\\D/g, \"\").slice(0, 4);\n return digits.length <= 2 ? digits : `${digits.slice(0, 2)}:${digits.slice(2)}`;\n};\n\nexport const orderedRange = (start: string, end: string): DateRangeValue =>\n end.localeCompare(start) < 0 ? { start: end, end: start } : { start, end };\n\n/**\n * The range a click picks. A click starts a complete one-day range on its day, and it becomes the anchor; the next\n * click on another day extends the range from the anchor, whichever side it lies on. A click on the anchor keeps the\n * one-day range. After an extension, the next click starts a new one-day range.\n */\nexport const pickRangeDay = (\n range: DateRangeValue,\n anchor: string | null,\n day: string,\n): { range: DateRangeValue; anchor: string | null } => {\n if (rangeAnchor(range, anchor) && day !== anchor) return { range: orderedRange(anchor!, day), anchor: null };\n return { range: { start: day, end: day }, anchor: day };\n};\n\n/** The anchor that the next click extends from: only while the range is still the one-day range of its click. */\nexport const rangeAnchor = (range: DateRangeValue, anchor: string | null): string | null =>\n anchor && range.start === anchor && range.end === anchor ? anchor : null;\n\n/** The range shown while the pointer or focus rests on `preview`: the extension that a click there would pick. */\nexport const previewRange = (range: DateRangeValue, anchor: string | null, preview: string | null): DateRangeValue => {\n const from = rangeAnchor(range, anchor);\n return from && preview ? orderedRange(from, preview) : range;\n};\n\nexport const inRange = (day: string, range: DateRangeValue): boolean =>\n Boolean(range.start && range.end && day >= range.start && day <= range.end);\n\nexport const isRangeEdge = (day: string, range: DateRangeValue): boolean => day === range.start || day === range.end;\n\nexport const formatDateOnlyRangeDuration = (range: DateRangeValue, context?: DateContext): string => {\n if (!range.start || !range.end) return \"\";\n const start = Date.parse(`${dateKey(range.start, context)}T00:00:00.000Z`);\n const end = Date.parse(`${dateKey(range.end, context)}T00:00:00.000Z`);\n const days = Math.floor(Math.abs(end - start) / 86_400_000) + 1;\n return new Intl.NumberFormat(pickerContext(context).locale ?? \"en\", { style: \"unit\", unit: \"day\", unitDisplay: \"long\" }).format(days);\n};\n\n/**\n * The weekend bands of a week row: one band per run of adjacent weekend columns, as a zero-based start column and a\n * number of columns. Saturday and Sunday in a week from Monday are one band of two; in a week from Sunday they are\n * two bands at both ends.\n */\nexport const weekendBands = (weekend: readonly boolean[]): { start: number; span: number }[] => {\n const bands: { start: number; span: number }[] = [];\n weekend.forEach((isWeekend, column) => {\n if (!isWeekend) return;\n const last = bands.at(-1);\n if (last && last.start + last.span === column) last.span += 1;\n else bands.push({ start: column, span: 1 });\n });\n return bands;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ export { CheckboxCard } from "./CheckboxCard";
|
|
|
5
5
|
export { ChoiceChips } from "./ChoiceChips";
|
|
6
6
|
export { ColorInput, PinInput, Slider } from "./ChoiceInputs";
|
|
7
7
|
export { ChoiceList } from "./ChoiceList";
|
|
8
|
-
export { ChoiceSlider } from "./ChoiceSlider";
|
|
8
|
+
export { ChoiceSlider, ChoiceSliderIndicator } from "./ChoiceSlider";
|
|
9
9
|
export { ChoiceTiles } from "./ChoiceTiles";
|
|
10
10
|
export { ColorChoices } from "./ColorChoices";
|
|
11
11
|
export { Combobox } from "./Combobox";
|
|
@@ -22,7 +22,10 @@ export { DEFAULT_ICON_GROUPS, DEFAULT_ICON_OPTIONS } from "./icon-options";
|
|
|
22
22
|
export { clampImageCropRect, createCroppedImageCanvas, createCroppedImageDataUrl, getInitialImageCropRect, imageCropRectToPixels, normalizeImageCropRotation, resizeImageCropAroundCenter, rotateImageCropRight } from "./image-crop";
|
|
23
23
|
export { MultiSelectInput } from "./MultiSelectInput";
|
|
24
24
|
export { MarkdownEditor } from "./markdown/MarkdownEditor";
|
|
25
|
+
export { SlashCommands } from "./markdown/SlashCommands";
|
|
25
26
|
export { NumberInput } from "./NumberInput";
|
|
27
|
+
export { PeriodPicker } from "./PeriodPicker";
|
|
28
|
+
export { formatPeriodDays, formatPeriodRange, isPeriodDay, parsePeriodValue, periodContext, periodDayCount, periodInstants, periodPresets, resolvePeriod } from "./period";
|
|
26
29
|
export { QrScanner } from "./QrScanner";
|
|
27
30
|
export { RichSelect, RichSelectFacts } from "./RichSelect";
|
|
28
31
|
export { Select } from "./Select";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/index.ts"],"sourcesContent":["export type { AutocompleteEditorProps } from \"./AutocompleteEditor\";\nexport { AutocompleteEditor } from \"./AutocompleteEditor\";\nexport type {\n AutocompleteSelectOption,\n AutocompleteSelectProps,\n AutocompleteSelectSearchResult,\n} from \"./AutocompleteSelect\";\nexport { AutocompleteSelect } from \"./AutocompleteSelect\";\nexport type { CheckboxProps } from \"./Checkbox\";\nexport { Checkbox } from \"./Checkbox\";\nexport type { CheckboxCardProps } from \"./CheckboxCard\";\nexport { CheckboxCard } from \"./CheckboxCard\";\nexport type { ChoiceChipOption, ChoiceChipsProps } from \"./ChoiceChips\";\nexport { ChoiceChips } from \"./ChoiceChips\";\nexport type {\n ColorInputProps,\n PinInputProps,\n SliderProps,\n} from \"./ChoiceInputs\";\nexport { ColorInput, PinInput, Slider } from \"./ChoiceInputs\";\nexport type { ChoiceListOption, ChoiceListProps } from \"./ChoiceList\";\nexport { ChoiceList } from \"./ChoiceList\";\nexport type { ChoiceSliderOption, ChoiceSliderProps } from \"./ChoiceSlider\";\nexport { ChoiceSlider } from \"./ChoiceSlider\";\nexport type { ChoiceTileOption, ChoiceTilesProps } from \"./ChoiceTiles\";\nexport { ChoiceTiles } from \"./ChoiceTiles\";\nexport type { ColorChoiceOption, ColorChoicesProps } from \"./ColorChoices\";\nexport { ColorChoices } from \"./ColorChoices\";\nexport type { ComboboxOption, ComboboxProps } from \"./Combobox\";\nexport { Combobox } from \"./Combobox\";\nexport type { ChoiceOption, ChoiceOptionsLoader } from \"./choice\";\nexport type {\n Completion,\n QueryContext,\n SuggestContext,\n Suggestion,\n} from \"./completion\";\nexport { abbreviations } from \"./completion\";\nexport type {\n DatePickerBaseProps,\n DatePickerProps,\n DatePreset,\n DateRangePickerProps,\n DateRangeValue,\n DateTimePickerProps,\n DurationPreset,\n} from \"./DatePicker\";\nexport { DatePicker, DateRangePicker, DateTimePicker } from \"./DatePicker\";\nexport type { DictationController, DictationNotice, DictationOptions, DictationStatus } from \"./dictation/create-dictation\";\nexport { createDictation } from \"./dictation/create-dictation\";\nexport type { DictationBarProps, DictationButtonProps } from \"./dictation/Dictation\";\nexport { DictationBar, DictationButton, dictationBarShown } from \"./dictation/Dictation\";\nexport type {\n DictationAlternative,\n DictationDevice,\n DictationEndReason,\n DictationErrorCode,\n DictationEvent,\n DictationSession,\n DictationSource,\n DictationTarget,\n} from \"./dictation/types\";\nexport type { EmojiPickerPopoverProps, EmojiPickerProps } from \"./emoji/EmojiPicker\";\nexport { EmojiPicker } from \"./emoji/EmojiPicker\";\nexport type { EmojiSkinTone } from \"./emoji/emoji-index\";\nexport { rememberEmoji } from \"./emoji/emoji-index\";\nexport type { FileDropDetails, FileDropOptions, FileDropRejection, FileDropTargetProps } from \"./FileDropTarget\";\nexport { FileDropTarget, fileDropTarget } from \"./FileDropTarget\";\nexport type { FileDropzoneProps, ImageCropperProps, ImageInputProps } from \"./FileInputs\";\nexport { FileDropzone, ImageCropper, ImageInput } from \"./FileInputs\";\nexport type { DateContext, FieldProps, MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nexport type { IconChoiceOption, IconChoicesProps } from \"./IconChoices\";\nexport { IconChoices } from \"./IconChoices\";\nexport { DEFAULT_ICON_GROUPS, DEFAULT_ICON_OPTIONS } from \"./icon-options\";\nexport type {\n ImageCropAspect,\n ImageCropOutput,\n ImageCropRect,\n ImageCropRotation,\n ImageCropSize,\n ImageCropSource,\n ImageCropState,\n} from \"./image-crop\";\nexport {\n clampImageCropRect,\n createCroppedImageCanvas,\n createCroppedImageDataUrl,\n getInitialImageCropRect,\n imageCropRectToPixels,\n normalizeImageCropRotation,\n resizeImageCropAroundCenter,\n rotateImageCropRight,\n} from \"./image-crop\";\nexport type {\n MultiSelectFetchDataFn,\n MultiSelectInputProps,\n MultiSelectOption,\n} from \"./MultiSelectInput\";\nexport { MultiSelectInput } from \"./MultiSelectInput\";\nexport type { MarkdownEditorProps } from \"./markdown/MarkdownEditor\";\nexport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\nexport type { NumberInputProps } from \"./NumberInput\";\nexport { NumberInput } from \"./NumberInput\";\nexport type { QrScannerError, QrScannerProps } from \"./QrScanner\";\nexport { QrScanner } from \"./QrScanner\";\nexport type {\n RichSelectFact,\n RichSelectFooter,\n RichSelectItem,\n RichSelectProps,\n RichSelectSection,\n RichSelectStatus,\n} from \"./RichSelect\";\nexport { RichSelect, RichSelectFacts } from \"./RichSelect\";\nexport type { ChoiceAppearance, SelectGridSize, SelectGroup, SelectOption, SelectProps, SelectSourceOption, SelectView } from \"./Select\";\nexport { Select } from \"./Select\";\nexport type { SelectChipOption, SelectChipProps } from \"./SelectChip\";\nexport { SelectChip } from \"./SelectChip\";\nexport type { SignatureInputProps } from \"./SignatureInput\";\nexport { SignatureInput } from \"./SignatureInput\";\nexport type { IconInputProps, IconOption } from \"./SpecialInputs\";\nexport { IconInput } from \"./SpecialInputs\";\nexport type { SwitchProps } from \"./Switch\";\nexport { Switch } from \"./Switch\";\nexport type { SignaturePngOptions, SignatureValue } from \"./signature\";\nexport { parseSignature, signatureToPng } from \"./signature\";\nexport type { TagEditorItem, TagEditorLabels, TagEditorProps, TagEditorValue } from \"./TagEditor\";\nexport { TagEditor } from \"./TagEditor\";\nexport type { TagsInputProps } from \"./TagsInput\";\nexport { TagsInput } from \"./TagsInput\";\nexport type {\n TemplateEditorLayout,\n TemplateEditorProps,\n TemplatePreviewProps,\n TemplateSampleDataProps,\n TemplateVariable,\n TemplateVariableKind,\n} from \"./TemplateEditor\";\nexport {\n createTemplateEditorPanesLayout,\n TemplateEditor,\n TemplatePreview,\n TemplateSampleData,\n} from \"./TemplateEditor\";\nexport type { TextInputProps } from \"./TextInput\";\nexport { TextInput } from \"./TextInput\";\n"],"mappings":"AACA,SAAS,kBAAkB,QAAQ,sBAAsB;AAMzD,SAAS,kBAAkB,QAAQ,sBAAsB;AAEzD,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,WAAW,QAAQ,eAAe;AAM3C,SAAS,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,gBAAgB;AAE7D,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,YAAY,QAAQ,gBAAgB;
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/index.ts"],"sourcesContent":["export type { AutocompleteEditorProps } from \"./AutocompleteEditor\";\nexport { AutocompleteEditor } from \"./AutocompleteEditor\";\nexport type {\n AutocompleteSelectOption,\n AutocompleteSelectProps,\n AutocompleteSelectSearchResult,\n} from \"./AutocompleteSelect\";\nexport { AutocompleteSelect } from \"./AutocompleteSelect\";\nexport type { CheckboxProps } from \"./Checkbox\";\nexport { Checkbox } from \"./Checkbox\";\nexport type { CheckboxCardProps } from \"./CheckboxCard\";\nexport { CheckboxCard } from \"./CheckboxCard\";\nexport type { ChoiceChipOption, ChoiceChipsProps } from \"./ChoiceChips\";\nexport { ChoiceChips } from \"./ChoiceChips\";\nexport type {\n ColorInputProps,\n PinInputProps,\n SliderProps,\n} from \"./ChoiceInputs\";\nexport { ColorInput, PinInput, Slider } from \"./ChoiceInputs\";\nexport type { ChoiceListOption, ChoiceListProps } from \"./ChoiceList\";\nexport { ChoiceList } from \"./ChoiceList\";\nexport type { ChoiceSliderIndicatorProps, ChoiceSliderOption, ChoiceSliderProps } from \"./ChoiceSlider\";\nexport { ChoiceSlider, ChoiceSliderIndicator } from \"./ChoiceSlider\";\nexport type { ChoiceTileOption, ChoiceTilesProps } from \"./ChoiceTiles\";\nexport { ChoiceTiles } from \"./ChoiceTiles\";\nexport type { ColorChoiceOption, ColorChoicesProps } from \"./ColorChoices\";\nexport { ColorChoices } from \"./ColorChoices\";\nexport type { ComboboxOption, ComboboxProps } from \"./Combobox\";\nexport { Combobox } from \"./Combobox\";\nexport type { ChoiceOption, ChoiceOptionsLoader } from \"./choice\";\nexport type {\n Completion,\n QueryContext,\n SuggestContext,\n Suggestion,\n} from \"./completion\";\nexport { abbreviations } from \"./completion\";\nexport type {\n DatePickerBaseProps,\n DatePickerProps,\n DatePreset,\n DateRangePickerProps,\n DateRangeValue,\n DateTimePickerProps,\n DurationPreset,\n} from \"./DatePicker\";\nexport { DatePicker, DateRangePicker, DateTimePicker } from \"./DatePicker\";\nexport type { DictationController, DictationNotice, DictationOptions, DictationStatus } from \"./dictation/create-dictation\";\nexport { createDictation } from \"./dictation/create-dictation\";\nexport type { DictationBarProps, DictationButtonProps } from \"./dictation/Dictation\";\nexport { DictationBar, DictationButton, dictationBarShown } from \"./dictation/Dictation\";\nexport type {\n DictationAlternative,\n DictationDevice,\n DictationEndReason,\n DictationErrorCode,\n DictationEvent,\n DictationSession,\n DictationSource,\n DictationTarget,\n} from \"./dictation/types\";\nexport type { EmojiPickerPopoverProps, EmojiPickerProps } from \"./emoji/EmojiPicker\";\nexport { EmojiPicker } from \"./emoji/EmojiPicker\";\nexport type { EmojiSkinTone } from \"./emoji/emoji-index\";\nexport { rememberEmoji } from \"./emoji/emoji-index\";\nexport type { FileDropDetails, FileDropOptions, FileDropRejection, FileDropTargetProps } from \"./FileDropTarget\";\nexport { FileDropTarget, fileDropTarget } from \"./FileDropTarget\";\nexport type { FileDropzoneProps, ImageCropperProps, ImageInputProps } from \"./FileInputs\";\nexport { FileDropzone, ImageCropper, ImageInput } from \"./FileInputs\";\nexport type { DateContext, FieldProps, MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nexport type { IconChoiceOption, IconChoicesProps } from \"./IconChoices\";\nexport { IconChoices } from \"./IconChoices\";\nexport { DEFAULT_ICON_GROUPS, DEFAULT_ICON_OPTIONS } from \"./icon-options\";\nexport type {\n ImageCropAspect,\n ImageCropOutput,\n ImageCropRect,\n ImageCropRotation,\n ImageCropSize,\n ImageCropSource,\n ImageCropState,\n} from \"./image-crop\";\nexport {\n clampImageCropRect,\n createCroppedImageCanvas,\n createCroppedImageDataUrl,\n getInitialImageCropRect,\n imageCropRectToPixels,\n normalizeImageCropRotation,\n resizeImageCropAroundCenter,\n rotateImageCropRight,\n} from \"./image-crop\";\nexport type {\n MultiSelectFetchDataFn,\n MultiSelectInputProps,\n MultiSelectOption,\n} from \"./MultiSelectInput\";\nexport { MultiSelectInput } from \"./MultiSelectInput\";\nexport type { MarkdownEditorProps } from \"./markdown/MarkdownEditor\";\nexport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\nexport type { SlashCommandsProps } from \"./markdown/SlashCommands\";\nexport { SlashCommands } from \"./markdown/SlashCommands\";\nexport type { NumberInputProps } from \"./NumberInput\";\nexport { NumberInput } from \"./NumberInput\";\nexport type { PeriodPickerProps } from \"./PeriodPicker\";\nexport { PeriodPicker } from \"./PeriodPicker\";\nexport type { PeriodClock, PeriodContext, PeriodPreset, PeriodRange, PeriodValue } from \"./period\";\nexport {\n formatPeriodDays,\n formatPeriodRange,\n isPeriodDay,\n parsePeriodValue,\n periodContext,\n periodDayCount,\n periodInstants,\n periodPresets,\n resolvePeriod,\n} from \"./period\";\nexport type { QrScannerError, QrScannerProps } from \"./QrScanner\";\nexport { QrScanner } from \"./QrScanner\";\nexport type {\n RichSelectFact,\n RichSelectFooter,\n RichSelectItem,\n RichSelectProps,\n RichSelectSection,\n RichSelectStatus,\n} from \"./RichSelect\";\nexport { RichSelect, RichSelectFacts } from \"./RichSelect\";\nexport type { ChoiceAppearance, SelectGridSize, SelectGroup, SelectOption, SelectProps, SelectSourceOption, SelectView } from \"./Select\";\nexport { Select } from \"./Select\";\nexport type { SelectChipOption, SelectChipProps } from \"./SelectChip\";\nexport { SelectChip } from \"./SelectChip\";\nexport type { SignatureInputProps } from \"./SignatureInput\";\nexport { SignatureInput } from \"./SignatureInput\";\nexport type { IconInputProps, IconOption } from \"./SpecialInputs\";\nexport { IconInput } from \"./SpecialInputs\";\nexport type { SwitchProps } from \"./Switch\";\nexport { Switch } from \"./Switch\";\nexport type { SignaturePngOptions, SignatureValue } from \"./signature\";\nexport { parseSignature, signatureToPng } from \"./signature\";\nexport type { TagEditorItem, TagEditorLabels, TagEditorProps, TagEditorValue } from \"./TagEditor\";\nexport { TagEditor } from \"./TagEditor\";\nexport type { TagsInputProps } from \"./TagsInput\";\nexport { TagsInput } from \"./TagsInput\";\nexport type {\n TemplateEditorLayout,\n TemplateEditorProps,\n TemplatePreviewProps,\n TemplateSampleDataProps,\n TemplateVariable,\n TemplateVariableKind,\n} from \"./TemplateEditor\";\nexport {\n createTemplateEditorPanesLayout,\n TemplateEditor,\n TemplatePreview,\n TemplateSampleData,\n} from \"./TemplateEditor\";\nexport type { TextInputProps } from \"./TextInput\";\nexport { TextInput } from \"./TextInput\";\n"],"mappings":"AACA,SAAS,kBAAkB,QAAQ,sBAAsB;AAMzD,SAAS,kBAAkB,QAAQ,sBAAsB;AAEzD,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,WAAW,QAAQ,eAAe;AAM3C,SAAS,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,gBAAgB;AAE7D,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,YAAY,EAAE,qBAAqB,QAAQ,gBAAgB;AAEpE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,QAAQ,QAAQ,YAAY;AAQrC,SAAS,aAAa,QAAQ,cAAc;AAU5C,SAAS,UAAU,EAAE,eAAe,EAAE,cAAc,QAAQ,cAAc;AAE1E,SAAS,eAAe,QAAQ,8BAA8B;AAE9D,SAAS,YAAY,EAAE,eAAe,EAAE,iBAAiB,QAAQ,uBAAuB;AAYxF,SAAS,WAAW,QAAQ,qBAAqB;AAEjD,SAAS,aAAa,QAAQ,qBAAqB;AAEnD,SAAS,cAAc,EAAE,cAAc,QAAQ,kBAAkB;AAEjE,SAAS,YAAY,EAAE,YAAY,EAAE,UAAU,QAAQ,cAAc;AAGrE,SAAS,WAAW,QAAQ,eAAe;AAC3C,SAAS,mBAAmB,EAAE,oBAAoB,QAAQ,gBAAgB;AAU1E,SACE,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,QACf,cAAc;AAMrB,SAAS,gBAAgB,QAAQ,oBAAoB;AAErD,SAAS,cAAc,QAAQ,2BAA2B;AAE1D,SAAS,aAAa,QAAQ,0BAA0B;AAExD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SACE,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,QACR,UAAU;AAEjB,SAAS,SAAS,QAAQ,aAAa;AASvC,SAAS,UAAU,EAAE,eAAe,QAAQ,cAAc;AAE1D,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,cAAc,QAAQ,kBAAkB;AAEjD,SAAS,SAAS,QAAQ,iBAAiB;AAE3C,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,cAAc,EAAE,cAAc,QAAQ,aAAa;AAE5D,SAAS,SAAS,QAAQ,aAAa;AAEvC,SAAS,SAAS,QAAQ,aAAa;AASvC,SACE,+BAA+B,EAC/B,cAAc,EACd,eAAe,EACf,kBAAkB,QACb,kBAAkB;AAEzB,SAAS,SAAS,QAAQ,aAAa","ignoreList":[]}
|
|
@@ -13,7 +13,10 @@ const inputMessages = i18n.define({
|
|
|
13
13
|
pinDigit: ({
|
|
14
14
|
index,
|
|
15
15
|
total
|
|
16
|
-
}) => `PIN digit ${index} of ${total}
|
|
16
|
+
}) => `PIN digit ${index} of ${total}`,
|
|
17
|
+
resetTo: ({
|
|
18
|
+
value
|
|
19
|
+
}) => `Reset to ${value}`
|
|
17
20
|
},
|
|
18
21
|
de: {
|
|
19
22
|
decreaseValue: "Wert verringern",
|
|
@@ -25,7 +28,10 @@ const inputMessages = i18n.define({
|
|
|
25
28
|
pinDigit: ({
|
|
26
29
|
index,
|
|
27
30
|
total
|
|
28
|
-
}) => `PIN-Ziffer ${index} von ${total}
|
|
31
|
+
}) => `PIN-Ziffer ${index} von ${total}`,
|
|
32
|
+
resetTo: ({
|
|
33
|
+
value
|
|
34
|
+
}) => `Zurücksetzen auf ${value}`
|
|
29
35
|
}
|
|
30
36
|
}
|
|
31
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/input-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst inputMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n decreaseValue: \"Decrease value\",\n increaseValue: \"Increase value\",\n hidePassword: \"Hide password\",\n showPassword: \"Show password\",\n useColor: \"Use a color\",\n useTransparent: \"Use transparent\",\n pinDigit: ({ index, total }: { index: number; total: number }) => `PIN digit ${index} of ${total}`,\n },\n de: {\n decreaseValue: \"Wert verringern\",\n increaseValue: \"Wert erhöhen\",\n hidePassword: \"Passwort ausblenden\",\n showPassword: \"Passwort anzeigen\",\n useColor: \"Farbe verwenden\",\n useTransparent: \"Transparent verwenden\",\n pinDigit: ({ index, total }) => `PIN-Ziffer ${index} von ${total}`,\n },\n },\n});\n\nexport type InputMessages = ReturnType<(typeof inputMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useInputMessages = (): (() => InputMessages) => {\n const locale = useLocale();\n return () => inputMessages.resolve([locale()]).t;\n};\n\nexport const checkInputMessages = () => inputMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;EAChC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,aAAa,EAAE,gBAAgB;MAC/B,aAAa,EAAE,gBAAgB;MAC/B,YAAY,EAAE,eAAe;MAC7B,YAAY,EAAE,eAAe;MAC7B,QAAQ,EAAE,aAAa;MACvB,cAAc,EAAE,iBAAiB;MACjC,QAAQ,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,aAAa,KAAK,OAAO,KAAK;
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/input-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst inputMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n decreaseValue: \"Decrease value\",\n increaseValue: \"Increase value\",\n hidePassword: \"Hide password\",\n showPassword: \"Show password\",\n useColor: \"Use a color\",\n useTransparent: \"Use transparent\",\n pinDigit: ({ index, total }: { index: number; total: number }) => `PIN digit ${index} of ${total}`,\n resetTo: ({ value }: { value: string }) => `Reset to ${value}`,\n },\n de: {\n decreaseValue: \"Wert verringern\",\n increaseValue: \"Wert erhöhen\",\n hidePassword: \"Passwort ausblenden\",\n showPassword: \"Passwort anzeigen\",\n useColor: \"Farbe verwenden\",\n useTransparent: \"Transparent verwenden\",\n pinDigit: ({ index, total }) => `PIN-Ziffer ${index} von ${total}`,\n resetTo: ({ value }) => `Zurücksetzen auf ${value}`,\n },\n },\n});\n\nexport type InputMessages = ReturnType<(typeof inputMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useInputMessages = (): (() => InputMessages) => {\n const locale = useLocale();\n return () => inputMessages.resolve([locale()]).t;\n};\n\nexport const checkInputMessages = () => inputMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;EAChC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,aAAa,EAAE,gBAAgB;MAC/B,aAAa,EAAE,gBAAgB;MAC/B,YAAY,EAAE,eAAe;MAC7B,YAAY,EAAE,eAAe;MAC7B,QAAQ,EAAE,aAAa;MACvB,cAAc,EAAE,iBAAiB;MACjC,QAAQ,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,aAAa,KAAK,OAAO,KAAK,EAAE;MAClG,OAAO,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,YAAY,KAAK;IAC9D,CAAC;IACD,EAAE,EAAE;MACF,aAAa,EAAE,iBAAiB;MAChC,aAAa,EAAE,cAAc;MAC7B,YAAY,EAAE,qBAAqB;MACnC,YAAY,EAAE,mBAAmB;MACjC,QAAQ,EAAE,iBAAiB;MAC3B,cAAc,EAAE,uBAAuB;MACvC,QAAQ,EAAE,CAAC;QAAE,KAAK;QAAE;MAAM,CAAC,KAAK,cAAc,KAAK,QAAQ,KAAK,EAAE;MAClE,OAAO,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,oBAAoB,KAAK;IACnD;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,gBAAgB,GAAG,MAA6B;EAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,OAAO,MAAM,kBAAkB,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -357,7 +357,8 @@ export function MarkdownEditor(props) {
|
|
|
357
357
|
recomputeCompletion();
|
|
358
358
|
};
|
|
359
359
|
const onKeyDown = event => {
|
|
360
|
-
|
|
360
|
+
// A key that an attached part, such as the slash commands, used is not the text's any more.
|
|
361
|
+
if (!textarea || event.isComposing || event.defaultPrevented) return;
|
|
361
362
|
if (event.key === "Backspace" && !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey && completionBehavior.tryRestore(textarea)) {
|
|
362
363
|
event.preventDefault();
|
|
363
364
|
return;
|
|
@@ -686,10 +687,10 @@ export function MarkdownEditor(props) {
|
|
|
686
687
|
})()
|
|
687
688
|
}), _el$34, _co$8);
|
|
688
689
|
_$effect(_p$ => {
|
|
689
|
-
var _v$
|
|
690
|
-
_v$
|
|
691
|
-
_v$
|
|
692
|
-
_v$
|
|
690
|
+
var _v$1 = optionId(index()),
|
|
691
|
+
_v$10 = index() === state()?.selectedIndex;
|
|
692
|
+
_v$1 !== _p$.e && _$setAttribute(_el$31, "id", _p$.e = _v$1);
|
|
693
|
+
_v$10 !== _p$.t && _$setAttribute(_el$31, "aria-selected", _p$.t = _v$10);
|
|
693
694
|
return _p$;
|
|
694
695
|
}, {
|
|
695
696
|
e: undefined,
|
|
@@ -718,15 +719,17 @@ export function MarkdownEditor(props) {
|
|
|
718
719
|
_v$5 = props.disabled ? "true" : undefined,
|
|
719
720
|
_v$6 = error() ? "true" : undefined,
|
|
720
721
|
_v$7 = props.variant === "default" ? undefined : props.variant,
|
|
721
|
-
_v$8 = props.
|
|
722
|
-
_v$9 =
|
|
722
|
+
_v$8 = props.font === "sans" ? "sans" : undefined,
|
|
723
|
+
_v$9 = props.fill ? "true" : undefined,
|
|
724
|
+
_v$0 = String(props.lines ?? 6);
|
|
723
725
|
_v$3 !== _p$.e && _$setAttribute(_el$2, "aria-labelledby", _p$.e = _v$3);
|
|
724
726
|
_v$4 !== _p$.t && _$setAttribute(_el$2, "aria-label", _p$.t = _v$4);
|
|
725
727
|
_v$5 !== _p$.a && _$setAttribute(_el$2, "data-disabled", _p$.a = _v$5);
|
|
726
728
|
_v$6 !== _p$.o && _$setAttribute(_el$2, "data-invalid", _p$.o = _v$6);
|
|
727
729
|
_v$7 !== _p$.i && _$setAttribute(_el$2, "data-variant", _p$.i = _v$7);
|
|
728
|
-
_v$8 !== _p$.n && _$setAttribute(_el$2, "data-
|
|
729
|
-
_v$9 !== _p$.s && _$
|
|
730
|
+
_v$8 !== _p$.n && _$setAttribute(_el$2, "data-font", _p$.n = _v$8);
|
|
731
|
+
_v$9 !== _p$.s && _$setAttribute(_el$2, "data-fill", _p$.s = _v$9);
|
|
732
|
+
_v$0 !== _p$.h && _$setStyleProperty(_el$2, "--k2b-editor-lines", _p$.h = _v$0);
|
|
730
733
|
return _p$;
|
|
731
734
|
}, {
|
|
732
735
|
e: undefined,
|
|
@@ -735,7 +738,8 @@ export function MarkdownEditor(props) {
|
|
|
735
738
|
o: undefined,
|
|
736
739
|
i: undefined,
|
|
737
740
|
n: undefined,
|
|
738
|
-
s: undefined
|
|
741
|
+
s: undefined,
|
|
742
|
+
h: undefined
|
|
739
743
|
});
|
|
740
744
|
_$runHydrationEvents();
|
|
741
745
|
return _el$2;
|