@entifix/react-controls 0.1.0-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/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/i18n/catalog/en.d.ts +10 -0
- package/dist/i18n/catalog/en.d.ts.map +1 -0
- package/dist/i18n/catalog/en.js +211 -0
- package/dist/i18n/catalog/en.js.map +1 -0
- package/dist/i18n/catalog/es.d.ts +275 -0
- package/dist/i18n/catalog/es.d.ts.map +1 -0
- package/dist/i18n/catalog/es.js +261 -0
- package/dist/i18n/catalog/es.js.map +1 -0
- package/dist/i18n/catalog/index.d.ts +403 -0
- package/dist/i18n/catalog/index.d.ts.map +1 -0
- package/dist/i18n/catalog/index.js +23 -0
- package/dist/i18n/catalog/index.js.map +1 -0
- package/dist/i18n/entity-labels.d.ts +29 -0
- package/dist/i18n/entity-labels.d.ts.map +1 -0
- package/dist/i18n/entity-labels.js +49 -0
- package/dist/i18n/entity-labels.js.map +1 -0
- package/dist/i18n/fallback-catalogs.d.ts +5 -0
- package/dist/i18n/fallback-catalogs.d.ts.map +1 -0
- package/dist/i18n/fallback-catalogs.js +34 -0
- package/dist/i18n/fallback-catalogs.js.map +1 -0
- package/dist/i18n/i18n-context.d.ts +62 -0
- package/dist/i18n/i18n-context.d.ts.map +1 -0
- package/dist/i18n/i18n-context.js +128 -0
- package/dist/i18n/i18n-context.js.map +1 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +6 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/spec-support/catalogs.d.ts +2 -0
- package/dist/i18n/spec-support/catalogs.d.ts.map +1 -0
- package/dist/i18n/spec-support/catalogs.js +142 -0
- package/dist/i18n/spec-support/catalogs.js.map +1 -0
- package/dist/i18next/index.d.ts +20 -0
- package/dist/i18next/index.d.ts.map +1 -0
- package/dist/i18next/index.js +60 -0
- package/dist/i18next/index.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/preferences/index.d.ts +7 -0
- package/dist/preferences/index.d.ts.map +1 -0
- package/dist/preferences/index.js +8 -0
- package/dist/preferences/index.js.map +1 -0
- package/dist/preferences/indexeddb-ui-preferences-state.d.ts +16 -0
- package/dist/preferences/indexeddb-ui-preferences-state.d.ts.map +1 -0
- package/dist/preferences/indexeddb-ui-preferences-state.js +50 -0
- package/dist/preferences/indexeddb-ui-preferences-state.js.map +1 -0
- package/dist/preferences/local-storage-ui-preferences-state.d.ts +16 -0
- package/dist/preferences/local-storage-ui-preferences-state.d.ts.map +1 -0
- package/dist/preferences/local-storage-ui-preferences-state.js +51 -0
- package/dist/preferences/local-storage-ui-preferences-state.js.map +1 -0
- package/dist/preferences/ui-preferences-context.d.ts +16 -0
- package/dist/preferences/ui-preferences-context.d.ts.map +1 -0
- package/dist/preferences/ui-preferences-context.js +31 -0
- package/dist/preferences/ui-preferences-context.js.map +1 -0
- package/dist/preferences/ui-preferences-state.d.ts +23 -0
- package/dist/preferences/ui-preferences-state.d.ts.map +1 -0
- package/dist/preferences/ui-preferences-state.js +5 -0
- package/dist/preferences/ui-preferences-state.js.map +1 -0
- package/dist/preferences/use-ui-preference.d.ts +20 -0
- package/dist/preferences/use-ui-preference.d.ts.map +1 -0
- package/dist/preferences/use-ui-preference.js +72 -0
- package/dist/preferences/use-ui-preference.js.map +1 -0
- package/dist/preferences/use-viewport-mode.d.ts +33 -0
- package/dist/preferences/use-viewport-mode.d.ts.map +1 -0
- package/dist/preferences/use-viewport-mode.js +53 -0
- package/dist/preferences/use-viewport-mode.js.map +1 -0
- package/dist/primitives.d.ts +25 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +54 -0
- package/dist/primitives.js.map +1 -0
- package/dist/theme/index.d.ts +3 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +4 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +26 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +79 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/types.d.ts +22 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +6 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/ui/actions/action-surfaces.d.ts +59 -0
- package/dist/ui/actions/action-surfaces.d.ts.map +1 -0
- package/dist/ui/actions/action-surfaces.js +109 -0
- package/dist/ui/actions/action-surfaces.js.map +1 -0
- package/dist/ui/actions/index.d.ts +2 -0
- package/dist/ui/actions/index.d.ts.map +1 -0
- package/dist/ui/actions/index.js +3 -0
- package/dist/ui/actions/index.js.map +1 -0
- package/dist/ui/atoms/button/button-link.d.ts +27 -0
- package/dist/ui/atoms/button/button-link.d.ts.map +1 -0
- package/dist/ui/atoms/button/button-link.js +23 -0
- package/dist/ui/atoms/button/button-link.js.map +1 -0
- package/dist/ui/atoms/button/button-recipe.d.ts +19 -0
- package/dist/ui/atoms/button/button-recipe.d.ts.map +1 -0
- package/dist/ui/atoms/button/button-recipe.js +42 -0
- package/dist/ui/atoms/button/button-recipe.js.map +1 -0
- package/dist/ui/atoms/button/button.d.ts +7 -0
- package/dist/ui/atoms/button/button.d.ts.map +1 -0
- package/dist/ui/atoms/button/button.js +22 -0
- package/dist/ui/atoms/button/button.js.map +1 -0
- package/dist/ui/atoms/button/index.d.ts +4 -0
- package/dist/ui/atoms/button/index.d.ts.map +1 -0
- package/dist/ui/atoms/button/index.js +5 -0
- package/dist/ui/atoms/button/index.js.map +1 -0
- package/dist/ui/atoms/cell-value/cell-value.d.ts +12 -0
- package/dist/ui/atoms/cell-value/cell-value.d.ts.map +1 -0
- package/dist/ui/atoms/cell-value/cell-value.js +101 -0
- package/dist/ui/atoms/cell-value/cell-value.js.map +1 -0
- package/dist/ui/atoms/cell-value/index.d.ts +2 -0
- package/dist/ui/atoms/cell-value/index.d.ts.map +1 -0
- package/dist/ui/atoms/cell-value/index.js +3 -0
- package/dist/ui/atoms/cell-value/index.js.map +1 -0
- package/dist/ui/atoms/field/checkbox.d.ts +35 -0
- package/dist/ui/atoms/field/checkbox.d.ts.map +1 -0
- package/dist/ui/atoms/field/checkbox.js +46 -0
- package/dist/ui/atoms/field/checkbox.js.map +1 -0
- package/dist/ui/atoms/field/field.d.ts +4 -0
- package/dist/ui/atoms/field/field.d.ts.map +1 -0
- package/dist/ui/atoms/field/field.js +29 -0
- package/dist/ui/atoms/field/field.js.map +1 -0
- package/dist/ui/atoms/field/index.d.ts +3 -0
- package/dist/ui/atoms/field/index.d.ts.map +1 -0
- package/dist/ui/atoms/field/index.js +4 -0
- package/dist/ui/atoms/field/index.js.map +1 -0
- package/dist/ui/atoms/field-control/field-control.d.ts +50 -0
- package/dist/ui/atoms/field-control/field-control.d.ts.map +1 -0
- package/dist/ui/atoms/field-control/field-control.js +82 -0
- package/dist/ui/atoms/field-control/field-control.js.map +1 -0
- package/dist/ui/atoms/field-control/index.d.ts +2 -0
- package/dist/ui/atoms/field-control/index.d.ts.map +1 -0
- package/dist/ui/atoms/field-control/index.js +3 -0
- package/dist/ui/atoms/field-control/index.js.map +1 -0
- package/dist/ui/atoms/skeleton/index.d.ts +2 -0
- package/dist/ui/atoms/skeleton/index.d.ts.map +1 -0
- package/dist/ui/atoms/skeleton/index.js +3 -0
- package/dist/ui/atoms/skeleton/index.js.map +1 -0
- package/dist/ui/atoms/skeleton/skeleton.d.ts +21 -0
- package/dist/ui/atoms/skeleton/skeleton.d.ts.map +1 -0
- package/dist/ui/atoms/skeleton/skeleton.js +33 -0
- package/dist/ui/atoms/skeleton/skeleton.js.map +1 -0
- package/dist/ui/atoms/table/index.d.ts +2 -0
- package/dist/ui/atoms/table/index.d.ts.map +1 -0
- package/dist/ui/atoms/table/index.js +3 -0
- package/dist/ui/atoms/table/index.js.map +1 -0
- package/dist/ui/atoms/table/table.d.ts +30 -0
- package/dist/ui/atoms/table/table.d.ts.map +1 -0
- package/dist/ui/atoms/table/table.js +84 -0
- package/dist/ui/atoms/table/table.js.map +1 -0
- package/dist/ui/atoms/text/index.d.ts +2 -0
- package/dist/ui/atoms/text/index.d.ts.map +1 -0
- package/dist/ui/atoms/text/index.js +3 -0
- package/dist/ui/atoms/text/index.js.map +1 -0
- package/dist/ui/atoms/text/text.d.ts +86 -0
- package/dist/ui/atoms/text/text.d.ts.map +1 -0
- package/dist/ui/atoms/text/text.js +221 -0
- package/dist/ui/atoms/text/text.js.map +1 -0
- package/dist/ui/layout/_demo.d.ts +6 -0
- package/dist/ui/layout/_demo.d.ts.map +1 -0
- package/dist/ui/layout/_demo.js +11 -0
- package/dist/ui/layout/_demo.js.map +1 -0
- package/dist/ui/layout/_shared.d.ts +9 -0
- package/dist/ui/layout/_shared.d.ts.map +1 -0
- package/dist/ui/layout/_shared.js +30 -0
- package/dist/ui/layout/_shared.js.map +1 -0
- package/dist/ui/layout/box/box.d.ts +10 -0
- package/dist/ui/layout/box/box.d.ts.map +1 -0
- package/dist/ui/layout/box/box.js +28 -0
- package/dist/ui/layout/box/box.js.map +1 -0
- package/dist/ui/layout/box/index.d.ts +2 -0
- package/dist/ui/layout/box/index.d.ts.map +1 -0
- package/dist/ui/layout/box/index.js +3 -0
- package/dist/ui/layout/box/index.js.map +1 -0
- package/dist/ui/layout/center/center.d.ts +13 -0
- package/dist/ui/layout/center/center.d.ts.map +1 -0
- package/dist/ui/layout/center/center.js +22 -0
- package/dist/ui/layout/center/center.js.map +1 -0
- package/dist/ui/layout/center/index.d.ts +2 -0
- package/dist/ui/layout/center/index.d.ts.map +1 -0
- package/dist/ui/layout/center/index.js +3 -0
- package/dist/ui/layout/center/index.js.map +1 -0
- package/dist/ui/layout/cluster/cluster.d.ts +11 -0
- package/dist/ui/layout/cluster/cluster.d.ts.map +1 -0
- package/dist/ui/layout/cluster/cluster.js +19 -0
- package/dist/ui/layout/cluster/cluster.js.map +1 -0
- package/dist/ui/layout/cluster/index.d.ts +2 -0
- package/dist/ui/layout/cluster/index.d.ts.map +1 -0
- package/dist/ui/layout/cluster/index.js +3 -0
- package/dist/ui/layout/cluster/index.js.map +1 -0
- package/dist/ui/layout/cover/cover.d.ts +26 -0
- package/dist/ui/layout/cover/cover.d.ts.map +1 -0
- package/dist/ui/layout/cover/cover.js +57 -0
- package/dist/ui/layout/cover/cover.js.map +1 -0
- package/dist/ui/layout/cover/index.d.ts +2 -0
- package/dist/ui/layout/cover/index.d.ts.map +1 -0
- package/dist/ui/layout/cover/index.js +3 -0
- package/dist/ui/layout/cover/index.js.map +1 -0
- package/dist/ui/layout/grid/grid.d.ts +14 -0
- package/dist/ui/layout/grid/grid.d.ts.map +1 -0
- package/dist/ui/layout/grid/grid.js +25 -0
- package/dist/ui/layout/grid/grid.js.map +1 -0
- package/dist/ui/layout/grid/index.d.ts +2 -0
- package/dist/ui/layout/grid/index.d.ts.map +1 -0
- package/dist/ui/layout/grid/index.js +3 -0
- package/dist/ui/layout/grid/index.js.map +1 -0
- package/dist/ui/layout/sidebar/index.d.ts +2 -0
- package/dist/ui/layout/sidebar/index.d.ts.map +1 -0
- package/dist/ui/layout/sidebar/index.js +3 -0
- package/dist/ui/layout/sidebar/index.js.map +1 -0
- package/dist/ui/layout/sidebar/sidebar.d.ts +33 -0
- package/dist/ui/layout/sidebar/sidebar.d.ts.map +1 -0
- package/dist/ui/layout/sidebar/sidebar.js +54 -0
- package/dist/ui/layout/sidebar/sidebar.js.map +1 -0
- package/dist/ui/layout/switcher/index.d.ts +2 -0
- package/dist/ui/layout/switcher/index.d.ts.map +1 -0
- package/dist/ui/layout/switcher/index.js +3 -0
- package/dist/ui/layout/switcher/index.js.map +1 -0
- package/dist/ui/layout/switcher/switcher.d.ts +15 -0
- package/dist/ui/layout/switcher/switcher.d.ts.map +1 -0
- package/dist/ui/layout/switcher/switcher.js +26 -0
- package/dist/ui/layout/switcher/switcher.js.map +1 -0
- package/dist/ui/molecules/breadcrumbs/breadcrumbs.d.ts +27 -0
- package/dist/ui/molecules/breadcrumbs/breadcrumbs.d.ts.map +1 -0
- package/dist/ui/molecules/breadcrumbs/breadcrumbs.js +50 -0
- package/dist/ui/molecules/breadcrumbs/breadcrumbs.js.map +1 -0
- package/dist/ui/molecules/breadcrumbs/index.d.ts +2 -0
- package/dist/ui/molecules/breadcrumbs/index.d.ts.map +1 -0
- package/dist/ui/molecules/breadcrumbs/index.js +3 -0
- package/dist/ui/molecules/breadcrumbs/index.js.map +1 -0
- package/dist/ui/molecules/bulk-action-bar/bulk-action-bar.d.ts +47 -0
- package/dist/ui/molecules/bulk-action-bar/bulk-action-bar.d.ts.map +1 -0
- package/dist/ui/molecules/bulk-action-bar/bulk-action-bar.js +63 -0
- package/dist/ui/molecules/bulk-action-bar/bulk-action-bar.js.map +1 -0
- package/dist/ui/molecules/bulk-action-bar/index.d.ts +2 -0
- package/dist/ui/molecules/bulk-action-bar/index.d.ts.map +1 -0
- package/dist/ui/molecules/bulk-action-bar/index.js +3 -0
- package/dist/ui/molecules/bulk-action-bar/index.js.map +1 -0
- package/dist/ui/molecules/bulk-result/bulk-result.d.ts +31 -0
- package/dist/ui/molecules/bulk-result/bulk-result.d.ts.map +1 -0
- package/dist/ui/molecules/bulk-result/bulk-result.js +86 -0
- package/dist/ui/molecules/bulk-result/bulk-result.js.map +1 -0
- package/dist/ui/molecules/bulk-result/index.d.ts +2 -0
- package/dist/ui/molecules/bulk-result/index.d.ts.map +1 -0
- package/dist/ui/molecules/bulk-result/index.js +3 -0
- package/dist/ui/molecules/bulk-result/index.js.map +1 -0
- package/dist/ui/molecules/card/card.d.ts +5 -0
- package/dist/ui/molecules/card/card.d.ts.map +1 -0
- package/dist/ui/molecules/card/card.js +14 -0
- package/dist/ui/molecules/card/card.js.map +1 -0
- package/dist/ui/molecules/card/index.d.ts +2 -0
- package/dist/ui/molecules/card/index.d.ts.map +1 -0
- package/dist/ui/molecules/card/index.js +3 -0
- package/dist/ui/molecules/card/index.js.map +1 -0
- package/dist/ui/molecules/column-settings/column-settings.d.ts +29 -0
- package/dist/ui/molecules/column-settings/column-settings.d.ts.map +1 -0
- package/dist/ui/molecules/column-settings/column-settings.js +117 -0
- package/dist/ui/molecules/column-settings/column-settings.js.map +1 -0
- package/dist/ui/molecules/column-settings/index.d.ts +2 -0
- package/dist/ui/molecules/column-settings/index.d.ts.map +1 -0
- package/dist/ui/molecules/column-settings/index.js +3 -0
- package/dist/ui/molecules/column-settings/index.js.map +1 -0
- package/dist/ui/molecules/confirm-dialog/confirm-dialog.d.ts +31 -0
- package/dist/ui/molecules/confirm-dialog/confirm-dialog.d.ts.map +1 -0
- package/dist/ui/molecules/confirm-dialog/confirm-dialog.js +68 -0
- package/dist/ui/molecules/confirm-dialog/confirm-dialog.js.map +1 -0
- package/dist/ui/molecules/confirm-dialog/index.d.ts +2 -0
- package/dist/ui/molecules/confirm-dialog/index.d.ts.map +1 -0
- package/dist/ui/molecules/confirm-dialog/index.js +3 -0
- package/dist/ui/molecules/confirm-dialog/index.js.map +1 -0
- package/dist/ui/molecules/drawer/drawer.d.ts +25 -0
- package/dist/ui/molecules/drawer/drawer.d.ts.map +1 -0
- package/dist/ui/molecules/drawer/drawer.js +60 -0
- package/dist/ui/molecules/drawer/drawer.js.map +1 -0
- package/dist/ui/molecules/drawer/index.d.ts +2 -0
- package/dist/ui/molecules/drawer/index.d.ts.map +1 -0
- package/dist/ui/molecules/drawer/index.js +3 -0
- package/dist/ui/molecules/drawer/index.js.map +1 -0
- package/dist/ui/molecules/entity-link-input/entity-link-input.d.ts +36 -0
- package/dist/ui/molecules/entity-link-input/entity-link-input.d.ts.map +1 -0
- package/dist/ui/molecules/entity-link-input/entity-link-input.js +191 -0
- package/dist/ui/molecules/entity-link-input/entity-link-input.js.map +1 -0
- package/dist/ui/molecules/entity-link-input/index.d.ts +2 -0
- package/dist/ui/molecules/entity-link-input/index.d.ts.map +1 -0
- package/dist/ui/molecules/entity-link-input/index.js +3 -0
- package/dist/ui/molecules/entity-link-input/index.js.map +1 -0
- package/dist/ui/molecules/entity-link-picker/entity-link-picker.d.ts +19 -0
- package/dist/ui/molecules/entity-link-picker/entity-link-picker.d.ts.map +1 -0
- package/dist/ui/molecules/entity-link-picker/entity-link-picker.js +78 -0
- package/dist/ui/molecules/entity-link-picker/entity-link-picker.js.map +1 -0
- package/dist/ui/molecules/entity-link-picker/index.d.ts +2 -0
- package/dist/ui/molecules/entity-link-picker/index.d.ts.map +1 -0
- package/dist/ui/molecules/entity-link-picker/index.js +3 -0
- package/dist/ui/molecules/entity-link-picker/index.js.map +1 -0
- package/dist/ui/molecules/entity-record-card/entity-record-card.d.ts +30 -0
- package/dist/ui/molecules/entity-record-card/entity-record-card.d.ts.map +1 -0
- package/dist/ui/molecules/entity-record-card/entity-record-card.js +39 -0
- package/dist/ui/molecules/entity-record-card/entity-record-card.js.map +1 -0
- package/dist/ui/molecules/entity-record-card/index.d.ts +2 -0
- package/dist/ui/molecules/entity-record-card/index.d.ts.map +1 -0
- package/dist/ui/molecules/entity-record-card/index.js +3 -0
- package/dist/ui/molecules/entity-record-card/index.js.map +1 -0
- package/dist/ui/molecules/filter-builder/filter-builder.d.ts +19 -0
- package/dist/ui/molecules/filter-builder/filter-builder.d.ts.map +1 -0
- package/dist/ui/molecules/filter-builder/filter-builder.js +333 -0
- package/dist/ui/molecules/filter-builder/filter-builder.js.map +1 -0
- package/dist/ui/molecules/filter-builder/filter-operators.d.ts +20 -0
- package/dist/ui/molecules/filter-builder/filter-operators.d.ts.map +1 -0
- package/dist/ui/molecules/filter-builder/filter-operators.js +56 -0
- package/dist/ui/molecules/filter-builder/filter-operators.js.map +1 -0
- package/dist/ui/molecules/filter-builder/index.d.ts +3 -0
- package/dist/ui/molecules/filter-builder/index.d.ts.map +1 -0
- package/dist/ui/molecules/filter-builder/index.js +4 -0
- package/dist/ui/molecules/filter-builder/index.js.map +1 -0
- package/dist/ui/molecules/loading-boundary/index.d.ts +2 -0
- package/dist/ui/molecules/loading-boundary/index.d.ts.map +1 -0
- package/dist/ui/molecules/loading-boundary/index.js +3 -0
- package/dist/ui/molecules/loading-boundary/index.js.map +1 -0
- package/dist/ui/molecules/loading-boundary/loading-boundary.d.ts +27 -0
- package/dist/ui/molecules/loading-boundary/loading-boundary.d.ts.map +1 -0
- package/dist/ui/molecules/loading-boundary/loading-boundary.js +42 -0
- package/dist/ui/molecules/loading-boundary/loading-boundary.js.map +1 -0
- package/dist/ui/molecules/menu/index.d.ts +2 -0
- package/dist/ui/molecules/menu/index.d.ts.map +1 -0
- package/dist/ui/molecules/menu/index.js +3 -0
- package/dist/ui/molecules/menu/index.js.map +1 -0
- package/dist/ui/molecules/menu/menu.d.ts +37 -0
- package/dist/ui/molecules/menu/menu.d.ts.map +1 -0
- package/dist/ui/molecules/menu/menu.js +71 -0
- package/dist/ui/molecules/menu/menu.js.map +1 -0
- package/dist/ui/molecules/pagination/index.d.ts +2 -0
- package/dist/ui/molecules/pagination/index.d.ts.map +1 -0
- package/dist/ui/molecules/pagination/index.js +3 -0
- package/dist/ui/molecules/pagination/index.js.map +1 -0
- package/dist/ui/molecules/pagination/pagination.d.ts +13 -0
- package/dist/ui/molecules/pagination/pagination.d.ts.map +1 -0
- package/dist/ui/molecules/pagination/pagination.js +68 -0
- package/dist/ui/molecules/pagination/pagination.js.map +1 -0
- package/dist/ui/molecules/sort-builder/index.d.ts +2 -0
- package/dist/ui/molecules/sort-builder/index.d.ts.map +1 -0
- package/dist/ui/molecules/sort-builder/index.js +3 -0
- package/dist/ui/molecules/sort-builder/index.js.map +1 -0
- package/dist/ui/molecules/sort-builder/sort-builder.d.ts +18 -0
- package/dist/ui/molecules/sort-builder/sort-builder.d.ts.map +1 -0
- package/dist/ui/molecules/sort-builder/sort-builder.js +185 -0
- package/dist/ui/molecules/sort-builder/sort-builder.js.map +1 -0
- package/dist/ui/molecules/stack/index.d.ts +2 -0
- package/dist/ui/molecules/stack/index.d.ts.map +1 -0
- package/dist/ui/molecules/stack/index.js +3 -0
- package/dist/ui/molecules/stack/index.js.map +1 -0
- package/dist/ui/molecules/stack/stack.d.ts +12 -0
- package/dist/ui/molecules/stack/stack.d.ts.map +1 -0
- package/dist/ui/molecules/stack/stack.js +36 -0
- package/dist/ui/molecules/stack/stack.js.map +1 -0
- package/dist/ui/molecules/tab-strip/index.d.ts +2 -0
- package/dist/ui/molecules/tab-strip/index.d.ts.map +1 -0
- package/dist/ui/molecules/tab-strip/index.js +3 -0
- package/dist/ui/molecules/tab-strip/index.js.map +1 -0
- package/dist/ui/molecules/tab-strip/tab-strip.d.ts +29 -0
- package/dist/ui/molecules/tab-strip/tab-strip.d.ts.map +1 -0
- package/dist/ui/molecules/tab-strip/tab-strip.js +82 -0
- package/dist/ui/molecules/tab-strip/tab-strip.js.map +1 -0
- package/dist/ui/molecules/table-toolbar/index.d.ts +2 -0
- package/dist/ui/molecules/table-toolbar/index.d.ts.map +1 -0
- package/dist/ui/molecules/table-toolbar/index.js +3 -0
- package/dist/ui/molecules/table-toolbar/index.js.map +1 -0
- package/dist/ui/molecules/table-toolbar/table-toolbar.d.ts +13 -0
- package/dist/ui/molecules/table-toolbar/table-toolbar.d.ts.map +1 -0
- package/dist/ui/molecules/table-toolbar/table-toolbar.js +28 -0
- package/dist/ui/molecules/table-toolbar/table-toolbar.js.map +1 -0
- package/dist/ui/molecules/theme-switcher/index.d.ts +2 -0
- package/dist/ui/molecules/theme-switcher/index.d.ts.map +1 -0
- package/dist/ui/molecules/theme-switcher/index.js +3 -0
- package/dist/ui/molecules/theme-switcher/index.js.map +1 -0
- package/dist/ui/molecules/theme-switcher/theme-switcher.d.ts +6 -0
- package/dist/ui/molecules/theme-switcher/theme-switcher.d.ts.map +1 -0
- package/dist/ui/molecules/theme-switcher/theme-switcher.js +24 -0
- package/dist/ui/molecules/theme-switcher/theme-switcher.js.map +1 -0
- package/dist/ui/organisms/command-palette/command-palette.d.ts +67 -0
- package/dist/ui/organisms/command-palette/command-palette.d.ts.map +1 -0
- package/dist/ui/organisms/command-palette/command-palette.js +226 -0
- package/dist/ui/organisms/command-palette/command-palette.js.map +1 -0
- package/dist/ui/organisms/command-palette/index.d.ts +2 -0
- package/dist/ui/organisms/command-palette/index.d.ts.map +1 -0
- package/dist/ui/organisms/command-palette/index.js +3 -0
- package/dist/ui/organisms/command-palette/index.js.map +1 -0
- package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.d.ts +43 -0
- package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.d.ts.map +1 -0
- package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.js +281 -0
- package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.js.map +1 -0
- package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.types.d.ts +49 -0
- package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.types.d.ts.map +1 -0
- package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.types.js +3 -0
- package/dist/ui/organisms/entity-detail-grid/entity-detail-grid.types.js.map +1 -0
- package/dist/ui/organisms/entity-detail-grid/index.d.ts +3 -0
- package/dist/ui/organisms/entity-detail-grid/index.d.ts.map +1 -0
- package/dist/ui/organisms/entity-detail-grid/index.js +4 -0
- package/dist/ui/organisms/entity-detail-grid/index.js.map +1 -0
- package/dist/ui/organisms/entity-form/entity-form-slots.d.ts +53 -0
- package/dist/ui/organisms/entity-form/entity-form-slots.d.ts.map +1 -0
- package/dist/ui/organisms/entity-form/entity-form-slots.js +44 -0
- package/dist/ui/organisms/entity-form/entity-form-slots.js.map +1 -0
- package/dist/ui/organisms/entity-form/entity-form.d.ts +4 -0
- package/dist/ui/organisms/entity-form/entity-form.d.ts.map +1 -0
- package/dist/ui/organisms/entity-form/entity-form.js +494 -0
- package/dist/ui/organisms/entity-form/entity-form.js.map +1 -0
- package/dist/ui/organisms/entity-form/entity-form.types.d.ts +151 -0
- package/dist/ui/organisms/entity-form/entity-form.types.d.ts.map +1 -0
- package/dist/ui/organisms/entity-form/entity-form.types.js +3 -0
- package/dist/ui/organisms/entity-form/entity-form.types.js.map +1 -0
- package/dist/ui/organisms/entity-form/index.d.ts +5 -0
- package/dist/ui/organisms/entity-form/index.d.ts.map +1 -0
- package/dist/ui/organisms/entity-form/index.js +6 -0
- package/dist/ui/organisms/entity-form/index.js.map +1 -0
- package/dist/ui/organisms/entity-form/use-entity-form-fields.d.ts +13 -0
- package/dist/ui/organisms/entity-form/use-entity-form-fields.d.ts.map +1 -0
- package/dist/ui/organisms/entity-form/use-entity-form-fields.js +50 -0
- package/dist/ui/organisms/entity-form/use-entity-form-fields.js.map +1 -0
- package/dist/ui/organisms/entity-table/entity-table-slots.d.ts +55 -0
- package/dist/ui/organisms/entity-table/entity-table-slots.d.ts.map +1 -0
- package/dist/ui/organisms/entity-table/entity-table-slots.js +50 -0
- package/dist/ui/organisms/entity-table/entity-table-slots.js.map +1 -0
- package/dist/ui/organisms/entity-table/entity-table.d.ts +4 -0
- package/dist/ui/organisms/entity-table/entity-table.d.ts.map +1 -0
- package/dist/ui/organisms/entity-table/entity-table.js +529 -0
- package/dist/ui/organisms/entity-table/entity-table.js.map +1 -0
- package/dist/ui/organisms/entity-table/entity-table.types.d.ts +126 -0
- package/dist/ui/organisms/entity-table/entity-table.types.d.ts.map +1 -0
- package/dist/ui/organisms/entity-table/entity-table.types.js +3 -0
- package/dist/ui/organisms/entity-table/entity-table.types.js.map +1 -0
- package/dist/ui/organisms/entity-table/index.d.ts +5 -0
- package/dist/ui/organisms/entity-table/index.d.ts.map +1 -0
- package/dist/ui/organisms/entity-table/index.js +6 -0
- package/dist/ui/organisms/entity-table/index.js.map +1 -0
- package/dist/ui/organisms/entity-table/use-entity-table-columns.d.ts +29 -0
- package/dist/ui/organisms/entity-table/use-entity-table-columns.d.ts.map +1 -0
- package/dist/ui/organisms/entity-table/use-entity-table-columns.js +103 -0
- package/dist/ui/organisms/entity-table/use-entity-table-columns.js.map +1 -0
- package/dist/ui/organisms/top-bar/index.d.ts +2 -0
- package/dist/ui/organisms/top-bar/index.d.ts.map +1 -0
- package/dist/ui/organisms/top-bar/index.js +3 -0
- package/dist/ui/organisms/top-bar/index.js.map +1 -0
- package/dist/ui/organisms/top-bar/top-bar.d.ts +20 -0
- package/dist/ui/organisms/top-bar/top-bar.d.ts.map +1 -0
- package/dist/ui/organisms/top-bar/top-bar.js +43 -0
- package/dist/ui/organisms/top-bar/top-bar.js.map +1 -0
- package/dist/ui/organisms/wizard/index.d.ts +3 -0
- package/dist/ui/organisms/wizard/index.d.ts.map +1 -0
- package/dist/ui/organisms/wizard/index.js +4 -0
- package/dist/ui/organisms/wizard/index.js.map +1 -0
- package/dist/ui/organisms/wizard/wizard.d.ts +21 -0
- package/dist/ui/organisms/wizard/wizard.d.ts.map +1 -0
- package/dist/ui/organisms/wizard/wizard.js +260 -0
- package/dist/ui/organisms/wizard/wizard.js.map +1 -0
- package/dist/ui/organisms/wizard/wizard.types.d.ts +83 -0
- package/dist/ui/organisms/wizard/wizard.types.d.ts.map +1 -0
- package/dist/ui/organisms/wizard/wizard.types.js +3 -0
- package/dist/ui/organisms/wizard/wizard.types.js.map +1 -0
- package/dist/ui/utils/cn.d.ts +4 -0
- package/dist/ui/utils/cn.d.ts.map +1 -0
- package/dist/ui/utils/cn.js +5 -0
- package/dist/ui/utils/cn.js.map +1 -0
- package/dist/ui/utils/use-hotkey.d.ts +31 -0
- package/dist/ui/utils/use-hotkey.d.ts.map +1 -0
- package/dist/ui/utils/use-hotkey.js +69 -0
- package/dist/ui/utils/use-hotkey.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-strip.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/tab-strip/tab-strip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAKtD,MAAM,MAAM,aAAa,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BAaxE;AAED,qFAAqF;AACrF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAClB,KAAK,EACL,MAAc,EACd,KAAc,EACd,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE,QAAQ,+BAyDV;AAED,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAEnE,oCAAoC;AACpC,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BAkBtE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
3
|
+
import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { useT } from '../../../i18n/index.js';
|
|
6
|
+
import { cn } from '../../utils/cn.js';
|
|
7
|
+
/**
|
|
8
|
+
* The workspace tab strip: a horizontally scrolling row of {@link Tab}s sitting
|
|
9
|
+
* on the workspace surface. Presentational only — the open set, order, and
|
|
10
|
+
* active tab come from the caller (the tabs store lives in the shell).
|
|
11
|
+
*/ export function TabStrip(_0) {
|
|
12
|
+
let { className, children } = _0, props = _object_without_properties_loose(_0, [
|
|
13
|
+
"className",
|
|
14
|
+
"children"
|
|
15
|
+
]);
|
|
16
|
+
return /*#__PURE__*/ _jsx("div", _extends({
|
|
17
|
+
role: "tablist",
|
|
18
|
+
className: cn('flex items-end gap-3xs overflow-x-auto border-b border-border bg-surface px-2xs', className)
|
|
19
|
+
}, props, {
|
|
20
|
+
children: children
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* One tab. The active tab lifts onto the surface (`bg-surface-elevated` +
|
|
25
|
+
* `-mb-px` so its base dissolves into the content plane below — the seam), and
|
|
26
|
+
* a non-idle tab shows the autosave dot: it breathes while `saving`, turns
|
|
27
|
+
* `danger` on `error`. The one place the chrome gets loud, on purpose.
|
|
28
|
+
*/ export function Tab({ label, active = false, state = 'idle', onSelect, onClose, className }) {
|
|
29
|
+
const t = useT();
|
|
30
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
31
|
+
role: "tab",
|
|
32
|
+
"aria-selected": active,
|
|
33
|
+
className: cn('group relative flex items-center gap-2xs rounded-t-md px-s py-2xs text-step-sm', 'transition duration-200 ease-smooth', active ? '-mb-px bg-surface-elevated font-medium text-content shadow-edge' : 'text-content-muted hover:bg-surface-elevated/60', state === 'error' && 'bg-danger-subtle text-danger', className),
|
|
34
|
+
children: [
|
|
35
|
+
active && /*#__PURE__*/ _jsx("span", {
|
|
36
|
+
"aria-hidden": "true",
|
|
37
|
+
className: "inset-x-0 top-0 absolute h-[2px] rounded-full bg-accent"
|
|
38
|
+
}),
|
|
39
|
+
/*#__PURE__*/ _jsx("button", {
|
|
40
|
+
type: "button",
|
|
41
|
+
onClick: onSelect,
|
|
42
|
+
className: "max-w-[12rem] truncate focus-ring",
|
|
43
|
+
children: label
|
|
44
|
+
}),
|
|
45
|
+
state !== 'idle' && /*#__PURE__*/ _jsx("span", {
|
|
46
|
+
"data-testid": "tab-indicator",
|
|
47
|
+
"aria-hidden": "true",
|
|
48
|
+
className: cn('size-[6px] shrink-0 rounded-full', state === 'error' ? 'bg-danger' : 'bg-accent', state === 'saving' && 'animate-pulse motion-reduce:animate-none')
|
|
49
|
+
}),
|
|
50
|
+
onClose && /*#__PURE__*/ _jsx("button", {
|
|
51
|
+
type: "button",
|
|
52
|
+
"aria-label": t('tabs.close', {
|
|
53
|
+
label
|
|
54
|
+
}),
|
|
55
|
+
onClick: onClose,
|
|
56
|
+
className: cn('rounded ml-2xs p-3xs text-content-muted opacity-0 focus-ring transition', 'group-hover:opacity-100 hover:bg-surface hover:text-content focus:opacity-100', active && 'opacity-100'),
|
|
57
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
58
|
+
"aria-hidden": "true",
|
|
59
|
+
children: "×"
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
]
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/** The "+" that opens a new tab. */ export function TabAddButton(_0) {
|
|
66
|
+
let { className } = _0, props = _object_without_properties_loose(_0, [
|
|
67
|
+
"className"
|
|
68
|
+
]);
|
|
69
|
+
const t = useT();
|
|
70
|
+
return /*#__PURE__*/ _jsx("button", _extends({
|
|
71
|
+
type: "button",
|
|
72
|
+
"aria-label": t('tabs.new'),
|
|
73
|
+
className: cn('mb-3xs shrink-0 rounded-md px-2xs py-3xs text-step-sm text-content-muted', 'transition hover:bg-surface-elevated hover:text-content', 'focus-ring', className)
|
|
74
|
+
}, props, {
|
|
75
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
76
|
+
"aria-hidden": "true",
|
|
77
|
+
children: "+"
|
|
78
|
+
})
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=tab-strip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/molecules/tab-strip/tab-strip.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentPropsWithoutRef } from 'react';\n\nimport { useT } from '../../../i18n/index.js';\nimport { cn } from '../../utils/cn.js';\n\nexport type TabStripProps = ComponentPropsWithoutRef<'div'>;\n\n/**\n * The workspace tab strip: a horizontally scrolling row of {@link Tab}s sitting\n * on the workspace surface. Presentational only — the open set, order, and\n * active tab come from the caller (the tabs store lives in the shell).\n */\nexport function TabStrip({ className, children, ...props }: TabStripProps) {\n return (\n <div\n role=\"tablist\"\n className={cn(\n 'flex items-end gap-3xs overflow-x-auto border-b border-border bg-surface px-2xs',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n/** `dirty` = unsaved draft; `saving` = autosave in flight; `error` = save failed. */\nexport type TabState = 'idle' | 'dirty' | 'saving' | 'error';\n\nexport interface TabProps {\n label: string;\n active?: boolean;\n state?: TabState;\n onSelect?: () => void;\n onClose?: () => void;\n className?: string;\n}\n\n/**\n * One tab. The active tab lifts onto the surface (`bg-surface-elevated` +\n * `-mb-px` so its base dissolves into the content plane below — the seam), and\n * a non-idle tab shows the autosave dot: it breathes while `saving`, turns\n * `danger` on `error`. The one place the chrome gets loud, on purpose.\n */\nexport function Tab({\n label,\n active = false,\n state = 'idle',\n onSelect,\n onClose,\n className,\n}: TabProps) {\n const t = useT();\n\n return (\n <div\n role=\"tab\"\n aria-selected={active}\n className={cn(\n 'group relative flex items-center gap-2xs rounded-t-md px-s py-2xs text-step-sm',\n 'transition duration-200 ease-smooth',\n active\n ? '-mb-px bg-surface-elevated font-medium text-content shadow-edge'\n : 'text-content-muted hover:bg-surface-elevated/60',\n state === 'error' && 'bg-danger-subtle text-danger',\n className,\n )}\n >\n {active && (\n <span\n aria-hidden=\"true\"\n className=\"inset-x-0 top-0 absolute h-[2px] rounded-full bg-accent\"\n />\n )}\n <button\n type=\"button\"\n onClick={onSelect}\n className=\"max-w-[12rem] truncate focus-ring\"\n >\n {label}\n </button>\n {state !== 'idle' && (\n <span\n data-testid=\"tab-indicator\"\n aria-hidden=\"true\"\n className={cn(\n 'size-[6px] shrink-0 rounded-full',\n state === 'error' ? 'bg-danger' : 'bg-accent',\n state === 'saving' && 'animate-pulse motion-reduce:animate-none',\n )}\n />\n )}\n {onClose && (\n <button\n type=\"button\"\n aria-label={t('tabs.close', { label })}\n onClick={onClose}\n className={cn(\n 'rounded ml-2xs p-3xs text-content-muted opacity-0 focus-ring transition',\n 'group-hover:opacity-100 hover:bg-surface hover:text-content focus:opacity-100',\n active && 'opacity-100',\n )}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n )}\n </div>\n );\n}\n\nexport type TabAddButtonProps = ComponentPropsWithoutRef<'button'>;\n\n/** The \"+\" that opens a new tab. */\nexport function TabAddButton({ className, ...props }: TabAddButtonProps) {\n const t = useT();\n\n return (\n <button\n type=\"button\"\n aria-label={t('tabs.new')}\n className={cn(\n 'mb-3xs shrink-0 rounded-md px-2xs py-3xs text-step-sm text-content-muted',\n 'transition hover:bg-surface-elevated hover:text-content',\n 'focus-ring',\n className,\n )}\n {...props}\n >\n <span aria-hidden=\"true\">+</span>\n </button>\n );\n}\n"],"names":["useT","cn","TabStrip","className","children","props","div","role","Tab","label","active","state","onSelect","onClose","t","aria-selected","span","aria-hidden","button","type","onClick","data-testid","aria-label","TabAddButton"],"mappings":"AAAA;;;;AAIA,SAASA,IAAI,QAAQ,yBAAyB;AAC9C,SAASC,EAAE,QAAQ,oBAAoB;AAIvC;;;;CAIC,GACD,OAAO,SAASC,SAAS,EAAgD;QAAhD,EAAEC,SAAS,EAAEC,QAAQ,EAA2B,OAAtBC;;;;IACjD,qBACE,KAACC;QACCC,MAAK;QACLJ,WAAWF,GACT,mFACAE;OAEEE;kBAEHD;;AAGP;AAcA;;;;;CAKC,GACD,OAAO,SAASI,IAAI,EAClBC,KAAK,EACLC,SAAS,KAAK,EACdC,QAAQ,MAAM,EACdC,QAAQ,EACRC,OAAO,EACPV,SAAS,EACA;IACT,MAAMW,IAAId;IAEV,qBACE,MAACM;QACCC,MAAK;QACLQ,iBAAeL;QACfP,WAAWF,GACT,kFACA,uCACAS,SACI,oEACA,mDACJC,UAAU,WAAW,gCACrBR;;YAGDO,wBACC,KAACM;gBACCC,eAAY;gBACZd,WAAU;;0BAGd,KAACe;gBACCC,MAAK;gBACLC,SAASR;gBACTT,WAAU;0BAETM;;YAEFE,UAAU,wBACT,KAACK;gBACCK,eAAY;gBACZJ,eAAY;gBACZd,WAAWF,GACT,oCACAU,UAAU,UAAU,cAAc,aAClCA,UAAU,YAAY;;YAI3BE,yBACC,KAACK;gBACCC,MAAK;gBACLG,cAAYR,EAAE,cAAc;oBAAEL;gBAAM;gBACpCW,SAASP;gBACTV,WAAWF,GACT,2EACA,iFACAS,UAAU;0BAGZ,cAAA,KAACM;oBAAKC,eAAY;8BAAO;;;;;AAKnC;AAIA,kCAAkC,GAClC,OAAO,SAASM,aAAa,EAA0C;QAA1C,EAAEpB,SAAS,EAA+B,OAA1BE;;;IAC3C,MAAMS,IAAId;IAEV,qBACE,KAACkB;QACCC,MAAK;QACLG,cAAYR,EAAE;QACdX,WAAWF,GACT,4EACA,2DACA,cACAE;OAEEE;kBAEJ,cAAA,KAACW;YAAKC,eAAY;sBAAO;;;AAG/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/table-toolbar/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/molecules/table-toolbar/index.ts"],"sourcesContent":["export * from './table-toolbar.js';\n"],"names":[],"mappings":"AAAA,cAAc,qBAAqB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface TableToolbarProps {
|
|
3
|
+
/** Actions aligned to the start — titles, primary actions. */
|
|
4
|
+
start?: ReactNode;
|
|
5
|
+
/** Actions aligned to the end — column settings, panel toggles. */
|
|
6
|
+
end?: ReactNode;
|
|
7
|
+
/** Expanded panel rendered below the bar (filters, sorting). */
|
|
8
|
+
panel?: ReactNode;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Bar above a table: actions on one line, an optional expanded panel below. */
|
|
12
|
+
export declare function TableToolbar({ start, end, panel, className, }: TableToolbarProps): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=table-toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-toolbar.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/table-toolbar/table-toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,mEAAmE;IACnE,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,gEAAgE;IAChE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,GAAG,EACH,KAAK,EACL,SAAS,GACV,EAAE,iBAAiB,+BAcnB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../../utils/cn.js';
|
|
3
|
+
/** Bar above a table: actions on one line, an optional expanded panel below. */ export function TableToolbar({ start, end, panel, className }) {
|
|
4
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
5
|
+
className: cn('flex flex-col gap-2xs', className),
|
|
6
|
+
children: [
|
|
7
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
8
|
+
className: "flex flex-wrap items-center justify-between gap-2xs",
|
|
9
|
+
children: [
|
|
10
|
+
/*#__PURE__*/ _jsx("div", {
|
|
11
|
+
className: "flex flex-wrap items-center gap-2xs",
|
|
12
|
+
children: start
|
|
13
|
+
}),
|
|
14
|
+
/*#__PURE__*/ _jsx("div", {
|
|
15
|
+
className: "flex flex-wrap items-center gap-2xs",
|
|
16
|
+
children: end
|
|
17
|
+
})
|
|
18
|
+
]
|
|
19
|
+
}),
|
|
20
|
+
panel && /*#__PURE__*/ _jsx("div", {
|
|
21
|
+
className: "rounded-xl border border-border bg-surface p-s",
|
|
22
|
+
children: panel
|
|
23
|
+
})
|
|
24
|
+
]
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=table-toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/molecules/table-toolbar/table-toolbar.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn.js';\n\nexport interface TableToolbarProps {\n /** Actions aligned to the start — titles, primary actions. */\n start?: ReactNode;\n /** Actions aligned to the end — column settings, panel toggles. */\n end?: ReactNode;\n /** Expanded panel rendered below the bar (filters, sorting). */\n panel?: ReactNode;\n className?: string;\n}\n\n/** Bar above a table: actions on one line, an optional expanded panel below. */\nexport function TableToolbar({\n start,\n end,\n panel,\n className,\n}: TableToolbarProps) {\n return (\n <div className={cn('flex flex-col gap-2xs', className)}>\n <div className=\"flex flex-wrap items-center justify-between gap-2xs\">\n <div className=\"flex flex-wrap items-center gap-2xs\">{start}</div>\n <div className=\"flex flex-wrap items-center gap-2xs\">{end}</div>\n </div>\n {panel && (\n <div className=\"rounded-xl border border-border bg-surface p-s\">\n {panel}\n </div>\n )}\n </div>\n );\n}\n"],"names":["cn","TableToolbar","start","end","panel","className","div"],"mappings":";AAEA,SAASA,EAAE,QAAQ,oBAAoB;AAYvC,8EAA8E,GAC9E,OAAO,SAASC,aAAa,EAC3BC,KAAK,EACLC,GAAG,EACHC,KAAK,EACLC,SAAS,EACS;IAClB,qBACE,MAACC;QAAID,WAAWL,GAAG,yBAAyBK;;0BAC1C,MAACC;gBAAID,WAAU;;kCACb,KAACC;wBAAID,WAAU;kCAAuCH;;kCACtD,KAACI;wBAAID,WAAU;kCAAuCF;;;;YAEvDC,uBACC,KAACE;gBAAID,WAAU;0BACZD;;;;AAKX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/theme-switcher/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/molecules/theme-switcher/index.ts"],"sourcesContent":["export * from './theme-switcher.js';\n"],"names":[],"mappings":"AAAA,cAAc,sBAAsB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Headless UI RadioGroup bound to the ThemeProvider. Options + labels come
|
|
2
|
+
* from the provider's registry, so it adapts to each app's theme set. */
|
|
3
|
+
export declare function ThemeSwitcher({ className }: {
|
|
4
|
+
className?: string;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=theme-switcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-switcher.d.ts","sourceRoot":"","sources":["../../../../src/ui/molecules/theme-switcher/theme-switcher.tsx"],"names":[],"mappings":"AAQA;0EAC0E;AAC1E,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BA4BlE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Radio, RadioGroup } from '@headlessui/react';
|
|
4
|
+
import { useT } from '../../../i18n/index.js';
|
|
5
|
+
import { useTheme } from '../../../theme/index.js';
|
|
6
|
+
import { cn } from '../../utils/cn.js';
|
|
7
|
+
/** Headless UI RadioGroup bound to the ThemeProvider. Options + labels come
|
|
8
|
+
* from the provider's registry, so it adapts to each app's theme set. */ export function ThemeSwitcher({ className }) {
|
|
9
|
+
const t = useT();
|
|
10
|
+
const { theme, setTheme, themes } = useTheme();
|
|
11
|
+
return /*#__PURE__*/ _jsx(RadioGroup, {
|
|
12
|
+
value: theme,
|
|
13
|
+
onChange: setTheme,
|
|
14
|
+
"aria-label": t('theme.label'),
|
|
15
|
+
className: cn('flex flex-wrap gap-2xs', className),
|
|
16
|
+
children: themes.map((option)=>/*#__PURE__*/ _jsx(Radio, {
|
|
17
|
+
value: option.id,
|
|
18
|
+
className: cn('cursor-pointer rounded-lg border border-border px-s py-2xs text-step-0', 'transition duration-200 ease-smooth active:scale-[0.97]', 'text-content hover:border-primary hover:shadow-raised', 'focus-ring', 'data-checked:border-primary data-checked:bg-primary data-checked:text-primary-content data-checked:shadow-card'),
|
|
19
|
+
children: option.label
|
|
20
|
+
}, option.id))
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=theme-switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/molecules/theme-switcher/theme-switcher.tsx"],"sourcesContent":["'use client';\n\nimport { Radio, RadioGroup } from '@headlessui/react';\n\nimport { useT } from '../../../i18n/index.js';\nimport { useTheme } from '../../../theme/index.js';\nimport { cn } from '../../utils/cn.js';\n\n/** Headless UI RadioGroup bound to the ThemeProvider. Options + labels come\n * from the provider's registry, so it adapts to each app's theme set. */\nexport function ThemeSwitcher({ className }: { className?: string }) {\n const t = useT();\n const { theme, setTheme, themes } = useTheme();\n\n return (\n <RadioGroup\n value={theme}\n onChange={setTheme}\n aria-label={t('theme.label')}\n className={cn('flex flex-wrap gap-2xs', className)}\n >\n {themes.map(option => (\n <Radio\n key={option.id}\n value={option.id}\n className={cn(\n 'cursor-pointer rounded-lg border border-border px-s py-2xs text-step-0',\n 'transition duration-200 ease-smooth active:scale-[0.97]',\n 'text-content hover:border-primary hover:shadow-raised',\n 'focus-ring',\n 'data-checked:border-primary data-checked:bg-primary data-checked:text-primary-content data-checked:shadow-card',\n )}\n >\n {option.label}\n </Radio>\n ))}\n </RadioGroup>\n );\n}\n"],"names":["Radio","RadioGroup","useT","useTheme","cn","ThemeSwitcher","className","t","theme","setTheme","themes","value","onChange","aria-label","map","option","id","label"],"mappings":"AAAA;;AAEA,SAASA,KAAK,EAAEC,UAAU,QAAQ,oBAAoB;AAEtD,SAASC,IAAI,QAAQ,yBAAyB;AAC9C,SAASC,QAAQ,QAAQ,0BAA0B;AACnD,SAASC,EAAE,QAAQ,oBAAoB;AAEvC;wEACwE,GACxE,OAAO,SAASC,cAAc,EAAEC,SAAS,EAA0B;IACjE,MAAMC,IAAIL;IACV,MAAM,EAAEM,KAAK,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGP;IAEpC,qBACE,KAACF;QACCU,OAAOH;QACPI,UAAUH;QACVI,cAAYN,EAAE;QACdD,WAAWF,GAAG,0BAA0BE;kBAEvCI,OAAOI,GAAG,CAACC,CAAAA,uBACV,KAACf;gBAECW,OAAOI,OAAOC,EAAE;gBAChBV,WAAWF,GACT,0EACA,2DACA,yDACA,cACA;0BAGDW,OAAOE,KAAK;eAVRF,OAAOC,EAAE;;AAexB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type CommandOption, type CommandPage } from '@entifix/core';
|
|
2
|
+
/** Every string the palette renders. Resolved — this control does not translate. */
|
|
3
|
+
export interface CommandPaletteLabels {
|
|
4
|
+
/** Names the dialog. A dialog with no accessible name is announced as "dialog". */
|
|
5
|
+
readonly title: string;
|
|
6
|
+
/** Nothing matched, and every source said so. */
|
|
7
|
+
readonly empty: string;
|
|
8
|
+
/** Announced while a group is still answering. */
|
|
9
|
+
readonly loading: string;
|
|
10
|
+
/** "N más" — a function, so the plural rule stays in the catalog. */
|
|
11
|
+
readonly more: (remaining: number) => string;
|
|
12
|
+
/** Leaves a pushed page. Also the chip's accessible name. */
|
|
13
|
+
readonly back: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CommandPaletteProps {
|
|
16
|
+
open: boolean;
|
|
17
|
+
onClose: () => void;
|
|
18
|
+
/** Every page this palette can show. The root is the first. */
|
|
19
|
+
pages: readonly CommandPage[];
|
|
20
|
+
/**
|
|
21
|
+
* The pushed page ids, outermost first — empty means the root.
|
|
22
|
+
*
|
|
23
|
+
* Controlled, so the host can empty it in the same handler that opens the
|
|
24
|
+
* palette. An internal stack would have to be reset from an effect keyed on
|
|
25
|
+
* `open`, which is setting state in a passive effect for something that is a
|
|
26
|
+
* fact about the event that opened it.
|
|
27
|
+
*/
|
|
28
|
+
stack: readonly string[];
|
|
29
|
+
onStackChange: (stack: readonly string[]) => void;
|
|
30
|
+
term: string;
|
|
31
|
+
onTermChange: (term: string) => void;
|
|
32
|
+
/**
|
|
33
|
+
* An option was chosen. The host runs it — this control has no router and
|
|
34
|
+
* cannot navigate, which is the `hrefFor` rule.
|
|
35
|
+
*/
|
|
36
|
+
onSelect: (option: CommandOption) => void;
|
|
37
|
+
labels: CommandPaletteLabels;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A floating command bar: search destinations, records and commands, and run
|
|
41
|
+
* them from the keyboard.
|
|
42
|
+
*
|
|
43
|
+
* Presentational, and strictly so. It holds no index, performs no fetch and
|
|
44
|
+
* knows no router — every group arrives already filtered, already authorized and
|
|
45
|
+
* already translated, from hooks in the shell layer that meet this component at
|
|
46
|
+
* the framework-free `CommandSource` port in core. That is the same arrangement
|
|
47
|
+
* `EntityLinkSource` uses, and it exists because `@entifix/react-controls` may
|
|
48
|
+
* not import `@entifix/react-integration`.
|
|
49
|
+
*
|
|
50
|
+
* **The sources filter, not this component.** A record group is filtered by the
|
|
51
|
+
* service that answered it; a command group is filtered by the hook that built
|
|
52
|
+
* it. Filtering again here would mean the palette had to know which groups were
|
|
53
|
+
* pre-filtered, and a group that answered a *different* term would be silently
|
|
54
|
+
* emptied rather than shown as stale.
|
|
55
|
+
*
|
|
56
|
+
* Depth is a **stack of pages**: selecting an option carrying `push` makes the
|
|
57
|
+
* palette become that page. `Escape` pops one level and closes at the root;
|
|
58
|
+
* `Backspace` on an empty term pops too, which is the gesture Raycast trained
|
|
59
|
+
* people on and costs nothing when there is nothing to pop.
|
|
60
|
+
*
|
|
61
|
+
* Built on Headless UI's `Dialog` + `Combobox`, so the focus trap, focus
|
|
62
|
+
* restoration, `role="combobox"`, `aria-expanded`, `aria-activedescendant` and
|
|
63
|
+
* the arrow-key contract are the library's rather than seven hand-written
|
|
64
|
+
* behaviours that each have to be right.
|
|
65
|
+
*/
|
|
66
|
+
export declare function CommandPalette({ open, onClose, pages, stack, onStackChange, term, onTermChange, onSelect, labels, }: CommandPaletteProps): import("react").JSX.Element;
|
|
67
|
+
//# sourceMappingURL=command-palette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../../../../src/ui/organisms/command-palette/command-palette.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AAevB,oFAAoF;AACpF,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+DAA+D;IAC/D,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B;;;;;;;OAOG;IACH,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;OAGG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AA4GD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,EACL,aAAa,EACb,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,GACP,EAAE,mBAAmB,+BAyIrB"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { commandEffectOf } from '@entifix/core';
|
|
4
|
+
import { Combobox, ComboboxInput, ComboboxOption, ComboboxOptions, Dialog, DialogPanel, DialogTitle } from '@headlessui/react';
|
|
5
|
+
import { SkeletonText } from '../../atoms/skeleton/index.js';
|
|
6
|
+
import { cn } from '../../utils/cn.js';
|
|
7
|
+
const groupIsEmpty = (group)=>group.options.length === 0 && !group.isLoading && group.unavailable === undefined;
|
|
8
|
+
function GroupHeading({ label }) {
|
|
9
|
+
return(// `presentation`, not a heading: everything inside a `listbox` that is not
|
|
10
|
+
// an `option` must be presentational, or assistive tech counts the heading
|
|
11
|
+
// as a selectable row and the option count it announces is wrong.
|
|
12
|
+
/*#__PURE__*/ _jsx("div", {
|
|
13
|
+
role: "presentation",
|
|
14
|
+
className: "tracking-wide px-2xs pt-2xs pb-3xs text-step-xs font-semibold text-content-muted uppercase",
|
|
15
|
+
children: label
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
function CommandRow({ option }) {
|
|
19
|
+
return /*#__PURE__*/ _jsxs(ComboboxOption, {
|
|
20
|
+
value: option,
|
|
21
|
+
className: cn('flex cursor-pointer items-baseline gap-2xs rounded-md px-2xs py-3xs', 'text-step-sm text-content', 'data-focus:bg-surface'),
|
|
22
|
+
children: [
|
|
23
|
+
/*#__PURE__*/ _jsx("span", {
|
|
24
|
+
className: "truncate",
|
|
25
|
+
children: option.label
|
|
26
|
+
}),
|
|
27
|
+
option.sublabel !== undefined && /*#__PURE__*/ _jsx("span", {
|
|
28
|
+
className: "truncate text-step-xs text-content-muted",
|
|
29
|
+
children: option.sublabel
|
|
30
|
+
}),
|
|
31
|
+
option.hint !== undefined && /*#__PURE__*/ _jsx("span", {
|
|
32
|
+
className: "ml-auto shrink-0 text-step-xs text-content-muted",
|
|
33
|
+
children: option.hint
|
|
34
|
+
})
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function Group({ group, labels }) {
|
|
39
|
+
const remaining = group.total === undefined ? 0 : group.total - group.options.length;
|
|
40
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
41
|
+
"data-testid": `command-group-${group.key}`,
|
|
42
|
+
children: [
|
|
43
|
+
/*#__PURE__*/ _jsx(GroupHeading, {
|
|
44
|
+
label: group.label
|
|
45
|
+
}),
|
|
46
|
+
group.isLoading && /*#__PURE__*/ _jsxs("div", {
|
|
47
|
+
role: "presentation",
|
|
48
|
+
className: "px-2xs py-3xs",
|
|
49
|
+
children: [
|
|
50
|
+
/*#__PURE__*/ _jsx("span", {
|
|
51
|
+
className: "sr-only",
|
|
52
|
+
children: labels.loading
|
|
53
|
+
}),
|
|
54
|
+
/*#__PURE__*/ _jsx(SkeletonText, {
|
|
55
|
+
lines: 2
|
|
56
|
+
})
|
|
57
|
+
]
|
|
58
|
+
}),
|
|
59
|
+
group.options.map((option)=>/*#__PURE__*/ _jsx(CommandRow, {
|
|
60
|
+
option: option
|
|
61
|
+
}, option.id)),
|
|
62
|
+
remaining > 0 && /*#__PURE__*/ _jsx("div", {
|
|
63
|
+
role: "presentation",
|
|
64
|
+
className: "px-2xs py-3xs text-step-xs text-content-muted",
|
|
65
|
+
children: labels.more(remaining)
|
|
66
|
+
}),
|
|
67
|
+
group.unavailable !== undefined && /*#__PURE__*/ _jsx("div", {
|
|
68
|
+
role: "presentation",
|
|
69
|
+
"data-testid": `command-unavailable-${group.key}`,
|
|
70
|
+
className: cn('px-2xs py-3xs text-step-xs', group.unavailable.severity === 'reachability' ? 'text-danger' : 'text-content-muted'),
|
|
71
|
+
children: group.unavailable.message
|
|
72
|
+
})
|
|
73
|
+
]
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* A floating command bar: search destinations, records and commands, and run
|
|
78
|
+
* them from the keyboard.
|
|
79
|
+
*
|
|
80
|
+
* Presentational, and strictly so. It holds no index, performs no fetch and
|
|
81
|
+
* knows no router — every group arrives already filtered, already authorized and
|
|
82
|
+
* already translated, from hooks in the shell layer that meet this component at
|
|
83
|
+
* the framework-free `CommandSource` port in core. That is the same arrangement
|
|
84
|
+
* `EntityLinkSource` uses, and it exists because `@entifix/react-controls` may
|
|
85
|
+
* not import `@entifix/react-integration`.
|
|
86
|
+
*
|
|
87
|
+
* **The sources filter, not this component.** A record group is filtered by the
|
|
88
|
+
* service that answered it; a command group is filtered by the hook that built
|
|
89
|
+
* it. Filtering again here would mean the palette had to know which groups were
|
|
90
|
+
* pre-filtered, and a group that answered a *different* term would be silently
|
|
91
|
+
* emptied rather than shown as stale.
|
|
92
|
+
*
|
|
93
|
+
* Depth is a **stack of pages**: selecting an option carrying `push` makes the
|
|
94
|
+
* palette become that page. `Escape` pops one level and closes at the root;
|
|
95
|
+
* `Backspace` on an empty term pops too, which is the gesture Raycast trained
|
|
96
|
+
* people on and costs nothing when there is nothing to pop.
|
|
97
|
+
*
|
|
98
|
+
* Built on Headless UI's `Dialog` + `Combobox`, so the focus trap, focus
|
|
99
|
+
* restoration, `role="combobox"`, `aria-expanded`, `aria-activedescendant` and
|
|
100
|
+
* the arrow-key contract are the library's rather than seven hand-written
|
|
101
|
+
* behaviours that each have to be right.
|
|
102
|
+
*/ export function CommandPalette({ open, onClose, pages, stack, onStackChange, term, onTermChange, onSelect, labels }) {
|
|
103
|
+
var _ref;
|
|
104
|
+
const activeId = stack[stack.length - 1];
|
|
105
|
+
const page = (_ref = activeId === undefined ? pages[0] : pages.find((candidate)=>candidate.id === activeId)) != null ? _ref : pages[0];
|
|
106
|
+
const groups = page.sources.flatMap((source)=>source.groups);
|
|
107
|
+
// Runs on every render of the palette, not on the click: an option with no
|
|
108
|
+
// effect — or with two — is a line that looks selectable and misbehaves, and
|
|
109
|
+
// the check that only fires when someone already selected it is the check
|
|
110
|
+
// that fires after the bug is reported.
|
|
111
|
+
groups.forEach((group)=>group.options.forEach(commandEffectOf));
|
|
112
|
+
const isEmpty = groups.every(groupIsEmpty);
|
|
113
|
+
const pop = ()=>{
|
|
114
|
+
if (stack.length === 0) {
|
|
115
|
+
onClose();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
onStackChange(stack.slice(0, -1));
|
|
119
|
+
onTermChange('');
|
|
120
|
+
};
|
|
121
|
+
const handleSelect = (option)=>{
|
|
122
|
+
// Headless UI types `onChange` as nullable — it reports `null` when a search
|
|
123
|
+
// is abandoned rather than chosen, and acting on that would run whatever
|
|
124
|
+
// happened to be highlighted.
|
|
125
|
+
//
|
|
126
|
+
// ⚠️ Unreachable *here*, and ignored for coverage rather than contorted
|
|
127
|
+
// around: this combobox is driven entirely from the outside (`value` is the
|
|
128
|
+
// caller's `term`, there is no `displayValue`) and Escape is handled on the
|
|
129
|
+
// input above, so the library never produces the null it admits. The guard
|
|
130
|
+
// stays because the type is the library's contract, not ours to assume away.
|
|
131
|
+
/* v8 ignore next 2 */ if (option === null) return;
|
|
132
|
+
if (option.push !== undefined) {
|
|
133
|
+
onStackChange([
|
|
134
|
+
...stack,
|
|
135
|
+
option.push
|
|
136
|
+
]);
|
|
137
|
+
onTermChange('');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
onSelect(option);
|
|
141
|
+
};
|
|
142
|
+
const handleKeyDown = (event)=>{
|
|
143
|
+
// ⚠️ Escape is handled here rather than left to the `Dialog`, because
|
|
144
|
+
// `Combobox` consumes it first once a term has been typed — it treats the
|
|
145
|
+
// key as "close the suggestion list", which for a `static` list means
|
|
146
|
+
// nothing at all, and the palette then refuses to close for exactly the
|
|
147
|
+
// person who has typed something. Measured, not defensive.
|
|
148
|
+
if (event.key === 'Escape') {
|
|
149
|
+
event.preventDefault();
|
|
150
|
+
event.stopPropagation();
|
|
151
|
+
pop();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Only when there is nothing to delete, so the key keeps its ordinary
|
|
155
|
+
// meaning for as long as the person is still editing a term.
|
|
156
|
+
if (event.key === 'Backspace' && term === '' && stack.length > 0) {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
pop();
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
return /*#__PURE__*/ _jsxs(Dialog, {
|
|
162
|
+
open: open,
|
|
163
|
+
// Headless UI routes Escape here. Popping rather than closing is what
|
|
164
|
+
// makes the stack feel like a stack; at the root the two are the same.
|
|
165
|
+
onClose: pop,
|
|
166
|
+
className: "inset-0 fixed z-50 flex items-start justify-center overflow-y-auto p-s pt-[12vh]",
|
|
167
|
+
children: [
|
|
168
|
+
/*#__PURE__*/ _jsx("div", {
|
|
169
|
+
"aria-hidden": true,
|
|
170
|
+
className: "inset-0 bg-black/40 fixed"
|
|
171
|
+
}),
|
|
172
|
+
/*#__PURE__*/ _jsxs(DialogPanel, {
|
|
173
|
+
"data-testid": "command-palette",
|
|
174
|
+
className: "relative w-full max-w-xl overflow-hidden rounded-lg border border-border bg-surface-elevated shadow-overlay",
|
|
175
|
+
children: [
|
|
176
|
+
/*#__PURE__*/ _jsx(DialogTitle, {
|
|
177
|
+
className: "sr-only",
|
|
178
|
+
children: labels.title
|
|
179
|
+
}),
|
|
180
|
+
/*#__PURE__*/ _jsxs(Combobox, {
|
|
181
|
+
onChange: handleSelect,
|
|
182
|
+
children: [
|
|
183
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
184
|
+
className: "flex items-center gap-2xs border-b border-border px-s py-2xs",
|
|
185
|
+
children: [
|
|
186
|
+
page.title !== undefined && /*#__PURE__*/ _jsx("button", {
|
|
187
|
+
type: "button",
|
|
188
|
+
"aria-label": labels.back,
|
|
189
|
+
onClick: pop,
|
|
190
|
+
className: "shrink-0 rounded-md bg-surface px-2xs py-3xs text-step-xs text-content-muted focus-ring",
|
|
191
|
+
children: page.title
|
|
192
|
+
}),
|
|
193
|
+
/*#__PURE__*/ _jsx(ComboboxInput, {
|
|
194
|
+
"data-autofocus": true,
|
|
195
|
+
"aria-label": labels.title,
|
|
196
|
+
placeholder: page.placeholder,
|
|
197
|
+
value: term,
|
|
198
|
+
onChange: (event)=>onTermChange(event.currentTarget.value),
|
|
199
|
+
onKeyDown: handleKeyDown,
|
|
200
|
+
className: "flex-1 bg-transparent py-3xs text-step-1 text-content placeholder:text-content-muted focus:outline-none"
|
|
201
|
+
})
|
|
202
|
+
]
|
|
203
|
+
}),
|
|
204
|
+
/*#__PURE__*/ _jsx(ComboboxOptions, {
|
|
205
|
+
static: true,
|
|
206
|
+
className: cn('max-h-[60vh] overflow-y-auto p-3xs', // The panel is a focus-managed CONTAINER, not a target: the ring
|
|
207
|
+
// belongs on the row inside it.
|
|
208
|
+
'focus:outline-none'),
|
|
209
|
+
children: isEmpty ? /*#__PURE__*/ _jsx("div", {
|
|
210
|
+
role: "presentation",
|
|
211
|
+
className: "px-2xs py-s text-step-sm text-content-muted",
|
|
212
|
+
children: labels.empty
|
|
213
|
+
}) : groups.filter((group)=>!groupIsEmpty(group)).map((group)=>/*#__PURE__*/ _jsx(Group, {
|
|
214
|
+
group: group,
|
|
215
|
+
labels: labels
|
|
216
|
+
}, group.key))
|
|
217
|
+
})
|
|
218
|
+
]
|
|
219
|
+
})
|
|
220
|
+
]
|
|
221
|
+
})
|
|
222
|
+
]
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
//# sourceMappingURL=command-palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/organisms/command-palette/command-palette.tsx"],"sourcesContent":["'use client';\n\nimport {\n commandEffectOf,\n type CommandGroup,\n type CommandOption,\n type CommandPage,\n} from '@entifix/core';\nimport {\n Combobox,\n ComboboxInput,\n ComboboxOption,\n ComboboxOptions,\n Dialog,\n DialogPanel,\n DialogTitle,\n} from '@headlessui/react';\nimport type { KeyboardEvent } from 'react';\n\nimport { SkeletonText } from '../../atoms/skeleton/index.js';\nimport { cn } from '../../utils/cn.js';\n\n/** Every string the palette renders. Resolved — this control does not translate. */\nexport interface CommandPaletteLabels {\n /** Names the dialog. A dialog with no accessible name is announced as \"dialog\". */\n readonly title: string;\n /** Nothing matched, and every source said so. */\n readonly empty: string;\n /** Announced while a group is still answering. */\n readonly loading: string;\n /** \"N más\" — a function, so the plural rule stays in the catalog. */\n readonly more: (remaining: number) => string;\n /** Leaves a pushed page. Also the chip's accessible name. */\n readonly back: string;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n /** Every page this palette can show. The root is the first. */\n pages: readonly CommandPage[];\n /**\n * The pushed page ids, outermost first — empty means the root.\n *\n * Controlled, so the host can empty it in the same handler that opens the\n * palette. An internal stack would have to be reset from an effect keyed on\n * `open`, which is setting state in a passive effect for something that is a\n * fact about the event that opened it.\n */\n stack: readonly string[];\n onStackChange: (stack: readonly string[]) => void;\n term: string;\n onTermChange: (term: string) => void;\n /**\n * An option was chosen. The host runs it — this control has no router and\n * cannot navigate, which is the `hrefFor` rule.\n */\n onSelect: (option: CommandOption) => void;\n labels: CommandPaletteLabels;\n}\n\nconst groupIsEmpty = (group: CommandGroup): boolean =>\n group.options.length === 0 &&\n !group.isLoading &&\n group.unavailable === undefined;\n\nfunction GroupHeading({ label }: { label: string }) {\n return (\n // `presentation`, not a heading: everything inside a `listbox` that is not\n // an `option` must be presentational, or assistive tech counts the heading\n // as a selectable row and the option count it announces is wrong.\n <div\n role=\"presentation\"\n className=\"tracking-wide px-2xs pt-2xs pb-3xs text-step-xs font-semibold text-content-muted uppercase\"\n >\n {label}\n </div>\n );\n}\n\nfunction CommandRow({ option }: { option: CommandOption }) {\n return (\n <ComboboxOption\n value={option}\n className={cn(\n 'flex cursor-pointer items-baseline gap-2xs rounded-md px-2xs py-3xs',\n 'text-step-sm text-content',\n 'data-focus:bg-surface',\n )}\n >\n <span className=\"truncate\">{option.label}</span>\n {option.sublabel !== undefined && (\n <span className=\"truncate text-step-xs text-content-muted\">\n {option.sublabel}\n </span>\n )}\n {option.hint !== undefined && (\n <span className=\"ml-auto shrink-0 text-step-xs text-content-muted\">\n {option.hint}\n </span>\n )}\n </ComboboxOption>\n );\n}\n\nfunction Group({\n group,\n labels,\n}: {\n group: CommandGroup;\n labels: CommandPaletteLabels;\n}) {\n const remaining =\n group.total === undefined ? 0 : group.total - group.options.length;\n\n return (\n <div data-testid={`command-group-${group.key}`}>\n <GroupHeading label={group.label} />\n\n {group.isLoading && (\n <div role=\"presentation\" className=\"px-2xs py-3xs\">\n {/* The skeleton is `aria-hidden`, so the wait needs its own text or a\n screen reader hears a group that simply has no rows. */}\n <span className=\"sr-only\">{labels.loading}</span>\n <SkeletonText lines={2} />\n </div>\n )}\n\n {group.options.map(option => (\n <CommandRow key={option.id} option={option} />\n ))}\n\n {remaining > 0 && (\n <div\n role=\"presentation\"\n className=\"px-2xs py-3xs text-step-xs text-content-muted\"\n >\n {labels.more(remaining)}\n </div>\n )}\n\n {/*\n A degraded source is NAMED, never a missing group: an absent group reads\n as \"nothing matched\", which nobody can honestly claim about a source they\n could not reach. The two severities look different on purpose — `scope`\n is the ordinary state for an operator with no organization, and painting\n that as a warning on every keystroke teaches people to ignore the one\n that means something is broken.\n */}\n {group.unavailable !== undefined && (\n <div\n role=\"presentation\"\n data-testid={`command-unavailable-${group.key}`}\n className={cn(\n 'px-2xs py-3xs text-step-xs',\n group.unavailable.severity === 'reachability'\n ? 'text-danger'\n : 'text-content-muted',\n )}\n >\n {group.unavailable.message}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * A floating command bar: search destinations, records and commands, and run\n * them from the keyboard.\n *\n * Presentational, and strictly so. It holds no index, performs no fetch and\n * knows no router — every group arrives already filtered, already authorized and\n * already translated, from hooks in the shell layer that meet this component at\n * the framework-free `CommandSource` port in core. That is the same arrangement\n * `EntityLinkSource` uses, and it exists because `@entifix/react-controls` may\n * not import `@entifix/react-integration`.\n *\n * **The sources filter, not this component.** A record group is filtered by the\n * service that answered it; a command group is filtered by the hook that built\n * it. Filtering again here would mean the palette had to know which groups were\n * pre-filtered, and a group that answered a *different* term would be silently\n * emptied rather than shown as stale.\n *\n * Depth is a **stack of pages**: selecting an option carrying `push` makes the\n * palette become that page. `Escape` pops one level and closes at the root;\n * `Backspace` on an empty term pops too, which is the gesture Raycast trained\n * people on and costs nothing when there is nothing to pop.\n *\n * Built on Headless UI's `Dialog` + `Combobox`, so the focus trap, focus\n * restoration, `role=\"combobox\"`, `aria-expanded`, `aria-activedescendant` and\n * the arrow-key contract are the library's rather than seven hand-written\n * behaviours that each have to be right.\n */\nexport function CommandPalette({\n open,\n onClose,\n pages,\n stack,\n onStackChange,\n term,\n onTermChange,\n onSelect,\n labels,\n}: CommandPaletteProps) {\n const activeId = stack[stack.length - 1];\n const page =\n (activeId === undefined\n ? pages[0]\n : pages.find(candidate => candidate.id === activeId)) ?? pages[0];\n\n const groups = page.sources.flatMap(source => source.groups);\n // Runs on every render of the palette, not on the click: an option with no\n // effect — or with two — is a line that looks selectable and misbehaves, and\n // the check that only fires when someone already selected it is the check\n // that fires after the bug is reported.\n groups.forEach(group => group.options.forEach(commandEffectOf));\n\n const isEmpty = groups.every(groupIsEmpty);\n\n const pop = () => {\n if (stack.length === 0) {\n onClose();\n return;\n }\n onStackChange(stack.slice(0, -1));\n onTermChange('');\n };\n\n const handleSelect = (option: CommandOption | null) => {\n // Headless UI types `onChange` as nullable — it reports `null` when a search\n // is abandoned rather than chosen, and acting on that would run whatever\n // happened to be highlighted.\n //\n // ⚠️ Unreachable *here*, and ignored for coverage rather than contorted\n // around: this combobox is driven entirely from the outside (`value` is the\n // caller's `term`, there is no `displayValue`) and Escape is handled on the\n // input above, so the library never produces the null it admits. The guard\n // stays because the type is the library's contract, not ours to assume away.\n /* v8 ignore next 2 */\n if (option === null) return;\n if (option.push !== undefined) {\n onStackChange([...stack, option.push]);\n onTermChange('');\n return;\n }\n onSelect(option);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n // ⚠️ Escape is handled here rather than left to the `Dialog`, because\n // `Combobox` consumes it first once a term has been typed — it treats the\n // key as \"close the suggestion list\", which for a `static` list means\n // nothing at all, and the palette then refuses to close for exactly the\n // person who has typed something. Measured, not defensive.\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n pop();\n return;\n }\n // Only when there is nothing to delete, so the key keeps its ordinary\n // meaning for as long as the person is still editing a term.\n if (event.key === 'Backspace' && term === '' && stack.length > 0) {\n event.preventDefault();\n pop();\n }\n };\n\n return (\n <Dialog\n open={open}\n // Headless UI routes Escape here. Popping rather than closing is what\n // makes the stack feel like a stack; at the root the two are the same.\n onClose={pop}\n className=\"inset-0 fixed z-50 flex items-start justify-center overflow-y-auto p-s pt-[12vh]\"\n >\n <div aria-hidden className=\"inset-0 bg-black/40 fixed\" />\n <DialogPanel\n data-testid=\"command-palette\"\n className=\"relative w-full max-w-xl overflow-hidden rounded-lg border border-border bg-surface-elevated shadow-overlay\"\n >\n <DialogTitle className=\"sr-only\">{labels.title}</DialogTitle>\n\n {/*\n Uncontrolled: this combobox has no value worth holding — an option is\n an act, not a stored choice. Every render rebuilds its options from the\n sources, so the identities differ and selecting the same row twice\n still fires `onChange` both times.\n */}\n <Combobox<CommandOption> onChange={handleSelect}>\n <div className=\"flex items-center gap-2xs border-b border-border px-s py-2xs\">\n {page.title !== undefined && (\n <button\n type=\"button\"\n aria-label={labels.back}\n onClick={pop}\n className=\"shrink-0 rounded-md bg-surface px-2xs py-3xs text-step-xs text-content-muted focus-ring\"\n >\n {page.title}\n </button>\n )}\n <ComboboxInput\n data-autofocus\n aria-label={labels.title}\n placeholder={page.placeholder}\n value={term}\n onChange={event => onTermChange(event.currentTarget.value)}\n onKeyDown={handleKeyDown}\n className=\"flex-1 bg-transparent py-3xs text-step-1 text-content placeholder:text-content-muted focus:outline-none\"\n />\n </div>\n\n <ComboboxOptions\n static\n className={cn(\n 'max-h-[60vh] overflow-y-auto p-3xs',\n // The panel is a focus-managed CONTAINER, not a target: the ring\n // belongs on the row inside it.\n 'focus:outline-none',\n )}\n >\n {isEmpty ? (\n <div\n role=\"presentation\"\n className=\"px-2xs py-s text-step-sm text-content-muted\"\n >\n {labels.empty}\n </div>\n ) : (\n groups\n .filter(group => !groupIsEmpty(group))\n .map(group => (\n <Group key={group.key} group={group} labels={labels} />\n ))\n )}\n </ComboboxOptions>\n </Combobox>\n </DialogPanel>\n </Dialog>\n );\n}\n"],"names":["commandEffectOf","Combobox","ComboboxInput","ComboboxOption","ComboboxOptions","Dialog","DialogPanel","DialogTitle","SkeletonText","cn","groupIsEmpty","group","options","length","isLoading","unavailable","undefined","GroupHeading","label","div","role","className","CommandRow","option","value","span","sublabel","hint","Group","labels","remaining","total","data-testid","key","loading","lines","map","id","more","severity","message","CommandPalette","open","onClose","pages","stack","onStackChange","term","onTermChange","onSelect","activeId","page","find","candidate","groups","sources","flatMap","source","forEach","isEmpty","every","pop","slice","handleSelect","push","handleKeyDown","event","preventDefault","stopPropagation","aria-hidden","title","onChange","button","type","aria-label","back","onClick","data-autofocus","placeholder","currentTarget","onKeyDown","static","empty","filter"],"mappings":"AAAA;;AAEA,SACEA,eAAe,QAIV,gBAAgB;AACvB,SACEC,QAAQ,EACRC,aAAa,EACbC,cAAc,EACdC,eAAe,EACfC,MAAM,EACNC,WAAW,EACXC,WAAW,QACN,oBAAoB;AAG3B,SAASC,YAAY,QAAQ,gCAAgC;AAC7D,SAASC,EAAE,QAAQ,oBAAoB;AAyCvC,MAAMC,eAAe,CAACC,QACpBA,MAAMC,OAAO,CAACC,MAAM,KAAK,KACzB,CAACF,MAAMG,SAAS,IAChBH,MAAMI,WAAW,KAAKC;AAExB,SAASC,aAAa,EAAEC,KAAK,EAAqB;IAChD,OACE,2EAA2E;IAC3E,2EAA2E;IAC3E,kEAAkE;kBAClE,KAACC;QACCC,MAAK;QACLC,WAAU;kBAETH;;AAGP;AAEA,SAASI,WAAW,EAAEC,MAAM,EAA6B;IACvD,qBACE,MAACpB;QACCqB,OAAOD;QACPF,WAAWZ,GACT,uEACA,6BACA;;0BAGF,KAACgB;gBAAKJ,WAAU;0BAAYE,OAAOL,KAAK;;YACvCK,OAAOG,QAAQ,KAAKV,2BACnB,KAACS;gBAAKJ,WAAU;0BACbE,OAAOG,QAAQ;;YAGnBH,OAAOI,IAAI,KAAKX,2BACf,KAACS;gBAAKJ,WAAU;0BACbE,OAAOI,IAAI;;;;AAKtB;AAEA,SAASC,MAAM,EACbjB,KAAK,EACLkB,MAAM,EAIP;IACC,MAAMC,YACJnB,MAAMoB,KAAK,KAAKf,YAAY,IAAIL,MAAMoB,KAAK,GAAGpB,MAAMC,OAAO,CAACC,MAAM;IAEpE,qBACE,MAACM;QAAIa,eAAa,CAAC,cAAc,EAAErB,MAAMsB,GAAG,EAAE;;0BAC5C,KAAChB;gBAAaC,OAAOP,MAAMO,KAAK;;YAE/BP,MAAMG,SAAS,kBACd,MAACK;gBAAIC,MAAK;gBAAeC,WAAU;;kCAGjC,KAACI;wBAAKJ,WAAU;kCAAWQ,OAAOK,OAAO;;kCACzC,KAAC1B;wBAAa2B,OAAO;;;;YAIxBxB,MAAMC,OAAO,CAACwB,GAAG,CAACb,CAAAA,uBACjB,KAACD;oBAA2BC,QAAQA;mBAAnBA,OAAOc,EAAE;YAG3BP,YAAY,mBACX,KAACX;gBACCC,MAAK;gBACLC,WAAU;0BAETQ,OAAOS,IAAI,CAACR;;YAYhBnB,MAAMI,WAAW,KAAKC,2BACrB,KAACG;gBACCC,MAAK;gBACLY,eAAa,CAAC,oBAAoB,EAAErB,MAAMsB,GAAG,EAAE;gBAC/CZ,WAAWZ,GACT,8BACAE,MAAMI,WAAW,CAACwB,QAAQ,KAAK,iBAC3B,gBACA;0BAGL5B,MAAMI,WAAW,CAACyB,OAAO;;;;AAKpC;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BC,GACD,OAAO,SAASC,eAAe,EAC7BC,IAAI,EACJC,OAAO,EACPC,KAAK,EACLC,KAAK,EACLC,aAAa,EACbC,IAAI,EACJC,YAAY,EACZC,QAAQ,EACRpB,MAAM,EACc;QAGjBqB;IAFH,MAAMA,WAAWL,KAAK,CAACA,MAAMhC,MAAM,GAAG,EAAE;IACxC,MAAMsC,QACHD,OAAAA,aAAalC,YACV4B,KAAK,CAAC,EAAE,GACRA,MAAMQ,IAAI,CAACC,CAAAA,YAAaA,UAAUhB,EAAE,KAAKa,qBAF5CA,OAE0DN,KAAK,CAAC,EAAE;IAErE,MAAMU,SAASH,KAAKI,OAAO,CAACC,OAAO,CAACC,CAAAA,SAAUA,OAAOH,MAAM;IAC3D,2EAA2E;IAC3E,6EAA6E;IAC7E,0EAA0E;IAC1E,wCAAwC;IACxCA,OAAOI,OAAO,CAAC/C,CAAAA,QAASA,MAAMC,OAAO,CAAC8C,OAAO,CAAC1D;IAE9C,MAAM2D,UAAUL,OAAOM,KAAK,CAAClD;IAE7B,MAAMmD,MAAM;QACV,IAAIhB,MAAMhC,MAAM,KAAK,GAAG;YACtB8B;YACA;QACF;QACAG,cAAcD,MAAMiB,KAAK,CAAC,GAAG,CAAC;QAC9Bd,aAAa;IACf;IAEA,MAAMe,eAAe,CAACxC;QACpB,6EAA6E;QAC7E,yEAAyE;QACzE,8BAA8B;QAC9B,EAAE;QACF,wEAAwE;QACxE,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,6EAA6E;QAC7E,oBAAoB,GACpB,IAAIA,WAAW,MAAM;QACrB,IAAIA,OAAOyC,IAAI,KAAKhD,WAAW;YAC7B8B,cAAc;mBAAID;gBAAOtB,OAAOyC,IAAI;aAAC;YACrChB,aAAa;YACb;QACF;QACAC,SAAS1B;IACX;IAEA,MAAM0C,gBAAgB,CAACC;QACrB,sEAAsE;QACtE,0EAA0E;QAC1E,sEAAsE;QACtE,wEAAwE;QACxE,2DAA2D;QAC3D,IAAIA,MAAMjC,GAAG,KAAK,UAAU;YAC1BiC,MAAMC,cAAc;YACpBD,MAAME,eAAe;YACrBP;YACA;QACF;QACA,sEAAsE;QACtE,6DAA6D;QAC7D,IAAIK,MAAMjC,GAAG,KAAK,eAAec,SAAS,MAAMF,MAAMhC,MAAM,GAAG,GAAG;YAChEqD,MAAMC,cAAc;YACpBN;QACF;IACF;IAEA,qBACE,MAACxD;QACCqC,MAAMA;QACN,sEAAsE;QACtE,uEAAuE;QACvEC,SAASkB;QACTxC,WAAU;;0BAEV,KAACF;gBAAIkD,aAAW;gBAAChD,WAAU;;0BAC3B,MAACf;gBACC0B,eAAY;gBACZX,WAAU;;kCAEV,KAACd;wBAAYc,WAAU;kCAAWQ,OAAOyC,KAAK;;kCAQ9C,MAACrE;wBAAwBsE,UAAUR;;0CACjC,MAAC5C;gCAAIE,WAAU;;oCACZ8B,KAAKmB,KAAK,KAAKtD,2BACd,KAACwD;wCACCC,MAAK;wCACLC,cAAY7C,OAAO8C,IAAI;wCACvBC,SAASf;wCACTxC,WAAU;kDAET8B,KAAKmB,KAAK;;kDAGf,KAACpE;wCACC2E,gBAAc;wCACdH,cAAY7C,OAAOyC,KAAK;wCACxBQ,aAAa3B,KAAK2B,WAAW;wCAC7BtD,OAAOuB;wCACPwB,UAAUL,CAAAA,QAASlB,aAAakB,MAAMa,aAAa,CAACvD,KAAK;wCACzDwD,WAAWf;wCACX5C,WAAU;;;;0CAId,KAACjB;gCACC6E,MAAM;gCACN5D,WAAWZ,GACT,sCACA,iEAAiE;gCACjE,gCAAgC;gCAChC;0CAGDkD,wBACC,KAACxC;oCACCC,MAAK;oCACLC,WAAU;8CAETQ,OAAOqD,KAAK;qCAGf5B,OACG6B,MAAM,CAACxE,CAAAA,QAAS,CAACD,aAAaC,QAC9ByB,GAAG,CAACzB,CAAAA,sBACH,KAACiB;wCAAsBjB,OAAOA;wCAAOkB,QAAQA;uCAAjClB,MAAMsB,GAAG;;;;;;;;AAQvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/organisms/command-palette/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/organisms/command-palette/index.ts"],"sourcesContent":["export * from './command-palette.js';\n"],"names":[],"mappings":"AAAA,cAAc,uBAAuB"}
|