@exxatdesignux/ui 0.2.19 → 0.3.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/CHANGELOG.md +60 -7
- package/bin/sync-extras.mjs +116 -29
- package/consumer-extras/README.md +42 -7
- package/consumer-extras/cursor-rules/exxat-accessibility.mdc +39 -0
- package/consumer-extras/cursor-rules/exxat-board-cards.mdc +26 -0
- package/consumer-extras/cursor-rules/exxat-breadcrumbs-no-back.mdc +21 -0
- package/consumer-extras/cursor-rules/exxat-card-vs-list-rows.mdc +21 -0
- package/consumer-extras/cursor-rules/exxat-centralized-list-dataset.mdc +44 -0
- package/consumer-extras/cursor-rules/exxat-collaboration-access.mdc +32 -0
- package/consumer-extras/cursor-rules/exxat-command-menu.mdc +22 -0
- package/consumer-extras/cursor-rules/exxat-dashboard-view-charts.mdc +53 -0
- package/consumer-extras/cursor-rules/exxat-data-tables.mdc +41 -0
- package/consumer-extras/cursor-rules/exxat-dedicated-search-surfaces.mdc +25 -0
- package/consumer-extras/cursor-rules/exxat-drawer-vs-dialog.mdc +22 -0
- package/consumer-extras/cursor-rules/exxat-ds-agents.mdc +56 -0
- package/consumer-extras/cursor-rules/exxat-fontawesome-icons.mdc +31 -0
- package/consumer-extras/cursor-rules/exxat-kbd-shortcuts.mdc +100 -0
- package/consumer-extras/cursor-rules/exxat-kpi-flat-band.mdc +28 -0
- package/consumer-extras/cursor-rules/exxat-kpi-max-four.mdc +21 -0
- package/consumer-extras/cursor-rules/exxat-kpi-trends.mdc +31 -0
- package/consumer-extras/cursor-rules/exxat-list-page-connected-views.mdc +24 -0
- package/consumer-extras/cursor-rules/exxat-list-page-view-shells.mdc +31 -0
- package/consumer-extras/cursor-rules/exxat-mono-ids.mdc +30 -0
- package/consumer-extras/cursor-rules/exxat-no-slds-leakage.mdc +78 -0
- package/consumer-extras/cursor-rules/exxat-no-toast.mdc +25 -0
- package/consumer-extras/cursor-rules/exxat-page-vs-drawer.mdc +23 -0
- package/consumer-extras/cursor-rules/exxat-person-identity-display.mdc +47 -0
- package/consumer-extras/cursor-rules/exxat-primary-nav-secondary-panel.mdc +52 -0
- package/consumer-extras/cursor-rules/exxat-question-bank-hub-header.mdc +28 -0
- package/consumer-extras/cursor-rules/exxat-reuse-before-custom.mdc +34 -0
- package/consumer-extras/cursor-rules/exxat-table-properties-drawer.mdc +77 -0
- package/consumer-extras/cursor-rules/exxat-token-discipline.mdc +103 -0
- package/consumer-extras/cursor-skills/exxat-accessibility/SKILL.md +1 -1
- package/consumer-extras/cursor-skills/exxat-board-cards/SKILL.md +2 -2
- package/consumer-extras/cursor-skills/exxat-centralized-list-dataset/SKILL.md +4 -15
- package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +13 -28
- package/consumer-extras/cursor-skills/exxat-ds-skill/references/data-table-pattern.md +1 -1
- package/consumer-extras/cursor-skills/exxat-primary-nav-secondary-panel/SKILL.md +2 -4
- package/consumer-extras/handbook/HANDBOOK.md +185 -0
- package/consumer-extras/handbook/glossary.md +57 -0
- package/consumer-extras/handbook/reference-implementations.md +126 -0
- package/consumer-extras/handbook/voice-and-tone.md +262 -0
- package/consumer-extras/patterns/command-menu-pattern.md +1 -1
- package/consumer-extras/patterns/consumer-upgrade-checklist.md +0 -20
- package/consumer-extras/patterns/data-views-pattern.md +17 -54
- package/consumer-extras/patterns/shell-surface-elevation-pattern.md +3 -5
- package/dist/components/data-table/filter-date-calendar.d.ts +10 -0
- package/dist/components/data-table/filter-date-calendar.js +280 -0
- package/dist/components/data-table/filter-date-calendar.js.map +1 -0
- package/dist/components/data-table/filter-text-value-input.d.ts +15 -0
- package/dist/components/data-table/filter-text-value-input.js +561 -0
- package/dist/components/data-table/filter-text-value-input.js.map +1 -0
- package/dist/components/data-table/index.d.ts +45 -0
- package/dist/components/data-table/index.js +3085 -0
- package/dist/components/data-table/index.js.map +1 -0
- package/dist/components/data-table/pagination.d.ts +28 -0
- package/dist/components/data-table/pagination.js +3264 -0
- package/dist/components/data-table/pagination.js.map +1 -0
- package/dist/components/data-table/types.d.ts +84 -0
- package/dist/components/data-table/types.js +3 -0
- package/dist/components/data-table/types.js.map +1 -0
- package/dist/components/data-table/use-table-state.d.ts +116 -0
- package/dist/components/data-table/use-table-state.js +670 -0
- package/dist/components/data-table/use-table-state.js.map +1 -0
- package/dist/components/data-views/board-card-primitives.d.ts +22 -0
- package/dist/components/data-views/board-card-primitives.js +84 -0
- package/dist/components/data-views/board-card-primitives.js.map +1 -0
- package/dist/components/data-views/data-row-list.d.ts +33 -0
- package/dist/components/data-views/data-row-list.js +106 -0
- package/dist/components/data-views/data-row-list.js.map +1 -0
- package/dist/components/data-views/finder-panel-view.d.ts +54 -0
- package/dist/components/data-views/finder-panel-view.js +388 -0
- package/dist/components/data-views/finder-panel-view.js.map +1 -0
- package/dist/components/data-views/folder-grid-view.d.ts +22 -0
- package/dist/components/data-views/folder-grid-view.js +58 -0
- package/dist/components/data-views/folder-grid-view.js.map +1 -0
- package/dist/components/data-views/hub-table.d.ts +167 -0
- package/dist/components/data-views/hub-table.js +5561 -0
- package/dist/components/data-views/hub-table.js.map +1 -0
- package/dist/components/data-views/index.d.ts +27 -0
- package/dist/components/data-views/index.js +6575 -0
- package/dist/components/data-views/index.js.map +1 -0
- package/dist/components/data-views/list-page-board-card.d.ts +72 -0
- package/dist/components/data-views/list-page-board-card.js +264 -0
- package/dist/components/data-views/list-page-board-card.js.map +1 -0
- package/dist/components/data-views/list-page-board-template.d.ts +24 -0
- package/dist/components/data-views/list-page-board-template.js +137 -0
- package/dist/components/data-views/list-page-board-template.js.map +1 -0
- package/dist/components/data-views/list-page-connected-view-body.d.ts +19 -0
- package/dist/components/data-views/list-page-connected-view-body.js +116 -0
- package/dist/components/data-views/list-page-connected-view-body.js.map +1 -0
- package/dist/components/data-views/list-page-split-details-placeholder.d.ts +14 -0
- package/dist/components/data-views/list-page-split-details-placeholder.js +38 -0
- package/dist/components/data-views/list-page-split-details-placeholder.js.map +1 -0
- package/dist/components/data-views/list-page-split-hub-chrome.d.ts +17 -0
- package/dist/components/data-views/list-page-split-hub-chrome.js +54 -0
- package/dist/components/data-views/list-page-split-hub-chrome.js.map +1 -0
- package/dist/components/data-views/list-page-split-hub-tokens.d.ts +12 -0
- package/dist/components/data-views/list-page-split-hub-tokens.js +8 -0
- package/dist/components/data-views/list-page-split-hub-tokens.js.map +1 -0
- package/dist/components/data-views/list-page-tree-column-header.d.ts +15 -0
- package/dist/components/data-views/list-page-tree-column-header.js +22 -0
- package/dist/components/data-views/list-page-tree-column-header.js.map +1 -0
- package/dist/components/data-views/list-page-tree-panel-shell.d.ts +25 -0
- package/dist/components/data-views/list-page-tree-panel-shell.js +146 -0
- package/dist/components/data-views/list-page-tree-panel-shell.js.map +1 -0
- package/dist/components/data-views/os-folder-glyph.d.ts +35 -0
- package/dist/components/data-views/os-folder-glyph.js +104 -0
- package/dist/components/data-views/os-folder-glyph.js.map +1 -0
- package/dist/components/data-views/outline-tree-menu.d.ts +36 -0
- package/dist/components/data-views/outline-tree-menu.js +131 -0
- package/dist/components/data-views/outline-tree-menu.js.map +1 -0
- package/dist/components/table-properties/column-row.d.ts +22 -0
- package/dist/components/table-properties/column-row.js +153 -0
- package/dist/components/table-properties/column-row.js.map +1 -0
- package/dist/components/table-properties/draggable-list.d.ts +24 -0
- package/dist/components/table-properties/draggable-list.js +53 -0
- package/dist/components/table-properties/draggable-list.js.map +1 -0
- package/dist/components/table-properties/drawer-button.d.ts +110 -0
- package/dist/components/table-properties/drawer-button.js +2748 -0
- package/dist/components/table-properties/drawer-button.js.map +1 -0
- package/dist/components/table-properties/drawer.d.ts +100 -0
- package/dist/components/table-properties/drawer.js +2595 -0
- package/dist/components/table-properties/drawer.js.map +1 -0
- package/dist/components/table-properties/filter-card.d.ts +24 -0
- package/dist/components/table-properties/filter-card.js +854 -0
- package/dist/components/table-properties/filter-card.js.map +1 -0
- package/dist/components/table-properties/index.d.ts +14 -0
- package/dist/components/table-properties/index.js +2768 -0
- package/dist/components/table-properties/index.js.map +1 -0
- package/dist/components/table-properties/sort-card.d.ts +20 -0
- package/dist/components/table-properties/sort-card.js +102 -0
- package/dist/components/table-properties/sort-card.js.map +1 -0
- package/dist/components/templates/dedicated-search-landing-template.d.ts +21 -0
- package/dist/components/templates/dedicated-search-landing-template.js +254 -0
- package/dist/components/templates/dedicated-search-landing-template.js.map +1 -0
- package/dist/components/templates/dedicated-search-results-template.d.ts +15 -0
- package/dist/components/templates/dedicated-search-results-template.js +16 -0
- package/dist/components/templates/dedicated-search-results-template.js.map +1 -0
- package/dist/components/templates/index.d.ts +9 -0
- package/dist/components/templates/index.js +2720 -0
- package/dist/components/templates/index.js.map +1 -0
- package/dist/components/templates/list-page.d.ts +83 -0
- package/dist/components/templates/list-page.js +2433 -0
- package/dist/components/templates/list-page.js.map +1 -0
- package/dist/components/templates/nested-secondary-panel-shell.d.ts +20 -0
- package/dist/components/templates/nested-secondary-panel-shell.js +54 -0
- package/dist/components/templates/nested-secondary-panel-shell.js.map +1 -0
- package/dist/components/ui/accordion.d.ts +10 -0
- package/dist/components/ui/accordion.js +74 -0
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +37 -0
- package/dist/components/ui/alert-dialog.js +201 -0
- package/dist/components/ui/alert-dialog.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +84 -0
- package/dist/components/ui/avatar.js +328 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +13 -0
- package/dist/components/ui/badge.js +49 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/banner.d.ts +62 -0
- package/dist/components/ui/banner.js +364 -0
- package/dist/components/ui/banner.js.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +14 -0
- package/dist/components/ui/breadcrumb.js +114 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/button.d.ts +16 -0
- package/dist/components/ui/button.js +59 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.d.ts +13 -0
- package/dist/components/ui/calendar.js +238 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.d.ts +14 -0
- package/dist/components/ui/card.js +102 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/chart.d.ts +58 -0
- package/dist/components/ui/chart.js +292 -0
- package/dist/components/ui/chart.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +23 -0
- package/dist/components/ui/checkbox.js +155 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/coach-mark.d.ts +27 -0
- package/dist/components/ui/coach-mark.js +306 -0
- package/dist/components/ui/coach-mark.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +8 -0
- package/dist/components/ui/collapsible.js +35 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/command.d.ts +36 -0
- package/dist/components/ui/command.js +274 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/context-menu.d.ts +32 -0
- package/dist/components/ui/context-menu.js +245 -0
- package/dist/components/ui/context-menu.js.map +1 -0
- package/dist/components/ui/date-picker-field.d.ts +38 -0
- package/dist/components/ui/date-picker-field.js +550 -0
- package/dist/components/ui/date-picker-field.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +22 -0
- package/dist/components/ui/dialog.js +200 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dot-pattern.d.ts +21 -0
- package/dist/components/ui/dot-pattern.js +139 -0
- package/dist/components/ui/dot-pattern.js.map +1 -0
- package/dist/components/ui/drag-handle-grip.d.ts +10 -0
- package/dist/components/ui/drag-handle-grip.js +15 -0
- package/dist/components/ui/drag-handle-grip.js.map +1 -0
- package/dist/components/ui/drawer.d.ts +16 -0
- package/dist/components/ui/drawer.js +125 -0
- package/dist/components/ui/drawer.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +45 -0
- package/dist/components/ui/dropdown-menu.js +353 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/export-drawer.d.ts +11 -0
- package/dist/components/ui/export-drawer.js +1658 -0
- package/dist/components/ui/export-drawer.js.map +1 -0
- package/dist/components/ui/field.d.ts +30 -0
- package/dist/components/ui/field.js +249 -0
- package/dist/components/ui/field.js.map +1 -0
- package/dist/components/ui/form.d.ts +28 -0
- package/dist/components/ui/form.js +110 -0
- package/dist/components/ui/form.js.map +1 -0
- package/dist/components/ui/hover-card.d.ts +9 -0
- package/dist/components/ui/hover-card.js +43 -0
- package/dist/components/ui/hover-card.js.map +1 -0
- package/dist/components/ui/input-group.d.ts +20 -0
- package/dist/components/ui/input-group.js +219 -0
- package/dist/components/ui/input-group.js.map +1 -0
- package/dist/components/ui/input-mask.d.ts +39 -0
- package/dist/components/ui/input-mask.js +118 -0
- package/dist/components/ui/input-mask.js.map +1 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/input.js +30 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/kbd.d.ts +20 -0
- package/dist/components/ui/kbd.js +45 -0
- package/dist/components/ui/kbd.js.map +1 -0
- package/dist/components/ui/key-metrics-context.d.ts +19 -0
- package/dist/components/ui/key-metrics-context.js +26 -0
- package/dist/components/ui/key-metrics-context.js.map +1 -0
- package/dist/components/ui/key-metrics.d.ts +131 -0
- package/dist/components/ui/key-metrics.js +1015 -0
- package/dist/components/ui/key-metrics.js.map +1 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.js +28 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/list-page-view-frame.d.ts +22 -0
- package/dist/components/ui/list-page-view-frame.js +24 -0
- package/dist/components/ui/list-page-view-frame.js.map +1 -0
- package/dist/components/ui/page-header.d.ts +51 -0
- package/dist/components/ui/page-header.js +372 -0
- package/dist/components/ui/page-header.js.map +1 -0
- package/dist/components/ui/payment-card-fields.d.ts +10 -0
- package/dist/components/ui/payment-card-fields.js +80 -0
- package/dist/components/ui/payment-card-fields.js.map +1 -0
- package/dist/components/ui/popover.d.ts +10 -0
- package/dist/components/ui/popover.js +47 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/radio-group.d.ts +29 -0
- package/dist/components/ui/radio-group.js +190 -0
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/resizable.d.ts +16 -0
- package/dist/components/ui/resizable.js +51 -0
- package/dist/components/ui/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +8 -0
- package/dist/components/ui/scroll-area.js +66 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.d.ts +18 -0
- package/dist/components/ui/select.js +186 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/selection-tile-grid.d.ts +52 -0
- package/dist/components/ui/selection-tile-grid.js +347 -0
- package/dist/components/ui/selection-tile-grid.js.map +1 -0
- package/dist/components/ui/separator.d.ts +7 -0
- package/dist/components/ui/separator.js +33 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +18 -0
- package/dist/components/ui/sheet.js +181 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/sidebar.d.ts +94 -0
- package/dist/components/ui/sidebar.js +805 -0
- package/dist/components/ui/sidebar.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +5 -0
- package/dist/components/ui/skeleton.js +22 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/slider.d.ts +7 -0
- package/dist/components/ui/slider.js +66 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/sonner.d.ts +6 -0
- package/dist/components/ui/sonner.js +38 -0
- package/dist/components/ui/sonner.js.map +1 -0
- package/dist/components/ui/status-badge.d.ts +38 -0
- package/dist/components/ui/status-badge.js +77 -0
- package/dist/components/ui/status-badge.js.map +1 -0
- package/dist/components/ui/table.d.ts +13 -0
- package/dist/components/ui/table.js +115 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +15 -0
- package/dist/components/ui/tabs.js +93 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +6 -0
- package/dist/components/ui/textarea.js +25 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/tip.d.ts +12 -0
- package/dist/components/ui/tip.js +61 -0
- package/dist/components/ui/tip.js.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +14 -0
- package/dist/components/ui/toggle-group.js +104 -0
- package/dist/components/ui/toggle-group.js.map +1 -0
- package/dist/components/ui/toggle-switch.d.ts +10 -0
- package/dist/components/ui/toggle-switch.js +33 -0
- package/dist/components/ui/toggle-switch.js.map +1 -0
- package/dist/components/ui/toggle.d.ts +13 -0
- package/dist/components/ui/toggle.js +51 -0
- package/dist/components/ui/toggle.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.js +68 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/components/ui/view-segmented-control.d.ts +31 -0
- package/dist/components/ui/view-segmented-control.js +167 -0
- package/dist/components/ui/view-segmented-control.js.map +1 -0
- package/dist/data-list-view-registry-CyBoBML4.d.ts +73 -0
- package/dist/hooks/use-app-theme.d.ts +24 -0
- package/dist/hooks/use-app-theme.js +286 -0
- package/dist/hooks/use-app-theme.js.map +1 -0
- package/dist/hooks/use-coach-mark.d.ts +86 -0
- package/dist/hooks/use-coach-mark.js +218 -0
- package/dist/hooks/use-coach-mark.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +3 -0
- package/dist/hooks/use-mobile.js +29 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-mod-key-label.d.ts +6 -0
- package/dist/hooks/use-mod-key-label.js +25 -0
- package/dist/hooks/use-mod-key-label.js.map +1 -0
- package/dist/index.d.ts +120 -0
- package/dist/index.js +13324 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/compose-refs.d.ts +6 -0
- package/dist/lib/compose-refs.js +17 -0
- package/dist/lib/compose-refs.js.map +1 -0
- package/dist/lib/conditional-rule-match.d.ts +30 -0
- package/dist/lib/conditional-rule-match.js +66 -0
- package/dist/lib/conditional-rule-match.js.map +1 -0
- package/dist/lib/data-list-display-options.d.ts +26 -0
- package/dist/lib/data-list-display-options.js +14 -0
- package/dist/lib/data-list-display-options.js.map +1 -0
- package/dist/lib/data-list-view-registry.d.ts +2 -0
- package/dist/lib/data-list-view-registry.js +102 -0
- package/dist/lib/data-list-view-registry.js.map +1 -0
- package/dist/lib/data-list-view-surface.d.ts +2 -0
- package/dist/lib/data-list-view-surface.js +80 -0
- package/dist/lib/data-list-view-surface.js.map +1 -0
- package/dist/lib/data-list-view.d.ts +21 -0
- package/dist/lib/data-list-view.js +25 -0
- package/dist/lib/data-list-view.js.map +1 -0
- package/dist/lib/date-filter.d.ts +22 -0
- package/dist/lib/date-filter.js +61 -0
- package/dist/lib/date-filter.js.map +1 -0
- package/dist/lib/dev-log.d.ts +8 -0
- package/dist/lib/dev-log.js +10 -0
- package/dist/lib/dev-log.js.map +1 -0
- package/dist/lib/dropdown-menu-surface.d.ts +14 -0
- package/dist/lib/dropdown-menu-surface.js +6 -0
- package/dist/lib/dropdown-menu-surface.js.map +1 -0
- package/dist/lib/editable-target.d.ts +12 -0
- package/dist/lib/editable-target.js +12 -0
- package/dist/lib/editable-target.js.map +1 -0
- package/dist/lib/list-page-table-properties.d.ts +35 -0
- package/dist/lib/list-page-table-properties.js +81 -0
- package/dist/lib/list-page-table-properties.js.map +1 -0
- package/dist/lib/raf-throttle.d.ts +23 -0
- package/dist/lib/raf-throttle.js +27 -0
- package/dist/lib/raf-throttle.js.map +1 -0
- package/dist/lib/row-height.d.ts +16 -0
- package/dist/lib/row-height.js +10 -0
- package/dist/lib/row-height.js.map +1 -0
- package/dist/lib/table-properties-types.d.ts +83 -0
- package/dist/lib/table-properties-types.js +19 -0
- package/dist/lib/table-properties-types.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +83 -19
- package/src/components/data-table/filter-date-calendar.tsx +38 -0
- package/src/components/data-table/filter-text-value-input.tsx +77 -0
- package/src/components/data-table/index.tsx +1678 -0
- package/src/components/data-table/pagination.tsx +255 -0
- package/src/components/data-table/types.ts +96 -0
- package/src/components/data-table/use-table-state.ts +767 -0
- package/src/components/data-views/board-card-primitives.tsx +93 -0
- package/src/components/data-views/data-row-list.tsx +183 -0
- package/src/components/data-views/finder-panel-view.tsx +405 -0
- package/src/components/data-views/folder-grid-view.tsx +86 -0
- package/src/components/data-views/hub-table.tsx +498 -0
- package/src/components/data-views/index.ts +28 -0
- package/src/components/data-views/list-page-board-card.tsx +192 -0
- package/src/components/data-views/list-page-board-template.tsx +122 -0
- package/src/components/data-views/list-page-connected-view-body.tsx +66 -0
- package/src/components/data-views/list-page-split-details-placeholder.tsx +39 -0
- package/src/components/data-views/list-page-split-hub-chrome.tsx +60 -0
- package/src/components/data-views/list-page-split-hub-tokens.ts +16 -0
- package/src/components/data-views/list-page-tree-column-header.tsx +31 -0
- package/src/components/data-views/list-page-tree-panel-shell.tsx +91 -0
- package/src/components/data-views/os-folder-glyph.tsx +141 -0
- package/src/components/data-views/outline-tree-menu.tsx +157 -0
- package/src/components/table-properties/column-row.tsx +90 -0
- package/src/components/table-properties/draggable-list.ts +54 -0
- package/src/components/table-properties/drawer-button.tsx +300 -0
- package/src/components/table-properties/drawer.tsx +1148 -0
- package/src/components/table-properties/filter-card.tsx +251 -0
- package/src/components/table-properties/index.ts +36 -0
- package/src/components/table-properties/sort-card.tsx +63 -0
- package/src/components/templates/dedicated-search-landing-template.tsx +124 -0
- package/src/components/templates/dedicated-search-results-template.tsx +19 -0
- package/src/components/templates/index.ts +33 -0
- package/src/components/templates/list-page.tsx +602 -0
- package/src/components/templates/nested-secondary-panel-shell.tsx +70 -0
- package/src/components/ui/accordion.tsx +92 -0
- package/src/components/ui/alert-dialog.tsx +221 -0
- package/src/components/ui/avatar.tsx +13 -2
- package/src/components/ui/banner.tsx +2 -2
- package/src/components/ui/button.tsx +4 -4
- package/src/components/ui/calendar.tsx +1 -1
- package/src/components/ui/coach-mark.tsx +1 -1
- package/src/components/ui/context-menu.tsx +291 -0
- package/src/components/ui/date-picker-field.tsx +2 -2
- package/src/components/ui/dot-pattern.tsx +183 -0
- package/src/components/ui/export-drawer.tsx +375 -0
- package/src/components/ui/hover-card.tsx +66 -0
- package/src/components/ui/key-metrics-context.tsx +78 -0
- package/src/components/ui/key-metrics.tsx +1133 -0
- package/src/components/ui/list-page-view-frame.tsx +64 -0
- package/src/components/ui/page-header.tsx +244 -0
- package/src/components/ui/payment-card-fields.tsx +2 -2
- package/src/components/ui/resizable.tsx +68 -0
- package/src/components/ui/scroll-area.tsx +72 -0
- package/src/components/ui/selection-tile-grid.tsx +9 -2
- package/src/components/ui/sidebar.tsx +84 -12
- package/src/components/ui/slider.tsx +83 -0
- package/src/globals.css +2201 -7
- package/src/globals.d.ts +20 -0
- package/src/index.ts +68 -1
- package/src/lib/conditional-rule-match.ts +119 -0
- package/src/lib/data-list-display-options.ts +35 -0
- package/src/lib/data-list-view-registry.ts +104 -0
- package/src/lib/data-list-view-surface.ts +83 -0
- package/src/lib/data-list-view.ts +47 -0
- package/src/lib/dev-log.ts +10 -0
- package/src/lib/editable-target.ts +20 -0
- package/src/lib/list-page-table-properties.ts +48 -0
- package/src/lib/raf-throttle.ts +45 -0
- package/src/lib/row-height.ts +19 -0
- package/src/lib/table-properties-types.ts +98 -0
- package/template/.cursor/rules/exxat-command-menu.mdc +1 -1
- package/template/.cursor/rules/exxat-dashboard-view-charts.mdc +3 -3
- package/template/.cursor/rules/exxat-data-tables.mdc +1 -1
- package/template/.cursor/rules/exxat-ds-agents.mdc +2 -2
- package/template/.cursor/rules/exxat-kbd-shortcuts.mdc +2 -2
- package/template/.cursor/rules/exxat-table-properties-drawer.mdc +1 -1
- package/template/AGENTS.md +104 -78
- package/template/app/(app)/dashboard/loading.tsx +15 -3
- package/template/app/(app)/dashboard/page.tsx +14 -2
- package/template/app/(app)/examples/page.tsx +0 -2
- package/template/app/(app)/layout.tsx +17 -4
- package/template/app/(app)/loading.tsx +18 -1
- package/template/app/(app)/question-bank/find/page.tsx +1 -2
- package/template/app/(app)/question-bank/layout.tsx +1 -1
- package/template/app/(app)/question-bank/library/page.tsx +1 -2
- package/template/app/(app)/question-bank/list/page.tsx +1 -2
- package/template/app/(app)/question-bank/new/page.tsx +15 -20
- package/template/app/(app)/question-bank/page.tsx +1 -2
- package/template/app/(app)/settings/page.tsx +5 -4
- package/template/app/globals.css +14 -16
- package/template/components/ask-leo-sidebar.tsx +5 -1
- package/template/components/brand-color-picker.tsx +2 -2
- package/template/components/charts-overview.tsx +1 -1
- package/template/components/compliance-board-view.tsx +142 -0
- package/template/components/compliance-client.tsx +92 -0
- package/template/components/compliance-page-header.tsx +89 -0
- package/template/components/compliance-table.tsx +468 -0
- package/template/components/dashboard-report-charts.tsx +1 -1
- package/template/components/dashboard-tabs.tsx +1 -1
- package/template/components/data-table/filter-date-calendar.tsx +1 -38
- package/template/components/data-table/filter-text-value-input.tsx +1 -77
- package/template/components/data-table/index.tsx +1 -1634
- package/template/components/data-table/pagination.tsx +1 -255
- package/template/components/data-table/types.ts +1 -94
- package/template/components/data-table/use-table-state.test.ts +420 -0
- package/template/components/data-table/use-table-state.ts +1 -758
- package/template/components/data-view-dashboard-charts-compliance.tsx +963 -0
- package/template/components/data-view-dashboard-charts-team.tsx +971 -0
- package/template/components/data-view-dashboard-charts.tsx +1503 -0
- package/template/components/data-views/board-card-primitives.tsx +1 -93
- package/template/components/data-views/data-row-list.tsx +1 -183
- package/template/components/data-views/finder-panel-view.tsx +1 -405
- package/template/components/data-views/folder-grid-view.tsx +1 -86
- package/template/components/data-views/hub-table.tsx +1 -0
- package/template/components/data-views/index.ts +50 -37
- package/template/components/data-views/list-page-board-card.tsx +1 -192
- package/template/components/data-views/list-page-board-template.tsx +1 -122
- package/template/components/data-views/list-page-connected-view-body.tsx +1 -66
- package/template/components/data-views/list-page-split-details-placeholder.tsx +1 -39
- package/template/components/data-views/list-page-split-hub-chrome.tsx +1 -68
- package/template/components/data-views/list-page-split-hub-tokens.ts +1 -16
- package/template/components/data-views/list-page-tree-column-header.tsx +1 -31
- package/template/components/data-views/list-page-tree-panel-shell.tsx +1 -91
- package/template/components/data-views/list-page-view-frame.tsx +5 -53
- package/template/components/data-views/os-folder-glyph.tsx +1 -129
- package/template/components/data-views/outline-tree-menu.tsx +1 -157
- package/template/components/export-drawer.test.tsx +71 -0
- package/template/components/export-drawer.tsx +1 -375
- package/template/components/exxat-product-logo.tsx +5 -5
- package/template/components/hub-tree-panel-view.tsx +2 -2
- package/template/components/invite-collaborators-drawer.tsx +3 -3
- package/template/components/key-metrics-ask-leo-bridge.tsx +40 -0
- package/template/components/key-metrics.tsx +1 -1063
- package/template/components/leo-insight-indicator.tsx +2 -2
- package/template/components/new-placement-back-btn.tsx +28 -0
- package/template/components/new-placement-form.tsx +942 -0
- package/template/components/new-question-composer.tsx +456 -408
- package/template/components/onboarding/index.ts +9 -0
- package/template/components/onboarding/onboarding-01.tsx +1 -1
- package/template/components/onboarding/onboarding-02.tsx +1 -1
- package/template/components/onboarding/onboarding-03.tsx +1 -1
- package/template/components/onboarding/onboarding-04.tsx +1 -1
- package/template/components/page-header.tsx +8 -226
- package/template/components/placement-board-card.tsx +250 -0
- package/template/components/placement-detail.tsx +438 -0
- package/template/components/placements-board-view.tsx +397 -0
- package/template/components/placements-client.tsx +220 -0
- package/template/components/placements-list-view.tsx +124 -0
- package/template/components/placements-page-header.tsx +166 -0
- package/template/components/placements-table-cells.test.tsx +22 -0
- package/template/components/placements-table-cells.tsx +173 -0
- package/template/components/placements-table-columns.tsx +210 -0
- package/template/components/placements-table.tsx +934 -0
- package/template/components/product-switcher.tsx +3 -4
- package/template/components/product-wordmark.tsx +2 -1
- package/template/components/question-bank-client.tsx +5 -5
- package/template/components/question-bank-hub-client.tsx +1 -1
- package/template/components/question-bank-new-folder-sheet.tsx +2 -2
- package/template/components/question-bank-secondary-nav.tsx +3 -3
- package/template/components/question-bank-table.tsx +541 -431
- package/template/components/rotations-empty-state.tsx +50 -0
- package/template/components/rotations-panel-activator.tsx +8 -0
- package/template/components/settings-appearance-card.tsx +3 -4
- package/template/components/settings-client.tsx +15 -59
- package/template/components/settings-form-row.tsx +4 -9
- package/template/components/{app-sidebar-dynamic.tsx → sidebar/app-sidebar-dynamic.tsx} +1 -1
- package/template/components/{app-sidebar.tsx → sidebar/app-sidebar.tsx} +59 -74
- package/template/components/sidebar/index.ts +16 -0
- package/template/components/{secondary-nav.tsx → sidebar/secondary-nav.tsx} +2 -2
- package/template/components/{secondary-panel.tsx → sidebar/secondary-panel.tsx} +50 -7
- package/template/components/{sidebar-auto-collapse.tsx → sidebar/sidebar-auto-collapse.tsx} +6 -2
- package/template/components/{sidebar-shell.tsx → sidebar/sidebar-shell.tsx} +1 -1
- package/template/components/site-header.tsx +1 -1
- package/template/components/sites-board-view.tsx +67 -0
- package/template/components/sites-client.tsx +154 -0
- package/template/components/sites-table.tsx +249 -0
- package/template/components/table-properties/column-row.tsx +1 -90
- package/template/components/table-properties/draggable-list.ts +1 -49
- package/template/components/table-properties/drawer-button.tsx +1 -262
- package/template/components/table-properties/drawer.tsx +1 -1166
- package/template/components/table-properties/filter-card.tsx +1 -251
- package/template/components/table-properties/sort-card.tsx +1 -59
- package/template/components/table-properties/types.ts +28 -71
- package/template/components/team-board-view.tsx +122 -0
- package/template/components/team-client.tsx +100 -0
- package/template/components/team-page-header.tsx +92 -0
- package/template/components/team-table.tsx +553 -0
- package/template/components/templates/dedicated-search-landing-template.tsx +1 -124
- package/template/components/templates/dedicated-search-results-template.tsx +1 -19
- package/template/components/templates/list-page.tsx +1 -608
- package/template/components/templates/nested-secondary-panel-shell.tsx +1 -63
- package/template/components/templates/new-focus-template.tsx +659 -0
- package/template/components/templates/secondary-panel-hub-template.tsx +1 -1
- package/template/components/ui/accordion.tsx +1 -0
- package/template/components/ui/alert-dialog.tsx +1 -0
- package/template/components/ui/context-menu.tsx +1 -0
- package/template/components/ui/dot-pattern.tsx +1 -183
- package/template/components/ui/hover-card.tsx +1 -0
- package/template/components/ui/resizable.tsx +1 -68
- package/template/components/ui/scroll-area.tsx +1 -0
- package/template/components/ui/slider.tsx +1 -0
- package/template/docs/blueprints/README.md +86 -0
- package/template/docs/blueprints/_template.md +91 -0
- package/template/docs/blueprints/board-card.md +123 -0
- package/template/docs/blueprints/data-table.md +139 -0
- package/template/docs/blueprints/key-metrics.md +128 -0
- package/template/docs/blueprints/list-page-template.md +123 -0
- package/template/docs/blueprints/page-header.md +130 -0
- package/template/docs/command-menu-pattern.md +1 -1
- package/template/docs/component-selection-guide.md +224 -0
- package/template/docs/components-audit-2026-05.md +158 -0
- package/template/docs/data-views-pattern.md +17 -54
- package/template/docs/drawer-vs-dialog-pattern.md +1 -3
- package/template/docs/migrations/0001-brand-deep-alias-stabilization.md +95 -0
- package/template/docs/migrations/0002-exxat-token-namespace.md +154 -0
- package/template/docs/migrations/0003-globals-css-canonical.md +110 -0
- package/template/docs/migrations/README.md +100 -0
- package/template/docs/migrations/_template.md +64 -0
- package/template/docs/shell-surface-elevation-pattern.md +3 -5
- package/template/docs/token-taxonomy.md +416 -0
- package/template/eslint.config.mjs +27 -0
- package/template/hooks/use-secondary-panel-hub-nav.ts +1 -1
- package/template/lib/command-menu-config.ts +0 -1
- package/template/lib/command-menu-search-data.ts +27 -11
- package/template/lib/compliance-supported-views.ts +10 -0
- package/template/lib/conditional-rule-match.ts +6 -97
- package/template/lib/data-list-display-options.ts +1 -49
- package/template/lib/data-list-view-registry.ts +1 -104
- package/template/lib/data-list-view-surface.ts +1 -83
- package/template/lib/data-list-view.ts +1 -47
- package/template/lib/data-view-dashboard-placements-layout.ts +215 -0
- package/template/lib/data-view-dashboard-storage.ts +35 -38
- package/template/lib/dev-log.ts +1 -8
- package/template/lib/editable-target.ts +1 -10
- package/template/lib/list-page-table-properties.ts +1 -48
- package/template/lib/list-status-badges.ts +97 -4
- package/template/lib/mock/compliance-kpi.ts +61 -0
- package/template/lib/mock/compliance.ts +146 -0
- package/template/lib/mock/navigation.tsx +0 -9
- package/template/lib/mock/placements-kpi.ts +134 -0
- package/template/lib/mock/placements.ts +176 -0
- package/template/lib/mock/sites-directory.ts +16 -0
- package/template/lib/mock/sites-kpi.ts +25 -0
- package/template/lib/mock/team-kpi.ts +60 -0
- package/template/lib/mock/team.ts +118 -0
- package/template/lib/placement-board-card-layout.ts +79 -0
- package/template/lib/placements-supported-views.ts +12 -0
- package/template/lib/question-bank-supported-views.ts +0 -1
- package/template/lib/raf-throttle.ts +1 -45
- package/template/lib/row-height.ts +4 -10
- package/template/lib/sidebar-state-cookie.ts +11 -2
- package/template/lib/sites-supported-views.ts +10 -0
- package/template/lib/table-state-lifecycle.ts +2 -2
- package/template/lib/team-supported-views.ts +10 -0
- package/template/package.json +1 -0
- package/template/tests/setup.ts +25 -0
- package/consumer-extras/AGENTS.md +0 -76
- package/consumer-extras/cursor-skills/exxat-consumer-app/SKILL.md +0 -37
- package/consumer-extras/cursor-skills/exxat-focused-workflow-page/SKILL.md +0 -57
- package/consumer-extras/patterns/consumer-app-pattern.md +0 -39
- package/consumer-extras/patterns/focused-workflow-page-pattern.md +0 -84
- package/src/components/ui/button-group.tsx +0 -81
- package/src/theme.css +0 -16
- package/src/tokens/README.md +0 -15
- package/src/tokens/base.css +0 -337
- package/src/tokens/high-contrast.css +0 -1195
- package/src/tokens/layers.css +0 -224
- package/src/tokens/tailwind-bridge.css +0 -118
- package/src/tokens/themes.css +0 -201
- package/template/app/(app)/data-list/layout.tsx +0 -43
- package/template/app/(app)/data-list/page.tsx +0 -10
- package/template/app/(app)/examples/focused-workflow/page.tsx +0 -5
- package/template/components/app-route-loading.tsx +0 -14
- package/template/components/dashboard-onboarding-gallery.tsx +0 -13
- package/template/components/dashboard-onboarding.tsx +0 -21
- package/template/components/data-views/list-page-calendar-view.tsx +0 -593
- package/template/components/data-views/list-page-folder-columns-panel.tsx +0 -345
- package/template/components/examples/focused-workflow-showcase.tsx +0 -183
- package/template/components/list-hub-board-view.tsx +0 -68
- package/template/components/list-hub-client.tsx +0 -186
- package/template/components/list-hub-list-view.tsx +0 -36
- package/template/components/list-hub-panel-activator.tsx +0 -8
- package/template/components/list-hub-secondary-nav.tsx +0 -121
- package/template/components/list-hub-table.tsx +0 -336
- package/template/components/question-bank-folder-columns-panel.tsx +0 -104
- package/template/components/question-bank-list-view.tsx +0 -53
- package/template/components/secondary-panel/nav-link-rows.tsx +0 -83
- package/template/components/secondary-panels/list-hub-panel.tsx +0 -39
- package/template/components/secondary-panels/question-bank-panel.tsx +0 -39
- package/template/components/secondary-panels/registry.tsx +0 -15
- package/template/components/section-cards.tsx +0 -106
- package/template/components/templates/focused-workflow-layouts.tsx +0 -448
- package/template/components/templates/focused-workflow-page-template.tsx +0 -69
- package/template/components/templates/page-loading-shell.tsx +0 -262
- package/template/components/ui/button-group.tsx +0 -1
- package/template/docs/consumer-app-pattern.md +0 -39
- package/template/docs/focused-workflow-page-pattern.md +0 -84
- package/template/lib/list-hub-nav.ts +0 -121
- package/template/lib/mock/list-hub-directory.ts +0 -27
- package/template/lib/mock/list-hub-kpi.ts +0 -27
- package/template/lib/page-loading-variant.ts +0 -40
- /package/template/components/{getting-started.tsx → onboarding/getting-started.tsx} +0 -0
- /package/template/components/{nav-documents.tsx → sidebar/nav-documents.tsx} +0 -0
- /package/template/components/{nav-main.tsx → sidebar/nav-main.tsx} +0 -0
- /package/template/components/{nav-secondary.tsx → sidebar/nav-secondary.tsx} +0 -0
- /package/template/components/{nav-user.tsx → sidebar/nav-user.tsx} +0 -0
- /package/template/components/{sidebar-auto-open.tsx → sidebar/sidebar-auto-open.tsx} +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default surface sizing for product dropdown menus (view settings, row ⋯, column menus, etc.).
|
|
3
|
+
*
|
|
4
|
+
* Uses **pure CSS** (`w-max` + `min-w-*` + `max-w-*`) so width follows labels and shortcuts
|
|
5
|
+
* without **ResizeObserver** or layout thrash.
|
|
6
|
+
*
|
|
7
|
+
* Override when you need a fixed rail, for example:
|
|
8
|
+
* - `className="w-20"` — page-size picker in `DataTablePaginated`
|
|
9
|
+
* - `className="w-(--radix-dropdown-menu-trigger-width) min-w-60"` — account / identity menus
|
|
10
|
+
* - `className="!w-max min-w-72 …"` — very wide school/program switcher
|
|
11
|
+
*/
|
|
12
|
+
declare const DROPDOWN_MENU_CONTENT_SURFACE_CLASS: "min-w-52 w-max max-w-[min(24rem,calc(100vw-2rem))]";
|
|
13
|
+
|
|
14
|
+
export { DROPDOWN_MENU_CONTENT_SURFACE_CLASS };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// src/lib/dropdown-menu-surface.ts
|
|
2
|
+
var DROPDOWN_MENU_CONTENT_SURFACE_CLASS = "min-w-52 w-max max-w-[min(24rem,calc(100vw-2rem))]";
|
|
3
|
+
|
|
4
|
+
export { DROPDOWN_MENU_CONTENT_SURFACE_CLASS };
|
|
5
|
+
//# sourceMappingURL=dropdown-menu-surface.js.map
|
|
6
|
+
//# sourceMappingURL=dropdown-menu-surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/dropdown-menu-surface.ts"],"names":[],"mappings":";AAWO,IAAM,mCAAA,GACX","file":"dropdown-menu-surface.js","sourcesContent":["/**\n * Default surface sizing for product dropdown menus (view settings, row ⋯, column menus, etc.).\n *\n * Uses **pure CSS** (`w-max` + `min-w-*` + `max-w-*`) so width follows labels and shortcuts\n * without **ResizeObserver** or layout thrash.\n *\n * Override when you need a fixed rail, for example:\n * - `className=\"w-20\"` — page-size picker in `DataTablePaginated`\n * - `className=\"w-(--radix-dropdown-menu-trigger-width) min-w-60\"` — account / identity menus\n * - `className=\"!w-max min-w-72 …\"` — very wide school/program switcher\n */\nexport const DROPDOWN_MENU_CONTENT_SURFACE_CLASS =\n \"min-w-52 w-max max-w-[min(24rem,calc(100vw-2rem))]\" as const\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True when focus is in a field where global shortcuts should not fire.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the same skip logic baked into Radix `useShortcut` so global
|
|
5
|
+
* hotkey handlers (export ⌘⇧E, rename F2, etc.) don't steal keystrokes
|
|
6
|
+
* that the user clearly intends for the input. Covers native form
|
|
7
|
+
* fields and any element marked `contenteditable="true"` (richtext
|
|
8
|
+
* editors, comment composers).
|
|
9
|
+
*/
|
|
10
|
+
declare function isEditableTarget(target: EventTarget | null): boolean;
|
|
11
|
+
|
|
12
|
+
export { isEditableTarget };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/lib/editable-target.ts
|
|
2
|
+
function isEditableTarget(target) {
|
|
3
|
+
const el = target;
|
|
4
|
+
if (!el) return false;
|
|
5
|
+
if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement || el instanceof HTMLSelectElement)
|
|
6
|
+
return true;
|
|
7
|
+
return el.getAttribute?.("contenteditable") === "true";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { isEditableTarget };
|
|
11
|
+
//# sourceMappingURL=editable-target.js.map
|
|
12
|
+
//# sourceMappingURL=editable-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/editable-target.ts"],"names":[],"mappings":";AASO,SAAS,iBAAiB,MAAA,EAAqC;AACpE,EAAA,MAAM,EAAA,GAAK,MAAA;AACX,EAAA,IAAI,CAAC,IAAI,OAAO,KAAA;AAChB,EAAA,IACE,EAAA,YAAc,gBAAA,IACd,EAAA,YAAc,mBAAA,IACd,EAAA,YAAc,iBAAA;AAEd,IAAA,OAAO,IAAA;AACT,EAAA,OAAO,EAAA,CAAG,YAAA,GAAe,iBAAiB,CAAA,KAAM,MAAA;AAClD","file":"editable-target.js","sourcesContent":["/**\n * True when focus is in a field where global shortcuts should not fire.\n *\n * Mirrors the same skip logic baked into Radix `useShortcut` so global\n * hotkey handlers (export ⌘⇧E, rename F2, etc.) don't steal keystrokes\n * that the user clearly intends for the input. Covers native form\n * fields and any element marked `contenteditable=\"true\"` (richtext\n * editors, comment composers).\n */\nexport function isEditableTarget(target: EventTarget | null): boolean {\n const el = target as HTMLElement | null\n if (!el) return false\n if (\n el instanceof HTMLInputElement ||\n el instanceof HTMLTextAreaElement ||\n el instanceof HTMLSelectElement\n )\n return true\n return el.getAttribute?.(\"contenteditable\") === \"true\"\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DataListViewType } from './data-list-view.js';
|
|
3
|
+
export { i as isDataListSurfaceViewType } from '../data-list-view-registry-CyBoBML4.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Connects ListPageTemplate “View → Edit” to a surface that hosts TablePropertiesDrawer
|
|
7
|
+
* (PlacementsTable, TeamTable, ComplianceTable, …). Import from `@/components/table-properties`
|
|
8
|
+
* or use here — see `createListPageEditViewHandler`.
|
|
9
|
+
*
|
|
10
|
+
* View **labels** for tabs and Properties are centralized in `@/lib/data-list-view`
|
|
11
|
+
* (`DATA_LIST_VIEW_TILES`, `dataListViewLabel`, `dataListViewIcon`).
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/** Minimal ref API any list/table surface exposes for the shared Properties drawer. */
|
|
15
|
+
interface OpenTablePropertiesHandle {
|
|
16
|
+
openPropertiesDrawer: () => void;
|
|
17
|
+
}
|
|
18
|
+
interface CreateListPageEditViewHandlerOptions {
|
|
19
|
+
/** Delay before opening Properties after switching to table (ms). Default 160. */
|
|
20
|
+
switchDelayMs?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Returns `ListPageTemplate`’s `onEditView` handler: optionally coerces the tab to `table`
|
|
24
|
+
* when the view type is unknown, then calls `ref.current.openPropertiesDrawer()`.
|
|
25
|
+
*/
|
|
26
|
+
declare function createListPageEditViewHandler(tableRef: React.RefObject<OpenTablePropertiesHandle | null>, options?: CreateListPageEditViewHandlerOptions): (tab: {
|
|
27
|
+
viewType: string;
|
|
28
|
+
}, { updateTab }: {
|
|
29
|
+
updateTab: (patch: {
|
|
30
|
+
viewType?: DataListViewType;
|
|
31
|
+
icon?: string;
|
|
32
|
+
}) => void;
|
|
33
|
+
}) => void;
|
|
34
|
+
|
|
35
|
+
export { type CreateListPageEditViewHandlerOptions, type OpenTablePropertiesHandle, createListPageEditViewHandler };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// src/lib/data-list-view.ts
|
|
2
|
+
var DATA_LIST_VIEW_TILES = [
|
|
3
|
+
{ value: "table", icon: "fa-table", label: "Table view" },
|
|
4
|
+
{ value: "list", icon: "fa-list", label: "List view" },
|
|
5
|
+
{ value: "board", icon: "fa-table-columns", label: "Board view" },
|
|
6
|
+
{ value: "dashboard", icon: "fa-chart-mixed", label: "Dashboard view" },
|
|
7
|
+
{ value: "calendar", icon: "fa-calendar-days", label: "Calendar view" },
|
|
8
|
+
{ value: "folder", icon: "fa-grid-2", label: "Folder view" },
|
|
9
|
+
{ value: "panel", icon: "fa-sidebar", label: "List & details" },
|
|
10
|
+
{ value: "tree-panel", icon: "fa-sitemap", label: "Tree & details" }
|
|
11
|
+
];
|
|
12
|
+
function dataListViewIcon(view) {
|
|
13
|
+
return DATA_LIST_VIEW_TILES.find((t) => t.value === view)?.icon ?? "fa-table";
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// src/lib/data-list-view-surface.ts
|
|
17
|
+
function getDataListViewRenderKind(view) {
|
|
18
|
+
switch (view) {
|
|
19
|
+
case "table":
|
|
20
|
+
return "data-table";
|
|
21
|
+
case "list":
|
|
22
|
+
return "list-with-toolbar";
|
|
23
|
+
case "board":
|
|
24
|
+
return "board-with-toolbar";
|
|
25
|
+
case "dashboard":
|
|
26
|
+
return "dashboard-with-toolbar";
|
|
27
|
+
case "calendar":
|
|
28
|
+
return "calendar-with-toolbar";
|
|
29
|
+
case "folder":
|
|
30
|
+
return "folder-with-toolbar";
|
|
31
|
+
case "panel":
|
|
32
|
+
return "panel-with-toolbar";
|
|
33
|
+
case "tree-panel":
|
|
34
|
+
return "tree-panel-with-toolbar";
|
|
35
|
+
default: {
|
|
36
|
+
const _x = view;
|
|
37
|
+
return _x;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// src/lib/data-list-view-registry.ts
|
|
43
|
+
var DEFINITIONS = DATA_LIST_VIEW_TILES.map((tile) => {
|
|
44
|
+
const renderKind = getDataListViewRenderKind(tile.value);
|
|
45
|
+
const hubMetricsStrip = renderKind !== "calendar-with-toolbar" && renderKind !== "dashboard-with-toolbar";
|
|
46
|
+
return {
|
|
47
|
+
value: tile.value,
|
|
48
|
+
label: tile.label,
|
|
49
|
+
icon: tile.icon,
|
|
50
|
+
renderKind,
|
|
51
|
+
hubMetricsStrip
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
new Map(
|
|
55
|
+
DEFINITIONS.map((d) => [d.value, d])
|
|
56
|
+
);
|
|
57
|
+
var DATA_LIST_VIEW_REGISTRY = DEFINITIONS;
|
|
58
|
+
var DATA_LIST_SURFACE_VIEW_TYPES = new Set(
|
|
59
|
+
DATA_LIST_VIEW_REGISTRY.map((d) => d.value)
|
|
60
|
+
);
|
|
61
|
+
function isDataListSurfaceViewType(viewType) {
|
|
62
|
+
return DATA_LIST_SURFACE_VIEW_TYPES.has(viewType);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// src/lib/list-page-table-properties.ts
|
|
66
|
+
function createListPageEditViewHandler(tableRef, options) {
|
|
67
|
+
const delay = options?.switchDelayMs ?? 160;
|
|
68
|
+
return (tab, { updateTab }) => {
|
|
69
|
+
const mustSwitchToTableSurface = !isDataListSurfaceViewType(tab.viewType);
|
|
70
|
+
if (mustSwitchToTableSurface) {
|
|
71
|
+
updateTab({ viewType: "table", icon: dataListViewIcon("table") });
|
|
72
|
+
}
|
|
73
|
+
window.setTimeout(() => {
|
|
74
|
+
tableRef.current?.openPropertiesDrawer();
|
|
75
|
+
}, mustSwitchToTableSurface ? delay : 0);
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { createListPageEditViewHandler, isDataListSurfaceViewType };
|
|
80
|
+
//# sourceMappingURL=list-page-table-properties.js.map
|
|
81
|
+
//# sourceMappingURL=list-page-table-properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/data-list-view.ts","../../src/lib/data-list-view-surface.ts","../../src/lib/data-list-view-registry.ts","../../src/lib/list-page-table-properties.ts"],"names":[],"mappings":";AAiBO,IAAM,oBAAA,GAIP;AAAA,EACJ,EAAE,KAAA,EAAO,OAAA,EAAa,IAAA,EAAM,UAAA,EAAoB,OAAO,YAAA,EAAa;AAAA,EACpE,EAAE,KAAA,EAAO,MAAA,EAAa,IAAA,EAAM,SAAA,EAAoB,OAAO,WAAA,EAAY;AAAA,EACnE,EAAE,KAAA,EAAO,OAAA,EAAa,IAAA,EAAM,kBAAA,EAAoB,OAAO,YAAA,EAAa;AAAA,EACpE,EAAE,KAAA,EAAO,WAAA,EAAa,IAAA,EAAM,gBAAA,EAAoB,OAAO,gBAAA,EAAiB;AAAA,EACxE,EAAE,KAAA,EAAO,UAAA,EAAa,IAAA,EAAM,kBAAA,EAAoB,OAAO,eAAA,EAAgB;AAAA,EACvE,EAAE,KAAA,EAAO,QAAA,EAAa,IAAA,EAAM,WAAA,EAAoB,OAAO,aAAA,EAAc;AAAA,EACrE,EAAE,KAAA,EAAO,OAAA,EAAc,IAAA,EAAM,YAAA,EAAmB,OAAO,gBAAA,EAAiB;AAAA,EACxE,EAAE,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM,YAAA,EAAmB,OAAO,gBAAA;AACzD,CAAA;AAQO,SAAS,iBAAiB,IAAA,EAAgC;AAC/D,EAAA,OAAO,qBAAqB,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,KAAA,KAAU,IAAI,GAAG,IAAA,IAAQ,UAAA;AACnE;;;ACHO,SAAS,0BAA0B,IAAA,EAAgD;AACxF,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,OAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,mBAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,oBAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,wBAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,uBAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,qBAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,oBAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,yBAAA;AAAA,IACT,SAAS;AACP,MAAA,MAAM,EAAA,GAAY,IAAA;AAClB,MAAA,OAAO,EAAA;AAAA,IACT;AAAA;AAEJ;;;AC7BA,IAAM,WAAA,GAAwC,oBAAA,CAAqB,GAAA,CAAI,CAAA,IAAA,KAAQ;AAC7E,EAAA,MAAM,UAAA,GAAa,yBAAA,CAA0B,IAAA,CAAK,KAAK,CAAA;AACvD,EAAA,MAAM,eAAA,GAAkB,UAAA,KAAe,uBAAA,IAA2B,UAAA,KAAe,wBAAA;AACjF,EAAA,OAAO;AAAA,IACL,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,UAAA;AAAA,IACA;AAAA,GACF;AACF,CAAC,CAAA;AAEgB,IAAI,GAAA;AAAA,EACnB,YAAY,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,KAAA,EAAO,CAAC,CAAC;AACnC;AAEO,IAAM,uBAAA,GAA6D,WAAA;AAmCnE,IAAM,+BAA8D,IAAI,GAAA;AAAA,EAC7E,uBAAA,CAAwB,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,KAAK;AAC1C,CAAA;AAEO,SAAS,0BAA0B,QAAA,EAAgD;AACxF,EAAA,OAAO,4BAAA,CAA6B,IAAI,QAA4B,CAAA;AACtE;;;AC1DO,SAAS,6BAAA,CACd,UACA,OAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAQ,SAAS,aAAA,IAAiB,GAAA;AACxC,EAAA,OAAO,CACL,GAAA,EACA,EAAE,SAAA,EAAU,KACT;AACH,IAAA,MAAM,wBAAA,GAA2B,CAAC,yBAAA,CAA0B,GAAA,CAAI,QAAQ,CAAA;AACxE,IAAA,IAAI,wBAAA,EAA0B;AAC5B,MAAA,SAAA,CAAU,EAAE,QAAA,EAAU,OAAA,EAAS,MAAM,gBAAA,CAAiB,OAAO,GAAG,CAAA;AAAA,IAClE;AACA,IAAA,MAAA,CAAO,WAAW,MAAM;AACtB,MAAA,QAAA,CAAS,SAAS,oBAAA,EAAqB;AAAA,IACzC,CAAA,EAAG,wBAAA,GAA2B,KAAA,GAAQ,CAAC,CAAA;AAAA,EACzC,CAAA;AACF","file":"list-page-table-properties.js","sourcesContent":["/**\n * Data list “view type” — shared by Properties drawer, ListPageTemplate tabs, and client state.\n *\n * **Single source of truth** for view labels/icons: use `DATA_LIST_VIEW_TILES` and\n * `dataListViewLabel` / `dataListViewIcon` on every page so Table / List / Board / Dashboard\n * stay consistent and stay wired to the same `useTableState` dataset (see `docs/data-views-pattern.md`).\n */\nexport type DataListViewType =\n | \"table\"\n | \"list\"\n | \"board\"\n | \"dashboard\"\n | \"calendar\"\n | \"folder\"\n | \"panel\"\n | \"tree-panel\"\n\nexport const DATA_LIST_VIEW_TILES: readonly {\n value: DataListViewType\n label: string\n icon: string\n}[] = [\n { value: \"table\", icon: \"fa-table\", label: \"Table view\" },\n { value: \"list\", icon: \"fa-list\", label: \"List view\" },\n { value: \"board\", icon: \"fa-table-columns\", label: \"Board view\" },\n { value: \"dashboard\", icon: \"fa-chart-mixed\", label: \"Dashboard view\" },\n { value: \"calendar\", icon: \"fa-calendar-days\", label: \"Calendar view\" },\n { value: \"folder\", icon: \"fa-grid-2\", label: \"Folder view\" },\n { value: \"panel\", icon: \"fa-sidebar\", label: \"List & details\" },\n { value: \"tree-panel\", icon: \"fa-sitemap\", label: \"Tree & details\" },\n]\n\n/** User-facing name for tabs, Properties summary rows, and tooltips (not entity-specific). */\nexport function dataListViewLabel(view: DataListViewType): string {\n return DATA_LIST_VIEW_TILES.find(t => t.value === view)?.label ?? view\n}\n\n/** Font Awesome icon class (no prefix) for tab / toolbar state when view changes. */\nexport function dataListViewIcon(view: DataListViewType): string {\n return DATA_LIST_VIEW_TILES.find(t => t.value === view)?.icon ?? \"fa-table\"\n}\n\n/** Add-view menu hint + `<Shortcut>` keys (1–9). Skipped in inputs via `useShortcut`. */\nexport function dataListViewAddShortcut(index: number): string | undefined {\n if (index < 0 || index > 8) return undefined\n return String(index + 1)\n}\n","/**\n * Maps `DataListViewType` to the UI surface pattern for list pages.\n *\n * **Data:** One `useTableState(fullRows, columns, …)` per tab; **filtered/sorted rows**\n * (`tableState.rows`) are the single source of truth for List, Board, and Dashboard.\n * Table view renders the same state via `DataTable`.\n *\n * | View | Surface |\n * |------------|---------|\n * | `table` | `DataTable` |\n * | `list` | `DataTableToolbar` + list layout |\n * | `board` | `DataTableToolbar` + board / kanban |\n * | `dashboard`| `DataTableToolbar` + KPI (`KeyMetrics`) + optional charts (`ChartCard`, Recharts, etc.) |\n * | `calendar` | `DataTableToolbar` + `ListPageCalendarView` (month grid + day detail) |\n * | `folder` | `DataTableToolbar` + icon grid (macOS-Finder-style) |\n * | `panel` | `DataTableToolbar` + resizable split (list / tree column + detail inspector) |\n */\n\nimport type { DataListViewType } from \"./data-list-view\"\n\nexport { showsListPageHubMetricsStrip } from \"./data-list-view-registry\"\n\n/** What to render for the active view tab (routing / branching). */\nexport type DataListViewRenderKind =\n | \"data-table\"\n | \"list-with-toolbar\"\n | \"board-with-toolbar\"\n | \"dashboard-with-toolbar\"\n | \"calendar-with-toolbar\"\n | \"folder-with-toolbar\"\n | \"panel-with-toolbar\"\n | \"tree-panel-with-toolbar\"\n\n/**\n * Stable classification for switch/if chains. **Every** `DataListViewType` maps to exactly one kind.\n * Use this so `dashboard` is never mistaken for `board` (a common bug when only `list` is special-cased).\n */\nexport function getDataListViewRenderKind(view: DataListViewType): DataListViewRenderKind {\n switch (view) {\n case \"table\":\n return \"data-table\"\n case \"list\":\n return \"list-with-toolbar\"\n case \"board\":\n return \"board-with-toolbar\"\n case \"dashboard\":\n return \"dashboard-with-toolbar\"\n case \"calendar\":\n return \"calendar-with-toolbar\"\n case \"folder\":\n return \"folder-with-toolbar\"\n case \"panel\":\n return \"panel-with-toolbar\"\n case \"tree-panel\":\n return \"tree-panel-with-toolbar\"\n default: {\n const _x: never = view\n return _x\n }\n }\n}\n\nexport function usesDataTableComponent(view: DataListViewType): boolean {\n return view === \"table\"\n}\n\n/** KPI band + optional charts — not the kanban board. */\nexport function usesDashboardSurface(view: DataListViewType): boolean {\n return view === \"dashboard\"\n}\n\n/** Shared toolbar (search, filters, properties); body differs by view. */\nexport function usesToolbarWithFilteredRows(view: DataListViewType): boolean {\n return (\n view === \"list\" ||\n view === \"board\" ||\n view === \"dashboard\" ||\n view === \"calendar\" ||\n view === \"folder\" ||\n view === \"panel\" ||\n view === \"tree-panel\"\n )\n}\n","/**\n * Central registry for list-page view types — labels, render kinds, and hub chrome rules.\n *\n * **Add a new view once here** (plus a body in `components/data-views/`). Hubs declare\n * `supportedViewTypes` on `ListPageTemplate`; table components branch with\n * `getDataListViewRenderKind` + `ListPageConnectedViewBody` (never a dashboard fallback).\n *\n * @see `docs/data-views-pattern.md` — \"View registry and connected bodies\"\n */\n\nimport {\n DATA_LIST_VIEW_TILES,\n type DataListViewType,\n dataListViewAddShortcut,\n dataListViewIcon,\n dataListViewLabel,\n} from \"./data-list-view\"\nimport {\n getDataListViewRenderKind,\n type DataListViewRenderKind,\n} from \"./data-list-view-surface\"\n\nexport interface DataListViewDefinition {\n value: DataListViewType\n label: string\n icon: string\n renderKind: DataListViewRenderKind\n /** `ListPageTemplate` metrics slot above the views toolbar. */\n hubMetricsStrip: boolean\n}\n\nconst DEFINITIONS: DataListViewDefinition[] = DATA_LIST_VIEW_TILES.map(tile => {\n const renderKind = getDataListViewRenderKind(tile.value)\n const hubMetricsStrip = renderKind !== \"calendar-with-toolbar\" && renderKind !== \"dashboard-with-toolbar\"\n return {\n value: tile.value,\n label: tile.label,\n icon: tile.icon,\n renderKind,\n hubMetricsStrip,\n }\n})\n\nconst BY_VALUE = new Map<DataListViewType, DataListViewDefinition>(\n DEFINITIONS.map(d => [d.value, d]),\n)\n\nexport const DATA_LIST_VIEW_REGISTRY: readonly DataListViewDefinition[] = DEFINITIONS\n\nexport function dataListViewDefinition(view: DataListViewType): DataListViewDefinition {\n const def = BY_VALUE.get(view)\n if (!def) {\n throw new Error(`Unknown DataListViewType: ${view}`)\n }\n return def\n}\n\n/** `ListPageTemplate` hub KPI strip — false for calendar and dashboard (inline KPIs). */\nexport function showsListPageHubMetricsStrip(view: DataListViewType): boolean {\n return dataListViewDefinition(view).hubMetricsStrip\n}\n\n/** Tiles for Add view + Properties when a hub only supports a subset of views. */\nexport function dataListViewTilesForHub(supported: readonly DataListViewType[]) {\n const allowed = new Set(supported)\n return DATA_LIST_VIEW_REGISTRY.filter(d => allowed.has(d.value)).map(d => ({\n type: d.value,\n label: d.label,\n icon: d.icon,\n }))\n}\n\n/** `SelectionTileGrid` options for Properties when a hub supports a subset of views. */\nexport function dataListViewSelectionTilesForHub(supported: readonly DataListViewType[]) {\n return dataListViewTilesForHub(supported).map(t => ({\n value: t.type,\n label: t.label,\n icon: t.icon,\n }))\n}\n\n/** View types that expose Table Properties (all registered `DataListViewType` values). */\nexport const DATA_LIST_SURFACE_VIEW_TYPES: ReadonlySet<DataListViewType> = new Set(\n DATA_LIST_VIEW_REGISTRY.map(d => d.value),\n)\n\nexport function isDataListSurfaceViewType(viewType: string): viewType is DataListViewType {\n return DATA_LIST_SURFACE_VIEW_TYPES.has(viewType as DataListViewType)\n}\n\nexport function isDataListViewTypeSupported(\n view: DataListViewType,\n supported: readonly DataListViewType[],\n): boolean {\n return supported.includes(view)\n}\n\nexport {\n dataListViewAddShortcut,\n dataListViewIcon,\n dataListViewLabel,\n getDataListViewRenderKind,\n type DataListViewRenderKind,\n}\n","/**\n * Connects ListPageTemplate “View → Edit” to a surface that hosts TablePropertiesDrawer\n * (PlacementsTable, TeamTable, ComplianceTable, …). Import from `@/components/table-properties`\n * or use here — see `createListPageEditViewHandler`.\n *\n * View **labels** for tabs and Properties are centralized in `@/lib/data-list-view`\n * (`DATA_LIST_VIEW_TILES`, `dataListViewLabel`, `dataListViewIcon`).\n */\n\nimport * as React from \"react\"\n\nimport { dataListViewIcon, type DataListViewType } from \"./data-list-view\"\nimport { isDataListSurfaceViewType } from \"./data-list-view-registry\"\n\nexport { isDataListSurfaceViewType }\n\n/** Minimal ref API any list/table surface exposes for the shared Properties drawer. */\nexport interface OpenTablePropertiesHandle {\n openPropertiesDrawer: () => void\n}\n\nexport interface CreateListPageEditViewHandlerOptions {\n /** Delay before opening Properties after switching to table (ms). Default 160. */\n switchDelayMs?: number\n}\n\n/**\n * Returns `ListPageTemplate`’s `onEditView` handler: optionally coerces the tab to `table`\n * when the view type is unknown, then calls `ref.current.openPropertiesDrawer()`.\n */\nexport function createListPageEditViewHandler(\n tableRef: React.RefObject<OpenTablePropertiesHandle | null>,\n options?: CreateListPageEditViewHandlerOptions\n) {\n const delay = options?.switchDelayMs ?? 160\n return (\n tab: { viewType: string },\n { updateTab }: { updateTab: (patch: { viewType?: DataListViewType; icon?: string }) => void }\n ) => {\n const mustSwitchToTableSurface = !isDataListSurfaceViewType(tab.viewType)\n if (mustSwitchToTableSurface) {\n updateTab({ viewType: \"table\", icon: dataListViewIcon(\"table\") })\n }\n window.setTimeout(() => {\n tableRef.current?.openPropertiesDrawer()\n }, mustSwitchToTableSurface ? delay : 0)\n }\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coalesce many calls to `fn` into one per animation frame.
|
|
3
|
+
*
|
|
4
|
+
* Use for high-frequency layout-reading event handlers (scroll, resize,
|
|
5
|
+
* visualViewport, ResizeObserver) where the work must happen in a frame but
|
|
6
|
+
* doing it on every event call (60+/s for resize, hundreds/s for capture
|
|
7
|
+
* scrolls) wastes layout/paint cycles. The returned function exposes
|
|
8
|
+
* `.cancel()` so effect cleanup can drop a pending frame.
|
|
9
|
+
*
|
|
10
|
+
* Pattern:
|
|
11
|
+
* const apply = () => { ...layout reads + setState... }
|
|
12
|
+
* const scheduled = rafThrottle(apply)
|
|
13
|
+
* window.addEventListener("scroll", scheduled, { passive: true, capture: true })
|
|
14
|
+
* return () => {
|
|
15
|
+
* scheduled.cancel()
|
|
16
|
+
* window.removeEventListener("scroll", scheduled, { capture: true })
|
|
17
|
+
* }
|
|
18
|
+
*/
|
|
19
|
+
declare function rafThrottle<TArgs extends unknown[]>(fn: (...args: TArgs) => void): ((...args: TArgs) => void) & {
|
|
20
|
+
cancel: () => void;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { rafThrottle };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// src/lib/raf-throttle.ts
|
|
2
|
+
function rafThrottle(fn) {
|
|
3
|
+
let rafId = 0;
|
|
4
|
+
let lastArgs = null;
|
|
5
|
+
const scheduled = ((...args) => {
|
|
6
|
+
lastArgs = args;
|
|
7
|
+
if (rafId !== 0) return;
|
|
8
|
+
rafId = requestAnimationFrame(() => {
|
|
9
|
+
rafId = 0;
|
|
10
|
+
const a = lastArgs;
|
|
11
|
+
lastArgs = null;
|
|
12
|
+
if (a) fn(...a);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
scheduled.cancel = () => {
|
|
16
|
+
if (rafId !== 0) {
|
|
17
|
+
cancelAnimationFrame(rafId);
|
|
18
|
+
rafId = 0;
|
|
19
|
+
}
|
|
20
|
+
lastArgs = null;
|
|
21
|
+
};
|
|
22
|
+
return scheduled;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { rafThrottle };
|
|
26
|
+
//# sourceMappingURL=raf-throttle.js.map
|
|
27
|
+
//# sourceMappingURL=raf-throttle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/raf-throttle.ts"],"names":[],"mappings":";AAkBO,SAAS,YACd,EAAA,EACqD;AACrD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,QAAA,GAAyB,IAAA;AAE7B,EAAA,MAAM,SAAA,IAAa,IAAI,IAAA,KAAgB;AACrC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,IAAI,UAAU,CAAA,EAAG;AACjB,IAAA,KAAA,GAAQ,sBAAsB,MAAM;AAClC,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA,MAAM,CAAA,GAAI,QAAA;AACV,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,IAAI,CAAA,EAAG,EAAA,CAAG,GAAG,CAAC,CAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACH,CAAA,CAAA;AAEA,EAAA,SAAA,CAAU,SAAS,MAAM;AACvB,IAAA,IAAI,UAAU,CAAA,EAAG;AACf,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,MAAA,KAAA,GAAQ,CAAA;AAAA,IACV;AACA,IAAA,QAAA,GAAW,IAAA;AAAA,EACb,CAAA;AAEA,EAAA,OAAO,SAAA;AACT","file":"raf-throttle.js","sourcesContent":["/**\n * Coalesce many calls to `fn` into one per animation frame.\n *\n * Use for high-frequency layout-reading event handlers (scroll, resize,\n * visualViewport, ResizeObserver) where the work must happen in a frame but\n * doing it on every event call (60+/s for resize, hundreds/s for capture\n * scrolls) wastes layout/paint cycles. The returned function exposes\n * `.cancel()` so effect cleanup can drop a pending frame.\n *\n * Pattern:\n * const apply = () => { ...layout reads + setState... }\n * const scheduled = rafThrottle(apply)\n * window.addEventListener(\"scroll\", scheduled, { passive: true, capture: true })\n * return () => {\n * scheduled.cancel()\n * window.removeEventListener(\"scroll\", scheduled, { capture: true })\n * }\n */\nexport function rafThrottle<TArgs extends unknown[]>(\n fn: (...args: TArgs) => void,\n): ((...args: TArgs) => void) & { cancel: () => void } {\n let rafId = 0\n let lastArgs: TArgs | null = null\n\n const scheduled = ((...args: TArgs) => {\n lastArgs = args\n if (rafId !== 0) return\n rafId = requestAnimationFrame(() => {\n rafId = 0\n const a = lastArgs\n lastArgs = null\n if (a) fn(...a)\n })\n }) as ((...args: TArgs) => void) & { cancel: () => void }\n\n scheduled.cancel = () => {\n if (rafId !== 0) {\n cancelAnimationFrame(rafId)\n rafId = 0\n }\n lastArgs = null\n }\n\n return scheduled\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table row density — shared by Properties drawer tiles and useTableState.
|
|
3
|
+
*
|
|
4
|
+
* Three steps modelled after Linear / Notion / Airtable density toggles.
|
|
5
|
+
* `default` is the design-system baseline (`h-9` rows, `text-sm`); the
|
|
6
|
+
* other two scale the row height + vertical padding without changing the
|
|
7
|
+
* font size, so dense tables stay legible.
|
|
8
|
+
*/
|
|
9
|
+
type RowHeight = "compact" | "default" | "comfortable";
|
|
10
|
+
declare const ROW_HEIGHT_TILES: readonly {
|
|
11
|
+
value: RowHeight;
|
|
12
|
+
label: string;
|
|
13
|
+
icon: string;
|
|
14
|
+
}[];
|
|
15
|
+
|
|
16
|
+
export { ROW_HEIGHT_TILES, type RowHeight };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// src/lib/row-height.ts
|
|
2
|
+
var ROW_HEIGHT_TILES = [
|
|
3
|
+
{ value: "compact", label: "Compact", icon: "fa-down-to-line" },
|
|
4
|
+
{ value: "default", label: "Default", icon: "fa-arrows-up-down" },
|
|
5
|
+
{ value: "comfortable", label: "Comfortable", icon: "fa-up-to-line" }
|
|
6
|
+
];
|
|
7
|
+
|
|
8
|
+
export { ROW_HEIGHT_TILES };
|
|
9
|
+
//# sourceMappingURL=row-height.js.map
|
|
10
|
+
//# sourceMappingURL=row-height.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/row-height.ts"],"names":[],"mappings":";AAUO,IAAM,gBAAA,GAIP;AAAA,EACJ,EAAE,KAAA,EAAO,SAAA,EAAe,KAAA,EAAO,SAAA,EAAe,MAAM,iBAAA,EAAoB;AAAA,EACxE,EAAE,KAAA,EAAO,SAAA,EAAe,KAAA,EAAO,SAAA,EAAe,MAAM,mBAAA,EAAoB;AAAA,EACxE,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,MAAM,eAAA;AACtD","file":"row-height.js","sourcesContent":["/**\n * Table row density — shared by Properties drawer tiles and useTableState.\n *\n * Three steps modelled after Linear / Notion / Airtable density toggles.\n * `default` is the design-system baseline (`h-9` rows, `text-sm`); the\n * other two scale the row height + vertical padding without changing the\n * font size, so dense tables stay legible.\n */\nexport type RowHeight = \"compact\" | \"default\" | \"comfortable\"\n\nexport const ROW_HEIGHT_TILES: readonly {\n value: RowHeight\n label: string\n icon: string\n}[] = [\n { value: \"compact\", label: \"Compact\", icon: \"fa-down-to-line\" },\n { value: \"default\", label: \"Default\", icon: \"fa-arrows-up-down\" },\n { value: \"comfortable\", label: \"Comfortable\", icon: \"fa-up-to-line\" },\n]\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types + design-system constants for the Table Properties drawer
|
|
3
|
+
* and related data-table primitives (filter chips, sort cards,
|
|
4
|
+
* conditional formatting rules).
|
|
5
|
+
*
|
|
6
|
+
* Product-specific seed data (`FILTER_FIELDS` and `COLUMNS` arrays
|
|
7
|
+
* tailored to the Placements hub) intentionally stays in
|
|
8
|
+
* `apps/web/components/table-properties/types.ts` — those values are
|
|
9
|
+
* **product data**, not design-system primitives, and the package must
|
|
10
|
+
* not know about Placement specializations, supervisor labels, etc.
|
|
11
|
+
*
|
|
12
|
+
* Consumers compose their own `FilterFieldDef[]` / `ColDef[]` arrays
|
|
13
|
+
* tailored to their entity (Team members, Compliance items, Question
|
|
14
|
+
* bank rows, …) and pass them into the drawer through props.
|
|
15
|
+
*/
|
|
16
|
+
/** Comparison operator vocabulary used by every filter row + conditional rule. */
|
|
17
|
+
type FilterOperator = "is" | "is_not" | "contains" | "not_contains";
|
|
18
|
+
/**
|
|
19
|
+
* Input mask for `type: "text"` filters. Maps to a
|
|
20
|
+
* [Shadcn Studio input-mask](https://shadcnstudio.com/docs/components/input-mask)
|
|
21
|
+
* pattern key. Add new keys here (and in your concrete `exxatMaskPatterns`
|
|
22
|
+
* map) when a new column needs a structured text format.
|
|
23
|
+
*/
|
|
24
|
+
type FilterTextMask = "phone" | "zip" | "dateMDY";
|
|
25
|
+
interface FilterFieldDef {
|
|
26
|
+
key: string;
|
|
27
|
+
label: string;
|
|
28
|
+
icon: string;
|
|
29
|
+
type: "select" | "text" | "date";
|
|
30
|
+
operators: FilterOperator[];
|
|
31
|
+
/** Select options, or for `date` fields used by conditional rules (exact row strings). */
|
|
32
|
+
options?: {
|
|
33
|
+
value: string;
|
|
34
|
+
label: string;
|
|
35
|
+
}[];
|
|
36
|
+
/** When `type` is `text`, optional `use-mask-input` pattern for the value field. */
|
|
37
|
+
textMask?: FilterTextMask;
|
|
38
|
+
}
|
|
39
|
+
interface ActiveFilter {
|
|
40
|
+
id: string;
|
|
41
|
+
fieldKey: string;
|
|
42
|
+
operator: FilterOperator;
|
|
43
|
+
values: string[];
|
|
44
|
+
}
|
|
45
|
+
interface SortRule {
|
|
46
|
+
id: string;
|
|
47
|
+
fieldKey: string;
|
|
48
|
+
direction: "asc" | "desc";
|
|
49
|
+
}
|
|
50
|
+
/** Operator → human-readable label map (centralized so chips, drawer, and CSV exports stay aligned). */
|
|
51
|
+
declare const OPERATOR_LABELS: Record<FilterOperator, string>;
|
|
52
|
+
/** Column descriptor for `TableProperties` views (Columns / Sort / Group panels). */
|
|
53
|
+
interface ColDef {
|
|
54
|
+
key: string;
|
|
55
|
+
label: string;
|
|
56
|
+
sortable: boolean;
|
|
57
|
+
sortKey?: string;
|
|
58
|
+
minWidth: number;
|
|
59
|
+
}
|
|
60
|
+
interface ConditionalRule {
|
|
61
|
+
id: string;
|
|
62
|
+
/** Column key to evaluate */
|
|
63
|
+
fieldKey: string;
|
|
64
|
+
operator: FilterOperator;
|
|
65
|
+
/** Selected option values (select) or text (single entry) when operator needs values */
|
|
66
|
+
values: string[];
|
|
67
|
+
/** Resolved CSS background color string */
|
|
68
|
+
bgColor: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Predefined palette for conditional rule backgrounds.
|
|
72
|
+
*
|
|
73
|
+
* Backgrounds are exposed as CSS custom properties so theming swaps the
|
|
74
|
+
* palette per brand without code edits (`--conditional-rule-green`,
|
|
75
|
+
* `--conditional-rule-yellow`, etc., declared in
|
|
76
|
+
* `packages/ui/src/globals.css`).
|
|
77
|
+
*/
|
|
78
|
+
declare const RULE_COLORS: {
|
|
79
|
+
name: string;
|
|
80
|
+
bg: string;
|
|
81
|
+
}[];
|
|
82
|
+
|
|
83
|
+
export { type ActiveFilter, type ColDef, type ConditionalRule, type FilterFieldDef, type FilterOperator, type FilterTextMask, OPERATOR_LABELS, RULE_COLORS, type SortRule };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/lib/table-properties-types.ts
|
|
2
|
+
var OPERATOR_LABELS = {
|
|
3
|
+
is: "is",
|
|
4
|
+
is_not: "is not",
|
|
5
|
+
contains: "contains",
|
|
6
|
+
not_contains: "does not contain"
|
|
7
|
+
};
|
|
8
|
+
var RULE_COLORS = [
|
|
9
|
+
{ name: "Green", bg: "var(--conditional-rule-green)" },
|
|
10
|
+
{ name: "Yellow", bg: "var(--conditional-rule-yellow)" },
|
|
11
|
+
{ name: "Blue", bg: "var(--conditional-rule-blue)" },
|
|
12
|
+
{ name: "Red", bg: "var(--conditional-rule-red)" },
|
|
13
|
+
{ name: "Purple", bg: "var(--conditional-rule-purple)" },
|
|
14
|
+
{ name: "Orange", bg: "var(--conditional-rule-orange)" }
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
export { OPERATOR_LABELS, RULE_COLORS };
|
|
18
|
+
//# sourceMappingURL=table-properties-types.js.map
|
|
19
|
+
//# sourceMappingURL=table-properties-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/table-properties-types.ts"],"names":[],"mappings":";AAqDO,IAAM,eAAA,GAAkD;AAAA,EAC7D,EAAA,EAAI,IAAA;AAAA,EACJ,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,YAAA,EAAc;AAChB;AAgCO,IAAM,WAAA,GAA8C;AAAA,EACzD,EAAE,IAAA,EAAM,OAAA,EAAU,EAAA,EAAI,+BAAA,EAAiC;AAAA,EACvD,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,gCAAA,EAAiC;AAAA,EACvD,EAAE,IAAA,EAAM,MAAA,EAAU,EAAA,EAAI,8BAAA,EAAiC;AAAA,EACvD,EAAE,IAAA,EAAM,KAAA,EAAU,EAAA,EAAI,6BAAA,EAAiC;AAAA,EACvD,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,gCAAA,EAAiC;AAAA,EACvD,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,gCAAA;AACxB","file":"table-properties-types.js","sourcesContent":["/**\n * Shared types + design-system constants for the Table Properties drawer\n * and related data-table primitives (filter chips, sort cards,\n * conditional formatting rules).\n *\n * Product-specific seed data (`FILTER_FIELDS` and `COLUMNS` arrays\n * tailored to the Placements hub) intentionally stays in\n * `apps/web/components/table-properties/types.ts` — those values are\n * **product data**, not design-system primitives, and the package must\n * not know about Placement specializations, supervisor labels, etc.\n *\n * Consumers compose their own `FilterFieldDef[]` / `ColDef[]` arrays\n * tailored to their entity (Team members, Compliance items, Question\n * bank rows, …) and pass them into the drawer through props.\n */\n\n/** Comparison operator vocabulary used by every filter row + conditional rule. */\nexport type FilterOperator = \"is\" | \"is_not\" | \"contains\" | \"not_contains\"\n\n/**\n * Input mask for `type: \"text\"` filters. Maps to a\n * [Shadcn Studio input-mask](https://shadcnstudio.com/docs/components/input-mask)\n * pattern key. Add new keys here (and in your concrete `exxatMaskPatterns`\n * map) when a new column needs a structured text format.\n */\nexport type FilterTextMask = \"phone\" | \"zip\" | \"dateMDY\"\n\nexport interface FilterFieldDef {\n key: string\n label: string\n icon: string\n type: \"select\" | \"text\" | \"date\"\n operators: FilterOperator[]\n /** Select options, or for `date` fields used by conditional rules (exact row strings). */\n options?: { value: string; label: string }[]\n /** When `type` is `text`, optional `use-mask-input` pattern for the value field. */\n textMask?: FilterTextMask\n}\n\nexport interface ActiveFilter {\n id: string\n fieldKey: string\n operator: FilterOperator\n values: string[]\n}\n\nexport interface SortRule {\n id: string\n fieldKey: string\n direction: \"asc\" | \"desc\"\n}\n\n/** Operator → human-readable label map (centralized so chips, drawer, and CSV exports stay aligned). */\nexport const OPERATOR_LABELS: Record<FilterOperator, string> = {\n is: \"is\",\n is_not: \"is not\",\n contains: \"contains\",\n not_contains: \"does not contain\",\n}\n\n/** Column descriptor for `TableProperties` views (Columns / Sort / Group panels). */\nexport interface ColDef {\n key: string\n label: string\n sortable: boolean\n sortKey?: string\n minWidth: number\n}\n\n/* ─── Conditional formatting ──────────────────────────────────────────── */\n\nexport interface ConditionalRule {\n id: string\n /** Column key to evaluate */\n fieldKey: string\n operator: FilterOperator\n /** Selected option values (select) or text (single entry) when operator needs values */\n values: string[]\n /** Resolved CSS background color string */\n bgColor: string\n}\n\n/**\n * Predefined palette for conditional rule backgrounds.\n *\n * Backgrounds are exposed as CSS custom properties so theming swaps the\n * palette per brand without code edits (`--conditional-rule-green`,\n * `--conditional-rule-yellow`, etc., declared in\n * `packages/ui/src/globals.css`).\n */\nexport const RULE_COLORS: { name: string; bg: string }[] = [\n { name: \"Green\", bg: \"var(--conditional-rule-green)\" },\n { name: \"Yellow\", bg: \"var(--conditional-rule-yellow)\" },\n { name: \"Blue\", bg: \"var(--conditional-rule-blue)\" },\n { name: \"Red\", bg: \"var(--conditional-rule-red)\" },\n { name: \"Purple\", bg: \"var(--conditional-rule-purple)\" },\n { name: \"Orange\", bg: \"var(--conditional-rule-orange)\" },\n]\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts"],"names":[],"mappings":";;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"utils.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exxatdesignux/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Exxat shared design system (components, hooks, tokens). Monorepo setup: clone repo then pnpm bootstrap at workspace root — see github.com/ExxatDesign/Exxat-DS-Workspace README.",
|
|
5
|
+
"license": "UNLICENSED",
|
|
6
|
+
"author": "Exxat Design",
|
|
5
7
|
"type": "module",
|
|
6
8
|
"engines": {
|
|
7
9
|
"node": ">=22.0.0"
|
|
@@ -21,37 +23,78 @@
|
|
|
21
23
|
],
|
|
22
24
|
"exports": {
|
|
23
25
|
".": {
|
|
24
|
-
"types": "./
|
|
25
|
-
"import": "./
|
|
26
|
-
"default": "./
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
|
+
"default": "./dist/index.js"
|
|
27
29
|
},
|
|
28
30
|
"./globals.css": "./src/globals.css",
|
|
29
|
-
"./
|
|
30
|
-
"./
|
|
31
|
+
"./tokens/hooks-index.json": "./tokens/hooks-index.json",
|
|
32
|
+
"./components/data-table": {
|
|
33
|
+
"types": "./dist/components/data-table/index.d.ts",
|
|
34
|
+
"import": "./dist/components/data-table/index.js",
|
|
35
|
+
"default": "./dist/components/data-table/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./components/data-table/*": {
|
|
38
|
+
"types": "./dist/components/data-table/*.d.ts",
|
|
39
|
+
"import": "./dist/components/data-table/*.js",
|
|
40
|
+
"default": "./dist/components/data-table/*.js"
|
|
41
|
+
},
|
|
42
|
+
"./components/table-properties": {
|
|
43
|
+
"types": "./dist/components/table-properties/index.d.ts",
|
|
44
|
+
"import": "./dist/components/table-properties/index.js",
|
|
45
|
+
"default": "./dist/components/table-properties/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./components/table-properties/*": {
|
|
48
|
+
"types": "./dist/components/table-properties/*.d.ts",
|
|
49
|
+
"import": "./dist/components/table-properties/*.js",
|
|
50
|
+
"default": "./dist/components/table-properties/*.js"
|
|
51
|
+
},
|
|
52
|
+
"./components/data-views": {
|
|
53
|
+
"types": "./dist/components/data-views/index.d.ts",
|
|
54
|
+
"import": "./dist/components/data-views/index.js",
|
|
55
|
+
"default": "./dist/components/data-views/index.js"
|
|
56
|
+
},
|
|
57
|
+
"./components/data-views/*": {
|
|
58
|
+
"types": "./dist/components/data-views/*.d.ts",
|
|
59
|
+
"import": "./dist/components/data-views/*.js",
|
|
60
|
+
"default": "./dist/components/data-views/*.js"
|
|
61
|
+
},
|
|
62
|
+
"./components/templates": {
|
|
63
|
+
"types": "./dist/components/templates/index.d.ts",
|
|
64
|
+
"import": "./dist/components/templates/index.js",
|
|
65
|
+
"default": "./dist/components/templates/index.js"
|
|
66
|
+
},
|
|
67
|
+
"./components/templates/*": {
|
|
68
|
+
"types": "./dist/components/templates/*.d.ts",
|
|
69
|
+
"import": "./dist/components/templates/*.js",
|
|
70
|
+
"default": "./dist/components/templates/*.js"
|
|
71
|
+
},
|
|
31
72
|
"./components/*": {
|
|
32
|
-
"types": "./
|
|
33
|
-
"import": "./
|
|
34
|
-
"default": "./
|
|
73
|
+
"types": "./dist/components/ui/*.d.ts",
|
|
74
|
+
"import": "./dist/components/ui/*.js",
|
|
75
|
+
"default": "./dist/components/ui/*.js"
|
|
35
76
|
},
|
|
36
77
|
"./hooks/*": {
|
|
37
|
-
"types": "./
|
|
38
|
-
"import": "./
|
|
39
|
-
"default": "./
|
|
78
|
+
"types": "./dist/hooks/*.d.ts",
|
|
79
|
+
"import": "./dist/hooks/*.js",
|
|
80
|
+
"default": "./dist/hooks/*.js"
|
|
40
81
|
},
|
|
41
82
|
"./lib/*": {
|
|
42
|
-
"types": "./
|
|
43
|
-
"import": "./
|
|
44
|
-
"default": "./
|
|
83
|
+
"types": "./dist/lib/*.d.ts",
|
|
84
|
+
"import": "./dist/lib/*.js",
|
|
85
|
+
"default": "./dist/lib/*.js"
|
|
45
86
|
}
|
|
46
87
|
},
|
|
47
|
-
"main": "./
|
|
48
|
-
"
|
|
88
|
+
"main": "./dist/index.js",
|
|
89
|
+
"module": "./dist/index.js",
|
|
90
|
+
"types": "./dist/index.d.ts",
|
|
49
91
|
"bin": {
|
|
50
92
|
"exxat-ui": "./bin/cli.mjs",
|
|
51
93
|
"create-exxat-app": "./bin/init.mjs"
|
|
52
94
|
},
|
|
53
95
|
"files": [
|
|
54
96
|
"CHANGELOG.md",
|
|
97
|
+
"dist",
|
|
55
98
|
"src",
|
|
56
99
|
"bin",
|
|
57
100
|
"template",
|
|
@@ -60,14 +103,17 @@
|
|
|
60
103
|
"dependencies": {
|
|
61
104
|
"@hookform/resolvers": "^5.2.2",
|
|
62
105
|
"@radix-ui/react-dialog": "^1.1.14",
|
|
106
|
+
"@tanstack/react-virtual": "^3.13.23",
|
|
63
107
|
"class-variance-authority": "^0.7.1",
|
|
64
108
|
"clsx": "^2.1.1",
|
|
65
109
|
"cmdk": "^1.1.1",
|
|
66
110
|
"lucide-react": "^0.577.0",
|
|
111
|
+
"motion": "^12.38.0",
|
|
67
112
|
"radix-ui": "^1.4.3",
|
|
68
113
|
"react-day-picker": "^9.14.0",
|
|
69
114
|
"react-hook-form": "^7.72.0",
|
|
70
115
|
"react-payment-inputs": "^1.2.0",
|
|
116
|
+
"react-resizable-panels": "^4.10.0",
|
|
71
117
|
"recharts": "^2.15.4",
|
|
72
118
|
"shadcn": "^4.7.0",
|
|
73
119
|
"sonner": "^2.0.7",
|
|
@@ -78,12 +124,24 @@
|
|
|
78
124
|
"zod": "^4.3.6"
|
|
79
125
|
},
|
|
80
126
|
"devDependencies": {
|
|
127
|
+
"@eslint/js": "^9.39.4",
|
|
81
128
|
"@tailwindcss/postcss": "^4.2.1",
|
|
129
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
130
|
+
"@testing-library/react": "^16.3.2",
|
|
131
|
+
"@testing-library/user-event": "^14.6.1",
|
|
82
132
|
"@types/react": "^19.2.14",
|
|
83
133
|
"@types/react-dom": "^19.2.3",
|
|
134
|
+
"@vitejs/plugin-react": "^4.7.0",
|
|
135
|
+
"eslint": "^9.39.4",
|
|
136
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
137
|
+
"jsdom": "^26.1.0",
|
|
84
138
|
"postcss": "^8.5.14",
|
|
85
139
|
"tailwindcss": "^4.2.1",
|
|
86
|
-
"
|
|
140
|
+
"tsup": "^8.5.1",
|
|
141
|
+
"typescript": "^5.9.3",
|
|
142
|
+
"typescript-eslint": "^8.59.4",
|
|
143
|
+
"vitest": "^3.2.4",
|
|
144
|
+
"@exxatdesignux/eslint-plugin": "0.1.0"
|
|
87
145
|
},
|
|
88
146
|
"peerDependencies": {
|
|
89
147
|
"next-themes": ">=0.4",
|
|
@@ -91,9 +149,15 @@
|
|
|
91
149
|
"react-dom": "^18 || ^19"
|
|
92
150
|
},
|
|
93
151
|
"scripts": {
|
|
152
|
+
"build": "tsup",
|
|
153
|
+
"dev": "tsup --watch",
|
|
94
154
|
"typecheck": "tsc --noEmit",
|
|
95
155
|
"lint": "eslint src/",
|
|
156
|
+
"test": "vitest run",
|
|
157
|
+
"test:watch": "vitest",
|
|
96
158
|
"sync-template": "node ./scripts/sync-template-from-web.mjs",
|
|
97
|
-
"vendor:consumer-extras": "node ./scripts/vendor-consumer-extras.mjs"
|
|
159
|
+
"vendor:consumer-extras": "node ./scripts/vendor-consumer-extras.mjs",
|
|
160
|
+
"tokens:index": "node ./scripts/build-tokens-index.mjs",
|
|
161
|
+
"tokens:check": "node ./scripts/build-tokens-index.mjs --check"
|
|
98
162
|
}
|
|
99
163
|
}
|