@mittwald/flow-react-components 1.6.0-next.4 → 1.6.0-next.41

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 (257) 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/ContextMenu/ContextMenu.mjs +3 -2
  48. package/dist/js/packages/components/src/components/ContextMenu/ContextMenu.mjs.map +1 -1
  49. package/dist/js/packages/components/src/components/CountryOptions/CountryOptions.mjs +5 -1
  50. package/dist/js/packages/components/src/components/CountryOptions/CountryOptions.mjs.map +1 -1
  51. package/dist/js/packages/components/src/components/DatePicker/DatePicker.mjs +2 -1
  52. package/dist/js/packages/components/src/components/DatePicker/DatePicker.mjs.map +1 -1
  53. package/dist/js/packages/components/src/components/DateRangePicker/DateRangePicker.mjs +2 -1
  54. package/dist/js/packages/components/src/components/DateRangePicker/DateRangePicker.mjs.map +1 -1
  55. package/dist/js/packages/components/src/components/DeprecationWarningProvider/DeprecationWarningProvider.mjs +40 -8
  56. package/dist/js/packages/components/src/components/DeprecationWarningProvider/DeprecationWarningProvider.mjs.map +1 -1
  57. package/dist/js/packages/components/src/components/DonutChart/DonutChart.mjs.map +1 -1
  58. package/dist/js/packages/components/src/components/Heading/Heading.mjs +2 -0
  59. package/dist/js/packages/components/src/components/Heading/Heading.mjs.map +1 -1
  60. package/dist/js/packages/components/src/components/Icon/Icon.module.mjs.map +1 -1
  61. package/dist/js/packages/components/src/components/IllustratedMessage/IllustratedMessage.mjs +3 -2
  62. package/dist/js/packages/components/src/components/IllustratedMessage/IllustratedMessage.mjs.map +1 -1
  63. package/dist/js/packages/components/src/components/Label/Label.mjs +0 -4
  64. package/dist/js/packages/components/src/components/Label/Label.mjs.map +1 -1
  65. package/dist/js/packages/components/src/components/Link/Link.mjs.map +1 -1
  66. package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs +5 -2
  67. package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs.map +1 -1
  68. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs +2 -2
  69. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs.map +1 -1
  70. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionDateRange.mjs +5 -3
  71. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionDateRange.mjs.map +1 -1
  72. package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.mjs +101 -0
  73. package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.mjs.map +1 -0
  74. package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.module.mjs +13 -0
  75. package/dist/js/packages/components/src/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.module.mjs.map +1 -0
  76. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.mjs +16 -9
  77. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.mjs.map +1 -1
  78. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.mjs +6 -2
  79. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/FilterContextMenus.module.mjs.map +1 -1
  80. package/dist/js/packages/components/src/components/List/components/Header/components/SearchField/SearchField.mjs +4 -2
  81. package/dist/js/packages/components/src/components/List/components/Header/components/SearchField/SearchField.mjs.map +1 -1
  82. package/dist/js/packages/components/src/components/List/components/Items/Items.mjs +3 -0
  83. package/dist/js/packages/components/src/components/List/components/Items/Items.mjs.map +1 -1
  84. package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs +1 -1
  85. package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs.map +1 -1
  86. package/dist/js/packages/components/src/components/List/components/Items/components/Item/hooks/useGridItemProps.mjs +1 -2
  87. package/dist/js/packages/components/src/components/List/components/Items/components/Item/hooks/useGridItemProps.mjs.map +1 -1
  88. package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs +3 -0
  89. package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs.map +1 -1
  90. package/dist/js/packages/components/src/components/List/components/ListSummary/ListSummary.mjs +5 -9
  91. package/dist/js/packages/components/src/components/List/components/ListSummary/ListSummary.mjs.map +1 -1
  92. package/dist/js/packages/components/src/components/List/components/Table/Table.mjs +8 -12
  93. package/dist/js/packages/components/src/components/List/components/Table/Table.mjs.map +1 -1
  94. package/dist/js/packages/components/src/components/List/components/Table/components/Row.mjs +31 -0
  95. package/dist/js/packages/components/src/components/List/components/Table/components/Row.mjs.map +1 -0
  96. package/dist/js/packages/components/src/components/List/hooks/useLatestOnAction.mjs +21 -0
  97. package/dist/js/packages/components/src/components/List/hooks/useLatestOnAction.mjs.map +1 -0
  98. package/dist/js/packages/components/src/components/List/model/List.mjs +1 -0
  99. package/dist/js/packages/components/src/components/List/model/List.mjs.map +1 -1
  100. package/dist/js/packages/components/src/components/List/model/ListViewMode.mjs +2 -2
  101. package/dist/js/packages/components/src/components/List/model/ReactTable.mjs +2 -2
  102. package/dist/js/packages/components/src/components/List/model/filter/DateRangeFilter.mjs +15 -2
  103. package/dist/js/packages/components/src/components/List/model/filter/DateRangeFilter.mjs.map +1 -1
  104. package/dist/js/packages/components/src/components/List/model/filter/resolveDateRangeFilterValue.mjs +16 -0
  105. package/dist/js/packages/components/src/components/List/model/filter/resolveDateRangeFilterValue.mjs.map +1 -0
  106. package/dist/js/packages/components/src/components/List/model/item/ItemView.mjs +20 -7
  107. package/dist/js/packages/components/src/components/List/model/item/ItemView.mjs.map +1 -1
  108. package/dist/js/packages/components/src/components/List/model/loading/IncrementalLoaderState.mjs +2 -2
  109. package/dist/js/packages/components/src/components/List/model/table/TableCell.mjs +1 -1
  110. package/dist/js/packages/components/src/components/List/model/table/TableCell.mjs.map +1 -1
  111. package/dist/js/packages/components/src/components/List/model/table/TableRow.mjs +28 -1
  112. package/dist/js/packages/components/src/components/List/model/table/TableRow.mjs.map +1 -1
  113. package/dist/js/packages/components/src/components/Markdown/Markdown.mjs +25 -7
  114. package/dist/js/packages/components/src/components/Markdown/Markdown.mjs.map +1 -1
  115. package/dist/js/packages/components/src/components/Markdown/components/SkeletonBlocks.mjs +1 -1
  116. package/dist/js/packages/components/src/components/Markdown/components/SkeletonBlocks.mjs.map +1 -1
  117. package/dist/js/packages/components/src/components/Markdown/lib/isExternalHref.mjs +8 -0
  118. package/dist/js/packages/components/src/components/Markdown/lib/isExternalHref.mjs.map +1 -0
  119. package/dist/js/packages/components/src/components/MenuItem/MenuItem.mjs +32 -3
  120. package/dist/js/packages/components/src/components/MenuItem/MenuItem.mjs.map +1 -1
  121. package/dist/js/packages/components/src/components/MenuItem/MenuItem.module.mjs +1 -3
  122. package/dist/js/packages/components/src/components/MessageThread/MessageThread.mjs +1 -1
  123. package/dist/js/packages/components/src/components/MessageThread/MessageThread.mjs.map +1 -1
  124. package/dist/js/packages/components/src/components/Modal/Modal.mjs +9 -2
  125. package/dist/js/packages/components/src/components/Modal/Modal.mjs.map +1 -1
  126. package/dist/js/packages/components/src/components/Navigation/Navigation.module.mjs +1 -3
  127. package/dist/js/packages/components/src/components/NumberField/NumberField.mjs +2 -3
  128. package/dist/js/packages/components/src/components/NumberField/NumberField.mjs.map +1 -1
  129. package/dist/js/packages/components/src/components/Option/Option.module.mjs +1 -3
  130. package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs +2 -1
  131. package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs.map +1 -1
  132. package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs +1 -1
  133. package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs.map +1 -1
  134. package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs +1 -1
  135. package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs.map +1 -1
  136. package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs +4 -2
  137. package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs.map +1 -1
  138. package/dist/js/packages/components/src/components/ProgressBar/ProgressBar.mjs.map +1 -1
  139. package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarLegend.mjs +5 -4
  140. package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarLegend.mjs.map +1 -1
  141. package/dist/js/packages/components/src/components/RadioGroup/RadioGroup.mjs +2 -3
  142. package/dist/js/packages/components/src/components/RadioGroup/RadioGroup.mjs.map +1 -1
  143. package/dist/js/packages/components/src/components/Rating/Rating.mjs +12 -11
  144. package/dist/js/packages/components/src/components/Rating/Rating.mjs.map +1 -1
  145. package/dist/js/packages/components/src/components/SearchField/SearchField.mjs +2 -3
  146. package/dist/js/packages/components/src/components/SearchField/SearchField.mjs.map +1 -1
  147. package/dist/js/packages/components/src/components/Section/Section.mjs +10 -6
  148. package/dist/js/packages/components/src/components/Section/Section.mjs.map +1 -1
  149. package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.mjs +0 -4
  150. package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.mjs.map +1 -1
  151. package/dist/js/packages/components/src/components/Section/context.mjs +47 -0
  152. package/dist/js/packages/components/src/components/Section/context.mjs.map +1 -0
  153. package/dist/js/packages/components/src/components/SegmentedControl/SegmentedControl.mjs +2 -3
  154. package/dist/js/packages/components/src/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  155. package/dist/js/packages/components/src/components/Select/Select.mjs +2 -3
  156. package/dist/js/packages/components/src/components/Select/Select.mjs.map +1 -1
  157. package/dist/js/packages/components/src/components/SkeletonText/SkeletonText.mjs +4 -3
  158. package/dist/js/packages/components/src/components/SkeletonText/SkeletonText.mjs.map +1 -1
  159. package/dist/js/packages/components/src/components/Slider/Slider.mjs +47 -41
  160. package/dist/js/packages/components/src/components/Slider/Slider.mjs.map +1 -1
  161. package/dist/js/packages/components/src/components/Table/Table.mjs +3 -0
  162. package/dist/js/packages/components/src/components/Table/Table.mjs.map +1 -1
  163. package/dist/js/packages/components/src/components/Table/Table.module.mjs.map +1 -1
  164. package/dist/js/packages/components/src/components/Table/components/TableCell/TableCell.mjs +5 -12
  165. package/dist/js/packages/components/src/components/Table/components/TableCell/TableCell.mjs.map +1 -1
  166. package/dist/js/packages/components/src/components/Table/components/TableColumn/TableColumn.mjs +4 -2
  167. package/dist/js/packages/components/src/components/Table/components/TableColumn/TableColumn.mjs.map +1 -1
  168. package/dist/js/packages/components/src/components/Table/components/TableHeader/TableHeader.mjs +7 -1
  169. package/dist/js/packages/components/src/components/Table/components/TableHeader/TableHeader.mjs.map +1 -1
  170. package/dist/js/packages/components/src/components/Table/components/TableHeader/context.mjs +14 -0
  171. package/dist/js/packages/components/src/components/Table/components/TableHeader/context.mjs.map +1 -0
  172. package/dist/js/packages/components/src/components/Tabs/Tabs.mjs +6 -8
  173. package/dist/js/packages/components/src/components/Tabs/Tabs.mjs.map +1 -1
  174. package/dist/js/packages/components/src/components/Tabs/Tabs.module.mjs.map +1 -1
  175. package/dist/js/packages/components/src/components/Tabs/components/TabTitle/TabTitle.module.mjs.map +1 -1
  176. package/dist/js/packages/components/src/components/Text/Text.module.mjs.map +1 -1
  177. package/dist/js/packages/components/src/components/TextField/TextField.mjs +11 -8
  178. package/dist/js/packages/components/src/components/TextField/TextField.mjs.map +1 -1
  179. package/dist/js/packages/components/src/components/TimeField/TimeField.mjs +4 -2
  180. package/dist/js/packages/components/src/components/TimeField/TimeField.mjs.map +1 -1
  181. package/dist/js/packages/components/src/components/TranslationProvider/useLocalizedStringFormatter.mjs +15 -2
  182. package/dist/js/packages/components/src/components/TranslationProvider/useLocalizedStringFormatter.mjs.map +1 -1
  183. package/dist/js/packages/components/src/components/Wrap/Wrap.mjs.map +1 -1
  184. package/dist/js/packages/components/src/integrations/react-hook-form/components/Field/Field.mjs +1 -1
  185. package/dist/js/packages/components/src/integrations/react-hook-form/components/Form/Form.mjs +4 -1
  186. package/dist/js/packages/components/src/integrations/react-hook-form/components/Form/Form.mjs.map +1 -1
  187. package/dist/js/packages/components/src/integrations/react-hook-form/components/FormRootError/FormRootError.mjs +1 -1
  188. package/dist/js/packages/components/src/integrations/react-hook-form/components/FormSettingsProvider/FormSettingsProvider.mjs.map +1 -1
  189. package/dist/js/packages/components/src/lib/controller/overlay/OverlayController.mjs +10 -158
  190. package/dist/js/packages/components/src/lib/controller/overlay/OverlayController.mjs.map +1 -1
  191. package/dist/js/packages/components/src/lib/controller/overlay/useCloseOverlayConfirmationController.mjs +1 -0
  192. package/dist/js/packages/components/src/lib/controller/overlay/useCloseOverlayConfirmationController.mjs.map +1 -1
  193. package/dist/js/packages/components/src/lib/hooks/dom/useVirtualKeyboardVisible.mjs +8 -4
  194. package/dist/js/packages/components/src/lib/hooks/dom/useVirtualKeyboardVisible.mjs.map +1 -1
  195. package/dist/js/packages/components/src/views/DatePickerView.mjs +16 -0
  196. package/dist/js/packages/components/src/views/DatePickerView.mjs.map +1 -0
  197. package/dist/js/packages/components/src/views/LabelView.mjs +16 -0
  198. package/dist/js/packages/components/src/views/LabelView.mjs.map +1 -0
  199. package/dist/js/packages/components/src/views/TimeFieldView.mjs +16 -0
  200. package/dist/js/packages/components/src/views/TimeFieldView.mjs.map +1 -0
  201. package/dist/js/packages/components-base/src/index.mjs +5 -2
  202. package/dist/js/packages/components-base/src/list/filter/ListDateRangeFilter.mjs +1 -0
  203. package/dist/js/packages/components-base/src/list/filter/ListDateRangeFilter.mjs.map +1 -1
  204. package/dist/js/packages/components-base/src/list/filter/ListFilter.mjs +4 -1
  205. package/dist/js/packages/components-base/src/list/filter/ListFilter.mjs.map +1 -1
  206. package/dist/js/packages/components-base/src/list/filter/dateRange.mjs +37 -13
  207. package/dist/js/packages/components-base/src/list/filter/dateRange.mjs.map +1 -1
  208. package/dist/js/packages/components-base/src/list/filter/dateTimeRangeFields.mjs +55 -0
  209. package/dist/js/packages/components-base/src/list/filter/dateTimeRangeFields.mjs.map +1 -0
  210. package/dist/js/packages/components-base/src/list/filter/formatDateRange.mjs +27 -0
  211. package/dist/js/packages/components-base/src/list/filter/formatDateRange.mjs.map +1 -0
  212. package/dist/js/packages/components-base/src/overlay/OverlayState.mjs +196 -0
  213. package/dist/js/packages/components-base/src/overlay/OverlayState.mjs.map +1 -0
  214. package/dist/types/_bundled/flow-components-base/index.d.ts +4 -1
  215. package/dist/types/_bundled/flow-components-base/list/filter/ListFilter.d.ts +2 -0
  216. package/dist/types/_bundled/flow-components-base/list/filter/dateRange.d.ts +24 -1
  217. package/dist/types/_bundled/flow-components-base/list/filter/dateTimeRangeFields.d.ts +34 -0
  218. package/dist/types/_bundled/flow-components-base/list/filter/formatDateRange.d.ts +7 -0
  219. package/dist/types/_bundled/flow-components-base/overlay/OverlayState.d.ts +94 -0
  220. package/dist/types/components/AlertBadge/AlertBadge.d.ts +2 -2
  221. package/dist/types/components/Badge/Badge.d.ts +2 -2
  222. package/dist/types/components/CartesianChart/hooks/useTickLabelWidth.d.ts +1 -0
  223. package/dist/types/components/CodeBlock/CodeBlock.d.ts +1 -1
  224. package/dist/types/components/DonutChart/DonutChart.d.ts +1 -4
  225. package/dist/types/components/Link/Link.d.ts +1 -1
  226. package/dist/types/components/List/components/Header/components/DateTimeRangeFields/DateTimeRangeFields.d.ts +8 -0
  227. package/dist/types/components/List/components/Items/components/Item/Item.d.ts +2 -0
  228. package/dist/types/components/List/components/Items/components/Item/hooks/useGridItemProps.d.ts +1 -0
  229. package/dist/types/components/List/components/ListSummary/ListSummary.d.ts +3 -2
  230. package/dist/types/components/List/components/Table/components/Row.d.ts +13 -0
  231. package/dist/types/components/List/hooks/useLatestOnAction.d.ts +7 -0
  232. package/dist/types/components/List/index.d.ts +2 -0
  233. package/dist/types/components/List/model/filter/DateRangeFilter.d.ts +15 -8
  234. package/dist/types/components/List/model/filter/resolveDateRangeFilterValue.d.ts +11 -0
  235. package/dist/types/components/List/model/filter/types.d.ts +23 -1
  236. package/dist/types/components/List/model/item/ItemView.d.ts +34 -11
  237. package/dist/types/components/List/model/table/TableRow.d.ts +14 -0
  238. package/dist/types/components/List/model/table/types.d.ts +17 -1
  239. package/dist/types/components/List/typedList.d.ts +1 -0
  240. package/dist/types/components/Markdown/lib/isExternalHref.d.ts +1 -0
  241. package/dist/types/components/ProgressBar/ProgressBar.d.ts +1 -4
  242. package/dist/types/components/Rating/Rating.d.ts +5 -5
  243. package/dist/types/components/Section/context.d.ts +28 -0
  244. package/dist/types/components/Table/components/TableCell/TableCell.d.ts +4 -1
  245. package/dist/types/components/Table/components/TableHeader/context.d.ts +6 -0
  246. package/dist/types/components/Wrap/Wrap.d.ts +5 -0
  247. package/dist/types/index/flr-universal.d.ts +1 -1
  248. package/dist/types/integrations/react-hook-form/components/FormSettingsProvider/FormSettingsProvider.d.ts +7 -1
  249. package/dist/types/lib/controller/overlay/OverlayController.d.ts +8 -74
  250. package/dist/types/lib/dev/hydrateServerMarkup.d.ts +2 -0
  251. package/dist/types/lib/hooks/dom/useVirtualKeyboardVisible.d.ts +4 -1
  252. package/package.json +12 -12
  253. package/dist/js/node_modules/.pnpm/@lezer_lr@1.4.10/node_modules/@lezer/lr/dist/index.mjs.map +0 -1
  254. package/dist/js/packages/components/src/lib/date/transformDateValueToFormattedDate.mjs +0 -10
  255. package/dist/js/packages/components/src/lib/date/transformDateValueToFormattedDate.mjs.map +0 -1
  256. package/dist/types/lib/date/transformDateValueToDateTime.d.ts +0 -3
  257. package/dist/types/lib/date/transformDateValueToFormattedDate.d.ts +0 -2
