@mittwald/flow-react-components 1.6.0-next.2 → 1.6.0-next.20

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 (209) hide show
  1. package/AGENTS.md +121 -0
  2. package/USAGE.md +2 -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/_10.locale.mjs +3 -3
  8. package/dist/js/_virtual/_11.locale.mjs +3 -9
  9. package/dist/js/_virtual/_12.locale.mjs +9 -3
  10. package/dist/js/_virtual/_13.locale.mjs +3 -9
  11. package/dist/js/_virtual/_14.locale.mjs +5 -505
  12. package/dist/js/_virtual/_15.locale.mjs +505 -5
  13. package/dist/js/_virtual/_16.locale.mjs +9 -3
  14. package/dist/js/_virtual/_17.locale.mjs +3 -63
  15. package/dist/js/_virtual/_18.locale.mjs +63 -3
  16. package/dist/js/_virtual/_19.locale.mjs +3 -9
  17. package/dist/js/_virtual/_20.locale.mjs +5 -5
  18. package/dist/js/_virtual/_21.locale.mjs +5 -11
  19. package/dist/js/_virtual/_22.locale.mjs +15 -3
  20. package/dist/js/_virtual/_23.locale.mjs +3 -15
  21. package/dist/js/_virtual/_24.locale.mjs +15 -3
  22. package/dist/js/_virtual/_25.locale.mjs +3 -33
  23. package/dist/js/_virtual/_26.locale.mjs +29 -5
  24. package/dist/js/_virtual/_27.locale.mjs +9 -3
  25. package/dist/js/_virtual/_28.locale.mjs +3 -3
  26. package/dist/js/_virtual/_29.locale.mjs +3 -93
  27. package/dist/js/_virtual/_30.locale.mjs +93 -3
  28. package/dist/js/_virtual/_31.locale.mjs +3 -9
  29. package/dist/js/_virtual/_32.locale.mjs +9 -3
  30. package/dist/js/_virtual/_33.locale.mjs +3 -9
  31. package/dist/js/_virtual/_34.locale.mjs +5 -7
  32. package/dist/js/_virtual/_35.locale.mjs +7 -13
  33. package/dist/js/_virtual/_36.locale.mjs +23 -0
  34. package/dist/js/_virtual/_4.locale.mjs +3 -9
  35. package/dist/js/_virtual/_5.locale.mjs +9 -3
  36. package/dist/js/_virtual/_6.locale.mjs +3 -21
  37. package/dist/js/_virtual/_7.locale.mjs +21 -3
  38. package/dist/js/_virtual/_8.locale.mjs +3 -3
  39. package/dist/js/_virtual/_9.locale.mjs +3 -3
  40. package/dist/js/packages/components/src/components/AccentBox/AccentBox.mjs +3 -2
  41. package/dist/js/packages/components/src/components/AccentBox/AccentBox.mjs.map +1 -1
  42. package/dist/js/packages/components/src/components/Accordion/Accordion.mjs +3 -2
  43. package/dist/js/packages/components/src/components/Accordion/Accordion.mjs.map +1 -1
  44. package/dist/js/packages/components/src/components/ActionGroup/ActionGroup.mjs +3 -3
  45. package/dist/js/packages/components/src/components/ActionGroup/ActionGroup.mjs.map +1 -1
  46. package/dist/js/packages/components/src/components/Activity/Activity.mjs +1 -1
  47. package/dist/js/packages/components/src/components/Activity/Activity.mjs.map +1 -1
  48. package/dist/js/packages/components/src/components/Alert/Alert.mjs +3 -2
  49. package/dist/js/packages/components/src/components/Alert/Alert.mjs.map +1 -1
  50. package/dist/js/packages/components/src/components/AvatarStack/AvatarStack.mjs +4 -0
  51. package/dist/js/packages/components/src/components/AvatarStack/AvatarStack.mjs.map +1 -1
  52. package/dist/js/packages/components/src/components/Badge/Badge.mjs +1 -1
  53. package/dist/js/packages/components/src/components/Calendar/components/RangeCalendar/helpers/useCalendarDateRangePresets.mjs +1 -1
  54. package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.mjs +6 -8
  55. package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.mjs.map +1 -1
  56. package/dist/js/packages/components/src/components/CartesianChart/components/ChartTooltip/TooltipProgressBar.mjs +1 -1
  57. package/dist/js/packages/components/src/components/CartesianChart/components/YAxis/YAxis.mjs +23 -5
  58. package/dist/js/packages/components/src/components/CartesianChart/components/YAxis/YAxis.mjs.map +1 -1
  59. package/dist/js/packages/components/src/components/CartesianChart/hooks/useTickLabelWidth.mjs +67 -0
  60. package/dist/js/packages/components/src/components/CartesianChart/hooks/useTickLabelWidth.mjs.map +1 -0
  61. package/dist/js/packages/components/src/components/Checkbox/Checkbox.mjs +2 -2
  62. package/dist/js/packages/components/src/components/Checkbox/Checkbox.mjs.map +1 -1
  63. package/dist/js/packages/components/src/components/CodeBlock/CodeBlock.mjs +4 -4
  64. package/dist/js/packages/components/src/components/CodeBlock/CodeBlock.mjs.map +1 -1
  65. package/dist/js/packages/components/src/components/ComboBox/ComboBox.mjs +4 -3
  66. package/dist/js/packages/components/src/components/ComboBox/ComboBox.mjs.map +1 -1
  67. package/dist/js/packages/components/src/components/ContextMenu/ContextMenu.mjs +3 -2
  68. package/dist/js/packages/components/src/components/ContextMenu/ContextMenu.mjs.map +1 -1
  69. package/dist/js/packages/components/src/components/ContextMenu/components/ContextMenuSelectAll/ContextMenuSelectAll.mjs +1 -1
  70. package/dist/js/packages/components/src/components/ContextualHelp/components/ContextualHelpTrigger/ContextualHelpTrigger.mjs +1 -1
  71. package/dist/js/packages/components/src/components/CopyButton/CopyButton.mjs +1 -1
  72. package/dist/js/packages/components/src/components/CountryOptions/CountryOptions.mjs +6 -2
  73. package/dist/js/packages/components/src/components/CountryOptions/CountryOptions.mjs.map +1 -1
  74. package/dist/js/packages/components/src/components/DatePicker/DatePicker.mjs +2 -1
  75. package/dist/js/packages/components/src/components/DatePicker/DatePicker.mjs.map +1 -1
  76. package/dist/js/packages/components/src/components/DateRangePicker/DateRangePicker.mjs +2 -1
  77. package/dist/js/packages/components/src/components/DateRangePicker/DateRangePicker.mjs.map +1 -1
  78. package/dist/js/packages/components/src/components/DonutChart/DonutChart.mjs.map +1 -1
  79. package/dist/js/packages/components/src/components/FileCard/components/DeleteButton/DeleteButton.mjs +1 -1
  80. package/dist/js/packages/components/src/components/Heading/Heading.mjs +2 -0
  81. package/dist/js/packages/components/src/components/Heading/Heading.mjs.map +1 -1
  82. package/dist/js/packages/components/src/components/Icon/Icon.module.mjs.map +1 -1
  83. package/dist/js/packages/components/src/components/IllustratedMessage/IllustratedMessage.mjs +3 -2
  84. package/dist/js/packages/components/src/components/IllustratedMessage/IllustratedMessage.mjs.map +1 -1
  85. package/dist/js/packages/components/src/components/ImageCropper/ImageCropper.mjs +1 -1
  86. package/dist/js/packages/components/src/components/Kbd/Kbd.mjs +1 -1
  87. package/dist/js/packages/components/src/components/Label/Label.mjs +1 -5
  88. package/dist/js/packages/components/src/components/Label/Label.mjs.map +1 -1
  89. package/dist/js/packages/components/src/components/LightBox/LightBox.mjs +1 -1
  90. package/dist/js/packages/components/src/components/LightBox/components/LightBoxGallery/Controls.mjs +1 -1
  91. package/dist/js/packages/components/src/components/LightBox/components/LightBoxGallery/LightBoxGallery.mjs +1 -1
  92. package/dist/js/packages/components/src/components/LightBox/components/LightBoxGalleryItem/LightBoxGalleryItem.mjs +1 -1
  93. package/dist/js/packages/components/src/components/Link/components/LinkIcon/LinkIcon.mjs +1 -1
  94. package/dist/js/packages/components/src/components/List/components/EmptySearchResultView/EmptySearchResultView.mjs +1 -1
  95. package/dist/js/packages/components/src/components/List/components/EmptyView/EmptyView.mjs +1 -1
  96. package/dist/js/packages/components/src/components/List/components/Footer/Footer.mjs +1 -1
  97. package/dist/js/packages/components/src/components/List/components/Footer/components/PaginationInfos/PaginationInfos.mjs +1 -1
  98. package/dist/js/packages/components/src/components/List/components/Footer/components/ShowNextBatchButton/ShowNextBatchButton.mjs +1 -1
  99. package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs +2 -1
  100. package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs.map +1 -1
  101. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs +1 -1
  102. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionCheckboxGroup.mjs +1 -1
  103. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionDateRange.mjs +1 -1
  104. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/FilterAccordionRadioGroup.mjs +1 -1
  105. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/SortingAccordion.mjs +1 -1
  106. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion.mjs +1 -1
  107. package/dist/js/packages/components/src/components/List/components/Header/components/FilterContextMenu/DateRangeFilterPopover.mjs +1 -1
  108. package/dist/js/packages/components/src/components/List/components/Header/components/SortingContextMenu/SortingContextMenu.mjs +1 -1
  109. package/dist/js/packages/components/src/components/List/components/Header/components/ViewModeContextMenu/ViewModeContextMenu.mjs +1 -1
  110. package/dist/js/packages/components/src/components/List/components/Header/components/ViewModeContextMenu/ViewModeMenuItem.mjs +1 -1
  111. package/dist/js/packages/components/src/components/List/components/Items/components/Item/components/AccordionButton.mjs +1 -1
  112. package/dist/js/packages/components/src/components/List/components/Items/components/Item/components/OptionsButton/OptionsButton.mjs +1 -1
  113. package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs +3 -0
  114. package/dist/js/packages/components/src/components/List/components/Items/views/GridList/GridList.mjs.map +1 -1
  115. package/dist/js/packages/components/src/components/List/components/ListSummary/ListSummary.mjs.map +1 -1
  116. package/dist/js/packages/components/src/components/List/hooks/useAriaAnnounceSearchState.mjs +1 -1
  117. package/dist/js/packages/components/src/components/List/views/EmptyView/EmptyView.mjs +1 -1
  118. package/dist/js/packages/components/src/components/Markdown/Markdown.mjs +21 -7
  119. package/dist/js/packages/components/src/components/Markdown/Markdown.mjs.map +1 -1
  120. package/dist/js/packages/components/src/components/Markdown/components/SkeletonBlocks.mjs +1 -1
  121. package/dist/js/packages/components/src/components/Markdown/components/SkeletonBlocks.mjs.map +1 -1
  122. package/dist/js/packages/components/src/components/Markdown/lib/isExternalHref.mjs +8 -0
  123. package/dist/js/packages/components/src/components/Markdown/lib/isExternalHref.mjs.map +1 -0
  124. package/dist/js/packages/components/src/components/MarkdownEditor/components/ModeButton.mjs +1 -1
  125. package/dist/js/packages/components/src/components/MarkdownEditor/components/ToolbarButton.mjs +1 -1
  126. package/dist/js/packages/components/src/components/MarkdownEditor/lib/useFileUpload.mjs +1 -1
  127. package/dist/js/packages/components/src/components/MenuItem/MenuItem.mjs +32 -3
  128. package/dist/js/packages/components/src/components/MenuItem/MenuItem.mjs.map +1 -1
  129. package/dist/js/packages/components/src/components/MenuItem/MenuItem.module.mjs +1 -3
  130. package/dist/js/packages/components/src/components/Message/Message.mjs +1 -1
  131. package/dist/js/packages/components/src/components/MessageThread/MessageThread.mjs +1 -1
  132. package/dist/js/packages/components/src/components/MessageThread/MessageThread.mjs.map +1 -1
  133. package/dist/js/packages/components/src/components/MessageThread/components/MessageSeparator/MessageSeparator.mjs +1 -1
  134. package/dist/js/packages/components/src/components/Modal/Modal.mjs +3 -2
  135. package/dist/js/packages/components/src/components/Modal/Modal.mjs.map +1 -1
  136. package/dist/js/packages/components/src/components/Modal/components/ConfirmUnsavedChangesModal/ConfirmUnsavedChangesModal.mjs +1 -1
  137. package/dist/js/packages/components/src/components/Navigation/Navigation.module.mjs +1 -3
  138. package/dist/js/packages/components/src/components/Notification/Notification.mjs +1 -1
  139. package/dist/js/packages/components/src/components/NumberField/NumberField.mjs +2 -3
  140. package/dist/js/packages/components/src/components/NumberField/NumberField.mjs.map +1 -1
  141. package/dist/js/packages/components/src/components/Option/Option.module.mjs +1 -3
  142. package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs +2 -1
  143. package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs.map +1 -1
  144. package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs +2 -2
  145. package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs.map +1 -1
  146. package/dist/js/packages/components/src/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.mjs +1 -1
  147. package/dist/js/packages/components/src/components/PasswordCreationField/components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton.mjs +1 -1
  148. package/dist/js/packages/components/src/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.mjs +1 -1
  149. package/dist/js/packages/components/src/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.mjs +1 -1
  150. package/dist/js/packages/components/src/components/PasswordCreationField/lib/ariaAnnounce.mjs +1 -1
  151. package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs +1 -1
  152. package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs.map +1 -1
  153. package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs +4 -2
  154. package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs.map +1 -1
  155. package/dist/js/packages/components/src/components/ProgressBar/ProgressBar.mjs.map +1 -1
  156. package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarLegend.mjs +5 -4
  157. package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarLegend.mjs.map +1 -1
  158. package/dist/js/packages/components/src/components/ProgressBar/components/ProgressBarValue.mjs +1 -1
  159. package/dist/js/packages/components/src/components/RadioGroup/RadioGroup.mjs +2 -3
  160. package/dist/js/packages/components/src/components/RadioGroup/RadioGroup.mjs.map +1 -1
  161. package/dist/js/packages/components/src/components/Rating/Rating.mjs +12 -11
  162. package/dist/js/packages/components/src/components/Rating/Rating.mjs.map +1 -1
  163. package/dist/js/packages/components/src/components/Rating/components/RatingSegment/RatingSegment.mjs +1 -1
  164. package/dist/js/packages/components/src/components/SearchField/SearchField.mjs +3 -4
  165. package/dist/js/packages/components/src/components/SearchField/SearchField.mjs.map +1 -1
  166. package/dist/js/packages/components/src/components/Section/Section.mjs +10 -6
  167. package/dist/js/packages/components/src/components/Section/Section.mjs.map +1 -1
  168. package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.mjs +0 -4
  169. package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.mjs.map +1 -1
  170. package/dist/js/packages/components/src/components/Section/context.mjs +47 -0
  171. package/dist/js/packages/components/src/components/Section/context.mjs.map +1 -0
  172. package/dist/js/packages/components/src/components/SegmentedControl/SegmentedControl.mjs +2 -3
  173. package/dist/js/packages/components/src/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  174. package/dist/js/packages/components/src/components/Select/Select.mjs +2 -3
  175. package/dist/js/packages/components/src/components/Select/Select.mjs.map +1 -1
  176. package/dist/js/packages/components/src/components/SkeletonMode/SkeletonMode.mjs +1 -1
  177. package/dist/js/packages/components/src/components/SkeletonText/SkeletonText.mjs +4 -3
  178. package/dist/js/packages/components/src/components/SkeletonText/SkeletonText.mjs.map +1 -1
  179. package/dist/js/packages/components/src/components/Slider/Slider.mjs +48 -42
  180. package/dist/js/packages/components/src/components/Slider/Slider.mjs.map +1 -1
  181. package/dist/js/packages/components/src/components/TabNavigation/TabNavigation.mjs +1 -1
  182. package/dist/js/packages/components/src/components/Table/Table.mjs +3 -0
  183. package/dist/js/packages/components/src/components/Table/Table.mjs.map +1 -1
  184. package/dist/js/packages/components/src/components/Tabs/Tabs.mjs +6 -8
  185. package/dist/js/packages/components/src/components/Tabs/Tabs.mjs.map +1 -1
  186. package/dist/js/packages/components/src/components/Tabs/Tabs.module.mjs.map +1 -1
  187. package/dist/js/packages/components/src/components/Tabs/components/FallbackTab/FallbackTab.mjs +1 -1
  188. package/dist/js/packages/components/src/components/Tabs/components/TabList/TabList.mjs +0 -3
  189. package/dist/js/packages/components/src/components/Tabs/components/TabList/TabList.mjs.map +1 -1
  190. package/dist/js/packages/components/src/components/TextArea/TextArea.mjs +1 -1
  191. package/dist/js/packages/components/src/components/TextField/TextField.mjs +12 -9
  192. package/dist/js/packages/components/src/components/TextField/TextField.mjs.map +1 -1
  193. package/dist/js/packages/components/src/components/TimeField/TimeField.mjs +4 -2
  194. package/dist/js/packages/components/src/components/TimeField/TimeField.mjs.map +1 -1
  195. package/dist/js/packages/components/src/integrations/react-hook-form/components/Field/Field.mjs +1 -1
  196. package/dist/js/packages/design-tokens/dist/json-runtime/all-dark.mjs +7 -2
  197. package/dist/js/packages/design-tokens/dist/json-runtime/all-dark.mjs.map +1 -1
  198. package/dist/js/packages/design-tokens/dist/json-runtime/all-light.mjs +6 -1
  199. package/dist/js/packages/design-tokens/dist/json-runtime/all-light.mjs.map +1 -1
  200. package/dist/types/components/CartesianChart/hooks/useTickLabelWidth.d.ts +1 -0
  201. package/dist/types/components/CodeBlock/CodeBlock.d.ts +1 -1
  202. package/dist/types/components/DonutChart/DonutChart.d.ts +1 -4
  203. package/dist/types/components/List/components/ListSummary/ListSummary.d.ts +1 -1
  204. package/dist/types/components/Markdown/lib/isExternalHref.d.ts +1 -0
  205. package/dist/types/components/ProgressBar/ProgressBar.d.ts +1 -4
  206. package/dist/types/components/Rating/Rating.d.ts +5 -5
  207. package/dist/types/components/Section/context.d.ts +28 -0
  208. package/dist/types/lib/theming/hooks/useDesignTokens.d.ts +6 -0
  209. package/package.json +12 -12
