@mittwald/flow-react-components 1.3.0-next.2 → 1.3.0-next.21

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 (132) hide show
  1. package/AGENTS.md +56 -1
  2. package/dist/assets/component-index.json +1 -1
  3. package/dist/assets/doc-properties.json +1 -1
  4. package/dist/css/all-layered.css +1 -1
  5. package/dist/css/all.css +1 -1
  6. package/dist/js/_virtual/_28.locale.mjs +10 -0
  7. package/dist/js/default.mjs +2 -1
  8. package/dist/js/flr-universal.mjs +2 -1
  9. package/dist/js/packages/components/src/components/Accordion/Accordion.mjs +23 -15
  10. package/dist/js/packages/components/src/components/Accordion/Accordion.mjs.map +1 -1
  11. package/dist/js/packages/components/src/components/Avatar/Avatar.module.mjs.map +1 -1
  12. package/dist/js/packages/components/src/components/Calendar/Calendar.module.mjs +3 -1
  13. package/dist/js/packages/components/src/components/Calendar/Calendar.module.mjs.map +1 -1
  14. package/dist/js/packages/components/src/components/Calendar/components/CalendarHeader/CalendarHeader.mjs +19 -15
  15. package/dist/js/packages/components/src/components/Calendar/components/CalendarHeader/CalendarHeader.mjs.map +1 -1
  16. package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.mjs +6 -2
  17. package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.mjs.map +1 -1
  18. package/dist/js/packages/components/src/components/CartesianChart/CartesianChart.module.mjs.map +1 -1
  19. package/dist/js/packages/components/src/components/CartesianChart/components/Area/Area.mjs +3 -1
  20. package/dist/js/packages/components/src/components/CartesianChart/components/Area/Area.mjs.map +1 -1
  21. package/dist/js/packages/components/src/components/CartesianChart/components/Bar/Bar.mjs +12 -3
  22. package/dist/js/packages/components/src/components/CartesianChart/components/Bar/Bar.mjs.map +1 -1
  23. package/dist/js/packages/components/src/components/CartesianChart/context.mjs +4 -1
  24. package/dist/js/packages/components/src/components/CartesianChart/context.mjs.map +1 -1
  25. package/dist/js/packages/components/src/components/CartesianChart/hooks/useScopedStackId.mjs +16 -0
  26. package/dist/js/packages/components/src/components/CartesianChart/hooks/useScopedStackId.mjs.map +1 -0
  27. package/dist/js/packages/components/src/components/Chat/Chat.module.mjs.map +1 -1
  28. package/dist/js/packages/components/src/components/CheckboxGroup/CheckboxGroup.module.mjs.map +1 -1
  29. package/dist/js/packages/components/src/components/CodeBlock/CodeBlock.mjs.map +1 -1
  30. package/dist/js/packages/components/src/components/CodeBlock/CodeBlock.module.mjs.map +1 -1
  31. package/dist/js/packages/components/src/components/Combine/Combine.mjs +4 -1
  32. package/dist/js/packages/components/src/components/Combine/Combine.mjs.map +1 -1
  33. package/dist/js/packages/components/src/components/Combine/Combine.module.mjs.map +1 -1
  34. package/dist/js/packages/components/src/components/ComboBox/ComboBox.module.mjs.map +1 -1
  35. package/dist/js/packages/components/src/components/ContextMenu/ContextMenu.module.mjs.map +1 -1
  36. package/dist/js/packages/components/src/components/DateRangePicker/components/DateRangeInput/DateRangeInput.mjs +14 -11
  37. package/dist/js/packages/components/src/components/DateRangePicker/components/DateRangeInput/DateRangeInput.mjs.map +1 -1
  38. package/dist/js/packages/components/src/components/DateRangePicker/components/DateRangeInput/DateRangeInput.module.mjs +4 -2
  39. package/dist/js/packages/components/src/components/DateRangePicker/components/DateRangeInput/DateRangeInput.module.mjs.map +1 -1
  40. package/dist/js/packages/components/src/components/DonutChart/DonutChart.module.mjs.map +1 -1
  41. package/dist/js/packages/components/src/components/FileDropZone/FileDropZone.mjs +2 -2
  42. package/dist/js/packages/components/src/components/FileDropZone/FileDropZone.mjs.map +1 -1
  43. package/dist/js/packages/components/src/components/HeaderNavigation/HeaderNavigation.mjs +9 -6
  44. package/dist/js/packages/components/src/components/HeaderNavigation/HeaderNavigation.mjs.map +1 -1
  45. package/dist/js/packages/components/src/components/HeaderNavigation/HeaderNavigation.module.mjs +5 -1
  46. package/dist/js/packages/components/src/components/HeaderNavigation/HeaderNavigation.module.mjs.map +1 -1
  47. package/dist/js/packages/components/src/components/Heading/Heading.mjs +1 -1
  48. package/dist/js/packages/components/src/components/Heading/Heading.mjs.map +1 -1
  49. package/dist/js/packages/components/src/components/Heading/Heading.module.mjs.map +1 -1
  50. package/dist/js/packages/components/src/components/Icon/components/icons/IconAIHosting.mjs +19 -0
  51. package/dist/js/packages/components/src/components/Icon/components/icons/IconAIHosting.mjs.map +1 -0
  52. package/dist/js/packages/components/src/components/LayoutCard/LayoutCard.module.mjs.map +1 -1
  53. package/dist/js/packages/components/src/components/LightBox/LightBox.module.mjs.map +1 -1
  54. package/dist/js/packages/components/src/components/LightBox/components/LightBoxGallery/Controls.mjs +1 -1
  55. package/dist/js/packages/components/src/components/LightBox/components/LightBoxGallery/Controls.mjs.map +1 -1
  56. package/dist/js/packages/components/src/components/List/List.module.mjs.map +1 -1
  57. package/dist/js/packages/components/src/components/List/components/Header/components/SearchField/SearchField.module.mjs.map +1 -1
  58. package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.module.mjs.map +1 -1
  59. package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.module.mjs.map +1 -1
  60. package/dist/js/packages/components/src/components/Markdown/Markdown.module.mjs.map +1 -1
  61. package/dist/js/packages/components/src/components/MarkdownEditor/MarkdownEditor.module.mjs.map +1 -1
  62. package/dist/js/packages/components/src/components/MessageThread/MessageThread.module.mjs.map +1 -1
  63. package/dist/js/packages/components/src/components/Modal/Modal.module.mjs.map +1 -1
  64. package/dist/js/packages/components/src/components/Navigation/Navigation.module.mjs +3 -1
  65. package/dist/js/packages/components/src/components/Navigation/Navigation.module.mjs.map +1 -1
  66. package/dist/js/packages/components/src/components/Navigation/components/LinkListTunnelExit/LinkListTunnelExit.mjs +5 -1
  67. package/dist/js/packages/components/src/components/Navigation/components/LinkListTunnelExit/LinkListTunnelExit.mjs.map +1 -1
  68. package/dist/js/packages/components/src/components/Navigation/components/NavigationGroup/NavigationGroup.module.mjs.map +1 -1
  69. package/dist/js/packages/components/src/components/NumberField/NumberField.module.mjs.map +1 -1
  70. package/dist/js/packages/components/src/components/Overlay/Overlay.module.mjs +3 -1
  71. package/dist/js/packages/components/src/components/Overlay/Overlay.module.mjs.map +1 -1
  72. package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs +47 -9
  73. package/dist/js/packages/components/src/components/Overlay/components/OverlayContent.mjs.map +1 -1
  74. package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs +8 -1
  75. package/dist/js/packages/components/src/components/PasswordCreationField/PasswordCreationField.mjs.map +1 -1
  76. package/dist/js/packages/components/src/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.mjs +2 -0
  77. package/dist/js/packages/components/src/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.mjs.map +1 -1
  78. package/dist/js/packages/components/src/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.mjs +13 -7
  79. package/dist/js/packages/components/src/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.mjs.map +1 -1
  80. package/dist/js/packages/components/src/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.module.mjs +9 -0
  81. package/dist/js/packages/components/src/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.module.mjs.map +1 -0
  82. package/dist/js/packages/components/src/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.mjs +12 -4
  83. package/dist/js/packages/components/src/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.mjs.map +1 -1
  84. package/dist/js/packages/components/src/components/PasswordCreationField/lib/ariaAnnounce.mjs +52 -0
  85. package/dist/js/packages/components/src/components/PasswordCreationField/lib/ariaAnnounce.mjs.map +1 -0
  86. package/dist/js/packages/components/src/components/PasswordCreationField/lib/generateValidationTranslation.mjs +1 -0
  87. package/dist/js/packages/components/src/components/PasswordCreationField/lib/generateValidationTranslation.mjs.map +1 -1
  88. package/dist/js/packages/components/src/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult.mjs +1 -0
  89. package/dist/js/packages/components/src/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult.mjs.map +1 -1
  90. package/dist/js/packages/components/src/components/PasswordCreationField/lib/usePolicyValidationResult.mjs +1 -0
  91. package/dist/js/packages/components/src/components/PasswordCreationField/lib/usePolicyValidationResult.mjs.map +1 -1
  92. package/dist/js/packages/components/src/components/Popover/Popover.module.mjs +3 -1
  93. package/dist/js/packages/components/src/components/Popover/Popover.module.mjs.map +1 -1
  94. package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs +20 -11
  95. package/dist/js/packages/components/src/components/Popover/components/NonModalPopoverContent/NonModalPopoverContent.mjs.map +1 -1
  96. package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs +1 -0
  97. package/dist/js/packages/components/src/components/Popover/components/PopoverContent/PopoverContent.mjs.map +1 -1
  98. package/dist/js/packages/components/src/components/SearchField/SearchField.module.mjs +3 -3
  99. package/dist/js/packages/components/src/components/SearchField/SearchField.module.mjs.map +1 -1
  100. package/dist/js/packages/components/src/components/Section/Section.module.mjs.map +1 -1
  101. package/dist/js/packages/components/src/components/Section/components/SectionHeader/SectionHeader.module.mjs.map +1 -1
  102. package/dist/js/packages/components/src/components/Slider/Slider.module.mjs.map +1 -1
  103. package/dist/js/packages/components/src/components/TabNavigation/TabNavigation.mjs +2 -1
  104. package/dist/js/packages/components/src/components/TabNavigation/TabNavigation.mjs.map +1 -1
  105. package/dist/js/packages/components/src/components/TabNavigation/TabNavigation.module.mjs +5 -1
  106. package/dist/js/packages/components/src/components/TabNavigation/TabNavigation.module.mjs.map +1 -1
  107. package/dist/js/packages/components/src/components/Table/Table.module.mjs.map +1 -1
  108. package/dist/js/packages/components/src/components/Tabs/components/TabTitle/TabTitle.module.mjs.map +1 -1
  109. package/dist/js/packages/components/src/components/Text/Text.module.mjs.map +1 -1
  110. package/dist/js/packages/components/src/components/TextArea/TextArea.mjs +14 -13
  111. package/dist/js/packages/components/src/components/TextArea/TextArea.mjs.map +1 -1
  112. package/dist/js/packages/components/src/components/Tooltip/Tooltip.mjs +1 -0
  113. package/dist/js/packages/components/src/components/Tooltip/Tooltip.mjs.map +1 -1
  114. package/dist/js/packages/components/src/components/Tooltip/Tooltip.module.mjs +3 -1
  115. package/dist/js/packages/components/src/components/Tooltip/Tooltip.module.mjs.map +1 -1
  116. package/dist/js/packages/components/src/lib/files/acceptedFiles.mjs +34 -0
  117. package/dist/js/packages/components/src/lib/files/acceptedFiles.mjs.map +1 -0
  118. package/dist/js/packages/components/src/lib/hooks/dom/useKeepBrowserExtensionsInteractive.mjs +1 -1
  119. package/dist/js/packages/components/src/lib/hooks/dom/useKeepBrowserExtensionsInteractive.mjs.map +1 -1
  120. package/dist/types/components/CartesianChart/context.d.ts +6 -0
  121. package/dist/types/components/CartesianChart/hooks/useScopedStackId.d.ts +6 -0
  122. package/dist/types/components/Icon/components/icons/IconAIHosting.d.ts +4 -0
  123. package/dist/types/components/Icon/components/icons/index.d.ts +1 -0
  124. package/dist/types/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.d.ts +0 -7
  125. package/dist/types/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.d.ts +0 -9
  126. package/dist/types/components/PasswordCreationField/lib/ariaAnnounce.d.ts +1 -0
  127. package/dist/types/components/PasswordCreationField/lib/generateValidationTranslation.d.ts +0 -2
  128. package/dist/types/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult.d.ts +0 -3
  129. package/dist/types/components/PasswordCreationField/lib/usePolicyValidationResult.d.ts +1 -7
  130. package/dist/types/lib/files/acceptedFiles.d.ts +1 -0
  131. package/dist/types/lib/hooks/dom/useKeepBrowserExtensionsInteractive.d.ts +1 -0
  132. package/package.json +10 -10
