@mittwald/flow-react-components 1.6.0-next.5 → 1.6.0-next.50
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/AGENTS.md +132 -88
- package/USAGE.md +7 -2
- package/dist/assets/component-index.json +1 -1
- package/dist/assets/doc-properties.json +1 -1
- package/dist/css/all-layered.css +1 -1
- package/dist/css/all.css +1 -1
- package/dist/js/_virtual/_18.locale.mjs +14 -0
- package/dist/js/default.mjs +4 -3
- package/dist/js/flr-universal.mjs +2 -1
- package/dist/js/node_modules/.pnpm/{@lezer_lr@1.4.10 → @lezer_lr@1.4.11}/node_modules/@lezer/lr/dist/index.mjs +40 -28
- package/dist/js/node_modules/.pnpm/@lezer_lr@1.4.11/node_modules/@lezer/lr/dist/index.mjs.map +1 -0
- package/dist/js/packages/components/src/components/AccentBox/AccentBox.mjs +3 -2
- package/dist/js/packages/components/src/components/AccentBox/AccentBox.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Accordion/Accordion.mjs +3 -2
- package/dist/js/packages/components/src/components/Accordion/Accordion.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Action/models/ActionState.mjs +2 -2
- package/dist/js/packages/components/src/components/ActionGroup/ActionGroup.mjs +3 -3
- package/dist/js/packages/components/src/components/ActionGroup/ActionGroup.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Activity/Activity.mjs +1 -1
- package/dist/js/packages/components/src/components/Activity/Activity.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Alert/Alert.mjs +3 -2
- package/dist/js/packages/components/src/components/Alert/Alert.mjs.map +1 -1
- package/dist/js/packages/components/src/components/AlertBadge/AlertBadge.mjs +1 -1
- package/dist/js/packages/components/src/components/AlertBadge/AlertBadge.mjs.map +1 -1
- package/dist/js/packages/components/src/components/AlertBadge/AlertBadge.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Badge/Badge.mjs +2 -2
- package/dist/js/packages/components/src/components/Badge/Badge.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Badge/Badge.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Calendar/components/RangeCalendar/helpers/useCalendarDateRangePresets.mjs +1 -1
- package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.mjs +6 -8
- package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.mjs.map +1 -1
- package/dist/js/packages/components/src/components/CartesianChart/components/YAxis/YAxis.mjs +23 -5
- package/dist/js/packages/components/src/components/CartesianChart/components/YAxis/YAxis.mjs.map +1 -1
- package/dist/js/packages/components/src/components/CartesianChart/hooks/useTickLabelWidth.mjs +67 -0
- package/dist/js/packages/components/src/components/CartesianChart/hooks/useTickLabelWidth.mjs.map +1 -0
- package/dist/js/packages/components/src/components/Checkbox/Checkbox.mjs +2 -2
- package/dist/js/packages/components/src/components/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/js/packages/components/src/components/CodeBlock/CodeBlock.mjs +3 -3
- package/dist/js/packages/components/src/components/CodeBlock/CodeBlock.mjs.map +1 -1
- package/dist/js/packages/components/src/components/CodeEditor/CodeEditor.mjs +41 -12
- package/dist/js/packages/components/src/components/CodeEditor/CodeEditor.mjs.map +1 -1
- package/dist/js/packages/components/src/components/CodeEditor/hooks/useCodeEditorExtensions.mjs +29 -16
- package/dist/js/packages/components/src/components/CodeEditor/hooks/useCodeEditorExtensions.mjs.map +1 -1
- package/dist/js/packages/components/src/components/CodeEditor/languages/dotEnv/dotEnv.mjs +1 -1
- package/dist/js/packages/components/src/components/ComboBox/ComboBox.mjs +3 -2
- package/dist/js/packages/components/src/components/ComboBox/ComboBox.mjs.map +1 -1
- package/dist/js/packages/components/src/components/CountryOptions/CountryOptions.mjs +5 -1
- package/dist/js/packages/components/src/components/CountryOptions/CountryOptions.mjs.map +1 -1
- package/dist/js/packages/components/src/components/DatePicker/DatePicker.mjs +2 -1
- package/dist/js/packages/components/src/components/DatePicker/DatePicker.mjs.map +1 -1
- package/dist/js/packages/components/src/components/DateRangePicker/DateRangePicker.mjs +2 -1
- package/dist/js/packages/components/src/components/DateRangePicker/DateRangePicker.mjs.map +1 -1
- package/dist/js/packages/components/src/components/DeprecationWarningProvider/DeprecationWarningProvider.mjs +40 -8
- package/dist/js/packages/components/src/components/DeprecationWarningProvider/DeprecationWarningProvider.mjs.map +1 -1
- package/dist/js/packages/components/src/components/DonutChart/DonutChart.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Heading/Heading.mjs +2 -0
- package/dist/js/packages/components/src/components/Heading/Heading.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Heading/Heading.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Icon/Icon.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/IllustratedMessage/IllustratedMessage.mjs +3 -2
- package/dist/js/packages/components/src/components/IllustratedMessage/IllustratedMessage.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Label/Label.mjs +0 -4
- package/dist/js/packages/components/src/components/Label/Label.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Link/Link.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/List.mjs +27 -23
- package/dist/js/packages/components/src/components/List/List.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs +5 -2
- package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs +2 -2
- package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionDateRange.mjs +5 -3
- package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionDateRange.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.mjs +101 -0
- package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.mjs.map +1 -0
- package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.module.mjs +13 -0
- package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.module.mjs.map +1 -0
- package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.mjs +16 -9
- package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.mjs +6 -2
- package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Header/components/SearchField/SearchField.mjs +4 -2
- package/dist/js/packages/components/src/components/List/components/Header/components/SearchField/SearchField.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Items/Items.mjs +27 -1
- package/dist/js/packages/components/src/components/List/components/Items/Items.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs +1 -1
- package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Items/components/Item/hooks/useGridItemProps.mjs +1 -2
- package/dist/js/packages/components/src/components/List/components/Items/components/Item/hooks/useGridItemProps.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs +3 -0
- package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.mjs +46 -44
- package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/ListItemView/components/ListItemViewContent/ListItemViewContent.mjs +25 -25
- package/dist/js/packages/components/src/components/List/components/ListItemView/components/ListItemViewContent/ListItemViewContent.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/ListSummary/ListSummary.mjs +5 -9
- package/dist/js/packages/components/src/components/List/components/ListSummary/ListSummary.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Table/Table.mjs +29 -13
- package/dist/js/packages/components/src/components/List/components/Table/Table.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/components/Table/components/Row.mjs +31 -0
- package/dist/js/packages/components/src/components/List/components/Table/components/Row.mjs.map +1 -0
- package/dist/js/packages/components/src/components/List/hooks/useLatestOnAction.mjs +21 -0
- package/dist/js/packages/components/src/components/List/hooks/useLatestOnAction.mjs.map +1 -0
- package/dist/js/packages/components/src/components/List/hooks/useListSelector.mjs +18 -0
- package/dist/js/packages/components/src/components/List/hooks/useListSelector.mjs.map +1 -0
- package/dist/js/packages/components/src/components/List/listContext.mjs +32 -2
- package/dist/js/packages/components/src/components/List/listContext.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/List.mjs +1 -0
- package/dist/js/packages/components/src/components/List/model/List.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/ListViewMode.mjs +2 -2
- package/dist/js/packages/components/src/components/List/model/ReactTable.mjs +2 -2
- package/dist/js/packages/components/src/components/List/model/filter/DateRangeFilter.mjs +15 -2
- package/dist/js/packages/components/src/components/List/model/filter/DateRangeFilter.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/filter/resolveDateRangeFilterValue.mjs +16 -0
- package/dist/js/packages/components/src/components/List/model/filter/resolveDateRangeFilterValue.mjs.map +1 -0
- package/dist/js/packages/components/src/components/List/model/item/ItemView.mjs +20 -7
- package/dist/js/packages/components/src/components/List/model/item/ItemView.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/loading/IncrementalLoaderState.mjs +2 -2
- package/dist/js/packages/components/src/components/List/model/table/Table.mjs +11 -1
- package/dist/js/packages/components/src/components/List/model/table/Table.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/table/TableBody.mjs +5 -1
- package/dist/js/packages/components/src/components/List/model/table/TableBody.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/table/TableCell.mjs +1 -1
- package/dist/js/packages/components/src/components/List/model/table/TableCell.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/table/TableColumn.mjs +4 -0
- package/dist/js/packages/components/src/components/List/model/table/TableColumn.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/table/TableHeader.mjs +8 -1
- package/dist/js/packages/components/src/components/List/model/table/TableHeader.mjs.map +1 -1
- package/dist/js/packages/components/src/components/List/model/table/TableRow.mjs +28 -1
- package/dist/js/packages/components/src/components/List/model/table/TableRow.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Markdown/Markdown.mjs +25 -7
- package/dist/js/packages/components/src/components/Markdown/Markdown.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Markdown/components/SkeletonBlocks.mjs +1 -1
- package/dist/js/packages/components/src/components/Markdown/components/SkeletonBlocks.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Markdown/lib/isExternalHref.mjs +8 -0
- package/dist/js/packages/components/src/components/Markdown/lib/isExternalHref.mjs.map +1 -0
- package/dist/js/packages/components/src/components/MenuItem/MenuItem.mjs +32 -3
- package/dist/js/packages/components/src/components/MenuItem/MenuItem.mjs.map +1 -1
- package/dist/js/packages/components/src/components/MenuItem/MenuItem.module.mjs +1 -3
- package/dist/js/packages/components/src/components/MessageThread/MessageThread.mjs +1 -1
- package/dist/js/packages/components/src/components/MessageThread/MessageThread.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Modal/Modal.mjs +9 -2
- package/dist/js/packages/components/src/components/Modal/Modal.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Navigation/Navigation.module.mjs +1 -3
- package/dist/js/packages/components/src/components/NumberField/NumberField.mjs +2 -3
- package/dist/js/packages/components/src/components/NumberField/NumberField.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Option/Option.module.mjs +1 -3
- package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs +2 -1
- package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs.map +1 -1
- package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs +3 -3
- package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs +1 -1
- package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs +4 -2
- package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs.map +1 -1
- package/dist/js/packages/components/src/components/ProgressBar/ProgressBar.mjs.map +1 -1
- package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarLegend.mjs +5 -4
- package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarLegend.mjs.map +1 -1
- package/dist/js/packages/components/src/components/RadioGroup/RadioGroup.mjs +2 -3
- package/dist/js/packages/components/src/components/RadioGroup/RadioGroup.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Rating/Rating.mjs +12 -11
- package/dist/js/packages/components/src/components/Rating/Rating.mjs.map +1 -1
- package/dist/js/packages/components/src/components/SearchField/SearchField.mjs +2 -3
- package/dist/js/packages/components/src/components/SearchField/SearchField.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Section/Section.mjs +9 -5
- package/dist/js/packages/components/src/components/Section/Section.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.mjs +0 -4
- package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Section/context.mjs +47 -0
- package/dist/js/packages/components/src/components/Section/context.mjs.map +1 -0
- package/dist/js/packages/components/src/components/SegmentedControl/SegmentedControl.mjs +2 -3
- package/dist/js/packages/components/src/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Select/Select.mjs +2 -3
- package/dist/js/packages/components/src/components/Select/Select.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Slider/Slider.mjs +47 -41
- package/dist/js/packages/components/src/components/Slider/Slider.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Table/Table.mjs +3 -0
- package/dist/js/packages/components/src/components/Table/Table.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Table/Table.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Table/components/TableCell/TableCell.mjs +5 -12
- package/dist/js/packages/components/src/components/Table/components/TableCell/TableCell.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Table/components/TableColumn/TableColumn.mjs +4 -2
- package/dist/js/packages/components/src/components/Table/components/TableColumn/TableColumn.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Table/components/TableHeader/TableHeader.mjs +7 -1
- package/dist/js/packages/components/src/components/Table/components/TableHeader/TableHeader.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Table/components/TableHeader/context.mjs +14 -0
- package/dist/js/packages/components/src/components/Table/components/TableHeader/context.mjs.map +1 -0
- package/dist/js/packages/components/src/components/Tabs/Tabs.mjs +6 -8
- package/dist/js/packages/components/src/components/Tabs/Tabs.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Tabs/Tabs.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Tabs/components/TabTitle/TabTitle.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Text/Text.module.mjs.map +1 -1
- package/dist/js/packages/components/src/components/TextField/TextField.mjs +11 -8
- package/dist/js/packages/components/src/components/TextField/TextField.mjs.map +1 -1
- package/dist/js/packages/components/src/components/TranslationProvider/useLocalizedStringFormatter.mjs +15 -2
- package/dist/js/packages/components/src/components/TranslationProvider/useLocalizedStringFormatter.mjs.map +1 -1
- package/dist/js/packages/components/src/components/Wrap/Wrap.mjs.map +1 -1
- package/dist/js/packages/components/src/integrations/react-hook-form/components/Field/Field.mjs +1 -1
- package/dist/js/packages/components/src/integrations/react-hook-form/components/Form/Form.mjs +4 -1
- package/dist/js/packages/components/src/integrations/react-hook-form/components/Form/Form.mjs.map +1 -1
- package/dist/js/packages/components/src/integrations/react-hook-form/components/FormRootError/FormRootError.mjs +1 -1
- package/dist/js/packages/components/src/integrations/react-hook-form/components/FormSettingsProvider/FormSettingsProvider.mjs.map +1 -1
- package/dist/js/packages/components/src/lib/controller/overlay/OverlayController.mjs +10 -158
- package/dist/js/packages/components/src/lib/controller/overlay/OverlayController.mjs.map +1 -1
- package/dist/js/packages/components/src/lib/controller/overlay/useCloseOverlayConfirmationController.mjs +1 -0
- package/dist/js/packages/components/src/lib/controller/overlay/useCloseOverlayConfirmationController.mjs.map +1 -1
- package/dist/js/packages/components/src/lib/hooks/dom/useVirtualKeyboardVisible.mjs +8 -4
- package/dist/js/packages/components/src/lib/hooks/dom/useVirtualKeyboardVisible.mjs.map +1 -1
- package/dist/js/packages/components/src/lib/object/isPlainObjectDeepEqual.mjs +29 -0
- package/dist/js/packages/components/src/lib/object/isPlainObjectDeepEqual.mjs.map +1 -0
- package/dist/js/packages/components/src/lib/propsContext/components/ClearPropsContext.mjs +2 -1
- package/dist/js/packages/components/src/lib/propsContext/components/ClearPropsContext.mjs.map +1 -1
- package/dist/js/packages/components/src/lib/propsContext/components/PropsContextProvider.mjs +14 -3
- package/dist/js/packages/components/src/lib/propsContext/components/PropsContextProvider.mjs.map +1 -1
- package/dist/js/packages/components/src/lib/slotContext/SlotContextProvider.mjs +9 -4
- package/dist/js/packages/components/src/lib/slotContext/SlotContextProvider.mjs.map +1 -1
- package/dist/js/packages/components/src/views/DatePickerView.mjs +16 -0
- package/dist/js/packages/components/src/views/DatePickerView.mjs.map +1 -0
- package/dist/js/packages/components/src/views/LabelView.mjs +16 -0
- package/dist/js/packages/components/src/views/LabelView.mjs.map +1 -0
- package/dist/js/packages/components/src/views/TimeFieldView.mjs +16 -0
- package/dist/js/packages/components/src/views/TimeFieldView.mjs.map +1 -0
- package/dist/js/packages/components-base/src/index.mjs +5 -2
- package/dist/js/packages/components-base/src/list/filter/ListDateRangeFilter.mjs +1 -0
- package/dist/js/packages/components-base/src/list/filter/ListDateRangeFilter.mjs.map +1 -1
- package/dist/js/packages/components-base/src/list/filter/ListFilter.mjs +4 -1
- package/dist/js/packages/components-base/src/list/filter/ListFilter.mjs.map +1 -1
- package/dist/js/packages/components-base/src/list/filter/dateRange.mjs +37 -13
- package/dist/js/packages/components-base/src/list/filter/dateRange.mjs.map +1 -1
- package/dist/js/packages/components-base/src/list/filter/dateTimeRangeFields.mjs +55 -0
- package/dist/js/packages/components-base/src/list/filter/dateTimeRangeFields.mjs.map +1 -0
- package/dist/js/packages/components-base/src/list/filter/formatDateRange.mjs +27 -0
- package/dist/js/packages/components-base/src/list/filter/formatDateRange.mjs.map +1 -0
- package/dist/js/packages/components-base/src/list/loading/ListLoaderState.mjs +10 -5
- package/dist/js/packages/components-base/src/list/loading/ListLoaderState.mjs.map +1 -1
- package/dist/js/packages/components-base/src/overlay/OverlayState.mjs +196 -0
- package/dist/js/packages/components-base/src/overlay/OverlayState.mjs.map +1 -0
- package/dist/js/packages/design-tokens/dist/json-runtime/all-dark.mjs +1 -1
- package/dist/js/packages/design-tokens/dist/json-runtime/all-dark.mjs.map +1 -1
- package/dist/js/packages/design-tokens/dist/json-runtime/all-light.mjs +1 -1
- package/dist/js/packages/design-tokens/dist/json-runtime/all-light.mjs.map +1 -1
- package/dist/types/_bundled/flow-components-base/index.d.ts +4 -1
- package/dist/types/_bundled/flow-components-base/list/filter/ListFilter.d.ts +2 -0
- package/dist/types/_bundled/flow-components-base/list/filter/dateRange.d.ts +24 -1
- package/dist/types/_bundled/flow-components-base/list/filter/dateTimeRangeFields.d.ts +34 -0
- package/dist/types/_bundled/flow-components-base/list/filter/formatDateRange.d.ts +7 -0
- package/dist/types/_bundled/flow-components-base/list/loading/ListLoaderState.d.ts +5 -0
- package/dist/types/_bundled/flow-components-base/overlay/OverlayState.d.ts +94 -0
- package/dist/types/components/AlertBadge/AlertBadge.d.ts +2 -2
- package/dist/types/components/Badge/Badge.d.ts +2 -2
- package/dist/types/components/CartesianChart/hooks/useTickLabelWidth.d.ts +1 -0
- package/dist/types/components/CodeBlock/CodeBlock.d.ts +1 -1
- package/dist/types/components/DonutChart/DonutChart.d.ts +1 -4
- package/dist/types/components/Link/Link.d.ts +1 -1
- package/dist/types/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.d.ts +8 -0
- package/dist/types/components/List/components/Items/components/Item/Item.d.ts +2 -0
- package/dist/types/components/List/components/Items/components/Item/hooks/useGridItemProps.d.ts +1 -0
- package/dist/types/components/List/components/ListSummary/ListSummary.d.ts +3 -2
- package/dist/types/components/List/components/Table/components/Row.d.ts +13 -0
- package/dist/types/components/List/hooks/useLatestOnAction.d.ts +7 -0
- package/dist/types/components/List/hooks/useListSelector.d.ts +6 -0
- package/dist/types/components/List/index.d.ts +2 -0
- package/dist/types/components/List/listContext.d.ts +16 -0
- package/dist/types/components/List/model/filter/DateRangeFilter.d.ts +15 -8
- package/dist/types/components/List/model/filter/resolveDateRangeFilterValue.d.ts +11 -0
- package/dist/types/components/List/model/filter/types.d.ts +23 -1
- package/dist/types/components/List/model/item/ItemView.d.ts +34 -11
- package/dist/types/components/List/model/table/Table.d.ts +7 -0
- package/dist/types/components/List/model/table/TableBody.d.ts +1 -0
- package/dist/types/components/List/model/table/TableColumn.d.ts +1 -0
- package/dist/types/components/List/model/table/TableHeader.d.ts +1 -0
- package/dist/types/components/List/model/table/TableRow.d.ts +14 -0
- package/dist/types/components/List/model/table/types.d.ts +17 -1
- package/dist/types/components/List/typedList.d.ts +1 -0
- package/dist/types/components/Markdown/lib/isExternalHref.d.ts +1 -0
- package/dist/types/components/ProgressBar/ProgressBar.d.ts +1 -4
- package/dist/types/components/Rating/Rating.d.ts +5 -5
- package/dist/types/components/Section/context.d.ts +28 -0
- package/dist/types/components/Table/components/TableCell/TableCell.d.ts +4 -1
- package/dist/types/components/Table/components/TableHeader/context.d.ts +6 -0
- package/dist/types/components/Wrap/Wrap.d.ts +5 -0
- package/dist/types/index/flr-universal.d.ts +1 -1
- package/dist/types/integrations/react-hook-form/components/FormSettingsProvider/FormSettingsProvider.d.ts +7 -1
- package/dist/types/lib/controller/overlay/OverlayController.d.ts +8 -74
- package/dist/types/lib/dev/hydrateServerMarkup.d.ts +2 -0
- package/dist/types/lib/hooks/dom/useVirtualKeyboardVisible.d.ts +4 -1
- package/dist/types/lib/object/isPlainObjectDeepEqual.d.ts +8 -0
- package/package.json +12 -12
- package/dist/js/node_modules/.pnpm/@lezer_lr@1.4.10/node_modules/@lezer/lr/dist/index.mjs.map +0 -1
- package/dist/js/packages/components/src/lib/date/transformDateValueToFormattedDate.mjs +0 -10
- package/dist/js/packages/components/src/lib/date/transformDateValueToFormattedDate.mjs.map +0 -1
- package/dist/types/lib/date/transformDateValueToDateTime.d.ts +0 -3
- package/dist/types/lib/date/transformDateValueToFormattedDate.d.ts +0 -2
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { useLocalizedStringFormatter } from "../../../../../TranslationProvider/useLocalizedStringFormatter.mjs";
|
|
4
|
+
import { getListDateTimeRangeUpdate, isListDateTimeRangeEndBeforeStart, listDateTimeRangeFieldsFromValue, toListCalendarDate, toListTime } from "../../../../../../../../components-base/src/list/filter/dateTimeRangeFields.mjs";
|
|
5
|
+
import "../../../../../../../../components-base/src/index.mjs";
|
|
6
|
+
import DivView from "../../../../../../views/DivView.mjs";
|
|
7
|
+
import __locale_default from "../../../../../../../../../_virtual/_18.locale.mjs";
|
|
8
|
+
import DatePickerView from "../../../../../../views/DatePickerView.mjs";
|
|
9
|
+
import TimeFieldView from "../../../../../../views/TimeFieldView.mjs";
|
|
10
|
+
import LabelView from "../../../../../../views/LabelView.mjs";
|
|
11
|
+
import FieldErrorView from "../../../../../../views/FieldErrorView.mjs";
|
|
12
|
+
import DateTimeRangeFields_module_default from "./DateTimeRangeFields.module.mjs";
|
|
13
|
+
import clsx from "clsx";
|
|
14
|
+
import { useId, useState } from "react";
|
|
15
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
+
//#region src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.tsx
|
|
17
|
+
var DateTimeRangeFields = (props) => {
|
|
18
|
+
const { filter, className } = props;
|
|
19
|
+
const stringFormatter = useLocalizedStringFormatter(__locale_default, "List");
|
|
20
|
+
const value = filter.getValue();
|
|
21
|
+
const [appliedValue, setAppliedValue] = useState(value);
|
|
22
|
+
const [fields, setFields] = useState(() => listDateTimeRangeFieldsFromValue(value));
|
|
23
|
+
if (value !== appliedValue) {
|
|
24
|
+
setAppliedValue(value);
|
|
25
|
+
setFields(listDateTimeRangeFieldsFromValue(value));
|
|
26
|
+
}
|
|
27
|
+
const options = filter.dateTimeRangeOptions;
|
|
28
|
+
const minValue = toListCalendarDate(options?.minValue);
|
|
29
|
+
const maxValue = toListCalendarDate(options?.maxValue);
|
|
30
|
+
const update = (change) => {
|
|
31
|
+
const next = {
|
|
32
|
+
...fields,
|
|
33
|
+
...change
|
|
34
|
+
};
|
|
35
|
+
setFields(next);
|
|
36
|
+
const newValue = getListDateTimeRangeUpdate(next, appliedValue, options);
|
|
37
|
+
if (newValue === void 0) return;
|
|
38
|
+
setAppliedValue(newValue);
|
|
39
|
+
if (newValue) filter.setValue(newValue);
|
|
40
|
+
else filter.clear();
|
|
41
|
+
};
|
|
42
|
+
const rangeErrorId = useId();
|
|
43
|
+
const hasRangeError = isListDateTimeRangeEndBeforeStart(fields);
|
|
44
|
+
const describedBy = hasRangeError ? rangeErrorId : void 0;
|
|
45
|
+
return /* @__PURE__ */ jsxs(DivView, {
|
|
46
|
+
className: clsx(DateTimeRangeFields_module_default.dateTimeRangeFields, className),
|
|
47
|
+
children: [
|
|
48
|
+
/* @__PURE__ */ jsxs(DatePickerView, {
|
|
49
|
+
value: fields.startDate,
|
|
50
|
+
onChange: (date) => update({ startDate: toListCalendarDate(date) }),
|
|
51
|
+
minValue,
|
|
52
|
+
maxValue,
|
|
53
|
+
"aria-describedby": describedBy,
|
|
54
|
+
isDateUnavailable: options?.isDateUnavailable,
|
|
55
|
+
children: [/* @__PURE__ */ jsx(LabelView, {
|
|
56
|
+
optional: false,
|
|
57
|
+
children: stringFormatter.format("dateRange.startDate")
|
|
58
|
+
}), /* @__PURE__ */ jsx(FieldErrorView, {})]
|
|
59
|
+
}),
|
|
60
|
+
/* @__PURE__ */ jsx(TimeFieldView, {
|
|
61
|
+
value: fields.startTime,
|
|
62
|
+
onChange: (time) => update({ startTime: toListTime(time) }),
|
|
63
|
+
"aria-describedby": describedBy,
|
|
64
|
+
children: /* @__PURE__ */ jsx(LabelView, {
|
|
65
|
+
optional: false,
|
|
66
|
+
children: stringFormatter.format("dateRange.startTime")
|
|
67
|
+
})
|
|
68
|
+
}),
|
|
69
|
+
/* @__PURE__ */ jsxs(DatePickerView, {
|
|
70
|
+
value: fields.endDate,
|
|
71
|
+
onChange: (date) => update({ endDate: toListCalendarDate(date) }),
|
|
72
|
+
minValue,
|
|
73
|
+
maxValue,
|
|
74
|
+
"aria-describedby": describedBy,
|
|
75
|
+
isDateUnavailable: options?.isDateUnavailable,
|
|
76
|
+
children: [/* @__PURE__ */ jsx(LabelView, {
|
|
77
|
+
optional: false,
|
|
78
|
+
children: stringFormatter.format("dateRange.endDate")
|
|
79
|
+
}), /* @__PURE__ */ jsx(FieldErrorView, {})]
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ jsx(TimeFieldView, {
|
|
82
|
+
value: fields.endTime,
|
|
83
|
+
onChange: (time) => update({ endTime: toListTime(time) }),
|
|
84
|
+
"aria-describedby": describedBy,
|
|
85
|
+
children: /* @__PURE__ */ jsx(LabelView, {
|
|
86
|
+
optional: false,
|
|
87
|
+
children: stringFormatter.format("dateRange.endTime")
|
|
88
|
+
})
|
|
89
|
+
}),
|
|
90
|
+
hasRangeError && /* @__PURE__ */ jsx(FieldErrorView, {
|
|
91
|
+
id: rangeErrorId,
|
|
92
|
+
className: DateTimeRangeFields_module_default.rangeError,
|
|
93
|
+
children: stringFormatter.format("dateRange.endBeforeStart")
|
|
94
|
+
})
|
|
95
|
+
]
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
//#endregion
|
|
99
|
+
export { DateTimeRangeFields, DateTimeRangeFields as default };
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=DateTimeRangeFields.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateTimeRangeFields.mjs","names":["locales","styles"],"sources":["../../../../../../../../../../../src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.tsx"],"sourcesContent":["import { type FC, useId, useState } from \"react\";\nimport {\n getListDateTimeRangeUpdate,\n isListDateTimeRangeEndBeforeStart,\n listDateTimeRangeFieldsFromValue,\n toListCalendarDate,\n toListTime,\n type ListDateTimeRangeFields,\n} from \"@mittwald/flow-components-base\";\nimport clsx from \"clsx\";\nimport DatePickerView from \"@/views/DatePickerView\";\nimport TimeFieldView from \"@/views/TimeFieldView\";\nimport LabelView from \"@/views/LabelView\";\nimport FieldErrorView from \"@/views/FieldErrorView\";\nimport DivView from \"@/views/DivView\";\nimport { useLocalizedStringFormatter } from \"@/components/TranslationProvider/useLocalizedStringFormatter\";\nimport locales from \"../../../../locales/*.locale.json\";\nimport type { AnyDateRangeFilter } from \"@/components/List/model/filter/types\";\nimport styles from \"./DateTimeRangeFields.module.scss\";\n\ninterface Props {\n filter: AnyDateRangeFilter;\n className?: string;\n}\n\nexport const DateTimeRangeFields: FC<Props> = (props) => {\n const { filter, className } = props;\n\n const stringFormatter = useLocalizedStringFormatter(locales, \"List\");\n\n const value = filter.getValue();\n const [appliedValue, setAppliedValue] = useState(value);\n const [fields, setFields] = useState(() =>\n listDateTimeRangeFieldsFromValue(value),\n );\n\n if (value !== appliedValue) {\n setAppliedValue(value);\n setFields(listDateTimeRangeFieldsFromValue(value));\n }\n\n const options = filter.dateTimeRangeOptions;\n const minValue = toListCalendarDate(options?.minValue);\n const maxValue = toListCalendarDate(options?.maxValue);\n\n const update = (change: Partial<ListDateTimeRangeFields>) => {\n const next = { ...fields, ...change };\n setFields(next);\n\n const newValue = getListDateTimeRangeUpdate(next, appliedValue, options);\n if (newValue === undefined) {\n return;\n }\n\n setAppliedValue(newValue);\n\n if (newValue) {\n filter.setValue(newValue);\n } else {\n filter.clear();\n }\n };\n\n const rangeErrorId = useId();\n const hasRangeError = isListDateTimeRangeEndBeforeStart(fields);\n const describedBy = hasRangeError ? rangeErrorId : undefined;\n\n return (\n <DivView className={clsx(styles.dateTimeRangeFields, className)}>\n <DatePickerView\n value={fields.startDate}\n onChange={(date) => update({ startDate: toListCalendarDate(date) })}\n minValue={minValue}\n maxValue={maxValue}\n aria-describedby={describedBy}\n isDateUnavailable={options?.isDateUnavailable}\n >\n <LabelView optional={false}>\n {stringFormatter.format(\"dateRange.startDate\")}\n </LabelView>\n <FieldErrorView />\n </DatePickerView>\n <TimeFieldView\n value={fields.startTime}\n onChange={(time) => update({ startTime: toListTime(time) })}\n aria-describedby={describedBy}\n >\n <LabelView optional={false}>\n {stringFormatter.format(\"dateRange.startTime\")}\n </LabelView>\n </TimeFieldView>\n <DatePickerView\n value={fields.endDate}\n onChange={(date) => update({ endDate: toListCalendarDate(date) })}\n minValue={minValue}\n maxValue={maxValue}\n aria-describedby={describedBy}\n isDateUnavailable={options?.isDateUnavailable}\n >\n <LabelView optional={false}>\n {stringFormatter.format(\"dateRange.endDate\")}\n </LabelView>\n <FieldErrorView />\n </DatePickerView>\n <TimeFieldView\n value={fields.endTime}\n onChange={(time) => update({ endTime: toListTime(time) })}\n aria-describedby={describedBy}\n >\n <LabelView optional={false}>\n {stringFormatter.format(\"dateRange.endTime\")}\n </LabelView>\n </TimeFieldView>\n {hasRangeError && (\n <FieldErrorView id={rangeErrorId} className={styles.rangeError}>\n {stringFormatter.format(\"dateRange.endBeforeStart\")}\n </FieldErrorView>\n )}\n </DivView>\n );\n};\n\nexport default DateTimeRangeFields;\n"],"mappings":";;;;;;;;;;;;;;;;AAyBA,IAAa,uBAAkC,UAAU;CACvD,MAAM,EAAE,QAAQ,cAAc;CAE9B,MAAM,kBAAkB,4BAA4BA,kBAAS,MAAM;CAEnE,MAAM,QAAQ,OAAO,SAAS;CAC9B,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,CAAC,QAAQ,aAAa,eAC1B,iCAAiC,KAAK,CACxC;CAEA,IAAI,UAAU,cAAc;EAC1B,gBAAgB,KAAK;EACrB,UAAU,iCAAiC,KAAK,CAAC;CACnD;CAEA,MAAM,UAAU,OAAO;CACvB,MAAM,WAAW,mBAAmB,SAAS,QAAQ;CACrD,MAAM,WAAW,mBAAmB,SAAS,QAAQ;CAErD,MAAM,UAAU,WAA6C;EAC3D,MAAM,OAAO;GAAE,GAAG;GAAQ,GAAG;EAAO;EACpC,UAAU,IAAI;EAEd,MAAM,WAAW,2BAA2B,MAAM,cAAc,OAAO;EACvE,IAAI,aAAa,KAAA,GACf;EAGF,gBAAgB,QAAQ;EAExB,IAAI,UACF,OAAO,SAAS,QAAQ;OAExB,OAAO,MAAM;CAEjB;CAEA,MAAM,eAAe,MAAM;CAC3B,MAAM,gBAAgB,kCAAkC,MAAM;CAC9D,MAAM,cAAc,gBAAgB,eAAe,KAAA;CAEnD,OACE,qBAAC,SAAD;EAAS,WAAW,KAAKC,mCAAO,qBAAqB,SAAS;EAA9D,UAAA;GACE,qBAAC,gBAAD;IACE,OAAO,OAAO;IACd,WAAW,SAAS,OAAO,EAAE,WAAW,mBAAmB,IAAI,EAAE,CAAC;IACxD;IACA;IACV,oBAAkB;IAClB,mBAAmB,SAAS;IAN9B,UAAA,CAQE,oBAAC,WAAD;KAAW,UAAU;KAClB,UAAA,gBAAgB,OAAO,qBAAqB;IACpC,CAAA,GACX,oBAAC,gBAAD,CAAiB,CAAA,CACH;;GAChB,oBAAC,eAAD;IACE,OAAO,OAAO;IACd,WAAW,SAAS,OAAO,EAAE,WAAW,WAAW,IAAI,EAAE,CAAC;IAC1D,oBAAkB;IAElB,UAAA,oBAAC,WAAD;KAAW,UAAU;KAClB,UAAA,gBAAgB,OAAO,qBAAqB;IACpC,CAAA;GACE,CAAA;GACf,qBAAC,gBAAD;IACE,OAAO,OAAO;IACd,WAAW,SAAS,OAAO,EAAE,SAAS,mBAAmB,IAAI,EAAE,CAAC;IACtD;IACA;IACV,oBAAkB;IAClB,mBAAmB,SAAS;IAN9B,UAAA,CAQE,oBAAC,WAAD;KAAW,UAAU;KAClB,UAAA,gBAAgB,OAAO,mBAAmB;IAClC,CAAA,GACX,oBAAC,gBAAD,CAAiB,CAAA,CACH;;GAChB,oBAAC,eAAD;IACE,OAAO,OAAO;IACd,WAAW,SAAS,OAAO,EAAE,SAAS,WAAW,IAAI,EAAE,CAAC;IACxD,oBAAkB;IAElB,UAAA,oBAAC,WAAD;KAAW,UAAU;KAClB,UAAA,gBAAgB,OAAO,mBAAmB;IAClC,CAAA;GACE,CAAA;GACd,iBACC,oBAAC,gBAAD;IAAgB,IAAI;IAAc,WAAWA,mCAAO;IACjD,UAAA,gBAAgB,OAAO,0BAA0B;GACpC,CAAA;EAEX;;AAEb"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
//#region src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.module.scss
|
|
4
|
+
var dateTimeRangeFields = "flow--list--header--date-time-range-fields";
|
|
5
|
+
var rangeError = "flow--list--header--date-time-range-fields--range-error";
|
|
6
|
+
var DateTimeRangeFields_module_default = {
|
|
7
|
+
dateTimeRangeFields,
|
|
8
|
+
rangeError
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
export { dateTimeRangeFields, DateTimeRangeFields_module_default as default, rangeError };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=DateTimeRangeFields.module.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateTimeRangeFields.module.mjs","names":[],"sources":["../../../../../../../../../../../src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.module.scss"],"sourcesContent":[".dateTimeRangeFields {\n display: grid;\n\n /* Fixed widths that fit the widest value or placeholder (en-US date, 24h\n time), so typing does not resize the popover */\n grid-template-columns: minmax(0, 9.25rem) minmax(0, 6.25rem);\n gap: var(--column-layout--gap--m);\n\n /* An error wraps instead of widening the popover */\n :global(.flow--field-error) {\n contain: inline-size;\n }\n}\n\n.rangeError {\n grid-column: 1 / -1;\n}\n"],"mappings":""}
|
|
@@ -5,12 +5,14 @@ import { useLocalizedStringFormatter } from "../../../../../TranslationProvider/
|
|
|
5
5
|
import { useOverlayController } from "../../../../../../lib/controller/overlay/useOverlayController.mjs";
|
|
6
6
|
import { Popover } from "../../../../../Popover/Popover.mjs";
|
|
7
7
|
import ButtonView from "../../../../../../views/ButtonView.mjs";
|
|
8
|
+
import { isDateRangeValue } from "../../../../../Calendar/components/RangeCalendar/types.mjs";
|
|
8
9
|
import { PopoverTrigger } from "../../../../../Popover/components/PopoverTrigger/PopoverTrigger.mjs";
|
|
9
10
|
import __locale_default from "../../../../../../../../../_virtual/_18.locale.mjs";
|
|
10
11
|
import TextView from "../../../../../../views/TextView.mjs";
|
|
11
12
|
import Header_module_default from "../../Header.module.mjs";
|
|
12
13
|
import FilterContextMenus_module_default from "./FilterContextMenus.module.mjs";
|
|
13
14
|
import RangeCalendarView from "../../../../../../views/RangeCalendarView.mjs";
|
|
15
|
+
import { DateTimeRangeFields } from "../DateTimeRangeFields/DateTimeRangeFields.mjs";
|
|
14
16
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
15
17
|
//#region src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.tsx
|
|
16
18
|
var DateRangeFilterPopover = (props) => {
|
|
@@ -18,6 +20,19 @@ var DateRangeFilterPopover = (props) => {
|
|
|
18
20
|
const { name, property } = filter;
|
|
19
21
|
const stringFormatter = useLocalizedStringFormatter(__locale_default, "List");
|
|
20
22
|
const controller = useOverlayController("Popover");
|
|
23
|
+
const value = filter.getValue();
|
|
24
|
+
const fields = filter.granularity === "minute" ? /* @__PURE__ */ jsx(DateTimeRangeFields, {
|
|
25
|
+
filter,
|
|
26
|
+
className: FilterContextMenus_module_default.dateTimeRange
|
|
27
|
+
}) : /* @__PURE__ */ jsx(RangeCalendarView, {
|
|
28
|
+
...filter.rangeCalendarProps,
|
|
29
|
+
value: isDateRangeValue(value) ? value : null,
|
|
30
|
+
onChange: (range) => {
|
|
31
|
+
filter.setValue(range);
|
|
32
|
+
controller.close();
|
|
33
|
+
},
|
|
34
|
+
className: FilterContextMenus_module_default.calendar
|
|
35
|
+
});
|
|
21
36
|
return /* @__PURE__ */ jsxs(PopoverTrigger, {
|
|
22
37
|
controller,
|
|
23
38
|
children: [/* @__PURE__ */ jsxs(ButtonView, {
|
|
@@ -30,15 +45,7 @@ var DateRangeFilterPopover = (props) => {
|
|
|
30
45
|
placement: "bottom end",
|
|
31
46
|
isDialogContent: true,
|
|
32
47
|
"aria-label": stringFormatter.format("dateRange"),
|
|
33
|
-
children:
|
|
34
|
-
...filter.dateRangeOptions,
|
|
35
|
-
value: filter.getValue(),
|
|
36
|
-
onChange: (range) => {
|
|
37
|
-
filter.setValue(range);
|
|
38
|
-
controller.close();
|
|
39
|
-
},
|
|
40
|
-
className: FilterContextMenus_module_default.calendar
|
|
41
|
-
})
|
|
48
|
+
children: fields
|
|
42
49
|
})]
|
|
43
50
|
});
|
|
44
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateRangeFilterPopover.mjs","names":["locales","
|
|
1
|
+
{"version":3,"file":"DateRangeFilterPopover.mjs","names":["locales","styles","headerStyles"],"sources":["../../../../../../../../../../../src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport ButtonView from \"@/views/ButtonView\";\nimport headerStyles from \"@/components/List/components/Header/Header.module.scss\";\nimport TextView from \"@/views/TextView\";\nimport { IconFilter } from \"@/components/Icon/components/icons\";\nimport { useLocalizedStringFormatter } from \"@/components/TranslationProvider/useLocalizedStringFormatter\";\nimport locales from \"../../../../locales/*.locale.json\";\nimport { Popover, PopoverTrigger } from \"@/components/Popover\";\nimport styles from \"./FilterContextMenus.module.scss\";\nimport { useOverlayController } from \"@/lib/controller\";\nimport RangeCalendarView from \"@/views/RangeCalendarView\";\nimport type { AnyDateRangeFilter } from \"@/components/List/model/filter/types\";\nimport { isDateRangeValue } from \"@/components/Calendar\";\nimport { DateTimeRangeFields } from \"@/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields\";\n\ninterface Props {\n filter: AnyDateRangeFilter;\n isDisabled?: boolean;\n}\n\nexport const DateRangeFilterPopover: FC<Props> = (props) => {\n const { filter, isDisabled } = props;\n\n const { name, property } = filter;\n\n const stringFormatter = useLocalizedStringFormatter(locales, \"List\");\n\n const controller = useOverlayController(\"Popover\");\n\n const value = filter.getValue();\n\n const fields =\n filter.granularity === \"minute\" ? (\n <DateTimeRangeFields filter={filter} className={styles.dateTimeRange} />\n ) : (\n <RangeCalendarView\n {...filter.rangeCalendarProps}\n value={isDateRangeValue(value) ? value : null}\n onChange={(range) => {\n filter.setValue(range);\n controller.close();\n }}\n className={styles.calendar}\n />\n );\n\n return (\n <PopoverTrigger controller={controller}>\n <ButtonView\n className={headerStyles.hideOnMobile}\n variant=\"outline\"\n color=\"secondary\"\n isDisabled={isDisabled}\n >\n <TextView>{name ?? property}</TextView>\n <IconFilter />\n </ButtonView>\n <Popover\n placement=\"bottom end\"\n isDialogContent\n aria-label={stringFormatter.format(\"dateRange\")}\n >\n {fields}\n </Popover>\n </PopoverTrigger>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,IAAa,0BAAqC,UAAU;CAC1D,MAAM,EAAE,QAAQ,eAAe;CAE/B,MAAM,EAAE,MAAM,aAAa;CAE3B,MAAM,kBAAkB,4BAA4BA,kBAAS,MAAM;CAEnE,MAAM,aAAa,qBAAqB,SAAS;CAEjD,MAAM,QAAQ,OAAO,SAAS;CAE9B,MAAM,SACJ,OAAO,gBAAgB,WACrB,oBAAC,qBAAD;EAA6B;EAAQ,WAAWC,kCAAO;CAAgB,CAAA,IAEvE,oBAAC,mBAAD;EACE,GAAI,OAAO;EACX,OAAO,iBAAiB,KAAK,IAAI,QAAQ;EACzC,WAAW,UAAU;GACnB,OAAO,SAAS,KAAK;GACrB,WAAW,MAAM;EACnB;EACA,WAAWA,kCAAO;CACnB,CAAA;CAGL,OACE,qBAAC,gBAAD;EAA4B;EAA5B,UAAA,CACE,qBAAC,YAAD;GACE,WAAWC,sBAAa;GACxB,SAAQ;GACR,OAAM;GACM;GAJd,UAAA,CAME,oBAAC,UAAD,EAAA,UAAW,QAAQ,SAAmB,CAAA,GACtC,oBAAC,YAAD,CAAa,CAAA,CACH;EACZ,CAAA,GAAA,oBAAC,SAAD;GACE,WAAU;GACV,iBAAA;GACA,cAAY,gBAAgB,OAAO,WAAW;GAE7C,UAAA;EACM,CAAA,CACK;;AAEpB"}
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
/* */
|
|
3
3
|
//#region src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.scss
|
|
4
4
|
var calendar = "flow--list--header--filter-context-menu--calendar";
|
|
5
|
-
var
|
|
5
|
+
var dateTimeRange = "flow--list--header--filter-context-menu--date-time-range";
|
|
6
|
+
var FilterContextMenus_module_default = {
|
|
7
|
+
calendar,
|
|
8
|
+
dateTimeRange
|
|
9
|
+
};
|
|
6
10
|
//#endregion
|
|
7
|
-
export { calendar, FilterContextMenus_module_default as default };
|
|
11
|
+
export { calendar, dateTimeRange, FilterContextMenus_module_default as default };
|
|
8
12
|
|
|
9
13
|
//# sourceMappingURL=FilterContextMenus.module.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterContextMenus.module.mjs","names":[],"sources":["../../../../../../../../../../../src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.scss"],"sourcesContent":[".calendar {\n padding: var(--popover--padding--m);\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"FilterContextMenus.module.mjs","names":[],"sources":["../../../../../../../../../../../src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.scss"],"sourcesContent":[".calendar {\n padding: var(--popover--padding--m);\n}\n\n.dateTimeRange {\n padding: var(--popover--padding--m);\n}\n"],"mappings":""}
|
|
@@ -4,7 +4,7 @@ import { useOnChange } from "../../../../../../lib/hooks/useOnChange.mjs";
|
|
|
4
4
|
import SearchFieldView from "../../../../../../views/SearchFieldView.mjs";
|
|
5
5
|
import SearchField_module_default from "./SearchField.module.mjs";
|
|
6
6
|
import { useAriaAnnounceSearchState } from "../../../../hooks/useAriaAnnounceSearchState.mjs";
|
|
7
|
-
import { createElement, useEffect, useState } from "react";
|
|
7
|
+
import { createElement, useEffect, useEffectEvent, useState } from "react";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
//#region src/components/List/components/Header/components/SearchField/SearchField.tsx
|
|
10
10
|
var autoSubmitTimeout = 500;
|
|
@@ -19,9 +19,10 @@ var DefaultSearchFieldRender = (props) => {
|
|
|
19
19
|
onChange(searchString);
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
+
const autoSubmitSearch = useEffectEvent(submitSearch);
|
|
22
23
|
useEffect(() => {
|
|
23
24
|
if (autoSubmit) {
|
|
24
|
-
const timeout = setTimeout(() =>
|
|
25
|
+
const timeout = setTimeout(() => autoSubmitSearch(), autoSubmitTimeout);
|
|
25
26
|
return () => clearTimeout(timeout);
|
|
26
27
|
}
|
|
27
28
|
}, [searchString, autoSubmit]);
|
|
@@ -50,6 +51,7 @@ var SearchField = (props) => {
|
|
|
50
51
|
const { search, isDisabled } = props;
|
|
51
52
|
const render = search.render ?? DefaultSearchFieldRender;
|
|
52
53
|
return createElement(render, {
|
|
54
|
+
key: isDisabled ? "disabled" : "enabled",
|
|
53
55
|
value: search.value,
|
|
54
56
|
onChange: search.setValue.bind(search),
|
|
55
57
|
isDisabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchField.mjs","names":["styles"],"sources":["../../../../../../../../../../../src/components/List/components/Header/components/SearchField/SearchField.tsx"],"sourcesContent":["import type { FC, KeyboardEvent } from \"react\";\nimport { createElement, useEffect, useState } from \"react\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport type { Search } from \"@/components/List/model/search/Search\";\nimport type { SearchFieldRenderComponent } from \"@/components/List/model/search/types\";\nimport { useOnChange } from \"@/lib/hooks\";\nimport SearchFieldView from \"@/views/SearchFieldView\";\nimport styles from \"./SearchField.module.scss\";\nimport { useAriaAnnounceSearchState } from \"@/components/List/hooks/useAriaAnnounceSearchState\";\n\ninterface Props extends PropsWithClassName {\n search: Search<never>;\n isDisabled?: boolean;\n}\n\nconst autoSubmitTimeout = 500;\n\nconst DefaultSearchFieldRender: SearchFieldRenderComponent = (props) => {\n const { onChange, value, autoSubmit = true, ...searchFieldProps } = props;\n\n const [searchString, setSearchString] = useState(value ?? \"\");\n const [previousSearchString, setPreviousSearchString] = useState(\"\");\n\n const submitSearch = () => {\n if (searchString.trim() === \"\") {\n onChange(undefined);\n } else if (previousSearchString !== searchString) {\n setPreviousSearchString(searchString);\n onChange(searchString);\n }\n };\n\n useEffect(() => {\n if (autoSubmit) {\n const timeout = setTimeout(() =>
|
|
1
|
+
{"version":3,"file":"SearchField.mjs","names":["styles"],"sources":["../../../../../../../../../../../src/components/List/components/Header/components/SearchField/SearchField.tsx"],"sourcesContent":["import type { FC, KeyboardEvent } from \"react\";\nimport { createElement, useEffect, useEffectEvent, useState } from \"react\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport type { Search } from \"@/components/List/model/search/Search\";\nimport type { SearchFieldRenderComponent } from \"@/components/List/model/search/types\";\nimport { useOnChange } from \"@/lib/hooks\";\nimport SearchFieldView from \"@/views/SearchFieldView\";\nimport styles from \"./SearchField.module.scss\";\nimport { useAriaAnnounceSearchState } from \"@/components/List/hooks/useAriaAnnounceSearchState\";\n\ninterface Props extends PropsWithClassName {\n search: Search<never>;\n isDisabled?: boolean;\n}\n\nconst autoSubmitTimeout = 500;\n\nconst DefaultSearchFieldRender: SearchFieldRenderComponent = (props) => {\n const { onChange, value, autoSubmit = true, ...searchFieldProps } = props;\n\n const [searchString, setSearchString] = useState(value ?? \"\");\n const [previousSearchString, setPreviousSearchString] = useState(\"\");\n\n const submitSearch = () => {\n if (searchString.trim() === \"\") {\n onChange(undefined);\n } else if (previousSearchString !== searchString) {\n setPreviousSearchString(searchString);\n onChange(searchString);\n }\n };\n\n const autoSubmitSearch = useEffectEvent(submitSearch);\n\n useEffect(() => {\n if (autoSubmit) {\n const timeout = setTimeout(() => autoSubmitSearch(), autoSubmitTimeout);\n return () => clearTimeout(timeout);\n }\n }, [searchString, autoSubmit]);\n\n useAriaAnnounceSearchState();\n\n useOnChange(value, () => {\n setSearchString(value ?? \"\");\n }, [searchString]);\n\n const clearSearch = () => {\n onChange(undefined);\n setSearchString(\"\");\n };\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" && !autoSubmit) {\n submitSearch();\n } else if (e.key === \"Escape\") {\n clearSearch();\n }\n };\n\n return (\n <SearchFieldView\n className={styles.searchField}\n value={searchString}\n onKeyUp={handleKeyPress}\n onChange={(value) => setSearchString(value)}\n onClear={clearSearch}\n {...searchFieldProps}\n />\n );\n};\n\nexport const SearchField: FC<Props> = (props) => {\n const { search, isDisabled } = props;\n\n const render = search.render ?? DefaultSearchFieldRender;\n\n return createElement(render, {\n // autoFocus only acts on mount, and a disabled field cannot take focus –\n // remount once the initial loading enables it.\n key: isDisabled ? \"disabled\" : \"enabled\",\n value: search.value,\n onChange: search.setValue.bind(search),\n isDisabled,\n ...search.textFieldProps,\n });\n};\n\nexport default SearchField;\n"],"mappings":";;;;;;;;;AAeA,IAAM,oBAAoB;AAE1B,IAAM,4BAAwD,UAAU;CACtE,MAAM,EAAE,UAAU,OAAO,aAAa,MAAM,GAAG,qBAAqB;CAEpE,MAAM,CAAC,cAAc,mBAAmB,SAAS,SAAS,EAAE;CAC5D,MAAM,CAAC,sBAAsB,2BAA2B,SAAS,EAAE;CAEnE,MAAM,qBAAqB;EACzB,IAAI,aAAa,KAAK,MAAM,IAC1B,SAAS,KAAA,CAAS;OACb,IAAI,yBAAyB,cAAc;GAChD,wBAAwB,YAAY;GACpC,SAAS,YAAY;EACvB;CACF;CAEA,MAAM,mBAAmB,eAAe,YAAY;CAEpD,gBAAgB;EACd,IAAI,YAAY;GACd,MAAM,UAAU,iBAAiB,iBAAiB,GAAG,iBAAiB;GACtE,aAAa,aAAa,OAAO;EACnC;CACF,GAAG,CAAC,cAAc,UAAU,CAAC;CAE7B,2BAA2B;CAE3B,YAAY,aAAa;EACvB,gBAAgB,SAAS,EAAE;CAC7B,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,oBAAoB;EACxB,SAAS,KAAA,CAAS;EAClB,gBAAgB,EAAE;CACpB;CAEA,MAAM,kBAAkB,MAAqB;EAC3C,IAAI,EAAE,QAAQ,WAAW,CAAC,YACxB,aAAa;OACR,IAAI,EAAE,QAAQ,UACnB,YAAY;CAEhB;CAEA,OACE,oBAAC,iBAAD;EACE,WAAWA,2BAAO;EAClB,OAAO;EACP,SAAS;EACT,WAAW,UAAU,gBAAgB,KAAK;EAC1C,SAAS;EACT,GAAI;CACL,CAAA;AAEL;AAEA,IAAa,eAA0B,UAAU;CAC/C,MAAM,EAAE,QAAQ,eAAe;CAE/B,MAAM,SAAS,OAAO,UAAU;CAEhC,OAAO,cAAc,QAAQ;EAG3B,KAAK,aAAa,aAAa;EAC/B,OAAO,OAAO;EACd,UAAU,OAAO,SAAS,KAAK,MAAM;EACrC;EACA,GAAG,OAAO;CACZ,CAAC;AACH"}
|
|
@@ -7,27 +7,47 @@ import { Item } from "./components/Item/Item.mjs";
|
|
|
7
7
|
import ItemsGridListView from "../../../../views/ItemsGridListView.mjs";
|
|
8
8
|
import { FallbackItems } from "./components/FallbackItems/FallbackItems.mjs";
|
|
9
9
|
import { useInfiniteScrollTrigger } from "../../hooks/useInfiniteScrollTrigger.mjs";
|
|
10
|
+
import { useLatestOnAction } from "../../hooks/useLatestOnAction.mjs";
|
|
10
11
|
import clsx from "clsx";
|
|
12
|
+
import { useRef } from "react";
|
|
11
13
|
import { jsx } from "react/jsx-runtime";
|
|
14
|
+
import { isShallowEqual } from "remeda";
|
|
12
15
|
//#region src/components/List/components/Items/Items.tsx
|
|
13
16
|
var Items = () => {
|
|
14
17
|
const list = useList();
|
|
18
|
+
const lastRender = useRef(null);
|
|
15
19
|
const tiles = list.viewMode.isTiles;
|
|
16
20
|
const isLoading = list.loader.useIsLoading();
|
|
17
21
|
const isInitiallyLoading = list.loader.useIsInitiallyLoading();
|
|
18
22
|
const isLoadingMore = list.loader.useIsLoadingMore();
|
|
19
23
|
const { triggerRef, triggerIndex } = useInfiniteScrollTrigger();
|
|
24
|
+
const onAction = useLatestOnAction(list);
|
|
20
25
|
if (!list.itemView) return null;
|
|
26
|
+
const inputs = [
|
|
27
|
+
tiles,
|
|
28
|
+
isLoading,
|
|
29
|
+
isInitiallyLoading,
|
|
30
|
+
isLoadingMore,
|
|
31
|
+
onAction,
|
|
32
|
+
triggerIndex,
|
|
33
|
+
triggerRef,
|
|
34
|
+
list.accordion,
|
|
35
|
+
list.itemView.tileMaxWidth,
|
|
36
|
+
...list.items.entries.flatMap((item) => [item.id, item.data])
|
|
37
|
+
];
|
|
38
|
+
const last = lastRender.current;
|
|
39
|
+
if (last && isShallowEqual(last.inputs, inputs) && isShallowEqual(last.list.componentProps, list.componentProps) && list.items.entries.every((item) => !!last.list.itemView?.rendersSameFor(list.itemView, item.data))) return last.element;
|
|
21
40
|
const items = list.items.entries.map((item, index) => /* @__PURE__ */ jsx(Item, {
|
|
22
41
|
data: item.data,
|
|
23
42
|
id: item.id,
|
|
24
43
|
list,
|
|
44
|
+
onAction,
|
|
25
45
|
isTile: tiles,
|
|
26
46
|
triggerRef: index === triggerIndex ? triggerRef : void 0
|
|
27
47
|
}, item.id));
|
|
28
48
|
const rootClassName = clsx(Items_module_default.items, isLoading && !(list.infiniteScroll && isLoadingMore) && Items_module_default.isLoading, tiles && Items_module_default.tiles);
|
|
29
49
|
const { "aria-labelledby": ariaLabelledby, "aria-label": ariaLabel, ...rest } = list.componentProps;
|
|
30
|
-
|
|
50
|
+
const element = /* @__PURE__ */ jsx(DivView, {
|
|
31
51
|
"aria-hidden": isInitiallyLoading,
|
|
32
52
|
"aria-busy": isLoading,
|
|
33
53
|
children: /* @__PURE__ */ jsx(ItemsGridListView, {
|
|
@@ -40,6 +60,12 @@ var Items = () => {
|
|
|
40
60
|
children: items.length === 0 && isInitiallyLoading ? /* @__PURE__ */ jsx(FallbackItems, {}) : items
|
|
41
61
|
})
|
|
42
62
|
});
|
|
63
|
+
lastRender.current = {
|
|
64
|
+
inputs,
|
|
65
|
+
list,
|
|
66
|
+
element
|
|
67
|
+
};
|
|
68
|
+
return element;
|
|
43
69
|
};
|
|
44
70
|
//#endregion
|
|
45
71
|
export { Items, Items as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Items.mjs","names":["styles"],"sources":["../../../../../../../../../src/components/List/components/Items/Items.tsx"],"sourcesContent":["import Item from \"@/components/List/components/Items/components/Item/Item\";\nimport { useList } from \"@/components/List/hooks/useList\";\nimport DivView from \"@/views/DivView\";\nimport ItemsGridListView from \"@/views/ItemsGridListView\";\nimport clsx from \"clsx\";\nimport type { FC } from \"react\";\nimport styles from \"./Items.module.scss\";\nimport { FallbackItems } from \"./components/FallbackItems\";\nimport { useInfiniteScrollTrigger } from \"@/components/List/hooks/useInfiniteScrollTrigger\";\n\nexport const Items: FC = () => {\n const list = useList();\n const tiles = list.viewMode.isTiles;\n const isLoading = list.loader.useIsLoading();\n const isInitiallyLoading = list.loader.useIsInitiallyLoading();\n const isLoadingMore = list.loader.useIsLoadingMore();\n\n const { triggerRef, triggerIndex } = useInfiniteScrollTrigger();\n\n if (!list.itemView) {\n return null;\n }\n\n const items = list.items.entries.map((item, index) => (\n <Item\n key={item.id}\n data={item.data}\n id={item.id}\n list={list}\n isTile={tiles}\n triggerRef={index === triggerIndex ? triggerRef : undefined}\n />\n ));\n\n const rootClassName = clsx(\n styles.items,\n isLoading && !(list.infiniteScroll && isLoadingMore) && styles.isLoading,\n tiles && styles.tiles,\n );\n\n const {\n \"aria-labelledby\": ariaLabelledby,\n \"aria-label\": ariaLabel,\n ...rest\n } = list.componentProps;\n\n
|
|
1
|
+
{"version":3,"file":"Items.mjs","names":["styles"],"sources":["../../../../../../../../../src/components/List/components/Items/Items.tsx"],"sourcesContent":["import Item from \"@/components/List/components/Items/components/Item/Item\";\nimport { useList } from \"@/components/List/hooks/useList\";\nimport DivView from \"@/views/DivView\";\nimport ItemsGridListView from \"@/views/ItemsGridListView\";\nimport clsx from \"clsx\";\nimport type { FC, ReactElement } from \"react\";\nimport { useRef } from \"react\";\nimport { isShallowEqual } from \"remeda\";\nimport type List from \"@/components/List/model/List\";\nimport styles from \"./Items.module.scss\";\nimport { FallbackItems } from \"./components/FallbackItems\";\nimport { useInfiniteScrollTrigger } from \"@/components/List/hooks/useInfiniteScrollTrigger\";\nimport { useLatestOnAction } from \"@/components/List/hooks/useLatestOnAction\";\n\ninterface LastRender {\n inputs: unknown[];\n list: List<never>;\n element: ReactElement;\n}\n\nexport const Items: FC = () => {\n const list = useList();\n const lastRender = useRef<LastRender | null>(null);\n const tiles = list.viewMode.isTiles;\n const isLoading = list.loader.useIsLoading();\n const isInitiallyLoading = list.loader.useIsInitiallyLoading();\n const isLoadingMore = list.loader.useIsLoadingMore();\n\n const { triggerRef, triggerIndex } = useInfiniteScrollTrigger();\n\n const onAction = useLatestOnAction(list);\n\n if (!list.itemView) {\n return null;\n }\n\n /*\n * react-aria re-renders every item whenever its GridList renders, Flow's\n * item memo or not. While nothing the items show has changed, the GridList\n * gets the element of the last render, so it does not render at all. Items\n * count as unchanged by the same rule as the item memo.\n */\n const inputs = [\n tiles,\n isLoading,\n isInitiallyLoading,\n isLoadingMore,\n onAction,\n triggerIndex,\n triggerRef,\n list.accordion,\n list.itemView.tileMaxWidth,\n ...list.items.entries.flatMap((item) => [item.id, item.data]),\n ];\n const last = lastRender.current;\n if (\n last &&\n isShallowEqual(last.inputs, inputs) &&\n isShallowEqual(last.list.componentProps, list.componentProps) &&\n list.items.entries.every(\n (item) => !!last.list.itemView?.rendersSameFor(list.itemView, item.data),\n )\n ) {\n return last.element;\n }\n\n const items = list.items.entries.map((item, index) => (\n <Item\n key={item.id}\n data={item.data}\n id={item.id}\n list={list}\n onAction={onAction}\n isTile={tiles}\n triggerRef={index === triggerIndex ? triggerRef : undefined}\n />\n ));\n\n const rootClassName = clsx(\n styles.items,\n isLoading && !(list.infiniteScroll && isLoadingMore) && styles.isLoading,\n tiles && styles.tiles,\n );\n\n const {\n \"aria-labelledby\": ariaLabelledby,\n \"aria-label\": ariaLabel,\n ...rest\n } = list.componentProps;\n\n const element = (\n <DivView aria-hidden={isInitiallyLoading} aria-busy={isLoading}>\n <ItemsGridListView\n className={rootClassName}\n {...rest}\n aria-labelledby={ariaLabel ? undefined : ariaLabelledby}\n aria-label={ariaLabel}\n layout={tiles ? \"grid\" : \"stack\"}\n tileMaxWidth={list.itemView.tileMaxWidth}\n >\n {items.length === 0 && isInitiallyLoading ? <FallbackItems /> : items}\n </ItemsGridListView>\n </DivView>\n );\n lastRender.current = { inputs, list, element };\n return element;\n};\n\nexport default Items;\n"],"mappings":";;;;;;;;;;;;;;;AAoBA,IAAa,cAAkB;CAC7B,MAAM,OAAO,QAAQ;CACrB,MAAM,aAAa,OAA0B,IAAI;CACjD,MAAM,QAAQ,KAAK,SAAS;CAC5B,MAAM,YAAY,KAAK,OAAO,aAAa;CAC3C,MAAM,qBAAqB,KAAK,OAAO,sBAAsB;CAC7D,MAAM,gBAAgB,KAAK,OAAO,iBAAiB;CAEnD,MAAM,EAAE,YAAY,iBAAiB,yBAAyB;CAE9D,MAAM,WAAW,kBAAkB,IAAI;CAEvC,IAAI,CAAC,KAAK,UACR,OAAO;CAST,MAAM,SAAS;EACb;EACA;EACA;EACA;EACA;EACA;EACA;EACA,KAAK;EACL,KAAK,SAAS;EACd,GAAG,KAAK,MAAM,QAAQ,SAAS,SAAS,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC;CAC9D;CACA,MAAM,OAAO,WAAW;CACxB,IACE,QACA,eAAe,KAAK,QAAQ,MAAM,KAClC,eAAe,KAAK,KAAK,gBAAgB,KAAK,cAAc,KAC5D,KAAK,MAAM,QAAQ,OAChB,SAAS,CAAC,CAAC,KAAK,KAAK,UAAU,eAAe,KAAK,UAAU,KAAK,IAAI,CACzE,GAEA,OAAO,KAAK;CAGd,MAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM,UAC1C,oBAAC,MAAD;EAEE,MAAM,KAAK;EACX,IAAI,KAAK;EACH;EACI;EACV,QAAQ;EACR,YAAY,UAAU,eAAe,aAAa,KAAA;CACnD,GAPM,KAAK,EAOX,CACF;CAED,MAAM,gBAAgB,KACpBA,qBAAO,OACP,aAAa,EAAE,KAAK,kBAAkB,kBAAkBA,qBAAO,WAC/D,SAASA,qBAAO,KAClB;CAEA,MAAM,EACJ,mBAAmB,gBACnB,cAAc,WACd,GAAG,SACD,KAAK;CAET,MAAM,UACJ,oBAAC,SAAD;EAAS,eAAa;EAAoB,aAAW;EACnD,UAAA,oBAAC,mBAAD;GACE,WAAW;GACX,GAAI;GACJ,mBAAiB,YAAY,KAAA,IAAY;GACzC,cAAY;GACZ,QAAQ,QAAQ,SAAS;GACzB,cAAc,KAAK,SAAS;GAE3B,UAAA,MAAM,WAAW,KAAK,qBAAqB,oBAAC,eAAD,CAAgB,CAAA,IAAI;EAC/C,CAAA;CACZ,CAAA;CAEX,WAAW,UAAU;EAAE;EAAQ;EAAM;CAAQ;CAC7C,OAAO;AACT"}
|
package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs
CHANGED
|
@@ -36,7 +36,7 @@ var ItemImpl = (props) => {
|
|
|
36
36
|
})
|
|
37
37
|
});
|
|
38
38
|
};
|
|
39
|
-
var Item = memo(ItemImpl, (prev, next) => prev.id === next.id && prev.data === next.data && prev.triggerRef === next.triggerRef && prev.isTile === next.isTile && prev.
|
|
39
|
+
var Item = memo(ItemImpl, (prev, next) => prev.id === next.id && prev.data === next.data && prev.triggerRef === next.triggerRef && prev.isTile === next.isTile && !!prev.onAction === !!next.onAction && prev.list.accordion === next.list.accordion && !!prev.list.itemView?.rendersSameFor(next.list.itemView, next.data));
|
|
40
40
|
Item.displayName = "Item";
|
|
41
41
|
var ItemContainer = (props) => {
|
|
42
42
|
const list = useList();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Item.mjs","names":["styles"],"sources":["../../../../../../../../../../../src/components/List/components/Items/components/Item/Item.tsx"],"sourcesContent":["import { useGridItemProps } from \"@/components/List/components/Items/components/Item/hooks/useGridItemProps\";\nimport { useList } from \"@/components/List/hooks/useList\";\nimport type ListModel from \"@/components/List/model/List\";\nimport ItemsGridListItemView from \"@/views/ItemsGridListItemView\";\nimport { mergeRefs } from \"@react-aria/utils\";\nimport type { FC, PropsWithChildren, Ref } from \"react\";\nimport { memo, Suspense } from \"react\";\nimport type { Key } from \"react-aria-components\";\nimport styles from \"./Item.module.scss\";\nimport { ItemLoadingView } from \"./components/ItemLoadingView/ItemLoadingView\";\n\ninterface Props extends PropsWithChildren {\n id: Key;\n data: never;\n triggerRef?: Ref<HTMLDivElement>;\n list: ListModel<never>;\n isTile: boolean;\n}\n\nconst ItemImpl = (props: Props) => {\n const { id, data, triggerRef, list, isTile } = props;\n\n const itemView = list.itemView;\n\n const { gridItemProps, children } = useGridItemProps(props, list);\n\n if (!itemView) {\n return null;\n }\n\n const textValue = itemView.textValue ? itemView.textValue(data) : undefined;\n const href = itemView.href ? itemView.href(data) : undefined;\n const hasAction = !!gridItemProps.onAction || !!href;\n\n const existingRef = \"ref\" in gridItemProps ? gridItemProps.ref : undefined;\n const gridItemPropsWithRef = triggerRef\n ? { ...gridItemProps, ref: mergeRefs(existingRef, triggerRef) }\n : gridItemProps;\n\n return (\n <ItemsGridListItemView\n id={id}\n textValue={textValue}\n href={href}\n target={itemView.target}\n hasAction={hasAction}\n isTile={isTile}\n {...gridItemPropsWithRef}\n >\n <Suspense fallback={<ItemLoadingView />}>{children}</Suspense>\n </ItemsGridListItemView>\n );\n};\n\n// The list model is rebuilt on every render, so it cannot be compared by\n// identity — but everything an item renders from it can.
|
|
1
|
+
{"version":3,"file":"Item.mjs","names":["styles"],"sources":["../../../../../../../../../../../src/components/List/components/Items/components/Item/Item.tsx"],"sourcesContent":["import { useGridItemProps } from \"@/components/List/components/Items/components/Item/hooks/useGridItemProps\";\nimport { useList } from \"@/components/List/hooks/useList\";\nimport type ListModel from \"@/components/List/model/List\";\nimport ItemsGridListItemView from \"@/views/ItemsGridListItemView\";\nimport { mergeRefs } from \"@react-aria/utils\";\nimport type { FC, PropsWithChildren, Ref } from \"react\";\nimport { memo, Suspense } from \"react\";\nimport type { Key } from \"react-aria-components\";\nimport styles from \"./Item.module.scss\";\nimport { ItemLoadingView } from \"./components/ItemLoadingView/ItemLoadingView\";\n\ninterface Props extends PropsWithChildren {\n id: Key;\n data: never;\n triggerRef?: Ref<HTMLDivElement>;\n list: ListModel<never>;\n isTile: boolean;\n /** Stable invoker of the list's latest `onAction` */\n onAction?: (data: never) => void;\n}\n\nconst ItemImpl = (props: Props) => {\n const { id, data, triggerRef, list, isTile } = props;\n\n const itemView = list.itemView;\n\n const { gridItemProps, children } = useGridItemProps(props, list);\n\n if (!itemView) {\n return null;\n }\n\n const textValue = itemView.textValue ? itemView.textValue(data) : undefined;\n const href = itemView.href ? itemView.href(data) : undefined;\n const hasAction = !!gridItemProps.onAction || !!href;\n\n const existingRef = \"ref\" in gridItemProps ? gridItemProps.ref : undefined;\n const gridItemPropsWithRef = triggerRef\n ? { ...gridItemProps, ref: mergeRefs(existingRef, triggerRef) }\n : gridItemProps;\n\n return (\n <ItemsGridListItemView\n id={id}\n textValue={textValue}\n href={href}\n target={itemView.target}\n hasAction={hasAction}\n isTile={isTile}\n {...gridItemPropsWithRef}\n >\n <Suspense fallback={<ItemLoadingView />}>{children}</Suspense>\n </ItemsGridListItemView>\n );\n};\n\n// The list model is rebuilt on every render, so it cannot be compared by\n// identity — but everything an item renders from it can. The render function\n// counts by its `renderDependencies`, or else by its identity: an inline one\n// changes whenever the consumer re-renders, so parent state no longer leaves\n// an item frozen on the values it first saw (#3065), while loading more still\n// skips the re-render. `onAction` arrives as a stable invoker of the latest\n// handler, and `textValue`/`href` count by their result.\nexport const Item = memo(\n ItemImpl,\n (prev, next) =>\n prev.id === next.id &&\n prev.data === next.data &&\n prev.triggerRef === next.triggerRef &&\n prev.isTile === next.isTile &&\n !!prev.onAction === !!next.onAction &&\n prev.list.accordion === next.list.accordion &&\n !!prev.list.itemView?.rendersSameFor(next.list.itemView, next.data),\n);\nItem.displayName = \"Item\";\n\ninterface ItemContainerProps extends PropsWithChildren {\n id?: Key;\n data?: never;\n}\n\nexport const ItemContainer: FC<ItemContainerProps> = (props) => {\n const list = useList();\n return (\n <ItemsGridListItemView\n textValue=\"-\"\n className={styles.item}\n isTile={list.viewMode.isTiles}\n >\n {props.children}\n </ItemsGridListItemView>\n );\n};\n\nexport default Item;\n"],"mappings":";;;;;;;;;;;AAqBA,IAAM,YAAY,UAAiB;CACjC,MAAM,EAAE,IAAI,MAAM,YAAY,MAAM,WAAW;CAE/C,MAAM,WAAW,KAAK;CAEtB,MAAM,EAAE,eAAe,aAAa,iBAAiB,OAAO,IAAI;CAEhE,IAAI,CAAC,UACH,OAAO;CAGT,MAAM,YAAY,SAAS,YAAY,SAAS,UAAU,IAAI,IAAI,KAAA;CAClE,MAAM,OAAO,SAAS,OAAO,SAAS,KAAK,IAAI,IAAI,KAAA;CACnD,MAAM,YAAY,CAAC,CAAC,cAAc,YAAY,CAAC,CAAC;CAEhD,MAAM,cAAc,SAAS,gBAAgB,cAAc,MAAM,KAAA;CACjE,MAAM,uBAAuB,aACzB;EAAE,GAAG;EAAe,KAAK,UAAU,aAAa,UAAU;CAAE,IAC5D;CAEJ,OACE,oBAAC,uBAAD;EACM;EACO;EACL;EACN,QAAQ,SAAS;EACN;EACH;EACR,GAAI;EAEJ,UAAA,oBAAC,UAAD;GAAU,UAAU,oBAAC,iBAAD,CAAkB,CAAA;GAAI;EAAmB,CAAA;CACxC,CAAA;AAE3B;AASA,IAAa,OAAO,KAClB,WACC,MAAM,SACL,KAAK,OAAO,KAAK,MACjB,KAAK,SAAS,KAAK,QACnB,KAAK,eAAe,KAAK,cACzB,KAAK,WAAW,KAAK,UACrB,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,KAAK,YAC3B,KAAK,KAAK,cAAc,KAAK,KAAK,aAClC,CAAC,CAAC,KAAK,KAAK,UAAU,eAAe,KAAK,KAAK,UAAU,KAAK,IAAI,CACtE;AACA,KAAK,cAAc;AAOnB,IAAa,iBAAyC,UAAU;CAC9D,MAAM,OAAO,QAAQ;CACrB,OACE,oBAAC,uBAAD;EACE,WAAU;EACV,WAAWA,oBAAO;EAClB,QAAQ,KAAK,SAAS;EAErB,UAAA,MAAM;CACc,CAAA;AAE3B"}
|
|
@@ -7,9 +7,8 @@ import { useEffect, useId, useRef, useState } from "react";
|
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
8
|
//#region src/components/List/components/Items/components/Item/hooks/useGridItemProps.tsx
|
|
9
9
|
var useGridItemProps = (props, list) => {
|
|
10
|
-
const { data, children: childrenFromProps } = props;
|
|
10
|
+
const { data, onAction, children: childrenFromProps } = props;
|
|
11
11
|
const itemView = list.itemView;
|
|
12
|
-
const onAction = list.onAction;
|
|
13
12
|
const [isExpanded, setIsExpanded] = useState(itemView?.defaultExpanded?.(data) ?? false);
|
|
14
13
|
const contentElementId = useId();
|
|
15
14
|
const itemRef = useRef(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGridItemProps.mjs","names":[],"sources":["../../../../../../../../../../../../src/components/List/components/Items/components/Item/hooks/useGridItemProps.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport type List from \"@/components/List/model/List\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { dynamic, PropsContextProvider } from \"@/lib/propsContext\";\nimport { AccordionButton } from \"@/components/List/components/Items/components/Item/components/AccordionButton\";\n\ninterface P extends PropsWithChildren {\n data: never;\n}\n\nexport const useGridItemProps = (props: P, list: List<never>) => {\n const { data, children: childrenFromProps } = props;\n const itemView = list.itemView;\n
|
|
1
|
+
{"version":3,"file":"useGridItemProps.mjs","names":[],"sources":["../../../../../../../../../../../../src/components/List/components/Items/components/Item/hooks/useGridItemProps.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport type List from \"@/components/List/model/List\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { dynamic, PropsContextProvider } from \"@/lib/propsContext\";\nimport { AccordionButton } from \"@/components/List/components/Items/components/Item/components/AccordionButton\";\n\ninterface P extends PropsWithChildren {\n data: never;\n onAction?: (data: never) => void;\n}\n\nexport const useGridItemProps = (props: P, list: List<never>) => {\n const { data, onAction, children: childrenFromProps } = props;\n const itemView = list.itemView;\n\n const [isExpanded, setIsExpanded] = useState(\n itemView?.defaultExpanded?.(data) ?? false,\n );\n const contentElementId = useId();\n const itemRef = useRef<HTMLDivElement>(null);\n\n const accordion = list.accordion;\n const children = childrenFromProps ?? itemView?.render(data);\n\n useEffect(() => {\n if (accordion) {\n itemRef.current?.setAttribute(\"aria-expanded\", String(isExpanded));\n itemRef.current?.setAttribute(\"aria-controls\", contentElementId);\n }\n }, [isExpanded, contentElementId, itemRef.current, accordion]);\n\n if (!accordion) {\n return {\n gridItemProps: {\n onAction: onAction\n ? () => {\n onAction?.(data);\n }\n : undefined,\n },\n children,\n };\n }\n\n const toggleAccordion = () => {\n setIsExpanded((current) => !current);\n onAction?.(data);\n };\n\n const propsContext: PropsContext = {\n Content: {\n id: dynamic((p) => (p.slot === \"bottom\" ? contentElementId : undefined)),\n wrapWith: dynamic((p) =>\n p.slot === \"bottom\" ? (\n <AccordionButton\n contentElementId={contentElementId}\n toggle={toggleAccordion}\n isExpanded={isExpanded}\n />\n ) : undefined,\n ),\n },\n };\n\n return {\n gridItemProps: {\n ref: itemRef,\n onAction: toggleAccordion,\n },\n children: (\n <PropsContextProvider\n props={propsContext}\n dependencies={[contentElementId, isExpanded]}\n >\n {children}\n </PropsContextProvider>\n ),\n };\n};\n"],"mappings":";;;;;;;;AAYA,IAAa,oBAAoB,OAAU,SAAsB;CAC/D,MAAM,EAAE,MAAM,UAAU,UAAU,sBAAsB;CACxD,MAAM,WAAW,KAAK;CAEtB,MAAM,CAAC,YAAY,iBAAiB,SAClC,UAAU,kBAAkB,IAAI,KAAK,KACvC;CACA,MAAM,mBAAmB,MAAM;CAC/B,MAAM,UAAU,OAAuB,IAAI;CAE3C,MAAM,YAAY,KAAK;CACvB,MAAM,WAAW,qBAAqB,UAAU,OAAO,IAAI;CAE3D,gBAAgB;EACd,IAAI,WAAW;GACb,QAAQ,SAAS,aAAa,iBAAiB,OAAO,UAAU,CAAC;GACjE,QAAQ,SAAS,aAAa,iBAAiB,gBAAgB;EACjE;CACF,GAAG;EAAC;EAAY;EAAkB,QAAQ;EAAS;CAAS,CAAC;CAE7D,IAAI,CAAC,WACH,OAAO;EACL,eAAe,EACb,UAAU,iBACA;GACJ,WAAW,IAAI;EACjB,IACA,KAAA,EACN;EACA;CACF;CAGF,MAAM,wBAAwB;EAC5B,eAAe,YAAY,CAAC,OAAO;EACnC,WAAW,IAAI;CACjB;CAEA,MAAM,eAA6B,EACjC,SAAS;EACP,IAAI,SAAS,MAAO,EAAE,SAAS,WAAW,mBAAmB,KAAA,CAAU;EACvE,UAAU,SAAS,MACjB,EAAE,SAAS,WACT,oBAAC,iBAAD;GACoB;GAClB,QAAQ;GACI;EACb,CAAA,IACC,KAAA,CACN;CACF,EACF;CAEA,OAAO;EACL,eAAe;GACb,KAAK;GACL,UAAU;EACZ;EACA,UACE,oBAAC,sBAAD;GACE,OAAO;GACP,cAAc,CAAC,kBAAkB,UAAU;GAE1C;EACmB,CAAA;CAE1B;AACF"}
|
package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
|
+
import { useLabelledBySectionHeading } from "../../../../../Section/context.mjs";
|
|
3
4
|
import { jsx } from "react/jsx-runtime";
|
|
4
5
|
import * as Aria from "react-aria-components";
|
|
5
6
|
//#region src/components/List/components/Items/views/GridList/GridList.tsx
|
|
6
7
|
/** @flr-generate all */
|
|
7
8
|
var GridList = (props) => {
|
|
8
9
|
const { tileMaxWidth, emptyView, ...rest } = props;
|
|
10
|
+
const ariaLabelledBy = useLabelledBySectionHeading(rest);
|
|
9
11
|
return /* @__PURE__ */ jsx(Aria.GridList, {
|
|
10
12
|
...rest,
|
|
13
|
+
"aria-labelledby": ariaLabelledBy,
|
|
11
14
|
renderEmptyState: () => emptyView,
|
|
12
15
|
style: { gridTemplateColumns: `repeat(auto-fill, minmax(${tileMaxWidth}px, 1fr))` }
|
|
13
16
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridList.mjs","names":[],"sources":["../../../../../../../../../../../src/components/List/components/Items/views/GridList/GridList.tsx"],"sourcesContent":["import * as Aria from \"react-aria-components\";\nimport type { FC, ReactNode } from \"react\";\n\nexport type GridListProps = Aria.GridListProps<never> & {\n tileMaxWidth: number;\n emptyView?: ReactNode;\n};\n\n/** @flr-generate all */\nexport const GridList: FC<GridListProps> = (props) => {\n const { tileMaxWidth, emptyView, ...rest } = props;\n\n return (\n <Aria.GridList\n {...rest}\n renderEmptyState={() => emptyView}\n style={{\n gridTemplateColumns: `repeat(auto-fill, minmax(${tileMaxWidth}px, 1fr))`,\n }}\n />\n );\n};\n\nexport default GridList;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"GridList.mjs","names":[],"sources":["../../../../../../../../../../../src/components/List/components/Items/views/GridList/GridList.tsx"],"sourcesContent":["import * as Aria from \"react-aria-components\";\nimport type { FC, ReactNode } from \"react\";\nimport { useLabelledBySectionHeading } from \"@/components/Section/context\";\n\nexport type GridListProps = Aria.GridListProps<never> & {\n tileMaxWidth: number;\n emptyView?: ReactNode;\n};\n\n/** @flr-generate all */\nexport const GridList: FC<GridListProps> = (props) => {\n const { tileMaxWidth, emptyView, ...rest } = props;\n const ariaLabelledBy = useLabelledBySectionHeading(rest);\n\n return (\n <Aria.GridList\n {...rest}\n aria-labelledby={ariaLabelledBy}\n renderEmptyState={() => emptyView}\n style={{\n gridTemplateColumns: `repeat(auto-fill, minmax(${tileMaxWidth}px, 1fr))`,\n }}\n />\n );\n};\n\nexport default GridList;\n"],"mappings":";;;;;;;AAUA,IAAa,YAA+B,UAAU;CACpD,MAAM,EAAE,cAAc,WAAW,GAAG,SAAS;CAC7C,MAAM,iBAAiB,4BAA4B,IAAI;CAEvD,OACE,oBAAC,KAAK,UAAN;EACE,GAAI;EACJ,mBAAiB;EACjB,wBAAwB;EACxB,OAAO,EACL,qBAAqB,4BAA4B,aAAa,WAChE;CACD,CAAA;AAEL"}
|
package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.mjs
CHANGED
|
@@ -8,54 +8,56 @@ import { UiComponentTunnelExit } from "../../../UiComponentTunnel/UiComponentTun
|
|
|
8
8
|
import { OptionsButton } from "../Items/components/Item/components/OptionsButton/OptionsButton.mjs";
|
|
9
9
|
import ListItemView_module_default from "./ListItemView.module.mjs";
|
|
10
10
|
import ListItemViewContentView from "../../../../views/ListItemViewContentView.mjs";
|
|
11
|
-
import {
|
|
11
|
+
import { useListSelector } from "../../hooks/useListSelector.mjs";
|
|
12
12
|
import { jsx } from "react/jsx-runtime";
|
|
13
13
|
//#region src/components/List/components/ListItemView/ListItemView.tsx
|
|
14
|
+
var buttonTunnel = {
|
|
15
|
+
id: "button",
|
|
16
|
+
component: "ListItemView"
|
|
17
|
+
};
|
|
18
|
+
var buildPropsContext = (buttonSize) => ({
|
|
19
|
+
...overlayTriggersTunneledTo(buttonTunnel),
|
|
20
|
+
ContextMenu: {
|
|
21
|
+
tunnel: buttonTunnel,
|
|
22
|
+
placement: "bottom right",
|
|
23
|
+
wrapWith: /* @__PURE__ */ jsx(OptionsButton, { className: ListItemView_module_default.action })
|
|
24
|
+
},
|
|
25
|
+
Button: {
|
|
26
|
+
tunnel: buttonTunnel,
|
|
27
|
+
size: buttonSize
|
|
28
|
+
},
|
|
29
|
+
ActionGroup: {
|
|
30
|
+
tunnel: buttonTunnel,
|
|
31
|
+
Button: { tunnel: null }
|
|
32
|
+
},
|
|
33
|
+
Avatar: { tunnel: {
|
|
34
|
+
id: "avatar",
|
|
35
|
+
component: "ListItemView"
|
|
36
|
+
} },
|
|
37
|
+
Heading: { tunnel: {
|
|
38
|
+
id: "title",
|
|
39
|
+
component: "ListItemView"
|
|
40
|
+
} },
|
|
41
|
+
Text: { tunnel: {
|
|
42
|
+
id: "text",
|
|
43
|
+
component: "ListItemView"
|
|
44
|
+
} },
|
|
45
|
+
Content: { tunnel: dynamic((p) => p.slot === "bottom" ? {
|
|
46
|
+
id: "bottom",
|
|
47
|
+
component: "ListItemView"
|
|
48
|
+
} : void 0) },
|
|
49
|
+
Checkbox: { tunnel: {
|
|
50
|
+
id: "checkbox",
|
|
51
|
+
component: "ListItemView"
|
|
52
|
+
} }
|
|
53
|
+
});
|
|
54
|
+
var listPropsContext = buildPropsContext("m");
|
|
55
|
+
var tilesPropsContext = buildPropsContext("s");
|
|
14
56
|
var ListItemView = flowComponent("ListItemView", (props) => {
|
|
15
57
|
const { children, s, m, l } = props;
|
|
16
|
-
const
|
|
17
|
-
const buttonTunnel = {
|
|
18
|
-
id: "button",
|
|
19
|
-
component: "ListItemView"
|
|
20
|
-
};
|
|
21
|
-
const propsContext = {
|
|
22
|
-
...overlayTriggersTunneledTo(buttonTunnel),
|
|
23
|
-
ContextMenu: {
|
|
24
|
-
tunnel: buttonTunnel,
|
|
25
|
-
placement: "bottom right",
|
|
26
|
-
wrapWith: /* @__PURE__ */ jsx(OptionsButton, { className: ListItemView_module_default.action })
|
|
27
|
-
},
|
|
28
|
-
Button: {
|
|
29
|
-
tunnel: buttonTunnel,
|
|
30
|
-
size: dynamic(() => useList().viewMode.isTiles ? "s" : "m")
|
|
31
|
-
},
|
|
32
|
-
ActionGroup: {
|
|
33
|
-
tunnel: buttonTunnel,
|
|
34
|
-
Button: { tunnel: null }
|
|
35
|
-
},
|
|
36
|
-
Avatar: { tunnel: {
|
|
37
|
-
id: "avatar",
|
|
38
|
-
component: "ListItemView"
|
|
39
|
-
} },
|
|
40
|
-
Heading: { tunnel: {
|
|
41
|
-
id: "title",
|
|
42
|
-
component: "ListItemView"
|
|
43
|
-
} },
|
|
44
|
-
Text: { tunnel: {
|
|
45
|
-
id: "text",
|
|
46
|
-
component: "ListItemView"
|
|
47
|
-
} },
|
|
48
|
-
Content: { tunnel: dynamic((p) => p.slot === "bottom" ? {
|
|
49
|
-
id: "bottom",
|
|
50
|
-
component: "ListItemView"
|
|
51
|
-
} : void 0) },
|
|
52
|
-
Checkbox: { tunnel: {
|
|
53
|
-
id: "checkbox",
|
|
54
|
-
component: "ListItemView"
|
|
55
|
-
} }
|
|
56
|
-
};
|
|
58
|
+
const viewMode = useListSelector((list) => list.viewMode.value);
|
|
57
59
|
return /* @__PURE__ */ jsx(ListItemViewContentView, {
|
|
58
|
-
viewMode
|
|
60
|
+
viewMode,
|
|
59
61
|
title: /* @__PURE__ */ jsx(UiComponentTunnelExit, {
|
|
60
62
|
id: "title",
|
|
61
63
|
component: "ListItemView"
|
|
@@ -84,7 +86,7 @@ var ListItemView = flowComponent("ListItemView", (props) => {
|
|
|
84
86
|
m,
|
|
85
87
|
l,
|
|
86
88
|
children: /* @__PURE__ */ jsx(PropsContextProvider, {
|
|
87
|
-
props:
|
|
89
|
+
props: viewMode === "tiles" ? tilesPropsContext : listPropsContext,
|
|
88
90
|
children
|
|
89
91
|
})
|
|
90
92
|
});
|
package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListItemView.mjs","names":["styles"],"sources":["../../../../../../../../../src/components/List/components/ListItemView/ListItemView.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport styles from \"./ListItemView.module.scss\";\nimport ListItemViewContentView from \"@/views/ListItemViewContentView\";\nimport {\n dynamic,\n overlayTriggersTunneledTo,\n type PropsContext,\n PropsContextProvider,\n} from \"@/lib/propsContext\";\nimport { OptionsButton } from \"@/components/List/components/Items/components/Item/components/OptionsButton\";\nimport {
|
|
1
|
+
{"version":3,"file":"ListItemView.mjs","names":["styles"],"sources":["../../../../../../../../../src/components/List/components/ListItemView/ListItemView.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport styles from \"./ListItemView.module.scss\";\nimport ListItemViewContentView from \"@/views/ListItemViewContentView\";\nimport {\n dynamic,\n overlayTriggersTunneledTo,\n type PropsContext,\n PropsContextProvider,\n} from \"@/lib/propsContext\";\nimport { OptionsButton } from \"@/components/List/components/Items/components/Item/components/OptionsButton\";\nimport { useListSelector } from \"@/components/List/hooks/useListSelector\";\nimport type { ColumnLayoutProps } from \"@/components/ColumnLayout\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport { UiComponentTunnelExit } from \"@/components/UiComponentTunnel/UiComponentTunnelExit\";\n\n/*\n * Built once per view mode: a new object on every render would hand every item\n * a new props context and re-render its content.\n */\nconst buttonTunnel = {\n id: \"button\",\n component: \"ListItemView\",\n} as const;\n\nconst buildPropsContext = (buttonSize: \"s\" | \"m\"): PropsContext => ({\n ...overlayTriggersTunneledTo(buttonTunnel),\n ContextMenu: {\n tunnel: buttonTunnel,\n placement: \"bottom right\",\n wrapWith: <OptionsButton className={styles.action} />,\n },\n Button: {\n tunnel: buttonTunnel,\n size: buttonSize,\n },\n ActionGroup: {\n tunnel: buttonTunnel,\n Button: {\n tunnel: null,\n },\n },\n Avatar: {\n tunnel: {\n id: \"avatar\",\n component: \"ListItemView\",\n },\n },\n Heading: {\n tunnel: {\n id: \"title\",\n component: \"ListItemView\",\n },\n },\n Text: {\n tunnel: {\n id: \"text\",\n component: \"ListItemView\",\n },\n },\n Content: {\n tunnel: dynamic((p) =>\n p.slot === \"bottom\"\n ? {\n id: \"bottom\",\n component: \"ListItemView\",\n }\n : undefined,\n ),\n },\n Checkbox: {\n tunnel: {\n id: \"checkbox\",\n component: \"ListItemView\",\n },\n },\n});\n\nconst listPropsContext = buildPropsContext(\"m\");\nconst tilesPropsContext = buildPropsContext(\"s\");\n\nexport type ListItemViewProps = PropsWithChildren &\n Pick<ColumnLayoutProps, \"s\" | \"m\" | \"l\">;\n\nexport const ListItemView = flowComponent(\n \"ListItemView\",\n (props: ListItemViewProps) => {\n const { children, s, m, l } = props;\n const viewMode = useListSelector((list) => list.viewMode.value);\n const propsContext =\n viewMode === \"tiles\" ? tilesPropsContext : listPropsContext;\n\n return (\n <ListItemViewContentView\n viewMode={viewMode}\n title={<UiComponentTunnelExit id=\"title\" component=\"ListItemView\" />}\n avatar={<UiComponentTunnelExit id=\"avatar\" component=\"ListItemView\" />}\n button={<UiComponentTunnelExit id=\"button\" component=\"ListItemView\" />}\n subTitle={<UiComponentTunnelExit id=\"text\" component=\"ListItemView\" />}\n bottom={<UiComponentTunnelExit id=\"bottom\" component=\"ListItemView\" />}\n checkbox={\n <UiComponentTunnelExit id=\"checkbox\" component=\"ListItemView\" />\n }\n s={s}\n m={m}\n l={l}\n >\n <PropsContextProvider props={propsContext}>\n {children}\n </PropsContextProvider>\n </ListItemViewContentView>\n );\n },\n {\n type: \"layout\",\n },\n);\n\nexport default ListItemView;\n"],"mappings":";;;;;;;;;;;;;AAmBA,IAAM,eAAe;CACnB,IAAI;CACJ,WAAW;AACb;AAEA,IAAM,qBAAqB,gBAAyC;CAClE,GAAG,0BAA0B,YAAY;CACzC,aAAa;EACX,QAAQ;EACR,WAAW;EACX,UAAU,oBAAC,eAAD,EAAe,WAAWA,4BAAO,OAAS,CAAA;CACtD;CACA,QAAQ;EACN,QAAQ;EACR,MAAM;CACR;CACA,aAAa;EACX,QAAQ;EACR,QAAQ,EACN,QAAQ,KACV;CACF;CACA,QAAQ,EACN,QAAQ;EACN,IAAI;EACJ,WAAW;CACb,EACF;CACA,SAAS,EACP,QAAQ;EACN,IAAI;EACJ,WAAW;CACb,EACF;CACA,MAAM,EACJ,QAAQ;EACN,IAAI;EACJ,WAAW;CACb,EACF;CACA,SAAS,EACP,QAAQ,SAAS,MACf,EAAE,SAAS,WACP;EACE,IAAI;EACJ,WAAW;CACb,IACA,KAAA,CACN,EACF;CACA,UAAU,EACR,QAAQ;EACN,IAAI;EACJ,WAAW;CACb,EACF;AACF;AAEA,IAAM,mBAAmB,kBAAkB,GAAG;AAC9C,IAAM,oBAAoB,kBAAkB,GAAG;AAK/C,IAAa,eAAe,cAC1B,iBACC,UAA6B;CAC5B,MAAM,EAAE,UAAU,GAAG,GAAG,MAAM;CAC9B,MAAM,WAAW,iBAAiB,SAAS,KAAK,SAAS,KAAK;CAI9D,OACE,oBAAC,yBAAD;EACY;EACV,OAAO,oBAAC,uBAAD;GAAuB,IAAG;GAAQ,WAAU;EAAgB,CAAA;EACnE,QAAQ,oBAAC,uBAAD;GAAuB,IAAG;GAAS,WAAU;EAAgB,CAAA;EACrE,QAAQ,oBAAC,uBAAD;GAAuB,IAAG;GAAS,WAAU;EAAgB,CAAA;EACrE,UAAU,oBAAC,uBAAD;GAAuB,IAAG;GAAO,WAAU;EAAgB,CAAA;EACrE,QAAQ,oBAAC,uBAAD;GAAuB,IAAG;GAAS,WAAU;EAAgB,CAAA;EACrE,UACE,oBAAC,uBAAD;GAAuB,IAAG;GAAW,WAAU;EAAgB,CAAA;EAE9D;EACA;EACA;EAEH,UAAA,oBAAC,sBAAD;GAAsB,OAjBxB,aAAa,UAAU,oBAAoB;GAkBtC;EACmB,CAAA;CACC,CAAA;AAE7B,GACA,EACE,MAAM,SACR,CACF"}
|