@@ -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,6 +7,7 @@ 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";
11
12
  import { jsx } from "react/jsx-runtime";
12
13
  //#region src/components/List/components/Items/Items.tsx
@@ -17,11 +18,13 @@ var Items = () => {
17
18
  const isInitiallyLoading = list.loader.useIsInitiallyLoading();
18
19
  const isLoadingMore = list.loader.useIsLoadingMore();
19
20
  const { triggerRef, triggerIndex } = useInfiniteScrollTrigger();
21
+ const onAction = useLatestOnAction(list);
20
22
  if (!list.itemView) return null;
21
23
  const items = list.items.entries.map((item, index) => /* @__PURE__ */ jsx(Item, {
22
24
  data: item.data,
23
25
  id: item.id,
24
26
  list,
27
+ onAction,
25
28
  isTile: tiles,
26
29
  triggerRef: index === triggerIndex ? triggerRef : void 0
27
30
  }, item.id));
@@ -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 } from \"react\";\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\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 const onAction = useLatestOnAction(list);\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 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 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":";;;;;;;;;;;;;AAWA,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,MAAM,WAAW,kBAAkB,IAAI;CAEvC,IAAI,CAAC,KAAK,UACR,OAAO;CAGT,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,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"}
@@ -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"}
@@ -7,18 +7,14 @@ import { jsx } from "react/jsx-runtime";
7
7
  //#region src/components/List/components/ListSummary/ListSummary.tsx