package/AGENTS.md CHANGED
@@ -244,6 +244,26 @@ if ("action" in props) {
244
244
  match prop values (`.size-s`, `.primary`).
245
245
  - Class composition with `clsx`, consumer `className` appended last:
246
246
  `clsx(styles.button, styles[size], styles[color], className)`.
247
+ - **Element-type selectors are a lint error** — `selector-max-type: 0` on
248
+ `*.module.{css,scss}`, blocking since #3021. Style what the component renders,
249
+ through its own class. Where the element genuinely carries no class —
250
+ react-aria internals, third-party svgs, consumer-supplied children, or content
251
+ the component does not author (`Markdown`, `Text`) — opt out explicitly and
252
+ name the reason:
253
+ `// stylelint-disable-next-line selector-max-type -- react-markdown output`.
254
+ There is no autofix. Two traps when introducing a class instead: a `flow--`
255
+ class pulls the global reset's
256
+ `*:where([class*="flow--"] [class*="flow--"]) { font: inherit }`
257
+ (`src/styles/globals.scss`) onto the element — that reflows `CodeBlock`'s
258
+ `<pre>`, so it stays an element selector — and a class raises specificity
259
+ where an element selector deliberately lost a tie (`Modal`'s `> span` against
260
+ `.flow--heading--heading-content:empty`).
261
+ - **`:global(.flow--…)` names are checked** by
262
+ `flow/no-unknown-global-flow-class` (`dev/stylelint/`), against the classes
263
+ the committed `*.module.d.scss.ts` stubs declare, run through the build's own
264
+ `cssModuleClassNameGenerator`. The reference has to name a class some
265
+ component actually generates — otherwise the selector matches nothing, which
266
+ used to fail without a single signal anywhere.
247
267
  - **`styles` is precisely typed** by generated `*.module.d.scss.ts` stubs (a
248
268
  committed generated artifact — see the root
249
269
  [Generated code](https://github.com/mittwald/flow/blob/main/AGENTS.md#generated-code--must-be-committed)
@@ -296,6 +316,38 @@ Run: `pnpm nx test:unit components`,
296
316
  `pnpm nx test:browser components --browser.name=webkit`. Browser tests need
297
317
  `pnpm test:browser:prepare` once.
298
318
 
319
+ **Iterate through nx too**, not with a bare `vitest`. Everything after the `--`
320
+ goes to vitest, so a single file and watch mode have nx targets as well:
321
+
322
+ ```shell
323
+ pnpm nx test:browser components -- src/components/Popover --browser.name=webkit
324
+ pnpm nx test:browser:dev components
325
+ ```
326
+
327
+ Only the nx target's `dependsOn` rebuilds the design tokens the styles entry
328
+ compiles against. A bare `vitest run` skips it and renders against whatever
329
+ `packages/design-tokens/dist` happens to hold — a token added in the same branch
330
+ is simply absent, and CSS drops every declaration referencing it without a
331
+ warning (#3194).
332
+
333
+ Three traps cost time in every new browser test:
334
+
335
+ - **Click the label, not the control.** `Checkbox`, `Radio`, `Switch` and
336
+ `Rating` stack their icons on top of a visually hidden input, so playwright
337
+ refuses the input with `<svg …> intercepts pointer events`. Query the control
338
+ by role for assertions and click its label text
339
+ (`page.getByText(name, { exact: true })`).
340
+ - **Hover needs the pointer modality first.** react-aria only counts a hover as
341
+ a hover while `getInteractionModality() === "pointer"`, and a freshly loaded
342
+ page has no modality at all — so `Tooltip` and everything else that opens on
343
+ hover stays closed no matter how long the test waits. Press something neutral
344
+ with the mouse once before hovering.
345
+ - **`await render(...)` before any bare DOM query.** A locator assertion polls
346
+ and waits the first render out; a `document.querySelector` right after
347
+ `render()` runs before React has committed and reads `null`. That turns an
348
+ assertion that something is _absent_ into a silent pass, so give any helper
349
+ that queries the DOM directly a guard that throws when its element is missing.
350
+
299
351
  ## i18n & a11y
300
352
 
301
353
  - Component-internal UI text lives in colocated `locales/de-DE.locale.json`
@@ -391,7 +443,10 @@ Easy-to-miss conventions not spelled out above. Full details and examples in
391
443
  children are left intact.
392
444
  - **Semantic generated CSS classes are coordination points** — scoped modules
393
445
  still use `:global(.flow--…)` when independently rendered Flow descendants
394
- must affect layout.
446
+ must affect layout. Copy the name from the target component's
447
+ `*.module.d.scss.ts`; the generator drops a suffix that equals the component
448
+ name, so a hand-derived name silently matches nothing.
449
+ `flow/no-unknown-global-flow-class` blocks that.
395
450
  - **Controllers coexist with declarative props** — overlay-like APIs support
396
451
  controlled/uncontrolled props _and_ a controller object, not one or the other.
397
452
  - **A component without `value` and without `defaultValue` still has to render