@endora-commerce/admin-kit 0.0.0-stage → 0.100.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 +212 -2
- package/dist/components/FileDropzone.d.ts +13 -0
- package/dist/components/FileDropzone.d.ts.map +1 -0
- package/dist/components/FileDropzone.js +39 -0
- package/dist/components/FileDropzone.js.map +1 -0
- package/dist/components/PaginationFooter.d.ts +25 -0
- package/dist/components/PaginationFooter.d.ts.map +1 -0
- package/dist/components/PaginationFooter.js +33 -0
- package/dist/components/PaginationFooter.js.map +1 -0
- package/dist/components/ResponsiveTable.d.ts +26 -0
- package/dist/components/ResponsiveTable.d.ts.map +1 -0
- package/dist/components/ResponsiveTable.js +34 -0
- package/dist/components/ResponsiveTable.js.map +1 -0
- package/dist/components/RowActionMenu.d.ts +40 -0
- package/dist/components/RowActionMenu.d.ts.map +1 -0
- package/dist/components/RowActionMenu.js +15 -0
- package/dist/components/RowActionMenu.js.map +1 -0
- package/dist/components/StickyFormActions.d.ts +10 -0
- package/dist/components/StickyFormActions.d.ts.map +1 -0
- package/dist/components/StickyFormActions.js +10 -0
- package/dist/components/StickyFormActions.js.map +1 -0
- package/dist/components/TouchReorderButtons.d.ts +13 -0
- package/dist/components/TouchReorderButtons.d.ts.map +1 -0
- package/dist/components/TouchReorderButtons.js +12 -0
- package/dist/components/TouchReorderButtons.js.map +1 -0
- package/dist/components/admin-user-picker/AdminUserPicker.d.ts +14 -0
- package/dist/components/admin-user-picker/AdminUserPicker.d.ts.map +1 -0
- package/dist/components/admin-user-picker/AdminUserPicker.js +68 -0
- package/dist/components/admin-user-picker/AdminUserPicker.js.map +1 -0
- package/dist/components/asset-picker/AssetFieldPicker.d.ts +32 -0
- package/dist/components/asset-picker/AssetFieldPicker.d.ts.map +1 -0
- package/dist/components/asset-picker/AssetFieldPicker.js +42 -0
- package/dist/components/asset-picker/AssetFieldPicker.js.map +1 -0
- package/dist/components/asset-picker/AssetPicker.d.ts +31 -0
- package/dist/components/asset-picker/AssetPicker.d.ts.map +1 -0
- package/dist/components/asset-picker/AssetPicker.js +68 -0
- package/dist/components/asset-picker/AssetPicker.js.map +1 -0
- package/dist/components/asset-picker/AssetUploader.d.ts +15 -0
- package/dist/components/asset-picker/AssetUploader.d.ts.map +1 -0
- package/dist/components/asset-picker/AssetUploader.js +61 -0
- package/dist/components/asset-picker/AssetUploader.js.map +1 -0
- package/dist/components/asset-picker/assets-api.d.ts +49 -0
- package/dist/components/asset-picker/assets-api.d.ts.map +1 -0
- package/dist/components/asset-picker/assets-api.js +67 -0
- package/dist/components/asset-picker/assets-api.js.map +1 -0
- package/dist/components/category-picker/CategorySelect.d.ts +14 -0
- package/dist/components/category-picker/CategorySelect.d.ts.map +1 -0
- package/dist/components/category-picker/CategorySelect.js +41 -0
- package/dist/components/category-picker/CategorySelect.js.map +1 -0
- package/dist/components/category-tree-picker/CategoryTreeNodeRow.d.ts +18 -0
- package/dist/components/category-tree-picker/CategoryTreeNodeRow.d.ts.map +1 -0
- package/dist/components/category-tree-picker/CategoryTreeNodeRow.js +19 -0
- package/dist/components/category-tree-picker/CategoryTreeNodeRow.js.map +1 -0
- package/dist/components/category-tree-picker/CategoryTreePicker.d.ts +23 -0
- package/dist/components/category-tree-picker/CategoryTreePicker.d.ts.map +1 -0
- package/dist/components/category-tree-picker/CategoryTreePicker.js +82 -0
- package/dist/components/category-tree-picker/CategoryTreePicker.js.map +1 -0
- package/dist/components/category-tree-picker/category-tree-utils.d.ts +35 -0
- package/dist/components/category-tree-picker/category-tree-utils.d.ts.map +1 -0
- package/dist/components/category-tree-picker/category-tree-utils.js +140 -0
- package/dist/components/category-tree-picker/category-tree-utils.js.map +1 -0
- package/dist/components/category-tree-picker/index.d.ts +4 -0
- package/dist/components/category-tree-picker/index.d.ts.map +1 -0
- package/dist/components/category-tree-picker/index.js +2 -0
- package/dist/components/category-tree-picker/index.js.map +1 -0
- package/dist/components/charts/echart.d.ts +17 -0
- package/dist/components/charts/echart.d.ts.map +1 -0
- package/dist/components/charts/echart.js +61 -0
- package/dist/components/charts/echart.js.map +1 -0
- package/dist/components/cms-picker/CmsBlockPicker.d.ts +14 -0
- package/dist/components/cms-picker/CmsBlockPicker.d.ts.map +1 -0
- package/dist/components/cms-picker/CmsBlockPicker.js +40 -0
- package/dist/components/cms-picker/CmsBlockPicker.js.map +1 -0
- package/dist/components/cms-picker/CmsPagePicker.d.ts +15 -0
- package/dist/components/cms-picker/CmsPagePicker.d.ts.map +1 -0
- package/dist/components/cms-picker/CmsPagePicker.js +80 -0
- package/dist/components/cms-picker/CmsPagePicker.js.map +1 -0
- package/dist/components/content-language-tabs/ContentLanguageTabs.d.ts +30 -0
- package/dist/components/content-language-tabs/ContentLanguageTabs.d.ts.map +1 -0
- package/dist/components/content-language-tabs/ContentLanguageTabs.js +14 -0
- package/dist/components/content-language-tabs/ContentLanguageTabs.js.map +1 -0
- package/dist/components/country-select/CountrySelect.d.ts +29 -0
- package/dist/components/country-select/CountrySelect.d.ts.map +1 -0
- package/dist/components/country-select/CountrySelect.js +40 -0
- package/dist/components/country-select/CountrySelect.js.map +1 -0
- package/dist/components/country-select/index.d.ts +3 -0
- package/dist/components/country-select/index.d.ts.map +1 -0
- package/dist/components/country-select/index.js +3 -0
- package/dist/components/country-select/index.js.map +1 -0
- package/dist/components/country-select/useCountriesQuery.d.ts +12 -0
- package/dist/components/country-select/useCountriesQuery.d.ts.map +1 -0
- package/dist/components/country-select/useCountriesQuery.js +69 -0
- package/dist/components/country-select/useCountriesQuery.js.map +1 -0
- package/dist/components/custom-field-values/CustomFieldValuesPanel.d.ts +48 -0
- package/dist/components/custom-field-values/CustomFieldValuesPanel.d.ts.map +1 -0
- package/dist/components/custom-field-values/CustomFieldValuesPanel.js +122 -0
- package/dist/components/custom-field-values/CustomFieldValuesPanel.js.map +1 -0
- package/dist/components/customer-group-picker/CustomerGroupPicker.d.ts +14 -0
- package/dist/components/customer-group-picker/CustomerGroupPicker.d.ts.map +1 -0
- package/dist/components/customer-group-picker/CustomerGroupPicker.js +36 -0
- package/dist/components/customer-group-picker/CustomerGroupPicker.js.map +1 -0
- package/dist/components/customer-picker/CustomerPicker.d.ts +18 -0
- package/dist/components/customer-picker/CustomerPicker.d.ts.map +1 -0
- package/dist/components/customer-picker/CustomerPicker.js +85 -0
- package/dist/components/customer-picker/CustomerPicker.js.map +1 -0
- package/dist/components/dictionary-picker/CountryPicker.d.ts +26 -0
- package/dist/components/dictionary-picker/CountryPicker.d.ts.map +1 -0
- package/dist/components/dictionary-picker/CountryPicker.js +29 -0
- package/dist/components/dictionary-picker/CountryPicker.js.map +1 -0
- package/dist/components/dictionary-picker/CurrencyPicker.d.ts +17 -0
- package/dist/components/dictionary-picker/CurrencyPicker.d.ts.map +1 -0
- package/dist/components/dictionary-picker/CurrencyPicker.js +29 -0
- package/dist/components/dictionary-picker/CurrencyPicker.js.map +1 -0
- package/dist/components/dictionary-picker/dictionary-api.d.ts +21 -0
- package/dist/components/dictionary-picker/dictionary-api.d.ts.map +1 -0
- package/dist/components/dictionary-picker/dictionary-api.js +26 -0
- package/dist/components/dictionary-picker/dictionary-api.js.map +1 -0
- package/dist/components/dictionary-picker/index.d.ts +4 -0
- package/dist/components/dictionary-picker/index.d.ts.map +1 -0
- package/dist/components/dictionary-picker/index.js +4 -0
- package/dist/components/dictionary-picker/index.js.map +1 -0
- package/dist/components/fulfilment-strategy-picker/FulfilmentStrategyPicker.d.ts +49 -0
- package/dist/components/fulfilment-strategy-picker/FulfilmentStrategyPicker.d.ts.map +1 -0
- package/dist/components/fulfilment-strategy-picker/FulfilmentStrategyPicker.js +43 -0
- package/dist/components/fulfilment-strategy-picker/FulfilmentStrategyPicker.js.map +1 -0
- package/dist/components/hooks/useFocusTrap.d.ts +6 -0
- package/dist/components/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/components/hooks/useFocusTrap.js +41 -0
- package/dist/components/hooks/useFocusTrap.js.map +1 -0
- package/dist/components/hooks/useViewportTier.d.ts +7 -0
- package/dist/components/hooks/useViewportTier.d.ts.map +1 -0
- package/dist/components/hooks/useViewportTier.js +23 -0
- package/dist/components/hooks/useViewportTier.js.map +1 -0
- package/dist/components/index.d.ts +101 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +63 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/organization-picker/OrganizationPicker.d.ts +28 -0
- package/dist/components/organization-picker/OrganizationPicker.d.ts.map +1 -0
- package/dist/components/organization-picker/OrganizationPicker.js +35 -0
- package/dist/components/organization-picker/OrganizationPicker.js.map +1 -0
- package/dist/components/organization-picker/OrganizationPickerMulti.d.ts +32 -0
- package/dist/components/organization-picker/OrganizationPickerMulti.d.ts.map +1 -0
- package/dist/components/organization-picker/OrganizationPickerMulti.js +55 -0
- package/dist/components/organization-picker/OrganizationPickerMulti.js.map +1 -0
- package/dist/components/organization-picker/OrganizationStatusBadge.d.ts +7 -0
- package/dist/components/organization-picker/OrganizationStatusBadge.d.ts.map +1 -0
- package/dist/components/organization-picker/OrganizationStatusBadge.js +33 -0
- package/dist/components/organization-picker/OrganizationStatusBadge.js.map +1 -0
- package/dist/components/organization-picker/useOrganizationsQuery.d.ts +33 -0
- package/dist/components/organization-picker/useOrganizationsQuery.d.ts.map +1 -0
- package/dist/components/organization-picker/useOrganizationsQuery.js +92 -0
- package/dist/components/organization-picker/useOrganizationsQuery.js.map +1 -0
- package/dist/components/payment-method-availability/MethodAvailabilityCell.d.ts +38 -0
- package/dist/components/payment-method-availability/MethodAvailabilityCell.d.ts.map +1 -0
- package/dist/components/payment-method-availability/MethodAvailabilityCell.js +50 -0
- package/dist/components/payment-method-availability/MethodAvailabilityCell.js.map +1 -0
- package/dist/components/product-picker/ProductPicker.d.ts +22 -0
- package/dist/components/product-picker/ProductPicker.d.ts.map +1 -0
- package/dist/components/product-picker/ProductPicker.js +143 -0
- package/dist/components/product-picker/ProductPicker.js.map +1 -0
- package/dist/components/reorder/ReorderAnnouncer.d.ts +29 -0
- package/dist/components/reorder/ReorderAnnouncer.d.ts.map +1 -0
- package/dist/components/reorder/ReorderAnnouncer.js +6 -0
- package/dist/components/reorder/ReorderAnnouncer.js.map +1 -0
- package/dist/components/reorder/useReorderList.d.ts +121 -0
- package/dist/components/reorder/useReorderList.d.ts.map +1 -0
- package/dist/components/reorder/useReorderList.js +241 -0
- package/dist/components/reorder/useReorderList.js.map +1 -0
- package/dist/components/rule-builder/RuleBuilder.d.ts +105 -0
- package/dist/components/rule-builder/RuleBuilder.d.ts.map +1 -0
- package/dist/components/rule-builder/RuleBuilder.js +138 -0
- package/dist/components/rule-builder/RuleBuilder.js.map +1 -0
- package/dist/components/sales-channel-picker/SalesChannelPicker.d.ts +15 -0
- package/dist/components/sales-channel-picker/SalesChannelPicker.d.ts.map +1 -0
- package/dist/components/sales-channel-picker/SalesChannelPicker.js +79 -0
- package/dist/components/sales-channel-picker/SalesChannelPicker.js.map +1 -0
- package/dist/components/scope-notice/ScopeNotice.d.ts +33 -0
- package/dist/components/scope-notice/ScopeNotice.d.ts.map +1 -0
- package/dist/components/scope-notice/ScopeNotice.js +11 -0
- package/dist/components/scope-notice/ScopeNotice.js.map +1 -0
- package/dist/components/scope-picker/ScopePicker.d.ts +28 -0
- package/dist/components/scope-picker/ScopePicker.d.ts.map +1 -0
- package/dist/components/scope-picker/ScopePicker.js +114 -0
- package/dist/components/scope-picker/ScopePicker.js.map +1 -0
- package/dist/components/scope-picker/sales-channels-api.d.ts +19 -0
- package/dist/components/scope-picker/sales-channels-api.d.ts.map +1 -0
- package/dist/components/scope-picker/sales-channels-api.js +30 -0
- package/dist/components/scope-picker/sales-channels-api.js.map +1 -0
- package/dist/components/status-transition-graph/StatusTransitionGraph.d.ts +26 -0
- package/dist/components/status-transition-graph/StatusTransitionGraph.d.ts.map +1 -0
- package/dist/components/status-transition-graph/StatusTransitionGraph.js +241 -0
- package/dist/components/status-transition-graph/StatusTransitionGraph.js.map +1 -0
- package/dist/components/status-transition-graph/index.d.ts +3 -0
- package/dist/components/status-transition-graph/index.d.ts.map +1 -0
- package/dist/components/status-transition-graph/index.js +2 -0
- package/dist/components/status-transition-graph/index.js.map +1 -0
- package/dist/contributions/index.d.ts +44 -0
- package/dist/contributions/index.d.ts.map +1 -0
- package/dist/contributions/index.js +42 -0
- package/dist/contributions/index.js.map +1 -0
- package/dist/contributions/zone-component.d.ts +70 -0
- package/dist/contributions/zone-component.d.ts.map +1 -0
- package/dist/contributions/zone-component.js +26 -0
- package/dist/contributions/zone-component.js.map +1 -0
- package/dist/field-protection/FieldProtectionPricePanel.d.ts +26 -0
- package/dist/field-protection/FieldProtectionPricePanel.d.ts.map +1 -0
- package/dist/field-protection/FieldProtectionPricePanel.js +14 -0
- package/dist/field-protection/FieldProtectionPricePanel.js.map +1 -0
- package/dist/field-protection/FieldProtectionSummary.d.ts +18 -0
- package/dist/field-protection/FieldProtectionSummary.d.ts.map +1 -0
- package/dist/field-protection/FieldProtectionSummary.js +18 -0
- package/dist/field-protection/FieldProtectionSummary.js.map +1 -0
- package/dist/field-protection/FieldProtectionToggle.d.ts +36 -0
- package/dist/field-protection/FieldProtectionToggle.d.ts.map +1 -0
- package/dist/field-protection/FieldProtectionToggle.js +30 -0
- package/dist/field-protection/FieldProtectionToggle.js.map +1 -0
- package/dist/field-protection/describe-path.d.ts +27 -0
- package/dist/field-protection/describe-path.d.ts.map +1 -0
- package/dist/field-protection/describe-path.js +28 -0
- package/dist/field-protection/describe-path.js.map +1 -0
- package/dist/field-protection/index.d.ts +46 -0
- package/dist/field-protection/index.d.ts.map +1 -0
- package/dist/field-protection/index.js +41 -0
- package/dist/field-protection/index.js.map +1 -0
- package/dist/field-protection/types.d.ts +93 -0
- package/dist/field-protection/types.d.ts.map +1 -0
- package/dist/field-protection/types.js +2 -0
- package/dist/field-protection/types.js.map +1 -0
- package/dist/field-protection/use-field-protection.d.ts +27 -0
- package/dist/field-protection/use-field-protection.d.ts.map +1 -0
- package/dist/field-protection/use-field-protection.js +149 -0
- package/dist/field-protection/use-field-protection.js.map +1 -0
- package/dist/i18n/TranslationProvider.d.ts +27 -0
- package/dist/i18n/TranslationProvider.d.ts.map +1 -0
- package/dist/i18n/TranslationProvider.js +130 -0
- package/dist/i18n/TranslationProvider.js.map +1 -0
- package/dist/i18n/app-language-context.d.ts +8 -0
- package/dist/i18n/app-language-context.d.ts.map +1 -0
- package/dist/i18n/app-language-context.js +13 -0
- package/dist/i18n/app-language-context.js.map +1 -0
- package/dist/i18n/index.d.ts +29 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +25 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/interpolate.d.ts +2 -0
- package/dist/i18n/interpolate.d.ts.map +1 -0
- package/dist/i18n/interpolate.js +10 -0
- package/dist/i18n/interpolate.js.map +1 -0
- package/dist/i18n/language-storage.d.ts +16 -0
- package/dist/i18n/language-storage.d.ts.map +1 -0
- package/dist/i18n/language-storage.js +26 -0
- package/dist/i18n/language-storage.js.map +1 -0
- package/dist/i18n/resolver.d.ts +19 -0
- package/dist/i18n/resolver.d.ts.map +1 -0
- package/dist/i18n/resolver.js +23 -0
- package/dist/i18n/resolver.js.map +1 -0
- package/dist/i18n/types.d.ts +12 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +7 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/useTranslation.d.ts +2 -0
- package/dist/i18n/useTranslation.d.ts.map +1 -0
- package/dist/i18n/useTranslation.js +16 -0
- package/dist/i18n/useTranslation.js.map +1 -0
- package/dist/lib/admin-actions/icon-map.d.ts +3 -0
- package/dist/lib/admin-actions/icon-map.d.ts.map +1 -0
- package/dist/lib/admin-actions/icon-map.js +115 -0
- package/dist/lib/admin-actions/icon-map.js.map +1 -0
- package/dist/lib/api-client.d.ts +55 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +89 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/asset-url.d.ts +32 -0
- package/dist/lib/asset-url.d.ts.map +1 -0
- package/dist/lib/asset-url.js +42 -0
- package/dist/lib/asset-url.js.map +1 -0
- package/dist/lib/auth.d.ts +92 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +133 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/format.d.ts +2 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +9 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/index.d.ts +46 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +41 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/invoice-email-outcome.d.ts +53 -0
- package/dist/lib/invoice-email-outcome.d.ts.map +1 -0
- package/dist/lib/invoice-email-outcome.js +43 -0
- package/dist/lib/invoice-email-outcome.js.map +1 -0
- package/dist/lib/module-presence/ModulePresenceProvider.d.ts +49 -0
- package/dist/lib/module-presence/ModulePresenceProvider.d.ts.map +1 -0
- package/dist/lib/module-presence/ModulePresenceProvider.js +73 -0
- package/dist/lib/module-presence/ModulePresenceProvider.js.map +1 -0
- package/dist/lib/module-presence/api.d.ts +15 -0
- package/dist/lib/module-presence/api.d.ts.map +1 -0
- package/dist/lib/module-presence/api.js +25 -0
- package/dist/lib/module-presence/api.js.map +1 -0
- package/dist/lib/module-presence/index.d.ts +3 -0
- package/dist/lib/module-presence/index.d.ts.map +1 -0
- package/dist/lib/module-presence/index.js +3 -0
- package/dist/lib/module-presence/index.js.map +1 -0
- package/dist/lib/money.d.ts +22 -0
- package/dist/lib/money.d.ts.map +1 -0
- package/dist/lib/money.js +51 -0
- package/dist/lib/money.js.map +1 -0
- package/dist/lib/page-size-options.d.ts +15 -0
- package/dist/lib/page-size-options.d.ts.map +1 -0
- package/dist/lib/page-size-options.js +14 -0
- package/dist/lib/page-size-options.js.map +1 -0
- package/dist/lib/status-color.d.ts +32 -0
- package/dist/lib/status-color.d.ts.map +1 -0
- package/dist/lib/status-color.js +24 -0
- package/dist/lib/status-color.js.map +1 -0
- package/dist/lib/surface-visibility.d.ts +70 -0
- package/dist/lib/surface-visibility.d.ts.map +1 -0
- package/dist/lib/surface-visibility.js +37 -0
- package/dist/lib/surface-visibility.js.map +1 -0
- package/dist/lib/text-normalization.d.ts +56 -0
- package/dist/lib/text-normalization.d.ts.map +1 -0
- package/dist/lib/text-normalization.js +59 -0
- package/dist/lib/text-normalization.js.map +1 -0
- package/dist/lib/use-page-size-preference.d.ts +29 -0
- package/dist/lib/use-page-size-preference.d.ts.map +1 -0
- package/dist/lib/use-page-size-preference.js +61 -0
- package/dist/lib/use-page-size-preference.js.map +1 -0
- package/dist/lib/use-unsaved-changes-prompt.d.ts +23 -0
- package/dist/lib/use-unsaved-changes-prompt.d.ts.map +1 -0
- package/dist/lib/use-unsaved-changes-prompt.js +75 -0
- package/dist/lib/use-unsaved-changes-prompt.js.map +1 -0
- package/dist/lib/utils.d.ts +9 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +12 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/uuid.d.ts +8 -0
- package/dist/lib/uuid.d.ts.map +1 -0
- package/dist/lib/uuid.js +18 -0
- package/dist/lib/uuid.js.map +1 -0
- package/dist/ui/alert.d.ts +12 -0
- package/dist/ui/alert.d.ts.map +1 -0
- package/dist/ui/alert.js +22 -0
- package/dist/ui/alert.js.map +1 -0
- package/dist/ui/badge.d.ts +10 -0
- package/dist/ui/badge.d.ts.map +1 -0
- package/dist/ui/badge.js +21 -0
- package/dist/ui/badge.js.map +1 -0
- package/dist/ui/button.d.ts +12 -0
- package/dist/ui/button.d.ts.map +1 -0
- package/dist/ui/button.js +31 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/card.d.ts +8 -0
- package/dist/ui/card.d.ts.map +1 -0
- package/dist/ui/card.js +16 -0
- package/dist/ui/card.js.map +1 -0
- package/dist/ui/checkbox.d.ts +8 -0
- package/dist/ui/checkbox.d.ts.map +1 -0
- package/dist/ui/checkbox.js +11 -0
- package/dist/ui/checkbox.js.map +1 -0
- package/dist/ui/color-picker.d.ts +23 -0
- package/dist/ui/color-picker.d.ts.map +1 -0
- package/dist/ui/color-picker.js +76 -0
- package/dist/ui/color-picker.js.map +1 -0
- package/dist/ui/combobox.d.ts +68 -0
- package/dist/ui/combobox.d.ts.map +1 -0
- package/dist/ui/combobox.js +182 -0
- package/dist/ui/combobox.js.map +1 -0
- package/dist/ui/dropdown-menu.d.ts +26 -0
- package/dist/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/ui/dropdown-menu.js +38 -0
- package/dist/ui/dropdown-menu.js.map +1 -0
- package/dist/ui/index.d.ts +47 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +38 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/input.d.ts +3 -0
- package/dist/ui/input.d.ts.map +1 -0
- package/dist/ui/input.js +8 -0
- package/dist/ui/input.js.map +1 -0
- package/dist/ui/label.d.ts +4 -0
- package/dist/ui/label.d.ts.map +1 -0
- package/dist/ui/label.js +9 -0
- package/dist/ui/label.js.map +1 -0
- package/dist/ui/multi-select.d.ts +32 -0
- package/dist/ui/multi-select.d.ts.map +1 -0
- package/dist/ui/multi-select.js +63 -0
- package/dist/ui/multi-select.js.map +1 -0
- package/dist/ui/page-header.d.ts +21 -0
- package/dist/ui/page-header.d.ts.map +1 -0
- package/dist/ui/page-header.js +9 -0
- package/dist/ui/page-header.js.map +1 -0
- package/dist/ui/route-tabs.d.ts +58 -0
- package/dist/ui/route-tabs.d.ts.map +1 -0
- package/dist/ui/route-tabs.js +34 -0
- package/dist/ui/route-tabs.js.map +1 -0
- package/dist/ui/save-button-group.d.ts +27 -0
- package/dist/ui/save-button-group.d.ts.map +1 -0
- package/dist/ui/save-button-group.js +44 -0
- package/dist/ui/save-button-group.js.map +1 -0
- package/dist/ui/section.d.ts +20 -0
- package/dist/ui/section.d.ts.map +1 -0
- package/dist/ui/section.js +7 -0
- package/dist/ui/section.js.map +1 -0
- package/dist/ui/select.d.ts +10 -0
- package/dist/ui/select.d.ts.map +1 -0
- package/dist/ui/select.js +15 -0
- package/dist/ui/select.js.map +1 -0
- package/dist/ui/separator.d.ts +3 -0
- package/dist/ui/separator.d.ts.map +1 -0
- package/dist/ui/separator.js +7 -0
- package/dist/ui/separator.js.map +1 -0
- package/dist/ui/table.d.ts +10 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +20 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/textarea.d.ts +3 -0
- package/dist/ui/textarea.d.ts.map +1 -0
- package/dist/ui/textarea.js +8 -0
- package/dist/ui/textarea.js.map +1 -0
- package/dist/zones/AdminContributionsProvider.d.ts +72 -0
- package/dist/zones/AdminContributionsProvider.d.ts.map +1 -0
- package/dist/zones/AdminContributionsProvider.js +63 -0
- package/dist/zones/AdminContributionsProvider.js.map +1 -0
- package/dist/zones/AdminZone.d.ts +30 -0
- package/dist/zones/AdminZone.d.ts.map +1 -0
- package/dist/zones/AdminZone.js +59 -0
- package/dist/zones/AdminZone.js.map +1 -0
- package/dist/zones/RouteTabsZone.d.ts +62 -0
- package/dist/zones/RouteTabsZone.d.ts.map +1 -0
- package/dist/zones/RouteTabsZone.js +25 -0
- package/dist/zones/RouteTabsZone.js.map +1 -0
- package/dist/zones/ZoneErrorBoundary.d.ts +36 -0
- package/dist/zones/ZoneErrorBoundary.d.ts.map +1 -0
- package/dist/zones/ZoneErrorBoundary.js +44 -0
- package/dist/zones/ZoneErrorBoundary.js.map +1 -0
- package/dist/zones/index.d.ts +31 -0
- package/dist/zones/index.d.ts.map +1 -0
- package/dist/zones/index.js +27 -0
- package/dist/zones/index.js.map +1 -0
- package/dist/zones/use-admin-zone.d.ts +32 -0
- package/dist/zones/use-admin-zone.d.ts.map +1 -0
- package/dist/zones/use-admin-zone.js +96 -0
- package/dist/zones/use-admin-zone.js.map +1 -0
- package/package.json +94 -3
- package/tailwind.css +14 -0
- package/theme.css +2056 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { ChevronDown } from 'lucide-react';
|
|
4
|
+
import { cn } from '../lib/utils.js';
|
|
5
|
+
const HEX = /^#[0-9a-fA-F]{6}$/;
|
|
6
|
+
/** A small, neutral default palette used when no `presets` are supplied. */
|
|
7
|
+
export const DEFAULT_COLOR_PRESETS = [
|
|
8
|
+
'#1d4ed8', '#2563eb', '#0ea5e9', '#0d9488', '#16a34a', '#65a30d',
|
|
9
|
+
'#ca8a04', '#ea580c', '#dc2626', '#db2777', '#9333ea', '#475569',
|
|
10
|
+
'#111827', '#6b7280', '#fafafa', '#ffffff',
|
|
11
|
+
];
|
|
12
|
+
/** Black or white text for a given background hex, chosen by perceived luminance. */
|
|
13
|
+
function readableTextColor(hex) {
|
|
14
|
+
const value = HEX.test(hex) ? hex.slice(1) : 'ffffff';
|
|
15
|
+
const int = Number.parseInt(value, 16);
|
|
16
|
+
const r = (int >> 16) & 0xff;
|
|
17
|
+
const g = (int >> 8) & 0xff;
|
|
18
|
+
const b = int & 0xff;
|
|
19
|
+
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
20
|
+
return luminance > 0.6 ? '#1f2937' : '#ffffff';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Core colour picker — a swatch trigger that opens a small popover with a
|
|
24
|
+
* curated preset palette plus a native colour input + hex field for any custom
|
|
25
|
+
* colour. Dependency-free (no popover lib): closes on outside click / Escape,
|
|
26
|
+
* mirroring the Combobox pattern. Fully controlled.
|
|
27
|
+
*
|
|
28
|
+
* Reused across the admin (order-status colours, PWA theme/background colours).
|
|
29
|
+
*/
|
|
30
|
+
export function ColorPicker(props) {
|
|
31
|
+
const presets = props.presets ?? DEFAULT_COLOR_PRESETS;
|
|
32
|
+
const [open, setOpen] = useState(false);
|
|
33
|
+
const [draft, setDraft] = useState(props.value);
|
|
34
|
+
const ref = useRef(null);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
setDraft(props.value);
|
|
37
|
+
}, [props.value]);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (!open)
|
|
40
|
+
return undefined;
|
|
41
|
+
const onDocClick = (e) => {
|
|
42
|
+
if (ref.current && !ref.current.contains(e.target))
|
|
43
|
+
setOpen(false);
|
|
44
|
+
};
|
|
45
|
+
const onKey = (e) => {
|
|
46
|
+
if (e.key === 'Escape')
|
|
47
|
+
setOpen(false);
|
|
48
|
+
};
|
|
49
|
+
document.addEventListener('mousedown', onDocClick);
|
|
50
|
+
document.addEventListener('keydown', onKey);
|
|
51
|
+
return () => {
|
|
52
|
+
document.removeEventListener('mousedown', onDocClick);
|
|
53
|
+
document.removeEventListener('keydown', onKey);
|
|
54
|
+
};
|
|
55
|
+
}, [open]);
|
|
56
|
+
const commit = (hex) => {
|
|
57
|
+
props.onChange(hex);
|
|
58
|
+
};
|
|
59
|
+
const onHexInput = (raw) => {
|
|
60
|
+
const next = raw.startsWith('#') ? raw : `#${raw}`;
|
|
61
|
+
setDraft(next);
|
|
62
|
+
if (HEX.test(next))
|
|
63
|
+
commit(next);
|
|
64
|
+
};
|
|
65
|
+
return (_jsxs("div", { ref: ref, className: "relative inline-block", children: [_jsxs("button", { type: "button", "aria-label": props.label, "aria-expanded": open, disabled: props.disabled, onClick: () => setOpen((o) => !o), className: "flex h-9 items-center gap-2 rounded-md border bg-card px-2 text-sm disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx("span", { className: "size-5 rounded-full border border-black/10", style: { backgroundColor: props.value } }), _jsx("span", { className: "font-mono text-xs uppercase", children: props.value }), _jsx(ChevronDown, { className: "size-3.5 opacity-60" })] }), open ? (_jsxs("div", { className: "absolute left-0 z-50 mt-1 w-56 rounded-md border bg-card p-3 shadow-md", children: [presets.length > 0 ? (_jsx("div", { className: "grid grid-cols-6 gap-2", children: presets.map((c) => {
|
|
66
|
+
const selected = props.value.toLowerCase() === c.toLowerCase();
|
|
67
|
+
return (_jsx("button", { type: "button", "aria-label": c, "aria-pressed": selected, title: c, onClick: () => {
|
|
68
|
+
commit(c);
|
|
69
|
+
setOpen(false);
|
|
70
|
+
}, className: cn('flex size-7 items-center justify-center rounded-full border border-black/10 ring-ring ring-offset-1 ring-offset-card transition', selected && 'ring-2'), style: { backgroundColor: c }, children: selected ? (_jsx("span", { className: "text-xs", style: { color: readableTextColor(c) }, children: "\u2713" })) : null }, c));
|
|
71
|
+
}) })) : null, _jsxs("div", { className: cn('flex items-center gap-2', presets.length > 0 && 'mt-3 border-t pt-3'), children: [_jsx("input", { type: "color", "aria-label": props.customLabel, value: HEX.test(draft) ? draft : props.value, onChange: (e) => {
|
|
72
|
+
setDraft(e.target.value);
|
|
73
|
+
commit(e.target.value);
|
|
74
|
+
}, className: "h-8 w-9 cursor-pointer rounded border bg-transparent p-0.5" }), _jsx("input", { type: "text", value: draft, onChange: (e) => onHexInput(e.target.value), placeholder: "#1d4ed8", className: "h-8 w-full rounded-md border px-2 font-mono text-xs uppercase" })] })] })) : null] }));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=color-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-picker.js","sourceRoot":"","sources":["../../src/ui/color-picker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Generic searchable dropdown. The input narrows the visible options as
|
|
4
|
+
* the user types; the cleared input shows the full list. Selecting an
|
|
5
|
+
* option commits a value through `onChange`, the clear button resets it.
|
|
6
|
+
*
|
|
7
|
+
* Diacritic-insensitive matching is `lib/text-normalization.ts`, the same
|
|
8
|
+
* fold the ⌘K palette and the page-builder drawer use — **imported, never
|
|
9
|
+
* re-implemented**. This file used to carry its own three-line copy, and it
|
|
10
|
+
* omitted the stroked-letter map, so `platnosci` did not find
|
|
11
|
+
* `Metody płatności` in any picker in the admin (issue #236).
|
|
12
|
+
*
|
|
13
|
+
* Build is dependency-free (no Radix popover) so it composes anywhere
|
|
14
|
+
* the rest of the shadcn-style components do.
|
|
15
|
+
*/
|
|
16
|
+
export interface ComboboxOption<T = string> {
|
|
17
|
+
value: T;
|
|
18
|
+
label: string;
|
|
19
|
+
description?: string | undefined;
|
|
20
|
+
disabled?: boolean | undefined;
|
|
21
|
+
}
|
|
22
|
+
export interface ComboboxProps<T = string> {
|
|
23
|
+
options: ComboboxOption<T>[];
|
|
24
|
+
value: T | null;
|
|
25
|
+
onChange: (value: T | null) => void;
|
|
26
|
+
placeholder?: string;
|
|
27
|
+
emptyMessage?: string;
|
|
28
|
+
loadingMessage?: string;
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
loading?: boolean;
|
|
31
|
+
clearable?: boolean;
|
|
32
|
+
id?: string;
|
|
33
|
+
name?: string;
|
|
34
|
+
className?: string;
|
|
35
|
+
ariaLabel?: string;
|
|
36
|
+
filter?: (option: ComboboxOption<T>, normalizedQuery: string) => boolean;
|
|
37
|
+
renderOption?: (option: ComboboxOption<T>, state: {
|
|
38
|
+
selected: boolean;
|
|
39
|
+
active: boolean;
|
|
40
|
+
}) => ReactNode;
|
|
41
|
+
/**
|
|
42
|
+
* Fires whenever the user edits the search input (raw, undebounced).
|
|
43
|
+
* Parents that own server-side search wire their debounced fetch here.
|
|
44
|
+
*/
|
|
45
|
+
onSearchChange?: (query: string) => void;
|
|
46
|
+
/**
|
|
47
|
+
* When true, the internal `defaultFilter` is bypassed and `options` are
|
|
48
|
+
* rendered as-is. Use together with `onSearchChange` for server-side
|
|
49
|
+
* pickers — the parent is the source of truth for which options match.
|
|
50
|
+
*/
|
|
51
|
+
manualFilter?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Optional label used to render the selected option's text in the input
|
|
54
|
+
* when the parent's `options` no longer contain it (common with paginated
|
|
55
|
+
* server-side search — once a value is committed and the dropdown closes,
|
|
56
|
+
* the matching option may scroll out of the current page). Falls back to
|
|
57
|
+
* the matching option's `label`, then to the empty string.
|
|
58
|
+
*/
|
|
59
|
+
selectedLabel?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generic-friendly forwardRef wrapper. The cast preserves the `<T>` parameter
|
|
63
|
+
* through `forwardRef`, which otherwise erases generics on the inner component.
|
|
64
|
+
*/
|
|
65
|
+
export declare const Combobox: <T = string>(props: ComboboxProps<T> & {
|
|
66
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
67
|
+
}) => ReactNode;
|
|
68
|
+
//# sourceMappingURL=combobox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/ui/combobox.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,MAAM;IACxC,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM;IACvC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC;IACzE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,SAAS,CAAC;IACvG;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiTD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAgC,CAAC,CAAC,GAAG,MAAM,EAC9D,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAAE,KAC5D,SAAS,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState, } from 'react';
|
|
3
|
+
import { Check, ChevronDown, Loader2, X } from 'lucide-react';
|
|
4
|
+
import { cn } from '../lib/utils.js';
|
|
5
|
+
import { useTranslation } from '../i18n/useTranslation.js';
|
|
6
|
+
import { normalize } from '../lib/text-normalization.js';
|
|
7
|
+
function defaultFilter(option, normalizedQuery) {
|
|
8
|
+
if (normalizedQuery === '')
|
|
9
|
+
return true;
|
|
10
|
+
const haystack = `${normalize(option.label)} ${normalize(option.description ?? '')}`;
|
|
11
|
+
return haystack.includes(normalizedQuery);
|
|
12
|
+
}
|
|
13
|
+
function sameValue(a, b) {
|
|
14
|
+
return a === b;
|
|
15
|
+
}
|
|
16
|
+
function ComboboxInner({ options, value, onChange, placeholder, emptyMessage = 'No results.', loadingMessage = 'Loading…', disabled = false, loading = false, clearable = true, id, name, className, ariaLabel, filter, renderOption, onSearchChange, manualFilter = false, selectedLabel, }, ref) {
|
|
17
|
+
const reactId = useId();
|
|
18
|
+
const inputId = id ?? `combobox-${reactId}`;
|
|
19
|
+
const listboxId = `${inputId}-listbox`;
|
|
20
|
+
const t = useTranslation('core');
|
|
21
|
+
const selectedOption = useMemo(() => options.find((opt) => sameValue(opt.value, value)) ?? null, [options, value]);
|
|
22
|
+
const [open, setOpen] = useState(false);
|
|
23
|
+
const [query, setQuery] = useState('');
|
|
24
|
+
const [activeIndex, setActiveIndex] = useState(0);
|
|
25
|
+
const containerRef = useRef(null);
|
|
26
|
+
const inputRef = useRef(null);
|
|
27
|
+
const listboxRef = useRef(null);
|
|
28
|
+
const setRefs = useCallback((node) => {
|
|
29
|
+
inputRef.current = node;
|
|
30
|
+
if (typeof ref === 'function')
|
|
31
|
+
ref(node);
|
|
32
|
+
else if (ref)
|
|
33
|
+
ref.current = node;
|
|
34
|
+
}, [ref]);
|
|
35
|
+
// When the input is closed, keep its display text in sync with the selected option.
|
|
36
|
+
// For server-side mode the matching option may not be in `options` anymore
|
|
37
|
+
// (paginated away), so fall back to the parent-provided `selectedLabel`.
|
|
38
|
+
const closedDisplay = selectedOption?.label ?? selectedLabel ?? '';
|
|
39
|
+
const displayValue = open ? query : closedDisplay;
|
|
40
|
+
const filtered = useMemo(() => {
|
|
41
|
+
if (manualFilter)
|
|
42
|
+
return options;
|
|
43
|
+
const normalizedQuery = normalize(query);
|
|
44
|
+
const filterFn = filter ?? defaultFilter;
|
|
45
|
+
return options.filter((opt) => filterFn(opt, normalizedQuery));
|
|
46
|
+
}, [options, query, filter, manualFilter]);
|
|
47
|
+
// Reset the highlighted row whenever the visible list changes.
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (!open)
|
|
50
|
+
return;
|
|
51
|
+
const selectedIdx = filtered.findIndex((opt) => sameValue(opt.value, value));
|
|
52
|
+
setActiveIndex(selectedIdx >= 0 ? selectedIdx : 0);
|
|
53
|
+
}, [open, filtered, value]);
|
|
54
|
+
// Close on outside pointer interactions.
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (!open)
|
|
57
|
+
return;
|
|
58
|
+
const handler = (e) => {
|
|
59
|
+
const target = e.target;
|
|
60
|
+
if (!containerRef.current || !target)
|
|
61
|
+
return;
|
|
62
|
+
if (containerRef.current.contains(target))
|
|
63
|
+
return;
|
|
64
|
+
setOpen(false);
|
|
65
|
+
setQuery('');
|
|
66
|
+
};
|
|
67
|
+
document.addEventListener('pointerdown', handler);
|
|
68
|
+
return () => document.removeEventListener('pointerdown', handler);
|
|
69
|
+
}, [open]);
|
|
70
|
+
// Keep the active option scrolled into view.
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
if (!open)
|
|
73
|
+
return;
|
|
74
|
+
const list = listboxRef.current;
|
|
75
|
+
if (!list)
|
|
76
|
+
return;
|
|
77
|
+
const el = list.querySelector(`[data-index="${activeIndex}"]`);
|
|
78
|
+
if (el)
|
|
79
|
+
el.scrollIntoView({ block: 'nearest' });
|
|
80
|
+
}, [activeIndex, open]);
|
|
81
|
+
const openMenu = () => {
|
|
82
|
+
if (disabled)
|
|
83
|
+
return;
|
|
84
|
+
if (!open) {
|
|
85
|
+
// For server-side pickers, prompt the parent to load a fresh page on
|
|
86
|
+
// first open. The parent's own debounce should coalesce this with any
|
|
87
|
+
// subsequent keystrokes that follow immediately after.
|
|
88
|
+
onSearchChange?.(query);
|
|
89
|
+
}
|
|
90
|
+
setOpen(true);
|
|
91
|
+
};
|
|
92
|
+
const closeMenu = () => {
|
|
93
|
+
setOpen(false);
|
|
94
|
+
setQuery('');
|
|
95
|
+
};
|
|
96
|
+
const commit = (option) => {
|
|
97
|
+
if (option.disabled)
|
|
98
|
+
return;
|
|
99
|
+
onChange(option.value);
|
|
100
|
+
setOpen(false);
|
|
101
|
+
setQuery('');
|
|
102
|
+
inputRef.current?.blur();
|
|
103
|
+
};
|
|
104
|
+
const clear = () => {
|
|
105
|
+
onChange(null);
|
|
106
|
+
setQuery('');
|
|
107
|
+
inputRef.current?.focus();
|
|
108
|
+
};
|
|
109
|
+
const onKeyDown = (e) => {
|
|
110
|
+
if (disabled)
|
|
111
|
+
return;
|
|
112
|
+
if (e.key === 'ArrowDown') {
|
|
113
|
+
e.preventDefault();
|
|
114
|
+
if (!open) {
|
|
115
|
+
openMenu();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (filtered.length === 0)
|
|
119
|
+
return;
|
|
120
|
+
setActiveIndex((i) => (i + 1) % filtered.length);
|
|
121
|
+
}
|
|
122
|
+
else if (e.key === 'ArrowUp') {
|
|
123
|
+
e.preventDefault();
|
|
124
|
+
if (!open) {
|
|
125
|
+
openMenu();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (filtered.length === 0)
|
|
129
|
+
return;
|
|
130
|
+
setActiveIndex((i) => (i - 1 + filtered.length) % filtered.length);
|
|
131
|
+
}
|
|
132
|
+
else if (e.key === 'Enter') {
|
|
133
|
+
if (!open)
|
|
134
|
+
return;
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
const opt = filtered[activeIndex];
|
|
137
|
+
if (opt)
|
|
138
|
+
commit(opt);
|
|
139
|
+
}
|
|
140
|
+
else if (e.key === 'Escape') {
|
|
141
|
+
if (!open)
|
|
142
|
+
return;
|
|
143
|
+
e.preventDefault();
|
|
144
|
+
closeMenu();
|
|
145
|
+
}
|
|
146
|
+
else if (e.key === 'Home') {
|
|
147
|
+
if (!open)
|
|
148
|
+
return;
|
|
149
|
+
e.preventDefault();
|
|
150
|
+
setActiveIndex(0);
|
|
151
|
+
}
|
|
152
|
+
else if (e.key === 'End') {
|
|
153
|
+
if (!open)
|
|
154
|
+
return;
|
|
155
|
+
e.preventDefault();
|
|
156
|
+
setActiveIndex(Math.max(0, filtered.length - 1));
|
|
157
|
+
}
|
|
158
|
+
else if (e.key === 'Backspace' && query === '' && selectedOption !== null && clearable) {
|
|
159
|
+
// Backspace on an empty input clears the current selection — common combobox affordance.
|
|
160
|
+
clear();
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
const showClear = clearable && !disabled && (selectedOption !== null || query.length > 0);
|
|
164
|
+
return (_jsxs("div", { ref: containerRef, className: cn('relative w-full', className), children: [_jsxs("div", { className: "relative", children: [_jsx("input", { ref: setRefs, id: inputId, name: name, type: "text", role: "combobox", "aria-expanded": open, "aria-controls": listboxId, "aria-autocomplete": "list", "aria-activedescendant": open && filtered[activeIndex] ? `${listboxId}-option-${activeIndex}` : undefined, "aria-label": ariaLabel, autoComplete: "off", spellCheck: false, disabled: disabled, value: displayValue, placeholder: placeholder, onChange: (e) => {
|
|
165
|
+
const next = e.target.value;
|
|
166
|
+
setQuery(next);
|
|
167
|
+
if (!open)
|
|
168
|
+
setOpen(true);
|
|
169
|
+
onSearchChange?.(next);
|
|
170
|
+
}, onFocus: openMenu, onClick: openMenu, onKeyDown: onKeyDown, className: cn('flex h-9 w-full rounded-md border border-input bg-transparent pl-3 pr-16 py-1 text-sm shadow-sm transition-colors', 'placeholder:text-muted-foreground', 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring', 'disabled:cursor-not-allowed disabled:opacity-50') }), _jsxs("div", { className: "absolute inset-y-0 right-0 flex items-center gap-1 pr-2", children: [loading ? (_jsx(Loader2, { className: "size-4 animate-spin text-muted-foreground", "aria-hidden": "true" })) : null, showClear ? (_jsx("button", { type: "button", tabIndex: -1, onMouseDown: (e) => e.preventDefault(), onClick: clear, "aria-label": t('common.combobox.clearSelection'), className: "rounded-sm p-0.5 text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", children: _jsx(X, { className: "size-3.5", "aria-hidden": "true" }) })) : null, _jsx(ChevronDown, { className: cn('size-4 text-muted-foreground transition-transform', open ? 'rotate-180' : 'rotate-0'), "aria-hidden": "true" })] })] }), open ? (_jsx("ul", { ref: listboxRef, id: listboxId, role: "listbox", className: cn('absolute z-50 mt-1 max-h-60 w-full overflow-y-auto rounded-md border border-input bg-background p-1 text-sm shadow-md'), children: loading && filtered.length === 0 ? (_jsx("li", { className: "px-2 py-1.5 text-muted-foreground", "aria-disabled": "true", children: loadingMessage })) : filtered.length === 0 ? (_jsx("li", { className: "px-2 py-1.5 text-muted-foreground", "aria-disabled": "true", children: emptyMessage })) : (filtered.map((opt, idx) => {
|
|
171
|
+
const selected = sameValue(opt.value, value);
|
|
172
|
+
const active = idx === activeIndex;
|
|
173
|
+
const optionId = `${listboxId}-option-${idx}`;
|
|
174
|
+
return (_jsxs("li", { id: optionId, role: "option", "data-index": idx, "aria-selected": selected, "aria-disabled": opt.disabled || undefined, onMouseDown: (e) => e.preventDefault(), onMouseEnter: () => setActiveIndex(idx), onClick: () => commit(opt), className: cn('flex cursor-pointer items-start justify-between gap-2 rounded-sm px-2 py-1.5', active && !opt.disabled ? 'bg-accent text-accent-foreground' : '', opt.disabled ? 'cursor-not-allowed opacity-50' : ''), children: [renderOption ? (renderOption(opt, { selected, active })) : (_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "truncate", children: opt.label }), opt.description ? (_jsx("div", { className: "truncate text-xs text-muted-foreground", children: opt.description })) : null] })), selected ? (_jsx(Check, { className: "mt-0.5 size-4 shrink-0 text-primary", "aria-hidden": "true" })) : null] }, optionId));
|
|
175
|
+
})) })) : null] }));
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Generic-friendly forwardRef wrapper. The cast preserves the `<T>` parameter
|
|
179
|
+
* through `forwardRef`, which otherwise erases generics on the inner component.
|
|
180
|
+
*/
|
|
181
|
+
export const Combobox = forwardRef(ComboboxInner);
|
|
182
|
+
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.js","sourceRoot":"","sources":["../../src/ui/combobox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
2
|
+
/**
|
|
3
|
+
* Radix dropdown menu, styled to the admin design system.
|
|
4
|
+
*
|
|
5
|
+
* The reason this exists rather than a hand-rolled `absolute` panel: every
|
|
6
|
+
* admin table renders inside `.b2b-table-scroll`, which sets
|
|
7
|
+
* `overflow-x: auto`. An overflow container clips absolutely-positioned
|
|
8
|
+
* descendants, so a menu opened from a row was drawn *inside* the table and cut
|
|
9
|
+
* off. `DropdownMenuContent` renders through a portal, which takes the panel
|
|
10
|
+
* out of the scrolling subtree entirely, and Radix handles the collision
|
|
11
|
+
* flipping, focus trap, typeahead and Escape-restores-focus behaviour that the
|
|
12
|
+
* hand-rolled version did not.
|
|
13
|
+
*
|
|
14
|
+
* `@radix-ui/react-dropdown-menu` was already a dependency — no new package.
|
|
15
|
+
*/
|
|
16
|
+
export declare const DropdownMenu: import("react").FC<DropdownMenuPrimitive.DropdownMenuProps>;
|
|
17
|
+
export declare const DropdownMenuTrigger: import("react").ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
18
|
+
export declare const DropdownMenuGroup: import("react").ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
19
|
+
export declare const DropdownMenuPortal: import("react").FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
|
|
20
|
+
export declare const DropdownMenuContent: import("react").ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
21
|
+
export declare const DropdownMenuItem: import("react").ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
|
|
22
|
+
destructive?: boolean;
|
|
23
|
+
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
24
|
+
export declare const DropdownMenuLabel: import("react").ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
25
|
+
export declare const DropdownMenuSeparator: import("react").ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
26
|
+
//# sourceMappingURL=dropdown-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../src/ui/dropdown-menu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AAGvE;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,YAAY,6DAA6B,CAAC;AACvD,eAAO,MAAM,mBAAmB,8IAAgC,CAAC;AACjE,eAAO,MAAM,iBAAiB,yIAA8B,CAAC;AAC7D,eAAO,MAAM,kBAAkB,mEAA+B,CAAC;AAE/D,eAAO,MAAM,mBAAmB,wMAwB9B,CAAC;AAGH,eAAO,MAAM,gBAAgB;kBAEmD,OAAO;kDAmBrF,CAAC;AAGH,eAAO,MAAM,iBAAiB,sMAS5B,CAAC;AAGH,eAAO,MAAM,qBAAqB,0MAShC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
4
|
+
import { cn } from '../lib/utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Radix dropdown menu, styled to the admin design system.
|
|
7
|
+
*
|
|
8
|
+
* The reason this exists rather than a hand-rolled `absolute` panel: every
|
|
9
|
+
* admin table renders inside `.b2b-table-scroll`, which sets
|
|
10
|
+
* `overflow-x: auto`. An overflow container clips absolutely-positioned
|
|
11
|
+
* descendants, so a menu opened from a row was drawn *inside* the table and cut
|
|
12
|
+
* off. `DropdownMenuContent` renders through a portal, which takes the panel
|
|
13
|
+
* out of the scrolling subtree entirely, and Radix handles the collision
|
|
14
|
+
* flipping, focus trap, typeahead and Escape-restores-focus behaviour that the
|
|
15
|
+
* hand-rolled version did not.
|
|
16
|
+
*
|
|
17
|
+
* `@radix-ui/react-dropdown-menu` was already a dependency — no new package.
|
|
18
|
+
*/
|
|
19
|
+
export const DropdownMenu = DropdownMenuPrimitive.Root;
|
|
20
|
+
export const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
21
|
+
export const DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
22
|
+
export const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
|
23
|
+
export const DropdownMenuContent = forwardRef(({ className, sideOffset = 4, align = 'end', ...props }, ref) => (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, className: cn('z-50 min-w-[12rem] overflow-hidden rounded-md border border-border bg-popover p-1', 'text-popover-foreground shadow-md',
|
|
24
|
+
// Radix drives these from its own open/closed and side data attributes,
|
|
25
|
+
// so the motion matches wherever collision detection put the panel.
|
|
26
|
+
'data-[state=open]:animate-in data-[state=closed]:animate-out', 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2', 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', className), ...props }) })));
|
|
27
|
+
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
28
|
+
export const DropdownMenuItem = forwardRef(({ className, destructive = false, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Item, { ref: ref, className: cn('relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5', 'text-sm outline-none transition-colors',
|
|
29
|
+
// Radix moves `data-highlighted` with both pointer and keyboard, so the
|
|
30
|
+
// two navigation modes cannot disagree about which item is current.
|
|
31
|
+
'focus:bg-accent focus:text-accent-foreground', 'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground', 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50', '[&_svg]:size-4 [&_svg]:shrink-0', destructive &&
|
|
32
|
+
'text-destructive data-[highlighted]:bg-destructive/10 data-[highlighted]:text-destructive', className), ...props })));
|
|
33
|
+
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
34
|
+
export const DropdownMenuLabel = forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Label, { ref: ref, className: cn('px-2 py-1.5 text-xs font-medium text-muted-foreground', className), ...props })));
|
|
35
|
+
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
36
|
+
export const DropdownMenuSeparator = forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Separator, { ref: ref, className: cn('-mx-1 my-1 h-px bg-border', className), ...props })));
|
|
37
|
+
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
38
|
+
//# sourceMappingURL=dropdown-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown-menu.js","sourceRoot":"","sources":["../../src/ui/dropdown-menu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAkD,MAAM,OAAO,CAAC;AACnF,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,OAAO,CAAC;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,MAAM,CAAC;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAG3C,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACjE,KAAC,qBAAqB,CAAC,MAAM,cAC3B,KAAC,qBAAqB,CAAC,OAAO,IAC5B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CACX,mFAAmF,EACnF,mCAAmC;QACnC,wEAAwE;QACxE,oEAAoE;QACpE,8DAA8D,EAC9D,4DAA4D,EAC5D,8DAA8D,EAC9D,+EAA+E,EAC/E,+EAA+E,EAC/E,SAAS,CACV,KACG,KAAK,GACT,GAC2B,CAChC,CAAC,CAAC;AACH,mBAAmB,CAAC,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC;AAE5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAGxC,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACvD,KAAC,qBAAqB,CAAC,IAAI,IACzB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oFAAoF,EACpF,wCAAwC;IACxC,wEAAwE;IACxE,oEAAoE;IACpE,8CAA8C,EAC9C,wEAAwE,EACxE,gEAAgE,EAChE,iCAAiC,EACjC,WAAW;QACT,2FAA2F,EAC7F,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC,CAAC;AACH,gBAAgB,CAAC,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC;AAEtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAGzC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,qBAAqB,CAAC,KAAK,IAC1B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,uDAAuD,EAAE,SAAS,CAAC,KAC7E,KAAK,GACT,CACH,CAAC,CAAC;AACH,iBAAiB,CAAC,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC;AAExE,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAG7C,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,qBAAqB,CAAC,SAAS,IAC9B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,KACjD,KAAK,GACT,CACH,CAAC,CAAC;AACH,qBAAqB,CAAC,WAAW,GAAG,qBAAqB,CAAC,SAAS,CAAC,WAAW,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@endora-commerce/admin-kit/ui` — The shadcn/Radix primitives — the seventeen `admin/src/components/ui` members
|
|
3
|
+
* admin module code imports, measured.
|
|
4
|
+
*
|
|
5
|
+
* The membership is **derived, never designed**
|
|
6
|
+
* (`specs/091-module-owned-admin-surfaces/contracts/admin-kit-surface.md` §1): every
|
|
7
|
+
* `from '…'` specifier in the admin's module directories that resolves inside the admin
|
|
8
|
+
* source root and outside the importing file's own module directory, plus the transitive
|
|
9
|
+
* closure of those files, which is what has to live in one place for there to be one copy.
|
|
10
|
+
*
|
|
11
|
+
* The barrel is **explicit and holds no `export *`** (R2): a short published set reports
|
|
12
|
+
* more findings than a complete one, and its obvious repair is to widen the barrel
|
|
13
|
+
* silently. `check:admin-surface` refuses one and exits 2.
|
|
14
|
+
*
|
|
15
|
+
* Every binding here is the **only** copy in the process. `admin/src` keeps a re-export
|
|
16
|
+
* shim at each old path, so a `@/…` specifier and this subpath name one module record —
|
|
17
|
+
* proved by reference equality in `admin/test/kit/admin-kit-shims.test.ts`, not by a
|
|
18
|
+
* structural comparison, which a second React context would pass.
|
|
19
|
+
*/
|
|
20
|
+
export { Alert, AlertDescription, AlertTitle } from './alert.js';
|
|
21
|
+
export type { AlertProps } from './alert.js';
|
|
22
|
+
export { Badge } from './badge.js';
|
|
23
|
+
export type { BadgeProps } from './badge.js';
|
|
24
|
+
export { Button, buttonVariants } from './button.js';
|
|
25
|
+
export type { ButtonProps } from './button.js';
|
|
26
|
+
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './card.js';
|
|
27
|
+
export { Checkbox } from './checkbox.js';
|
|
28
|
+
export { ColorPicker, DEFAULT_COLOR_PRESETS } from './color-picker.js';
|
|
29
|
+
export { Combobox } from './combobox.js';
|
|
30
|
+
export type { ComboboxOption, ComboboxProps } from './combobox.js';
|
|
31
|
+
export { Input } from './input.js';
|
|
32
|
+
export { Label } from './label.js';
|
|
33
|
+
export { MultiSelect } from './multi-select.js';
|
|
34
|
+
export type { MultiSelectOption, MultiSelectProps } from './multi-select.js';
|
|
35
|
+
export { PageHeader } from './page-header.js';
|
|
36
|
+
export type { PageHeaderProps } from './page-header.js';
|
|
37
|
+
export { RouteTabs, RouteTabLink, activeTabPath } from './route-tabs.js';
|
|
38
|
+
export type { RouteTab, RouteTabsProps, RouteTabLinkProps } from './route-tabs.js';
|
|
39
|
+
export { SaveButtonGroup } from './save-button-group.js';
|
|
40
|
+
export type { SaveButtonGroupProps } from './save-button-group.js';
|
|
41
|
+
export { Section } from './section.js';
|
|
42
|
+
export type { SectionProps } from './section.js';
|
|
43
|
+
export { Select } from './select.js';
|
|
44
|
+
export { Separator } from './separator.js';
|
|
45
|
+
export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './table.js';
|
|
46
|
+
export { Textarea } from './textarea.js';
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/ui/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@endora-commerce/admin-kit/ui` — The shadcn/Radix primitives — the seventeen `admin/src/components/ui` members
|
|
3
|
+
* admin module code imports, measured.
|
|
4
|
+
*
|
|
5
|
+
* The membership is **derived, never designed**
|
|
6
|
+
* (`specs/091-module-owned-admin-surfaces/contracts/admin-kit-surface.md` §1): every
|
|
7
|
+
* `from '…'` specifier in the admin's module directories that resolves inside the admin
|
|
8
|
+
* source root and outside the importing file's own module directory, plus the transitive
|
|
9
|
+
* closure of those files, which is what has to live in one place for there to be one copy.
|
|
10
|
+
*
|
|
11
|
+
* The barrel is **explicit and holds no `export *`** (R2): a short published set reports
|
|
12
|
+
* more findings than a complete one, and its obvious repair is to widen the barrel
|
|
13
|
+
* silently. `check:admin-surface` refuses one and exits 2.
|
|
14
|
+
*
|
|
15
|
+
* Every binding here is the **only** copy in the process. `admin/src` keeps a re-export
|
|
16
|
+
* shim at each old path, so a `@/…` specifier and this subpath name one module record —
|
|
17
|
+
* proved by reference equality in `admin/test/kit/admin-kit-shims.test.ts`, not by a
|
|
18
|
+
* structural comparison, which a second React context would pass.
|
|
19
|
+
*/
|
|
20
|
+
export { Alert, AlertDescription, AlertTitle } from './alert.js';
|
|
21
|
+
export { Badge } from './badge.js';
|
|
22
|
+
export { Button, buttonVariants } from './button.js';
|
|
23
|
+
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './card.js';
|
|
24
|
+
export { Checkbox } from './checkbox.js';
|
|
25
|
+
export { ColorPicker, DEFAULT_COLOR_PRESETS } from './color-picker.js';
|
|
26
|
+
export { Combobox } from './combobox.js';
|
|
27
|
+
export { Input } from './input.js';
|
|
28
|
+
export { Label } from './label.js';
|
|
29
|
+
export { MultiSelect } from './multi-select.js';
|
|
30
|
+
export { PageHeader } from './page-header.js';
|
|
31
|
+
export { RouteTabs, RouteTabLink, activeTabPath } from './route-tabs.js';
|
|
32
|
+
export { SaveButtonGroup } from './save-button-group.js';
|
|
33
|
+
export { Section } from './section.js';
|
|
34
|
+
export { Select } from './select.js';
|
|
35
|
+
export { Separator } from './separator.js';
|
|
36
|
+
export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './table.js';
|
|
37
|
+
export { Textarea } from './textarea.js';
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/ui/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAG7D,eAAO,MAAM,KAAK,oIAkBjB,CAAC"}
|
package/dist/ui/input.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { cn } from '../lib/utils.js';
|
|
4
|
+
export const Input = forwardRef(({ className, type, ...props }, ref) => {
|
|
5
|
+
return (_jsx("input", { type: type, ref: ref, className: cn('flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors', 'file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground', 'placeholder:text-muted-foreground', 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring', 'disabled:cursor-not-allowed disabled:opacity-50', className), ...props }));
|
|
6
|
+
});
|
|
7
|
+
Input.displayName = 'Input';
|
|
8
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/ui/input.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAC7B,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACrC,OAAO,CACL,gBACE,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,6GAA6G,EAC7G,sFAAsF,EACtF,mCAAmC,EACnC,yEAAyE,EACzE,iDAAiD,EACjD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
export declare const Label: import("react").ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & import("react").RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: import("class-variance-authority/types").ClassProp | undefined) => string> & import("react").RefAttributes<HTMLLabelElement>>;
|
|
4
|
+
//# sourceMappingURL=label.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/ui/label.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOlE,eAAO,MAAM,KAAK,0RAKhB,CAAC"}
|
package/dist/ui/label.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { cn } from '../lib/utils.js';
|
|
6
|
+
const labelVariants = cva('text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70');
|
|
7
|
+
export const Label = forwardRef(({ className, ...props }, ref) => (_jsx(LabelPrimitive.Root, { ref: ref, className: cn(labelVariants(), className), ...props })));
|
|
8
|
+
Label.displayName = LabelPrimitive.Root.displayName;
|
|
9
|
+
//# sourceMappingURL=label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.js","sourceRoot":"","sources":["../../src/ui/label.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAkD,MAAM,OAAO,CAAC;AACnF,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,aAAa,GAAG,GAAG,CACvB,4FAA4F,CAC7F,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAG7B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,cAAc,CAAC,IAAI,IAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CACxF,CAAC,CAAC;AACH,KAAK,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC"}
|