8
8
  /** @flr-generate all */
9
9
  var ListSummary = flowComponent("ListSummary", (props) => {
10
- const { children, position = "top", ref } = props;
10
+ const { position = "top", className, ...rest } = props;
11
11
  if (position === "bottom") return /* @__PURE__ */ jsx("footer", {
12
- ref,
13
- className: clsx(ListSummary_module_default.listSummary, ListSummary_module_default.bottom),
14
- ...props,
15
- children
12
+ ...rest,
13
+ className: clsx(ListSummary_module_default.listSummary, ListSummary_module_default.bottom, className)
16
14
  });
17
15
  return /* @__PURE__ */ jsx("header", {
18
- ref,
19
- className: clsx(ListSummary_module_default.listSummary, ListSummary_module_default.top),
20
- ...props,
21
- children
16
+ ...rest,
17
+ className: clsx(ListSummary_module_default.listSummary, ListSummary_module_default.top, className)
22
18
  });
23
19
  });
24
20
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ListSummary.mjs","names":["styles"],"sources":["../../../../../../../../../src/components/List/components/ListSummary/ListSummary.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport styles from \"./ListSummary.module.scss\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport clsx from \"clsx\";\n\nexport interface ListSummaryProps\n extends FlowComponentProps, PropsWithChildren {\n /** Whether the summary is placed above or underneath the list @default: \"top\" */\n position?: \"top\" | \"bottom\";\n}\n\n/** @flr-generate all */\nexport const ListSummary = flowComponent(\"ListSummary\", (props) => {\n const { children, position = \"top\", ref } = props;\n\n if (position === \"bottom\") {\n return (\n <footer\n ref={ref}\n className={clsx(styles.listSummary, styles.bottom)}\n {...props}\n >\n {children}\n </footer>\n );\n }\n\n return (\n <header\n ref={ref}\n className={clsx(styles.listSummary, styles.top)}\n {...props}\n >\n {children}\n </header>\n );\n});\n\nexport default ListSummary;\n"],"mappings":";;;;;;;;AAaA,IAAa,cAAc,cAAc,gBAAgB,UAAU;CACjE,MAAM,EAAE,UAAU,WAAW,OAAO,QAAQ;CAE5C,IAAI,aAAa,UACf,OACE,oBAAC,UAAD;EACO;EACL,WAAW,KAAKA,2BAAO,aAAaA,2BAAO,MAAM;EACjD,GAAI;EAEH;CACK,CAAA;CAIZ,OACE,oBAAC,UAAD;EACO;EACL,WAAW,KAAKA,2BAAO,aAAaA,2BAAO,GAAG;EAC9C,GAAI;EAEH;CACK,CAAA;AAEZ,CAAC"}
1
+ {"version":3,"file":"ListSummary.mjs","names":["styles"],"sources":["../../../../../../../../../src/components/List/components/ListSummary/ListSummary.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport styles from \"./ListSummary.module.scss\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport clsx from \"clsx\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\n\nexport interface ListSummaryProps\n extends PropsWithClassName, FlowComponentProps, PropsWithChildren {\n /** Whether the summary is placed above or underneath the list @default \"top\" */\n position?: \"top\" | \"bottom\";\n}\n\n/** @flr-generate all */\nexport const ListSummary = flowComponent(\"ListSummary\", (props) => {\n const { position = \"top\", className, ...rest } = props;\n\n if (position === \"bottom\") {\n return (\n <footer\n {...rest}\n className={clsx(styles.listSummary, styles.bottom, className)}\n />\n );\n }\n\n return (\n <header\n {...rest}\n className={clsx(styles.listSummary, styles.top, className)}\n />\n );\n});\n\nexport default ListSummary;\n"],"mappings":";;;;;;;;AAcA,IAAa,cAAc,cAAc,gBAAgB,UAAU;CACjE,MAAM,EAAE,WAAW,OAAO,WAAW,GAAG,SAAS;CAEjD,IAAI,aAAa,UACf,OACE,oBAAC,UAAD;EACE,GAAI;EACJ,WAAW,KAAKA,2BAAO,aAAaA,2BAAO,QAAQ,SAAS;CAC7D,CAAA;CAIL,OACE,oBAAC,UAAD;EACE,GAAI;EACJ,WAAW,KAAKA,2BAAO,aAAaA,2BAAO,KAAK,SAAS;CAC1D,CAAA;AAEL,CAAC"}
@@ -2,14 +2,14 @@
2
2
  /* */
3
3
  import { useList } from "../../hooks/useList.mjs";
4
4
  import { useInfiniteScrollTrigger } from "../../hooks/useInfiniteScrollTrigger.mjs";
5
+ import { useLatestOnAction } from "../../hooks/useLatestOnAction.mjs";
5
6
  import Table_module_default from "./Table.module.mjs";
6
7
  import TableView from "../../../../views/TableView.mjs";
7
8
  import TableHeaderView from "../../../../views/TableHeaderView.mjs";
8
9
  import TableBodyView from "../../../../views/TableBodyView.mjs";
9
- import TableRowView from "../../../../views/TableRowView.mjs";
10
- import TableCellView from "../../../../views/TableCellView.mjs";
11
10
  import TableColumnView from "../../../../views/TableColumnView.mjs";
12
11
  import { TableBodyLoadingView } from "./components/TableBodyLoadingView.mjs";
12
+ import { Row } from "./components/Row.mjs";
13
13
  import clsx from "clsx";
14
14
  import { jsx, jsxs } from "react/jsx-runtime";
15
15
  //#region src/components/List/components/Table/Table.tsx
