@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.
Files changed (292) hide show
  1. package/AGENTS.md +132 -88
  2. package/USAGE.md +7 -2
  3. package/dist/assets/component-index.json +1 -1
  4. package/dist/assets/doc-properties.json +1 -1
  5. package/dist/css/all-layered.css +1 -1
  6. package/dist/css/all.css +1 -1
  7. package/dist/js/_virtual/_18.locale.mjs +14 -0
  8. package/dist/js/default.mjs +4 -3
  9. package/dist/js/flr-universal.mjs +2 -1
  10. 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
  11. package/dist/js/node_modules/.pnpm/@lezer_lr@1.4.11/node_modules/@lezer/lr/dist/index.mjs.map +1 -0
  12. package/dist/js/packages/components/src/components/AccentBox/AccentBox.mjs +3 -2
  13. package/dist/js/packages/components/src/components/AccentBox/AccentBox.mjs.map +1 -1
  14. package/dist/js/packages/components/src/components/Accordion/Accordion.mjs +3 -2
  15. package/dist/js/packages/components/src/components/Accordion/Accordion.mjs.map +1 -1
  16. package/dist/js/packages/components/src/components/Action/models/ActionState.mjs +2 -2
  17. package/dist/js/packages/components/src/components/ActionGroup/ActionGroup.mjs +3 -3
  18. package/dist/js/packages/components/src/components/ActionGroup/ActionGroup.mjs.map +1 -1
  19. package/dist/js/packages/components/src/components/Activity/Activity.mjs +1 -1
  20. package/dist/js/packages/components/src/components/Activity/Activity.mjs.map +1 -1
  21. package/dist/js/packages/components/src/components/Alert/Alert.mjs +3 -2
  22. package/dist/js/packages/components/src/components/Alert/Alert.mjs.map +1 -1
  23. package/dist/js/packages/components/src/components/AlertBadge/AlertBadge.mjs +1 -1
  24. package/dist/js/packages/components/src/components/AlertBadge/AlertBadge.mjs.map +1 -1
  25. package/dist/js/packages/components/src/components/AlertBadge/AlertBadge.module.mjs.map +1 -1
  26. package/dist/js/packages/components/src/components/Badge/Badge.mjs +2 -2
  27. package/dist/js/packages/components/src/components/Badge/Badge.mjs.map +1 -1
  28. package/dist/js/packages/components/src/components/Badge/Badge.module.mjs.map +1 -1
  29. package/dist/js/packages/components/src/components/Calendar/components/RangeCalendar/helpers/useCalendarDateRangePresets.mjs +1 -1
  30. package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.mjs +6 -8
  31. package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.mjs.map +1 -1
  32. package/dist/js/packages/components/src/components/CartesianChart/components/YAxis/YAxis.mjs +23 -5
  33. package/dist/js/packages/components/src/components/CartesianChart/components/YAxis/YAxis.mjs.map +1 -1
  34. package/dist/js/packages/components/src/components/CartesianChart/hooks/useTickLabelWidth.mjs +67 -0
  35. package/dist/js/packages/components/src/components/CartesianChart/hooks/useTickLabelWidth.mjs.map +1 -0
  36. package/dist/js/packages/components/src/components/Checkbox/Checkbox.mjs +2 -2
  37. package/dist/js/packages/components/src/components/Checkbox/Checkbox.mjs.map +1 -1
  38. package/dist/js/packages/components/src/components/CodeBlock/CodeBlock.mjs +3 -3
  39. package/dist/js/packages/components/src/components/CodeBlock/CodeBlock.mjs.map +1 -1
  40. package/dist/js/packages/components/src/components/CodeEditor/CodeEditor.mjs +41 -12
  41. package/dist/js/packages/components/src/components/CodeEditor/CodeEditor.mjs.map +1 -1
  42. package/dist/js/packages/components/src/components/CodeEditor/hooks/useCodeEditorExtensions.mjs +29 -16
  43. package/dist/js/packages/components/src/components/CodeEditor/hooks/useCodeEditorExtensions.mjs.map +1 -1
  44. package/dist/js/packages/components/src/components/CodeEditor/languages/dotEnv/dotEnv.mjs +1 -1
  45. package/dist/js/packages/components/src/components/ComboBox/ComboBox.mjs +3 -2
  46. package/dist/js/packages/components/src/components/ComboBox/ComboBox.mjs.map +1 -1
  47. package/dist/js/packages/components/src/components/CountryOptions/CountryOptions.mjs +5 -1
  48. package/dist/js/packages/components/src/components/CountryOptions/CountryOptions.mjs.map +1 -1
  49. package/dist/js/packages/components/src/components/DatePicker/DatePicker.mjs +2 -1
  50. package/dist/js/packages/components/src/components/DatePicker/DatePicker.mjs.map +1 -1
  51. package/dist/js/packages/components/src/components/DateRangePicker/DateRangePicker.mjs +2 -1
  52. package/dist/js/packages/components/src/components/DateRangePicker/DateRangePicker.mjs.map +1 -1
  53. package/dist/js/packages/components/src/components/DeprecationWarningProvider/DeprecationWarningProvider.mjs +40 -8
  54. package/dist/js/packages/components/src/components/DeprecationWarningProvider/DeprecationWarningProvider.mjs.map +1 -1
  55. package/dist/js/packages/components/src/components/DonutChart/DonutChart.mjs.map +1 -1
  56. package/dist/js/packages/components/src/components/Heading/Heading.mjs +2 -0
  57. package/dist/js/packages/components/src/components/Heading/Heading.mjs.map +1 -1
  58. package/dist/js/packages/components/src/components/Heading/Heading.module.mjs.map +1 -1
  59. package/dist/js/packages/components/src/components/Icon/Icon.module.mjs.map +1 -1
  60. package/dist/js/packages/components/src/components/IllustratedMessage/IllustratedMessage.mjs +3 -2
  61. package/dist/js/packages/components/src/components/IllustratedMessage/IllustratedMessage.mjs.map +1 -1
  62. package/dist/js/packages/components/src/components/Label/Label.mjs +0 -4
  63. package/dist/js/packages/components/src/components/Label/Label.mjs.map +1 -1
  64. package/dist/js/packages/components/src/components/Link/Link.mjs.map +1 -1
  65. package/dist/js/packages/components/src/components/List/List.mjs +27 -23
  66. package/dist/js/packages/components/src/components/List/List.mjs.map +1 -1
  67. package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs +5 -2
  68. package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs.map +1 -1
  69. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs +2 -2
  70. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs.map +1 -1
  71. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionDateRange.mjs +5 -3
  72. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionDateRange.mjs.map +1 -1
  73. package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.mjs +101 -0
  74. package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.mjs.map +1 -0
  75. package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.module.mjs +13 -0
  76. package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.module.mjs.map +1 -0
  77. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.mjs +16 -9
  78. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.mjs.map +1 -1
  79. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.mjs +6 -2
  80. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.mjs.map +1 -1
  81. package/dist/js/packages/components/src/components/List/components/Header/components/SearchField/SearchField.mjs +4 -2
  82. package/dist/js/packages/components/src/components/List/components/Header/components/SearchField/SearchField.mjs.map +1 -1
  83. package/dist/js/packages/components/src/components/List/components/Items/Items.mjs +27 -1
  84. package/dist/js/packages/components/src/components/List/components/Items/Items.mjs.map +1 -1
  85. package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs +1 -1
  86. package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs.map +1 -1
  87. package/dist/js/packages/components/src/components/List/components/Items/components/Item/hooks/useGridItemProps.mjs +1 -2
  88. package/dist/js/packages/components/src/components/List/components/Items/components/Item/hooks/useGridItemProps.mjs.map +1 -1
  89. package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs +3 -0
  90. package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs.map +1 -1
  91. package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.mjs +46 -44
  92. package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.mjs.map +1 -1
  93. package/dist/js/packages/components/src/components/List/components/ListItemView/components/ListItemViewContent/ListItemViewContent.mjs +25 -25
  94. package/dist/js/packages/components/src/components/List/components/ListItemView/components/ListItemViewContent/ListItemViewContent.mjs.map +1 -1
  95. package/dist/js/packages/components/src/components/List/components/ListSummary/ListSummary.mjs +5 -9
  96. package/dist/js/packages/components/src/components/List/components/ListSummary/ListSummary.mjs.map +1 -1
  97. package/dist/js/packages/components/src/components/List/components/Table/Table.mjs +29 -13
  98. package/dist/js/packages/components/src/components/List/components/Table/Table.mjs.map +1 -1
  99. package/dist/js/packages/components/src/components/List/components/Table/components/Row.mjs +31 -0
  100. package/dist/js/packages/components/src/components/List/components/Table/components/Row.mjs.map +1 -0
  101. package/dist/js/packages/components/src/components/List/hooks/useLatestOnAction.mjs +21 -0
  102. package/dist/js/packages/components/src/components/List/hooks/useLatestOnAction.mjs.map +1 -0
  103. package/dist/js/packages/components/src/components/List/hooks/useListSelector.mjs +18 -0
  104. package/dist/js/packages/components/src/components/List/hooks/useListSelector.mjs.map +1 -0
  105. package/dist/js/packages/components/src/components/List/listContext.mjs +32 -2
  106. package/dist/js/packages/components/src/components/List/listContext.mjs.map +1 -1
  107. package/dist/js/packages/components/src/components/List/model/List.mjs +1 -0
  108. package/dist/js/packages/components/src/components/List/model/List.mjs.map +1 -1
  109. package/dist/js/packages/components/src/components/List/model/ListViewMode.mjs +2 -2
  110. package/dist/js/packages/components/src/components/List/model/ReactTable.mjs +2 -2
  111. package/dist/js/packages/components/src/components/List/model/filter/DateRangeFilter.mjs +15 -2
  112. package/dist/js/packages/components/src/components/List/model/filter/DateRangeFilter.mjs.map +1 -1
  113. package/dist/js/packages/components/src/components/List/model/filter/resolveDateRangeFilterValue.mjs +16 -0
  114. package/dist/js/packages/components/src/components/List/model/filter/resolveDateRangeFilterValue.mjs.map +1 -0
  115. package/dist/js/packages/components/src/components/List/model/item/ItemView.mjs +20 -7
  116. package/dist/js/packages/components/src/components/List/model/item/ItemView.mjs.map +1 -1
  117. package/dist/js/packages/components/src/components/List/model/loading/IncrementalLoaderState.mjs +2 -2
  118. package/dist/js/packages/components/src/components/List/model/table/Table.mjs +11 -1
  119. package/dist/js/packages/components/src/components/List/model/table/Table.mjs.map +1 -1
  120. package/dist/js/packages/components/src/components/List/model/table/TableBody.mjs +5 -1
  121. package/dist/js/packages/components/src/components/List/model/table/TableBody.mjs.map +1 -1
  122. package/dist/js/packages/components/src/components/List/model/table/TableCell.mjs +1 -1
  123. package/dist/js/packages/components/src/components/List/model/table/TableCell.mjs.map +1 -1
  124. package/dist/js/packages/components/src/components/List/model/table/TableColumn.mjs +4 -0
  125. package/dist/js/packages/components/src/components/List/model/table/TableColumn.mjs.map +1 -1
  126. package/dist/js/packages/components/src/components/List/model/table/TableHeader.mjs +8 -1
  127. package/dist/js/packages/components/src/components/List/model/table/TableHeader.mjs.map +1 -1
  128. package/dist/js/packages/components/src/components/List/model/table/TableRow.mjs +28 -1
  129. package/dist/js/packages/components/src/components/List/model/table/TableRow.mjs.map +1 -1
  130. package/dist/js/packages/components/src/components/Markdown/Markdown.mjs +25 -7
  131. package/dist/js/packages/components/src/components/Markdown/Markdown.mjs.map +1 -1
  132. package/dist/js/packages/components/src/components/Markdown/components/SkeletonBlocks.mjs +1 -1
  133. package/dist/js/packages/components/src/components/Markdown/components/SkeletonBlocks.mjs.map +1 -1
  134. package/dist/js/packages/components/src/components/Markdown/lib/isExternalHref.mjs +8 -0
  135. package/dist/js/packages/components/src/components/Markdown/lib/isExternalHref.mjs.map +1 -0
  136. package/dist/js/packages/components/src/components/MenuItem/MenuItem.mjs +32 -3
  137. package/dist/js/packages/components/src/components/MenuItem/MenuItem.mjs.map +1 -1
  138. package/dist/js/packages/components/src/components/MenuItem/MenuItem.module.mjs +1 -3
  139. package/dist/js/packages/components/src/components/MessageThread/MessageThread.mjs +1 -1
  140. package/dist/js/packages/components/src/components/MessageThread/MessageThread.mjs.map +1 -1
  141. package/dist/js/packages/components/src/components/Modal/Modal.mjs +9 -2
  142. package/dist/js/packages/components/src/components/Modal/Modal.mjs.map +1 -1
  143. package/dist/js/packages/components/src/components/Navigation/Navigation.module.mjs +1 -3
  144. package/dist/js/packages/components/src/components/NumberField/NumberField.mjs +2 -3
  145. package/dist/js/packages/components/src/components/NumberField/NumberField.mjs.map +1 -1
  146. package/dist/js/packages/components/src/components/Option/Option.module.mjs +1 -3
  147. package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs +2 -1
  148. package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs.map +1 -1
  149. package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs +3 -3
  150. package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs.map +1 -1
  151. package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs +1 -1
  152. package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs.map +1 -1
  153. package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs +4 -2
  154. package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs.map +1 -1
  155. package/dist/js/packages/components/src/components/ProgressBar/ProgressBar.mjs.map +1 -1
  156. package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarLegend.mjs +5 -4
  157. package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarLegend.mjs.map +1 -1
  158. package/dist/js/packages/components/src/components/RadioGroup/RadioGroup.mjs +2 -3
  159. package/dist/js/packages/components/src/components/RadioGroup/RadioGroup.mjs.map +1 -1
  160. package/dist/js/packages/components/src/components/Rating/Rating.mjs +12 -11
  161. package/dist/js/packages/components/src/components/Rating/Rating.mjs.map +1 -1
  162. package/dist/js/packages/components/src/components/SearchField/SearchField.mjs +2 -3
  163. package/dist/js/packages/components/src/components/SearchField/SearchField.mjs.map +1 -1
  164. package/dist/js/packages/components/src/components/Section/Section.mjs +9 -5
  165. package/dist/js/packages/components/src/components/Section/Section.mjs.map +1 -1
  166. package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.mjs +0 -4
  167. package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.mjs.map +1 -1
  168. package/dist/js/packages/components/src/components/Section/context.mjs +47 -0
  169. package/dist/js/packages/components/src/components/Section/context.mjs.map +1 -0
  170. package/dist/js/packages/components/src/components/SegmentedControl/SegmentedControl.mjs +2 -3
  171. package/dist/js/packages/components/src/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  172. package/dist/js/packages/components/src/components/Select/Select.mjs +2 -3
  173. package/dist/js/packages/components/src/components/Select/Select.mjs.map +1 -1
  174. package/dist/js/packages/components/src/components/Slider/Slider.mjs +47 -41
  175. package/dist/js/packages/components/src/components/Slider/Slider.mjs.map +1 -1
  176. package/dist/js/packages/components/src/components/Table/Table.mjs +3 -0
  177. package/dist/js/packages/components/src/components/Table/Table.mjs.map +1 -1
  178. package/dist/js/packages/components/src/components/Table/Table.module.mjs.map +1 -1
  179. package/dist/js/packages/components/src/components/Table/components/TableCell/TableCell.mjs +5 -12
  180. package/dist/js/packages/components/src/components/Table/components/TableCell/TableCell.mjs.map +1 -1
  181. package/dist/js/packages/components/src/components/Table/components/TableColumn/TableColumn.mjs +4 -2
  182. package/dist/js/packages/components/src/components/Table/components/TableColumn/TableColumn.mjs.map +1 -1
  183. package/dist/js/packages/components/src/components/Table/components/TableHeader/TableHeader.mjs +7 -1
  184. package/dist/js/packages/components/src/components/Table/components/TableHeader/TableHeader.mjs.map +1 -1
  185. package/dist/js/packages/components/src/components/Table/components/TableHeader/context.mjs +14 -0
  186. package/dist/js/packages/components/src/components/Table/components/TableHeader/context.mjs.map +1 -0
  187. package/dist/js/packages/components/src/components/Tabs/Tabs.mjs +6 -8
  188. package/dist/js/packages/components/src/components/Tabs/Tabs.mjs.map +1 -1
  189. package/dist/js/packages/components/src/components/Tabs/Tabs.module.mjs.map +1 -1
  190. package/dist/js/packages/components/src/components/Tabs/components/TabTitle/TabTitle.module.mjs.map +1 -1
  191. package/dist/js/packages/components/src/components/Text/Text.module.mjs.map +1 -1
  192. package/dist/js/packages/components/src/components/TextField/TextField.mjs +11 -8
  193. package/dist/js/packages/components/src/components/TextField/TextField.mjs.map +1 -1
  194. package/dist/js/packages/components/src/components/TranslationProvider/useLocalizedStringFormatter.mjs +15 -2
  195. package/dist/js/packages/components/src/components/TranslationProvider/useLocalizedStringFormatter.mjs.map +1 -1
  196. package/dist/js/packages/components/src/components/Wrap/Wrap.mjs.map +1 -1
  197. package/dist/js/packages/components/src/integrations/react-hook-form/components/Field/Field.mjs +1 -1
  198. package/dist/js/packages/components/src/integrations/react-hook-form/components/Form/Form.mjs +4 -1
  199. package/dist/js/packages/components/src/integrations/react-hook-form/components/Form/Form.mjs.map +1 -1
  200. package/dist/js/packages/components/src/integrations/react-hook-form/components/FormRootError/FormRootError.mjs +1 -1
  201. package/dist/js/packages/components/src/integrations/react-hook-form/components/FormSettingsProvider/FormSettingsProvider.mjs.map +1 -1
  202. package/dist/js/packages/components/src/lib/controller/overlay/OverlayController.mjs +10 -158
  203. package/dist/js/packages/components/src/lib/controller/overlay/OverlayController.mjs.map +1 -1
  204. package/dist/js/packages/components/src/lib/controller/overlay/useCloseOverlayConfirmationController.mjs +1 -0
  205. package/dist/js/packages/components/src/lib/controller/overlay/useCloseOverlayConfirmationController.mjs.map +1 -1
  206. package/dist/js/packages/components/src/lib/hooks/dom/useVirtualKeyboardVisible.mjs +8 -4
  207. package/dist/js/packages/components/src/lib/hooks/dom/useVirtualKeyboardVisible.mjs.map +1 -1
  208. package/dist/js/packages/components/src/lib/object/isPlainObjectDeepEqual.mjs +29 -0
  209. package/dist/js/packages/components/src/lib/object/isPlainObjectDeepEqual.mjs.map +1 -0
  210. package/dist/js/packages/components/src/lib/propsContext/components/ClearPropsContext.mjs +2 -1
  211. package/dist/js/packages/components/src/lib/propsContext/components/ClearPropsContext.mjs.map +1 -1
  212. package/dist/js/packages/components/src/lib/propsContext/components/PropsContextProvider.mjs +14 -3
  213. package/dist/js/packages/components/src/lib/propsContext/components/PropsContextProvider.mjs.map +1 -1
  214. package/dist/js/packages/components/src/lib/slotContext/SlotContextProvider.mjs +9 -4
  215. package/dist/js/packages/components/src/lib/slotContext/SlotContextProvider.mjs.map +1 -1
  216. package/dist/js/packages/components/src/views/DatePickerView.mjs +16 -0
  217. package/dist/js/packages/components/src/views/DatePickerView.mjs.map +1 -0
  218. package/dist/js/packages/components/src/views/LabelView.mjs +16 -0
  219. package/dist/js/packages/components/src/views/LabelView.mjs.map +1 -0
  220. package/dist/js/packages/components/src/views/TimeFieldView.mjs +16 -0
  221. package/dist/js/packages/components/src/views/TimeFieldView.mjs.map +1 -0
  222. package/dist/js/packages/components-base/src/index.mjs +5 -2
  223. package/dist/js/packages/components-base/src/list/filter/ListDateRangeFilter.mjs +1 -0
  224. package/dist/js/packages/components-base/src/list/filter/ListDateRangeFilter.mjs.map +1 -1
  225. package/dist/js/packages/components-base/src/list/filter/ListFilter.mjs +4 -1
  226. package/dist/js/packages/components-base/src/list/filter/ListFilter.mjs.map +1 -1
  227. package/dist/js/packages/components-base/src/list/filter/dateRange.mjs +37 -13
  228. package/dist/js/packages/components-base/src/list/filter/dateRange.mjs.map +1 -1
  229. package/dist/js/packages/components-base/src/list/filter/dateTimeRangeFields.mjs +55 -0
  230. package/dist/js/packages/components-base/src/list/filter/dateTimeRangeFields.mjs.map +1 -0
  231. package/dist/js/packages/components-base/src/list/filter/formatDateRange.mjs +27 -0
  232. package/dist/js/packages/components-base/src/list/filter/formatDateRange.mjs.map +1 -0
  233. package/dist/js/packages/components-base/src/list/loading/ListLoaderState.mjs +10 -5
  234. package/dist/js/packages/components-base/src/list/loading/ListLoaderState.mjs.map +1 -1
  235. package/dist/js/packages/components-base/src/overlay/OverlayState.mjs +196 -0
  236. package/dist/js/packages/components-base/src/overlay/OverlayState.mjs.map +1 -0
  237. package/dist/js/packages/design-tokens/dist/json-runtime/all-dark.mjs +1 -1
  238. package/dist/js/packages/design-tokens/dist/json-runtime/all-dark.mjs.map +1 -1
  239. package/dist/js/packages/design-tokens/dist/json-runtime/all-light.mjs +1 -1
  240. package/dist/js/packages/design-tokens/dist/json-runtime/all-light.mjs.map +1 -1
  241. package/dist/types/_bundled/flow-components-base/index.d.ts +4 -1
  242. package/dist/types/_bundled/flow-components-base/list/filter/ListFilter.d.ts +2 -0
  243. package/dist/types/_bundled/flow-components-base/list/filter/dateRange.d.ts +24 -1
  244. package/dist/types/_bundled/flow-components-base/list/filter/dateTimeRangeFields.d.ts +34 -0
  245. package/dist/types/_bundled/flow-components-base/list/filter/formatDateRange.d.ts +7 -0
  246. package/dist/types/_bundled/flow-components-base/list/loading/ListLoaderState.d.ts +5 -0
  247. package/dist/types/_bundled/flow-components-base/overlay/OverlayState.d.ts +94 -0
  248. package/dist/types/components/AlertBadge/AlertBadge.d.ts +2 -2
  249. package/dist/types/components/Badge/Badge.d.ts +2 -2
  250. package/dist/types/components/CartesianChart/hooks/useTickLabelWidth.d.ts +1 -0
  251. package/dist/types/components/CodeBlock/CodeBlock.d.ts +1 -1
  252. package/dist/types/components/DonutChart/DonutChart.d.ts +1 -4
  253. package/dist/types/components/Link/Link.d.ts +1 -1
  254. package/dist/types/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.d.ts +8 -0
  255. package/dist/types/components/List/components/Items/components/Item/Item.d.ts +2 -0
  256. package/dist/types/components/List/components/Items/components/Item/hooks/useGridItemProps.d.ts +1 -0
  257. package/dist/types/components/List/components/ListSummary/ListSummary.d.ts +3 -2
  258. package/dist/types/components/List/components/Table/components/Row.d.ts +13 -0
  259. package/dist/types/components/List/hooks/useLatestOnAction.d.ts +7 -0
  260. package/dist/types/components/List/hooks/useListSelector.d.ts +6 -0
  261. package/dist/types/components/List/index.d.ts +2 -0
  262. package/dist/types/components/List/listContext.d.ts +16 -0
  263. package/dist/types/components/List/model/filter/DateRangeFilter.d.ts +15 -8
  264. package/dist/types/components/List/model/filter/resolveDateRangeFilterValue.d.ts +11 -0
  265. package/dist/types/components/List/model/filter/types.d.ts +23 -1
  266. package/dist/types/components/List/model/item/ItemView.d.ts +34 -11
  267. package/dist/types/components/List/model/table/Table.d.ts +7 -0
  268. package/dist/types/components/List/model/table/TableBody.d.ts +1 -0
  269. package/dist/types/components/List/model/table/TableColumn.d.ts +1 -0
  270. package/dist/types/components/List/model/table/TableHeader.d.ts +1 -0
  271. package/dist/types/components/List/model/table/TableRow.d.ts +14 -0
  272. package/dist/types/components/List/model/table/types.d.ts +17 -1
  273. package/dist/types/components/List/typedList.d.ts +1 -0
  274. package/dist/types/components/Markdown/lib/isExternalHref.d.ts +1 -0
  275. package/dist/types/components/ProgressBar/ProgressBar.d.ts +1 -4
  276. package/dist/types/components/Rating/Rating.d.ts +5 -5
  277. package/dist/types/components/Section/context.d.ts +28 -0
  278. package/dist/types/components/Table/components/TableCell/TableCell.d.ts +4 -1
  279. package/dist/types/components/Table/components/TableHeader/context.d.ts +6 -0
  280. package/dist/types/components/Wrap/Wrap.d.ts +5 -0
  281. package/dist/types/index/flr-universal.d.ts +1 -1
  282. package/dist/types/integrations/react-hook-form/components/FormSettingsProvider/FormSettingsProvider.d.ts +7 -1
  283. package/dist/types/lib/controller/overlay/OverlayController.d.ts +8 -74
  284. package/dist/types/lib/dev/hydrateServerMarkup.d.ts +2 -0
  285. package/dist/types/lib/hooks/dom/useVirtualKeyboardVisible.d.ts +4 -1
  286. package/dist/types/lib/object/isPlainObjectDeepEqual.d.ts +8 -0
  287. package/package.json +12 -12
  288. package/dist/js/node_modules/.pnpm/@lezer_lr@1.4.10/node_modules/@lezer/lr/dist/index.mjs.map +0 -1
  289. package/dist/js/packages/components/src/lib/date/transformDateValueToFormattedDate.mjs +0 -10
  290. package/dist/js/packages/components/src/lib/date/transformDateValueToFormattedDate.mjs.map +0 -1
  291. package/dist/types/lib/date/transformDateValueToDateTime.d.ts +0 -3
  292. 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: /* @__PURE__ */ jsx(RangeCalendarView, {
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","headerStyles","styles"],"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\";\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 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 <RangeCalendarView\n {...filter.dateRangeOptions}\n value={filter.getValue()}\n onChange={(range) => {\n filter.setValue(range);\n controller.close();\n }}\n className={styles.calendar}\n />\n </Popover>\n </PopoverTrigger>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,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,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;GAE9C,UAAA,oBAAC,mBAAD;IACE,GAAI,OAAO;IACX,OAAO,OAAO,SAAS;IACvB,WAAW,UAAU;KACnB,OAAO,SAAS,KAAK;KACrB,WAAW,MAAM;IACnB;IACA,WAAWC,kCAAO;GACnB,CAAA;EACM,CAAA,CACK;;AAEpB"}
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 FilterContextMenus_module_default = { calendar };
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(() => submitSearch(), autoSubmitTimeout);
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(() => submitSearch(), 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 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,gBAAgB;EACd,IAAI,YAAY;GACd,MAAM,UAAU,iBAAiB,aAAa,GAAG,iBAAiB;GAClE,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;EAC3B,OAAO,OAAO;EACd,UAAU,OAAO,SAAS,KAAK,MAAM;EACrC;EACA,GAAG,OAAO;CACZ,CAAC;AACH"}
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
- return /* @__PURE__ */ jsx(DivView, {
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 return (\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};\n\nexport default Items;\n"],"mappings":";;;;;;;;;;;;AAUA,IAAa,cAAkB;CAC7B,MAAM,OAAO,QAAQ;CACrB,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,IAAI,CAAC,KAAK,UACR,OAAO;CAGT,MAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM,UAC1C,oBAAC,MAAD;EAEE,MAAM,KAAK;EACX,IAAI,KAAK;EACH;EACN,QAAQ;EACR,YAAY,UAAU,eAAe,aAAa,KAAA;CACnD,GANM,KAAK,EAMX,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,OACE,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;AAEb"}
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"}
@@ -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.list.onAction === next.list.onAction && prev.list.accordion === next.list.accordion && !!prev.list.itemView?.rendersSameAs(next.list.itemView));
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. Those closures come\n// from the consumer's own JSX and only change when the consumer re-renders,\n// so loading more still skips the re-render while parent state no longer\n// leaves an item frozen on the values it first saw.\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.list.onAction === next.list.onAction &&\n prev.list.accordion === next.list.accordion &&\n !!prev.list.itemView?.rendersSameAs(next.list.itemView),\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":";;;;;;;;;;;AAmBA,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;AAOA,IAAa,OAAO,KAClB,WACC,MAAM,SACL,KAAK,OAAO,KAAK,MACjB,KAAK,SAAS,KAAK,QACnB,KAAK,eAAe,KAAK,cACzB,KAAK,WAAW,KAAK,UACrB,KAAK,KAAK,aAAa,KAAK,KAAK,YACjC,KAAK,KAAK,cAAc,KAAK,KAAK,aAClC,CAAC,CAAC,KAAK,KAAK,UAAU,cAAc,KAAK,KAAK,QAAQ,CAC1D;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"}
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 const onAction = list.onAction;\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":";;;;;;;;AAWA,IAAa,oBAAoB,OAAU,SAAsB;CAC/D,MAAM,EAAE,MAAM,UAAU,sBAAsB;CAC9C,MAAM,WAAW,KAAK;CACtB,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"}
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"}
@@ -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":";;;;;;AASA,IAAa,YAA+B,UAAU;CACpD,MAAM,EAAE,cAAc,WAAW,GAAG,SAAS;CAE7C,OACE,oBAAC,KAAK,UAAN;EACE,GAAI;EACJ,wBAAwB;EACxB,OAAO,EACL,qBAAqB,4BAA4B,aAAa,WAChE;CACD,CAAA;AAEL"}
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"}
@@ -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 { useList } from "../../hooks/useList.mjs";
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 list = useList();
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: list.viewMode.value,
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: propsContext,
89
+ props: viewMode === "tiles" ? tilesPropsContext : listPropsContext,
88
90
  children
89
91
  })
90
92
  });