package/AGENTS.md CHANGED
@@ -333,6 +333,28 @@ if ("action" in props) {
333
333
  | `*.test.ts(x)` (unit) | Pure logic in `src/lib/` or component utility functions. |
334
334
  | `*.test-types.tsx` | Generic/typed public APIs — `expectTypeOf` plus `@ts-expect-error` negative assertions. |
335
335
 
336
+ A bug fix gets a regression test when it changes behavior this table covers, or
337
+ rendered output the visual suite covers
338
+ (`packages/remote-react-components/src/tests/visual`, see Definition of Done
339
+ item 4 in the
340
+ [root AGENTS.md](https://github.com/mittwald/flow/blob/main/AGENTS.md#definition-of-done--component-work))
341
+ — not by default. Leave out:
342
+
343
+ - **Wiring of a single prop** — "the consumer `className` reaches the root",
344
+ "`aria-label` is forwarded". A test for one prop is arbitrary: every other
345
+ prop would need the same. A whole class of wiring bugs (`className` merge
346
+ order, a props spread) belongs in a lint rule or a shared contract helper like
347
+ `testFormFieldContract`.
348
+ - **A spy on a function prop the component consumes** — `sortBy`, `filterBy`, a
349
+ formatter. Assert the result it produces, not that it ran. `on*` event props
350
+ are the exception: the call is what the consumer observes, so a spy is the
351
+ assertion.
352
+ - **Tests that pass without the fix.** Revert the fix and watch the test fail
353
+ before committing it. If it cannot fail, it guards nothing; say in the PR how
354
+ you verified the fix instead. The `optimizeDeps` entry under
355
+ [Common failures](#common-failures) below shows one way a test passes in both
356
+ directions.
357
+
336
358
  Run: `pnpm nx test:unit components`,
337
359
  `pnpm nx test:browser components --browser.name=webkit`. The browser targets
338
360
  install the Playwright browsers for you **locally**; `pnpm test:browser:prepare`
@@ -638,3 +660,102 @@ Easy-to-miss conventions not spelled out above. Full details and examples in
638
660
  - **Universal exports are deliberately explicit** — remote-safe values and their
639
661
  types are curated in `flr-universal.ts` independently of the main public
640
662
  surface; adding to `public.ts` does not add them there.
663
+
664
+ ## Common failures
665
+
666
+ Symptom → cause → fix for authoring components. Repo-wide ones are in the
667
+ [root AGENTS.md](https://github.com/mittwald/flow/blob/main/AGENTS.md#common-failures).
668
+
669
+ - **Symptom:** `test:compile` fails on a new component — the
670
+ `flowComponent("X", …)` name/props type isn't assignable
671
+
672
+ **Cause:** `flowComponent` names are typed as `keyof` a hand-maintained props
673
+ registry
674
+
675
+ **Fix:** Register the props type in
676
+ `packages/components/src/components/propTypes/index.ts` (see
677
+ [The flowComponent factory](#the-flowcomponent-factory))
678
+
679
+ - **Symptom:** `test:compile` fails in unrelated shared code with
680
+ **`Property 'children' does not exist on type 'Partial<XProps>'`** right after
681
+ you registered a new component
682
+
683
+ **Cause:** `dynamic()` and other shared helpers are typed over the **union of
684
+ every** registered props type, so code reading `p.children` breaks as soon as
685
+ one registered component has no `children` (`Field.tsx`,
686
+ `flowComponent.browser.test.tsx`)
687
+
688
+ **Fix:** Declare `children?: never` on the new props type. It keeps the union
689
+ accessible and documents that the component takes no children — do **not** add
690
+ a real `children` slot you then ignore
691
+
692
+ - **Symptom:** A `ReactElement`-valued prop renders fine in the visual suite's
693
+ **Remote** environment but kills a real remote connection with
694
+ **`DataCloneError: Symbol(react.transitional.element) could not be cloned`**
695
+ (the host then shows `Remote rendering failed: Timeout reached`)
696
+
697
+ **Cause:** The prop was generated as a **remote property**, and properties
698
+ travel through `postMessage`/structured clone, which cannot carry a React
699
+ element. `remote-dom-react` turns an element-valued prop into a slotted child
700
+ _only_ when the element declares it as a slot
701
+ (`Element.remoteSlotDefinitions.has(prop)`), and the generator declares a slot
702
+ only for props typed exactly `ReactNode` or listed in `@flr-slot-props`
703
+ (`dev/remote-components-generator/lib/propClassifiers.ts`)
704
+
705
+ **Fix:** Add `@flr-slot-props <propA>, <propB>` to the component's JSDoc and
706
+ regenerate — the prop then arrives as a slotted child and any React subtree
707
+ works, including a raw `<svg>` or a Tabler icon. The visual suite's **Remote**
708
+ environment does serialize (a MessageChannel through
709
+ `FlowThreadSerialization`), but `FlowThreadSerialization` drops React values
710
+ to `null` with a `console.error` before `postMessage` ever sees them — so the
711
+ suite renders a component missing the prop, not the `DataCloneError`. Read the
712
+ console, or verify in `apps/remote-dom-demo` over the iframe connection
713
+
714
+ - **Symptom:** A function prop works locally but its result is garbage remotely
715
+ — a formatter renders `[object Promise]`, a predicate is always truthy
716
+
717
+ **Cause:** The prop is a **remote property**, and
718
+ `FlowThreadSerialization.isSerializableByBase` accepts any function, so
719
+ `@quilted/threads` sends it as a proxy. Calling a proxy is a round trip, so
720
+ the host gets a **Promise**, never the value. Only `on*` events are safe by
721
+ construction — they are fire-and-forget
722
+
723
+ **Fix:** Either type the prop's return as `Promise<T> | T` and have the host
724
+ `await` it (`ChartTooltip`'s formatters do), or drop it from the remote
725
+ surface with `@flr-ignore-props` (`XAxis`/`YAxis` `tickFormatter` do) and
726
+ regenerate. `checkSerializableProps` now fails generation on new ones; the
727
+ pre-existing set is listed in `acknowledgedValueReturningProps`
728
+
729
+ - **Symptom:** A `components` browser test keeps **passing** after you change
730
+ `packages/icons` — including a test written to fail on exactly that change.
731
+ The build is not the problem: `pnpm nx build icons` runs `tsc` and `dist`
732
+ holds the new code
733
+
734
+ **Cause:** `packages/components/vite.config.ts` lists `@mittwald/flow-icons`
735
+ in `optimizeDeps.include`, so vite pre-bundles it. The prebundle is keyed on
736
+ the lockfile and the config, not on the contents of a linked workspace
737
+ package's `dist` — so a rebuilt `dist` does not invalidate it and the test
738
+ keeps loading the old bundle
739
+
740
+ **Fix:** Delete `packages/components/node_modules/.vite*` after rebuilding.
741
+ And confirm a new regression test actually fails without its fix: this one
742
+ passed in both directions, which is the only symptom you get
743
+
744
+ - **Symptom:** `stylelint` fails with **`flow/no-unknown-global-flow-class`** —
745
+ a `:global(.flow--…)` name resolves to nothing
746
+
747
+ **Cause:** The class-name generator
748
+ (`packages/components/dev/vite/cssModuleClassNameGenerator.ts`) **drops the
749
+ suffix when it equals the component name**, so `ColumnLayout`'s
750
+ `.columnLayout` compiles to `flow--column-layout`, not
751
+ `flow--column-layout--column-layout`. The names cannot be derived by hand, and
752
+ a component that moves leaves every reference to it dead
753
+
754
+ **Fix:** Copy the name from the component's committed `*.module.d.scss.ts` —
755
+ that is what the rule checks against — or take the rule's "Did you mean"
756
+ suggestion. Just added the class? Regenerate the stubs first:
757
+ `pnpm nx build:scss-types components`. The same applies to ESLint's
758
+ `flow/no-unknown-flow-class`, which checks hardcoded `flow--…` strings in
759
+ TS/TSX (#3095). Before the rule (#3091) this class of bug failed completely
760
+ silently: no build error, no console warning, and the docs site and Storybook
761
+ kept rendering
package/USAGE.md CHANGED
@@ -32,8 +32,8 @@ Start with these:
32
32
  `/raw/foundations/structure/spacing.md` — how layout and spacing are meant to
33
33
  be composed
34
34
  - the templates — see [Start from a template](#start-from-a-template)
35
- - `/raw/foundations/content-guidelines/error-handling.md` — preventing and
36
- presenting errors
35
+ - `/raw/foundations/content-guidelines/fehlermeldungen.md` — where errors appear
36
+ and how to word them
37
37
  - `/raw/foundations/content-guidelines/sprach-guide.md` — UI wording
38
38
  - `/raw/get-started/versioning.md` — what you may depend on
39
39