@@ -21,19 +21,15 @@ var Table = () => {
21
21
  const isInitiallyLoading = list.loader.useIsInitiallyLoading();
22
22
  const isLoadingMore = list.loader.useIsLoadingMore();
23
23
  const { triggerRef, triggerIndex } = useInfiniteScrollTrigger();
24
+ const onAction = useLatestOnAction(list);
24
25
  if (!table || listIsEmpty) return null;
25
- const rowAction = table.list.onAction;
26
26
  const tableClassName = clsx(Table_module_default.table, isLoading && !(list.infiniteScroll && isLoadingMore) && Table_module_default.isLoading, table.componentProps.className);
27
- const rows = list.items.entries.map((item, index) => /* @__PURE__ */ jsx(TableRowView, {
28
- className: clsx(Table_module_default.row, rowAction && Table_module_default.hasAction, table.body.row.componentProps.className),
27
+ const rows = list.items.entries.map((item, index) => /* @__PURE__ */ jsx(Row, {
29
28
  id: item.id,
30
- onAction: rowAction ? () => rowAction(item.data) : void 0,
31
- ...table.body.row.componentProps,
32
- ...index === triggerIndex ? { ref: triggerRef } : {},
33
- children: table.body.row?.cells.map((cell, i) => /* @__PURE__ */ jsx(TableCellView, {
34
- ...cell.componentProps,
35
- children: cell.renderFn ? cell.renderFn(item.data, list) : void 0
36
- }, i))
29
+ data: item.data,
30
+ list,
31
+ onAction,
32
+ triggerRef: index === triggerIndex ? triggerRef : void 0
37
33
  }, item.id));
38
34
  return /* @__PURE__ */ jsxs(TableView, {
39
35
  ...list.componentProps,
@@ -1 +1 @@
1
- {"version":3,"file":"Table.mjs","names":["styles"],"sources":["../../../../../../../../../src/components/List/components/Table/Table.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useList } from \"@/components/List\";\nimport styles from \"./Table.module.scss\";\nimport clsx from \"clsx\";\nimport TableView from \"@/views/TableView\";\nimport TableHeaderView from \"@/views/TableHeaderView\";\nimport TableBodyView from \"@/views/TableBodyView\";\nimport TableRowView from \"@/views/TableRowView\";\nimport TableCellView from \"@/views/TableCellView\";\nimport TableColumnView from \"@/views/TableColumnView\";\nimport { TableBodyLoadingView } from \"@/components/List/components/Table/components/TableBodyLoadingView\";\nimport { useInfiniteScrollTrigger } from \"@/components/List/hooks/useInfiniteScrollTrigger\";\n\nexport const Table: FC = () => {\n const list = useList();\n const table = list.table;\n const listIsEmpty = list.useIsEmpty();\n\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 (!table || listIsEmpty) {\n return null;\n }\n\n const rowAction = table.list.onAction;\n\n const tableClassName = clsx(\n styles.table,\n isLoading && !(list.infiniteScroll && isLoadingMore) && styles.isLoading,\n table.componentProps.className,\n );\n\n const rows = list.items.entries.map((item, index) => (\n <TableRowView\n className={clsx(\n styles.row,\n rowAction && styles.hasAction,\n table.body.row.componentProps.className,\n )}\n key={item.id}\n id={item.id}\n onAction={rowAction ? () => rowAction(item.data) : undefined}\n {...table.body.row.componentProps}\n {...(index === triggerIndex ? { ref: triggerRef } : {})}\n >\n {table.body.row?.cells.map((cell, i) => (\n <TableCellView key={i} {...cell.componentProps}>\n {cell.renderFn ? cell.renderFn(item.data, list) : undefined}\n </TableCellView>\n ))}\n </TableRowView>\n ));\n\n return (\n <TableView\n {...list.componentProps}\n {...table.componentProps}\n className={tableClassName}\n aria-hidden={isInitiallyLoading}\n aria-busy={isLoading}\n >\n <TableHeaderView {...table.header.componentProps}>\n {table.header.columns.map((col, i) => (\n <TableColumnView key={i} {...col.componentProps} />\n ))}\n </TableHeaderView>\n <TableBodyView {...table.body.componentProps}>\n {isInitiallyLoading ? <TableBodyLoadingView /> : rows}\n </TableBodyView>\n </TableView>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAaA,IAAa,cAAkB;CAC7B,MAAM,OAAO,QAAQ;CACrB,MAAM,QAAQ,KAAK;CACnB,MAAM,cAAc,KAAK,WAAW;CAEpC,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,SAAS,aACZ,OAAO;CAGT,MAAM,YAAY,MAAM,KAAK;CAE7B,MAAM,iBAAiB,KACrBA,qBAAO,OACP,aAAa,EAAE,KAAK,kBAAkB,kBAAkBA,qBAAO,WAC/D,MAAM,eAAe,SACvB;CAEA,MAAM,OAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,UACzC,oBAAC,cAAD;EACE,WAAW,KACTA,qBAAO,KACP,aAAaA,qBAAO,WACpB,MAAM,KAAK,IAAI,eAAe,SAChC;EAEA,IAAI,KAAK;EACT,UAAU,kBAAkB,UAAU,KAAK,IAAI,IAAI,KAAA;EACnD,GAAI,MAAM,KAAK,IAAI;EACnB,GAAK,UAAU,eAAe,EAAE,KAAK,WAAW,IAAI,CAAC;EAEpD,UAAA,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,MAChC,oBAAC,eAAD;GAAuB,GAAI,KAAK;GAC7B,UAAA,KAAK,WAAW,KAAK,SAAS,KAAK,MAAM,IAAI,IAAI,KAAA;EACrC,GAFK,CAEL,CAChB;CACW,GAXP,KAAK,EAWE,CACf;CAED,OACE,qBAAC,WAAD;EACE,GAAI,KAAK;EACT,GAAI,MAAM;EACV,WAAW;EACX,eAAa;EACb,aAAW;EALb,UAAA,CAOE,oBAAC,iBAAD;GAAiB,GAAI,MAAM,OAAO;GAC/B,UAAA,MAAM,OAAO,QAAQ,KAAK,KAAK,MAC9B,oBAAC,iBAAD,EAAyB,GAAI,IAAI,eAAiB,GAA5B,CAA4B,CACnD;EACc,CAAA,GACjB,oBAAC,eAAD;GAAe,GAAI,MAAM,KAAK;GAC3B,UAAA,qBAAqB,oBAAC,sBAAD,CAAuB,CAAA,IAAI;EACpC,CAAA,CACN;;AAEf"}
1
+ {"version":3,"file":"Table.mjs","names":["styles"],"sources":["../../../../../../../../../src/components/List/components/Table/Table.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useList } from \"@/components/List\";\nimport styles from \"./Table.module.scss\";\nimport clsx from \"clsx\";\nimport TableView from \"@/views/TableView\";\nimport TableHeaderView from \"@/views/TableHeaderView\";\nimport TableBodyView from \"@/views/TableBodyView\";\nimport TableColumnView from \"@/views/TableColumnView\";\nimport { TableBodyLoadingView } from \"@/components/List/components/Table/components/TableBodyLoadingView\";\nimport { useInfiniteScrollTrigger } from \"@/components/List/hooks/useInfiniteScrollTrigger\";\nimport { useLatestOnAction } from \"@/components/List/hooks/useLatestOnAction\";\nimport { Row } from \"@/components/List/components/Table/components/Row\";\n\nexport const Table: FC = () => {\n const list = useList();\n const table = list.table;\n const listIsEmpty = list.useIsEmpty();\n\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 const onAction = useLatestOnAction(list);\n\n if (!table || listIsEmpty) {\n return null;\n }\n\n const tableClassName = clsx(\n styles.table,\n isLoading && !(list.infiniteScroll && isLoadingMore) && styles.isLoading,\n table.componentProps.className,\n );\n\n const rows = list.items.entries.map((item, index) => (\n <Row\n key={item.id}\n id={item.id}\n data={item.data}\n list={list}\n onAction={onAction}\n triggerRef={index === triggerIndex ? triggerRef : undefined}\n />\n ));\n\n return (\n <TableView\n {...list.componentProps}\n {...table.componentProps}\n className={tableClassName}\n aria-hidden={isInitiallyLoading}\n aria-busy={isLoading}\n >\n <TableHeaderView {...table.header.componentProps}>\n {table.header.columns.map((col, i) => (\n <TableColumnView key={i} {...col.componentProps} />\n ))}\n </TableHeaderView>\n <TableBodyView {...table.body.componentProps}>\n {isInitiallyLoading ? <TableBodyLoadingView /> : rows}\n </TableBodyView>\n </TableView>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAaA,IAAa,cAAkB;CAC7B,MAAM,OAAO,QAAQ;CACrB,MAAM,QAAQ,KAAK;CACnB,MAAM,cAAc,KAAK,WAAW;CAEpC,MAAM,YAAY,KAAK,OAAO,aAAa;CAC3C,MAAM,qBAAqB,KAAK,OAAO,sBAAsB;CAC7D,MAAM,gBAAgB,KAAK,OAAO,iBAAiB;CAEnD,MAAM,EAAE,YAAY,iBAAiB,yBAAyB;CAC9D,MAAM,WAAW,kBAAkB,IAAI;CAEvC,IAAI,CAAC,SAAS,aACZ,OAAO;CAGT,MAAM,iBAAiB,KACrBA,qBAAO,OACP,aAAa,EAAE,KAAK,kBAAkB,kBAAkBA,qBAAO,WAC/D,MAAM,eAAe,SACvB;CAEA,MAAM,OAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,UACzC,oBAAC,KAAD;EAEE,IAAI,KAAK;EACT,MAAM,KAAK;EACL;EACI;EACV,YAAY,UAAU,eAAe,aAAa,KAAA;CACnD,GANM,KAAK,EAMX,CACF;CAED,OACE,qBAAC,WAAD;EACE,GAAI,KAAK;EACT,GAAI,MAAM;EACV,WAAW;EACX,eAAa;EACb,aAAW;EALb,UAAA,CAOE,oBAAC,iBAAD;GAAiB,GAAI,MAAM,OAAO;GAC/B,UAAA,MAAM,OAAO,QAAQ,KAAK,KAAK,MAC9B,oBAAC,iBAAD,EAAyB,GAAI,IAAI,eAAiB,GAA5B,CAA4B,CACnD;EACc,CAAA,GACjB,oBAAC,eAAD;GAAe,GAAI,MAAM,KAAK;GAC3B,UAAA,qBAAqB,oBAAC,sBAAD,CAAuB,CAAA,IAAI;EACpC,CAAA,CACN;;AAEf"}
@@ -0,0 +1,31 @@
1
+ "use client"
2
+ /* */
3
+ import Table_module_default from "../Table.module.mjs";
4
+ import TableRowView from "../../../../../views/TableRowView.mjs";
5
+ import TableCellView from "../../../../../views/TableCellView.mjs";
6
+ import clsx from "clsx";
7
+ import { memo } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ //#region src/components/List/components/Table/components/Row.tsx
10
+ var RowImpl = (props) => {
11
+ const { id, data, list, onAction, triggerRef } = props;
12
+ const row = list.table?.body.row;
13
+ if (!row) return null;
14
+ return /* @__PURE__ */ jsx(TableRowView, {
15
+ ...row.componentProps,
16
+ className: clsx(Table_module_default.row, onAction && Table_module_default.hasAction, row.componentProps.className),
17
+ id,
18
+ onAction: onAction ? () => onAction(data) : void 0,
19
+ ...triggerRef ? { ref: triggerRef } : {},
20
+ children: row.cells.map((cell, i) => /* @__PURE__ */ jsx(TableCellView, {
21
+ ...cell.componentProps,
22
+ children: cell.renderFn ? cell.renderFn(data, list) : void 0
23
+ }, i))
24
+ });
25
+ };
26
+ var Row = memo(RowImpl, (prev, next) => prev.id === next.id && prev.data === next.data && prev.triggerRef === next.triggerRef && !!prev.onAction === !!next.onAction && !!prev.list.table?.body.row.rendersSameAs(next.list.table?.body.row));
27
+ Row.displayName = "Row";
28
+ //#endregion
29
+ export { Row, Row as default };
30
+
31
+ //# sourceMappingURL=Row.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Row.mjs","names":["styles"],"sources":["../../../../../../../../../../src/components/List/components/Table/components/Row.tsx"],"sourcesContent":["import type { Ref } from \"react\";\nimport { memo } from \"react\";\nimport clsx from \"clsx\";\nimport type { Key } from \"react-aria-components\";\nimport type ListModel from \"@/components/List/model/List\";\nimport TableRowView from \"@/views/TableRowView\";\nimport TableCellView from \"@/views/TableCellView\";\nimport styles from \"../Table.module.scss\";\n\ninterface Props {\n id: Key;\n data: never;\n list: ListModel<never>;\n /** Stable invoker of the list's latest `onAction` */\n onAction?: (data: never) => void;\n triggerRef?: Ref<HTMLTableRowElement>;\n}\n\nconst RowImpl = (props: Props) => {\n const { id, data, list, onAction, triggerRef } = props;\n const row = list.table?.body.row;\n\n if (!row) {\n return null;\n }\n\n return (\n <TableRowView\n {...row.componentProps}\n className={clsx(\n styles.row,\n onAction && styles.hasAction,\n row.componentProps.className,\n )}\n id={id}\n onAction={onAction ? () => onAction(data) : undefined}\n {...(triggerRef ? { ref: triggerRef } : {})}\n >\n {row.cells.map((cell, i) => (\n <TableCellView key={i} {...cell.componentProps}>\n {cell.renderFn ? cell.renderFn(data, list) : undefined}\n </TableCellView>\n ))}\n </TableRowView>\n );\n};\n\n// The list model is rebuilt on every render, so it cannot be compared by\n// identity. A row that declares `renderDependencies` re-renders only when its data,\n// those dependencies or a cell's props change — the cells' render functions\n// count by the dependencies. Without them, rows re-render with the list.\nexport const Row = memo(\n RowImpl,\n (prev, next) =>\n prev.id === next.id &&\n prev.data === next.data &&\n prev.triggerRef === next.triggerRef &&\n !!prev.onAction === !!next.onAction &&\n !!prev.list.table?.body.row.rendersSameAs(next.list.table?.body.row),\n);\nRow.displayName = \"Row\";\n\nexport default Row;\n"],"mappings":";;;;;;;;;AAkBA,IAAM,WAAW,UAAiB;CAChC,MAAM,EAAE,IAAI,MAAM,MAAM,UAAU,eAAe;CACjD,MAAM,MAAM,KAAK,OAAO,KAAK;CAE7B,IAAI,CAAC,KACH,OAAO;CAGT,OACE,oBAAC,cAAD;EACE,GAAI,IAAI;EACR,WAAW,KACTA,qBAAO,KACP,YAAYA,qBAAO,WACnB,IAAI,eAAe,SACrB;EACI;EACJ,UAAU,iBAAiB,SAAS,IAAI,IAAI,KAAA;EAC5C,GAAK,aAAa,EAAE,KAAK,WAAW,IAAI,CAAC;EAExC,UAAA,IAAI,MAAM,KAAK,MAAM,MACpB,oBAAC,eAAD;GAAuB,GAAI,KAAK;GAC7B,UAAA,KAAK,WAAW,KAAK,SAAS,MAAM,IAAI,IAAI,KAAA;EAChC,GAFK,CAEL,CAChB;CACW,CAAA;AAElB;AAMA,IAAa,MAAM,KACjB,UACC,MAAM,SACL,KAAK,OAAO,KAAK,MACjB,KAAK,SAAS,KAAK,QACnB,KAAK,eAAe,KAAK,cACzB,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,KAAK,YAC3B,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,IAAI,cAAc,KAAK,KAAK,OAAO,KAAK,GAAG,CACvE;AACA,IAAI,cAAc"}
@@ -0,0 +1,21 @@
1
+ "use client"
2
+ /* */
3
+ import { useCallback, useLayoutEffect, useRef } from "react";
4
+ //#region src/components/List/hooks/useLatestOnAction.ts
5
+ /**
6
+ * A stable invoker of the list's latest `onAction`, or `undefined` without one.
7
+ * An event handler only ever needs to be the latest one, so items and rows do
8
+ * not re-render for an inline `onAction`.
9
+ */
10
+ var useLatestOnAction = (list) => {
11
+ const onActionRef = useRef(list.onAction);
12
+ useLayoutEffect(() => {
13
+ onActionRef.current = list.onAction;
14
+ });
15
+ const invokeOnAction = useCallback((data) => onActionRef.current?.(data), []);
16
+ return list.onAction ? invokeOnAction : void 0;
17
+ };
18
+ //#endregion
19
+ export { useLatestOnAction };
20
+
21
+ //# sourceMappingURL=useLatestOnAction.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLatestOnAction.mjs","names":[],"sources":["../../../../../../../../src/components/List/hooks/useLatestOnAction.ts"],"sourcesContent":["import { useCallback, useLayoutEffect, useRef } from \"react\";\nimport type List from \"@/components/List/model/List\";\n\n/**\n * A stable invoker of the list's latest `onAction`, or `undefined` without one.\n * An event handler only ever needs to be the latest one, so items and rows do\n * not re-render for an inline `onAction`.\n */\nexport const useLatestOnAction = (list: List<never>) => {\n const onActionRef = useRef(list.onAction);\n useLayoutEffect(() => {\n onActionRef.current = list.onAction;\n });\n const invokeOnAction = useCallback(\n (data: never) => onActionRef.current?.(data),\n [],\n );\n return list.onAction ? invokeOnAction : undefined;\n};\n"],"mappings":";;;;;;;;;AAQA,IAAa,qBAAqB,SAAsB;CACtD,MAAM,cAAc,OAAO,KAAK,QAAQ;CACxC,sBAAsB;EACpB,YAAY,UAAU,KAAK;CAC7B,CAAC;CACD,MAAM,iBAAiB,aACpB,SAAgB,YAAY,UAAU,IAAI,GAC3C,CAAC,CACH;CACA,OAAO,KAAK,WAAW,iBAAiB,KAAA;AAC1C"}
@@ -43,6 +43,7 @@ var List = class List {
43
43
  const { settingStorageKey, itemView, table, filters = [], sorting = [], batchesController, onChange, loader, search, onAction, getItemId, defaultViewMode, accordion = false, infiniteScroll = false, loadingItemsCount = 5, settingsStorageDefaults, emptyView, emptySearchResultView, ...componentProps } = shape;
44
44
  const warnDeprecation = useWarnDeprecation();
45
45
  if (itemView?.fallback !== void 0) warnDeprecation("The 'fallback' prop is deprecated and will be removed in a future release. Use 'loadingView' instead.");
46
+ if (itemView?.dependencies !== void 0) warnDeprecation("The 'dependencies' prop of 'List.Item' is deprecated and will be removed in a future release. Use 'renderDependencies' instead.");
46
47
  this.settingsStorageDefaults = settingsStorageDefaults;
47
48
  const generalSettingsStore = useSettings();
48
49
  this.settingsStorage = settingStorageKey && generalSettingsStore ? new ListSettingsStore(this, generalSettingsStore, { storageKey: settingStorageKey }) : void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"List.mjs","names":["BatchesController"],"sources":["../../../../../../../../src/components/List/model/List.ts"],"sourcesContent":["import { ItemCollection } from \"@/components/List/model/item/ItemCollection\";\nimport { BatchesController } from \"@/components/List/model/pagination/BatchesController\";\nimport { Filter } from \"./filter/Filter\";\nimport { Sorting } from \"@/components/List/model/sorting/Sorting\";\nimport ReactTable from \"@/components/List/model/ReactTable\";\nimport type {\n EmptyViewType,\n GetItemId,\n ItemActionFn,\n ListSettingsStorageDefaults,\n ListShape,\n ListSupportedComponentProps,\n} from \"@/components/List/model/types\";\nimport { IncrementalLoader } from \"@/components/List/model/loading/IncrementalLoader\";\nimport invariant from \"invariant\";\nimport { Search } from \"@/components/List/model/search/Search\";\nimport { ItemView } from \"@/components/List/model/item/ItemView\";\nimport { Table } from \"@/components/List/model/table/Table\";\nimport { useEffect, type ReactNode } from \"react\";\nimport { ListSettingsStore } from \"./ListSettingsStore\";\nimport { ListViewMode } from \"./ListViewMode\";\nimport { useSettings } from \"@/components/SettingsProvider/SettingsProvider\";\nimport { DateRangeFilter } from \"@/components/List/model/filter/DateRangeFilter\";\nimport { useWarnDeprecation } from \"@/components/DeprecationWarningProvider\";\nimport type {\n ListModelContext,\n ListSettingsPort,\n} from \"@mittwald/flow-components-base\";\nimport type { Table as ReactTableInstance } from \"@tanstack/table-core\";\n\nexport class List<T = unknown, TMeta = unknown> implements ListModelContext<T> {\n public readonly filters: (\n Filter<T, never, never> | DateRangeFilter<T, never>\n )[];\n public readonly itemView?: ItemView<T>;\n public readonly table?: Table<T>;\n public readonly search?: Search<T>;\n public readonly sorting: Sorting<T>[];\n public readonly items: ItemCollection<T>;\n public readonly reactTable: ReactTable<T>;\n public readonly batches: BatchesController<T>;\n public readonly loader: IncrementalLoader<T>;\n public readonly onAction?: ItemActionFn<T>;\n public readonly accordion: boolean;\n public readonly infiniteScroll: boolean;\n public readonly getItemId?: GetItemId<T>;\n public readonly componentProps: ListSupportedComponentProps;\n public metadata?: TMeta;\n public readonly settingsStorage?: ListSettingsStore<T>;\n public readonly loadingItemsCount;\n public readonly viewMode: ListViewMode<T>;\n public readonly emptyView?: ReactNode;\n public readonly emptySearchResultView?: ReactNode;\n public readonly settingsStorageDefaults?: ListSettingsStorageDefaults;\n\n public constructor(shape: ListShape<T, TMeta>) {\n const {\n settingStorageKey,\n itemView,\n table,\n filters = [],\n sorting = [],\n batchesController,\n onChange,\n loader,\n search,\n onAction,\n getItemId,\n defaultViewMode,\n accordion = false,\n infiniteScroll = false,\n loadingItemsCount = 5,\n settingsStorageDefaults,\n emptyView,\n emptySearchResultView,\n ...componentProps\n } = shape;\n\n const warnDeprecation = useWarnDeprecation();\n if (itemView?.fallback !== undefined) {\n warnDeprecation(\n \"The 'fallback' prop is deprecated and will be removed in a future release. Use 'loadingView' instead.\",\n );\n }\n\n this.settingsStorageDefaults = settingsStorageDefaults;\n const generalSettingsStore = useSettings();\n\n this.settingsStorage =\n settingStorageKey && generalSettingsStore\n ? new ListSettingsStore(this, generalSettingsStore, {\n storageKey: settingStorageKey,\n })\n : undefined;\n\n this.items = new ItemCollection(this);\n this.filters = filters.map((shape) =>\n shape.mode === \"dateRange\"\n ? new DateRangeFilter(this, shape)\n : new Filter(this, shape),\n );\n this.sorting = sorting.map((shape) => new Sorting<T>(this, shape));\n this.search = search ? new Search(this, search) : undefined;\n this.itemView = itemView ? new ItemView(this, itemView) : undefined;\n this.accordion = accordion;\n this.infiniteScroll = infiniteScroll;\n this.table = table ? new Table(this, table) : undefined;\n this.batches = new BatchesController(this, batchesController);\n\n /*\n * The controller no longer subscribes itself: the filters and the search\n * are this list's, and handing a list of concrete filters to a shared\n * model is the `Table<never>` variance trap. `IncrementalLoader` still\n * subscribes in its own constructor, which runs right after this, so the\n * order of the two resets is unchanged.\n */\n this.filters.forEach((f) => f.onFilterUpdated(() => this.batches.reset()));\n this.search?.onUpdated(() => this.batches.reset());\n this.componentProps = componentProps;\n /*\n * Before the loader: its state takes `getItemId` over in its constructor,\n * and a loader built first would never deduplicate.\n */\n this.getItemId = getItemId;\n this.loader = IncrementalLoader.useNew<T>(this, loader);\n this.onAction = onAction;\n this.loadingItemsCount = loadingItemsCount;\n this.reactTable = ReactTable.useNew(this, onChange, {\n manualFiltering: this.loader.manualFiltering,\n manualPagination: this.loader.manualPagination,\n manualSorting: this.loader.manualSorting,\n });\n this.viewMode = ListViewMode.useNew(this, { defaultViewMode });\n this.emptyView = emptyView;\n this.emptySearchResultView = emptySearchResultView;\n\n useEffect(() => {\n this.filters.forEach((f) => f.deleteUnknownFilterValues());\n }, [this.filters]);\n }\n\n /*\n * `ListModelContext` — what the shared model in\n * `@mittwald/flow-components-base` reaches for, so `Sorting` and `Search` can\n * keep being handed the list itself. Getters, because the model is built\n * before the table is.\n */\n public get dataTable(): ReactTableInstance<T> {\n return this.reactTable.table;\n }\n\n public get settings(): ListSettingsPort | undefined {\n return this.settingsStorage;\n }\n\n public get settingsDefaults(): ListSettingsStorageDefaults | undefined {\n return this.settingsStorageDefaults;\n }\n\n public getEmptyViewType(): EmptyViewType {\n return this.hasActiveFilters || this.search?.isSet ? \"search\" : \"list\";\n }\n\n public get hasActiveFilters(): boolean {\n return this.filters.some((f) => f.isActive());\n }\n\n public get visibleSorting() {\n return this.sorting.filter((s) => s.initialEnabled !== \"hidden\");\n }\n\n public static useNew<T, TMeta = unknown>(\n shape: ListShape<T, TMeta>,\n ): List<T, TMeta> {\n return new List<T, TMeta>(shape);\n }\n\n public getSorting(id: string): Sorting<T> {\n const sorting = this.sorting.find((s) => s.id === id);\n invariant(!!sorting, `Could not get Sorting (ID: ${id})`);\n return sorting;\n }\n\n public clearSorting(): void {\n return this.sorting.forEach((s) => s.clear());\n }\n\n public resetFilters(): void {\n return this.filters.forEach((f) => f.resetValues());\n }\n\n public clearFilters(): void {\n return this.filters.forEach((f) => f.clear());\n }\n\n public useIsEmpty(): boolean {\n return !this.loader.useIsLoading() && this.items.entries.length === 0;\n }\n}\n\nexport default List;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA8BA,IAAa,OAAb,MAAa,KAAkE;CAC7E;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAmB,OAA4B;EAC7C,MAAM,EACJ,mBACA,UACA,OACA,UAAU,CAAC,GACX,UAAU,CAAC,GACX,mBACA,UACA,QACA,QACA,UACA,WACA,iBACA,YAAY,OACZ,iBAAiB,OACjB,oBAAoB,GACpB,yBACA,WACA,uBACA,GAAG,mBACD;EAEJ,MAAM,kBAAkB,mBAAmB;EAC3C,IAAI,UAAU,aAAa,KAAA,GACzB,gBACE,uGACF;EAGF,KAAK,0BAA0B;EAC/B,MAAM,uBAAuB,YAAY;EAEzC,KAAK,kBACH,qBAAqB,uBACjB,IAAI,kBAAkB,MAAM,sBAAsB,EAChD,YAAY,kBACd,CAAC,IACD,KAAA;EAEN,KAAK,QAAQ,IAAI,eAAe,IAAI;EACpC,KAAK,UAAU,QAAQ,KAAK,UAC1B,MAAM,SAAS,cACX,IAAI,gBAAgB,MAAM,KAAK,IAC/B,IAAI,OAAO,MAAM,KAAK,CAC5B;EACA,KAAK,UAAU,QAAQ,KAAK,UAAU,IAAI,QAAW,MAAM,KAAK,CAAC;EACjE,KAAK,SAAS,SAAS,IAAI,OAAO,MAAM,MAAM,IAAI,KAAA;EAClD,KAAK,WAAW,WAAW,IAAI,SAAS,MAAM,QAAQ,IAAI,KAAA;EAC1D,KAAK,YAAY;EACjB,KAAK,iBAAiB;EACtB,KAAK,QAAQ,QAAQ,IAAI,MAAM,MAAM,KAAK,IAAI,KAAA;EAC9C,KAAK,UAAU,IAAIA,sBAAkB,MAAM,iBAAiB;EAS5D,KAAK,QAAQ,SAAS,MAAM,EAAE,sBAAsB,KAAK,QAAQ,MAAM,CAAC,CAAC;EACzE,KAAK,QAAQ,gBAAgB,KAAK,QAAQ,MAAM,CAAC;EACjD,KAAK,iBAAiB;EAKtB,KAAK,YAAY;EACjB,KAAK,SAAS,kBAAkB,OAAU,MAAM,MAAM;EACtD,KAAK,WAAW;EAChB,KAAK,oBAAoB;EACzB,KAAK,aAAa,WAAW,OAAO,MAAM,UAAU;GAClD,iBAAiB,KAAK,OAAO;GAC7B,kBAAkB,KAAK,OAAO;GAC9B,eAAe,KAAK,OAAO;EAC7B,CAAC;EACD,KAAK,WAAW,aAAa,OAAO,MAAM,EAAE,gBAAgB,CAAC;EAC7D,KAAK,YAAY;EACjB,KAAK,wBAAwB;EAE7B,gBAAgB;GACd,KAAK,QAAQ,SAAS,MAAM,EAAE,0BAA0B,CAAC;EAC3D,GAAG,CAAC,KAAK,OAAO,CAAC;CACnB;CAQA,IAAW,YAAmC;EAC5C,OAAO,KAAK,WAAW;CACzB;CAEA,IAAW,WAAyC;EAClD,OAAO,KAAK;CACd;CAEA,IAAW,mBAA4D;EACrE,OAAO,KAAK;CACd;CAEA,mBAAyC;EACvC,OAAO,KAAK,oBAAoB,KAAK,QAAQ,QAAQ,WAAW;CAClE;CAEA,IAAW,mBAA4B;EACrC,OAAO,KAAK,QAAQ,MAAM,MAAM,EAAE,SAAS,CAAC;CAC9C;CAEA,IAAW,iBAAiB;EAC1B,OAAO,KAAK,QAAQ,QAAQ,MAAM,EAAE,mBAAmB,QAAQ;CACjE;CAEA,OAAc,OACZ,OACgB;EAChB,OAAO,IAAI,KAAe,KAAK;CACjC;CAEA,WAAkB,IAAwB;EACxC,MAAM,UAAU,KAAK,QAAQ,MAAM,MAAM,EAAE,OAAO,EAAE;EACpD,UAAU,CAAC,CAAC,SAAS,8BAA8B,GAAG,EAAE;EACxD,OAAO;CACT;CAEA,eAA4B;EAC1B,OAAO,KAAK,QAAQ,SAAS,MAAM,EAAE,MAAM,CAAC;CAC9C;CAEA,eAA4B;EAC1B,OAAO,KAAK,QAAQ,SAAS,MAAM,EAAE,YAAY,CAAC;CACpD;CAEA,eAA4B;EAC1B,OAAO,KAAK,QAAQ,SAAS,MAAM,EAAE,MAAM,CAAC;CAC9C;CAEA,aAA6B;EAC3B,OAAO,CAAC,KAAK,OAAO,aAAa,KAAK,KAAK,MAAM,QAAQ,WAAW;CACtE;AACF"}
1
+ {"version":3,"file":"List.mjs","names":["BatchesController"],"sources":["../../../../../../../../src/components/List/model/List.ts"],"sourcesContent":["import { ItemCollection } from \"@/components/List/model/item/ItemCollection\";\nimport { BatchesController } from \"@/components/List/model/pagination/BatchesController\";\nimport { Filter } from \"./filter/Filter\";\nimport { Sorting } from \"@/components/List/model/sorting/Sorting\";\nimport ReactTable from \"@/components/List/model/ReactTable\";\nimport type {\n EmptyViewType,\n GetItemId,\n ItemActionFn,\n ListSettingsStorageDefaults,\n ListShape,\n ListSupportedComponentProps,\n} from \"@/components/List/model/types\";\nimport { IncrementalLoader } from \"@/components/List/model/loading/IncrementalLoader\";\nimport invariant from \"invariant\";\nimport { Search } from \"@/components/List/model/search/Search\";\nimport { ItemView } from \"@/components/List/model/item/ItemView\";\nimport { Table } from \"@/components/List/model/table/Table\";\nimport { useEffect, type ReactNode } from \"react\";\nimport { ListSettingsStore } from \"./ListSettingsStore\";\nimport { ListViewMode } from \"./ListViewMode\";\nimport { useSettings } from \"@/components/SettingsProvider/SettingsProvider\";\nimport { DateRangeFilter } from \"@/components/List/model/filter/DateRangeFilter\";\nimport { useWarnDeprecation } from \"@/components/DeprecationWarningProvider\";\nimport type {\n ListModelContext,\n ListSettingsPort,\n} from \"@mittwald/flow-components-base\";\nimport type { Table as ReactTableInstance } from \"@tanstack/table-core\";\n\nexport class List<T = unknown, TMeta = unknown> implements ListModelContext<T> {\n public readonly filters: (\n Filter<T, never, never> | DateRangeFilter<T, never>\n )[];\n public readonly itemView?: ItemView<T>;\n public readonly table?: Table<T>;\n public readonly search?: Search<T>;\n public readonly sorting: Sorting<T>[];\n public readonly items: ItemCollection<T>;\n public readonly reactTable: ReactTable<T>;\n public readonly batches: BatchesController<T>;\n public readonly loader: IncrementalLoader<T>;\n public readonly onAction?: ItemActionFn<T>;\n public readonly accordion: boolean;\n public readonly infiniteScroll: boolean;\n public readonly getItemId?: GetItemId<T>;\n public readonly componentProps: ListSupportedComponentProps;\n public metadata?: TMeta;\n public readonly settingsStorage?: ListSettingsStore<T>;\n public readonly loadingItemsCount;\n public readonly viewMode: ListViewMode<T>;\n public readonly emptyView?: ReactNode;\n public readonly emptySearchResultView?: ReactNode;\n public readonly settingsStorageDefaults?: ListSettingsStorageDefaults;\n\n public constructor(shape: ListShape<T, TMeta>) {\n const {\n settingStorageKey,\n itemView,\n table,\n filters = [],\n sorting = [],\n batchesController,\n onChange,\n loader,\n search,\n onAction,\n getItemId,\n defaultViewMode,\n accordion = false,\n infiniteScroll = false,\n loadingItemsCount = 5,\n settingsStorageDefaults,\n emptyView,\n emptySearchResultView,\n ...componentProps\n } = shape;\n\n const warnDeprecation = useWarnDeprecation();\n if (itemView?.fallback !== undefined) {\n warnDeprecation(\n \"The 'fallback' prop is deprecated and will be removed in a future release. Use 'loadingView' instead.\",\n );\n }\n if (itemView?.dependencies !== undefined) {\n warnDeprecation(\n \"The 'dependencies' prop of 'List.Item' is deprecated and will be removed in a future release. Use 'renderDependencies' instead.\",\n );\n }\n\n this.settingsStorageDefaults = settingsStorageDefaults;\n const generalSettingsStore = useSettings();\n\n this.settingsStorage =\n settingStorageKey && generalSettingsStore\n ? new ListSettingsStore(this, generalSettingsStore, {\n storageKey: settingStorageKey,\n })\n : undefined;\n\n this.items = new ItemCollection(this);\n this.filters = filters.map((shape) =>\n shape.mode === \"dateRange\"\n ? new DateRangeFilter(this, shape)\n : new Filter(this, shape),\n );\n this.sorting = sorting.map((shape) => new Sorting<T>(this, shape));\n this.search = search ? new Search(this, search) : undefined;\n this.itemView = itemView ? new ItemView(this, itemView) : undefined;\n this.accordion = accordion;\n this.infiniteScroll = infiniteScroll;\n this.table = table ? new Table(this, table) : undefined;\n this.batches = new BatchesController(this, batchesController);\n\n /*\n * The controller no longer subscribes itself: the filters and the search\n * are this list's, and handing a list of concrete filters to a shared\n * model is the `Table<never>` variance trap. `IncrementalLoader` still\n * subscribes in its own constructor, which runs right after this, so the\n * order of the two resets is unchanged.\n */\n this.filters.forEach((f) => f.onFilterUpdated(() => this.batches.reset()));\n this.search?.onUpdated(() => this.batches.reset());\n this.componentProps = componentProps;\n /*\n * Before the loader: its state takes `getItemId` over in its constructor,\n * and a loader built first would never deduplicate.\n */\n this.getItemId = getItemId;\n this.loader = IncrementalLoader.useNew<T>(this, loader);\n this.onAction = onAction;\n this.loadingItemsCount = loadingItemsCount;\n this.reactTable = ReactTable.useNew(this, onChange, {\n manualFiltering: this.loader.manualFiltering,\n manualPagination: this.loader.manualPagination,\n manualSorting: this.loader.manualSorting,\n });\n this.viewMode = ListViewMode.useNew(this, { defaultViewMode });\n this.emptyView = emptyView;\n this.emptySearchResultView = emptySearchResultView;\n\n useEffect(() => {\n this.filters.forEach((f) => f.deleteUnknownFilterValues());\n }, [this.filters]);\n }\n\n /*\n * `ListModelContext` — what the shared model in\n * `@mittwald/flow-components-base` reaches for, so `Sorting` and `Search` can\n * keep being handed the list itself. Getters, because the model is built\n * before the table is.\n */\n public get dataTable(): ReactTableInstance<T> {\n return this.reactTable.table;\n }\n\n public get settings(): ListSettingsPort | undefined {\n return this.settingsStorage;\n }\n\n public get settingsDefaults(): ListSettingsStorageDefaults | undefined {\n return this.settingsStorageDefaults;\n }\n\n public getEmptyViewType(): EmptyViewType {\n return this.hasActiveFilters || this.search?.isSet ? \"search\" : \"list\";\n }\n\n public get hasActiveFilters(): boolean {\n return this.filters.some((f) => f.isActive());\n }\n\n public get visibleSorting() {\n return this.sorting.filter((s) => s.initialEnabled !== \"hidden\");\n }\n\n public static useNew<T, TMeta = unknown>(\n shape: ListShape<T, TMeta>,\n ): List<T, TMeta> {\n return new List<T, TMeta>(shape);\n }\n\n public getSorting(id: string): Sorting<T> {\n const sorting = this.sorting.find((s) => s.id === id);\n invariant(!!sorting, `Could not get Sorting (ID: ${id})`);\n return sorting;\n }\n\n public clearSorting(): void {\n return this.sorting.forEach((s) => s.clear());\n }\n\n public resetFilters(): void {\n return this.filters.forEach((f) => f.resetValues());\n }\n\n public clearFilters(): void {\n return this.filters.forEach((f) => f.clear());\n }\n\n public useIsEmpty(): boolean {\n return !this.loader.useIsLoading() && this.items.entries.length === 0;\n }\n}\n\nexport default List;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA8BA,IAAa,OAAb,MAAa,KAAkE;CAC7E;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAmB,OAA4B;EAC7C,MAAM,EACJ,mBACA,UACA,OACA,UAAU,CAAC,GACX,UAAU,CAAC,GACX,mBACA,UACA,QACA,QACA,UACA,WACA,iBACA,YAAY,OACZ,iBAAiB,OACjB,oBAAoB,GACpB,yBACA,WACA,uBACA,GAAG,mBACD;EAEJ,MAAM,kBAAkB,mBAAmB;EAC3C,IAAI,UAAU,aAAa,KAAA,GACzB,gBACE,uGACF;EAEF,IAAI,UAAU,iBAAiB,KAAA,GAC7B,gBACE,iIACF;EAGF,KAAK,0BAA0B;EAC/B,MAAM,uBAAuB,YAAY;EAEzC,KAAK,kBACH,qBAAqB,uBACjB,IAAI,kBAAkB,MAAM,sBAAsB,EAChD,YAAY,kBACd,CAAC,IACD,KAAA;EAEN,KAAK,QAAQ,IAAI,eAAe,IAAI;EACpC,KAAK,UAAU,QAAQ,KAAK,UAC1B,MAAM,SAAS,cACX,IAAI,gBAAgB,MAAM,KAAK,IAC/B,IAAI,OAAO,MAAM,KAAK,CAC5B;EACA,KAAK,UAAU,QAAQ,KAAK,UAAU,IAAI,QAAW,MAAM,KAAK,CAAC;EACjE,KAAK,SAAS,SAAS,IAAI,OAAO,MAAM,MAAM,IAAI,KAAA;EAClD,KAAK,WAAW,WAAW,IAAI,SAAS,MAAM,QAAQ,IAAI,KAAA;EAC1D,KAAK,YAAY;EACjB,KAAK,iBAAiB;EACtB,KAAK,QAAQ,QAAQ,IAAI,MAAM,MAAM,KAAK,IAAI,KAAA;EAC9C,KAAK,UAAU,IAAIA,sBAAkB,MAAM,iBAAiB;EAS5D,KAAK,QAAQ,SAAS,MAAM,EAAE,sBAAsB,KAAK,QAAQ,MAAM,CAAC,CAAC;EACzE,KAAK,QAAQ,gBAAgB,KAAK,QAAQ,MAAM,CAAC;EACjD,KAAK,iBAAiB;EAKtB,KAAK,YAAY;EACjB,KAAK,SAAS,kBAAkB,OAAU,MAAM,MAAM;EACtD,KAAK,WAAW;EAChB,KAAK,oBAAoB;EACzB,KAAK,aAAa,WAAW,OAAO,MAAM,UAAU;GAClD,iBAAiB,KAAK,OAAO;GAC7B,kBAAkB,KAAK,OAAO;GAC9B,eAAe,KAAK,OAAO;EAC7B,CAAC;EACD,KAAK,WAAW,aAAa,OAAO,MAAM,EAAE,gBAAgB,CAAC;EAC7D,KAAK,YAAY;EACjB,KAAK,wBAAwB;EAE7B,gBAAgB;GACd,KAAK,QAAQ,SAAS,MAAM,EAAE,0BAA0B,CAAC;EAC3D,GAAG,CAAC,KAAK,OAAO,CAAC;CACnB;CAQA,IAAW,YAAmC;EAC5C,OAAO,KAAK,WAAW;CACzB;CAEA,IAAW,WAAyC;EAClD,OAAO,KAAK;CACd;CAEA,IAAW,mBAA4D;EACrE,OAAO,KAAK;CACd;CAEA,mBAAyC;EACvC,OAAO,KAAK,oBAAoB,KAAK,QAAQ,QAAQ,WAAW;CAClE;CAEA,IAAW,mBAA4B;EACrC,OAAO,KAAK,QAAQ,MAAM,MAAM,EAAE,SAAS,CAAC;CAC9C;CAEA,IAAW,iBAAiB;EAC1B,OAAO,KAAK,QAAQ,QAAQ,MAAM,EAAE,mBAAmB,QAAQ;CACjE;CAEA,OAAc,OACZ,OACgB;EAChB,OAAO,IAAI,KAAe,KAAK;CACjC;CAEA,WAAkB,IAAwB;EACxC,MAAM,UAAU,KAAK,QAAQ,MAAM,MAAM,EAAE,OAAO,EAAE;EACpD,UAAU,CAAC,CAAC,SAAS,8BAA8B,GAAG,EAAE;EACxD,OAAO;CACT;CAEA,eAA4B;EAC1B,OAAO,KAAK,QAAQ,SAAS,MAAM,EAAE,MAAM,CAAC;CAC9C;CAEA,eAA4B;EAC1B,OAAO,KAAK,QAAQ,SAAS,MAAM,EAAE,YAAY,CAAC;CACpD;CAEA,eAA4B;EAC1B,OAAO,KAAK,QAAQ,SAAS,MAAM,EAAE,MAAM,CAAC;CAC9C;CAEA,aAA6B;EAC3B,OAAO,CAAC,KAAK,OAAO,aAAa,KAAK,KAAK,MAAM,QAAQ,WAAW;CACtE;AACF"}
@@ -1,9 +1,9 @@
1
1
  "use client"
2
2
  /* */
3
- import useSelector from "../../../lib/mobx/useSelector.mjs";
4
- import { useStatic } from "../../../lib/hooks/useStatic.mjs";
5
3
  import { ListViewMode as ListViewMode$1 } from "../../../../../components-base/src/list/viewMode/ListViewMode.mjs";
6
4
  import "../../../../../components-base/src/index.mjs";
5
+ import useSelector from "../../../lib/mobx/useSelector.mjs";
6
+ import { useStatic } from "../../../lib/hooks/useStatic.mjs";
7
7
  //#region src/components/List/model/ListViewMode.ts
8
8
  /**
9
9
  * React's view of the list's layout mode.
@@ -1,11 +1,11 @@
1
1
  "use client"
2
2
  /* */
3
- import useSelector from "../../../lib/mobx/useSelector.mjs";
4
- import { useStatic } from "../../../lib/hooks/useStatic.mjs";
5
3
  import { getListColumn } from "../../../../../components-base/src/list/ListModelContext.mjs";
6
4
  import { mergeHiddenSorting } from "../../../../../components-base/src/list/sorting/ListSorting.mjs";
7
5
  import { ListTable } from "../../../../../components-base/src/list/table/ListTable.mjs";
8
6
  import "../../../../../components-base/src/index.mjs";
7
+ import useSelector from "../../../lib/mobx/useSelector.mjs";
8
+ import { useStatic } from "../../../lib/hooks/useStatic.mjs";
9
9
  import { Filter } from "./filter/Filter.mjs";
10
10
  import { useEffect, useEffectEvent, useState } from "react";
11
11
  import { getCoreRowModel, getFacetedUniqueValues, getFilteredRowModel, getPaginationRowModel, getSortedRowModel } from "@tanstack/table-core";