@@ -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 { useList } from \"@/components/List\";\nimport type { ColumnLayoutProps } from \"@/components/ColumnLayout\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport { UiComponentTunnelExit } from \"@/components/UiComponentTunnel/UiComponentTunnelExit\";\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 list = useList();\n\n const buttonTunnel = {\n id: \"button\",\n component: \"ListItemView\",\n } as const;\n\n const propsContext: 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: dynamic(() => (useList().viewMode.isTiles ? \"s\" : \"m\")),\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\n return (\n <ListItemViewContentView\n viewMode={list.viewMode.value}\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":";;;;;;;;;;;;;AAkBA,IAAa,eAAe,cAC1B,iBACC,UAA6B;CAC5B,MAAM,EAAE,UAAU,GAAG,GAAG,MAAM;CAC9B,MAAM,OAAO,QAAQ;CAErB,MAAM,eAAe;EACnB,IAAI;EACJ,WAAW;CACb;CAEA,MAAM,eAA6B;EACjC,GAAG,0BAA0B,YAAY;EACzC,aAAa;GACX,QAAQ;GACR,WAAW;GACX,UAAU,oBAAC,eAAD,EAAe,WAAWA,4BAAO,OAAS,CAAA;EACtD;EACA,QAAQ;GACN,QAAQ;GACR,MAAM,cAAe,QAAQ,CAAC,CAAC,SAAS,UAAU,MAAM,GAAI;EAC9D;EACA,aAAa;GACX,QAAQ;GACR,QAAQ,EACN,QAAQ,KACV;EACF;EACA,QAAQ,EACN,QAAQ;GACN,IAAI;GACJ,WAAW;EACb,EACF;EACA,SAAS,EACP,QAAQ;GACN,IAAI;GACJ,WAAW;EACb,EACF;EACA,MAAM,EACJ,QAAQ;GACN,IAAI;GACJ,WAAW;EACb,EACF;EACA,SAAS,EACP,QAAQ,SAAS,MACf,EAAE,SAAS,WACP;GACE,IAAI;GACJ,WAAW;EACb,IACA,KAAA,CACN,EACF;EACA,UAAU,EACR,QAAQ;GACN,IAAI;GACJ,WAAW;EACb,EACF;CACF;CAEA,OACE,oBAAC,yBAAD;EACE,UAAU,KAAK,SAAS;EACxB,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,OAAO;GAC1B;EACmB,CAAA;CACC,CAAA;AAE7B,GACA,EACE,MAAM,SACR,CACF"}
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"}