@revolist/ui 4.0.4-rc → 4.0.6-rc

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 (240) hide show
  1. package/MIGRATION.md +36 -0
  2. package/OWNERSHIP.md +10 -10
  3. package/README.md +22 -4
  4. package/_chunks/arrow-up-Cw8hW9vp.js +4 -0
  5. package/_chunks/badge.view-D30pMUfi.js +14 -0
  6. package/_chunks/calculator-CDWOuAcp.js +4 -0
  7. package/_chunks/{calendar-xpZ0v3xf.js → calendar-QWDyYzdo.js} +19 -19
  8. package/_chunks/chart-frame-hcOlnQ1K.js +145 -0
  9. package/_chunks/check-BwI7iCAm.js +4 -0
  10. package/_chunks/choice-chips-A6WR-WJe.js +126 -0
  11. package/_chunks/{color-palette-D8vyPfld.js → color-palette-DMJUChWC.js} +20 -22
  12. package/_chunks/color-picker-BK4W1nd6.js +143 -0
  13. package/_chunks/{component-C_T2VN5u.js → component-CMkF17YZ.js} +281 -265
  14. package/_chunks/{component-metadata-BMOOmqx5.js → component-metadata-BKd7U8OW.js} +0 -8
  15. package/_chunks/configurator-actions-By8WSL2m.js +155 -0
  16. package/_chunks/configurator-field-icon-CmcM_sPs.js +53 -0
  17. package/_chunks/{control-AHKXD5Eu.js → control-mlH7l0Uq.js} +42 -17
  18. package/_chunks/{controls-DsNi8V8I.js → controls-FUU-MUKC.js} +171 -186
  19. package/_chunks/{date-control-DrVFX13g.js → date-control-Dup_P3w5.js} +1 -1
  20. package/_chunks/{date-time-qIhp5vaX.js → date-time-9z6pAG5T.js} +317 -278
  21. package/_chunks/dialog.parts-Bi7YbXqS.js +131 -0
  22. package/_chunks/{duration-CL68Em0o.js → duration-D7oRjsmP.js} +5 -5
  23. package/_chunks/editor-popup-ByU7qiub.js +82 -0
  24. package/_chunks/field-configurator-BCINdXpU.js +223 -0
  25. package/_chunks/{framework-mount--RTLIqE-.js → framework-mount-Bk4O_T7T.js} +1 -1
  26. package/_chunks/icon-toolbar-DSjOdwM7.js +134 -0
  27. package/_chunks/magnifying-glass-CvrTDSkB.js +4 -0
  28. package/_chunks/minus-BOAR3A1C.js +4 -0
  29. package/_chunks/mount-Cw2zk58T.js +266 -0
  30. package/_chunks/{native.view-ByyZ1CT5.js → native-Blr3byjO.js} +1 -1
  31. package/_chunks/native-control-pFMuHf3G.js +644 -0
  32. package/_chunks/{number-input-BKwA5FnM.js → number-input-DqXV6vgP.js} +7 -7
  33. package/_chunks/{picker-h1P5RUgp.js → picker-gEGTu1Ki.js} +2 -2
  34. package/_chunks/plus-CbGRkIGl.js +4 -0
  35. package/_chunks/popover-controller-D-AvKQ7B.js +102 -0
  36. package/_chunks/{popup-CT2uD3go.js → popup-C35Isk7p.js} +115 -104
  37. package/_chunks/{rating-choice-DZgmaic0.js → rating-choice-DbxdUJr-.js} +1 -1
  38. package/_chunks/{reorder-list-CSlqAGHw.js → reorder-list-B0_13Sja.js} +1 -1
  39. package/_chunks/request-trail-CCSK6TJA.js +753 -0
  40. package/_chunks/rich-text-5rnc8lpI.js +842 -0
  41. package/_chunks/rotate-left-BF6G883o.js +4 -0
  42. package/_chunks/title-tooltip-Cw6LOZhb.js +11 -0
  43. package/_chunks/tooltip-D4xkio5G.js +54 -0
  44. package/_chunks/tooltip-owner-DjdvqKzz.js +19 -0
  45. package/_chunks/tooltip-session-B6X6x8G_.js +110 -0
  46. package/_chunks/tooltip-text-BXsUEmBH.js +12 -0
  47. package/_chunks/top-layer-popup-CNSDdfJV.js +59 -0
  48. package/_variables.scss +33 -32
  49. package/ai/_chat.scss +28 -3
  50. package/ai/_style.scss +55 -2
  51. package/ai/chat.d.ts +3 -1
  52. package/ai/components.d.ts +13 -2
  53. package/ai/index.d.ts +1 -0
  54. package/ai/index.js +3 -3
  55. package/ai/mount.d.ts +17 -1
  56. package/ai/results/_style.scss +83 -0
  57. package/ai/results/index.d.ts +11 -0
  58. package/ai/results/metrics.d.ts +5 -0
  59. package/ai/results/table.d.ts +5 -0
  60. package/ai/results/text.d.ts +5 -0
  61. package/ai/results/types.d.ts +29 -0
  62. package/ai/transcript.d.ts +2 -0
  63. package/ai/translations.d.ts +1 -1
  64. package/assignee/assignee.scss +5 -1
  65. package/assignee/index.js +2 -2
  66. package/avatar/index.d.ts +25 -2
  67. package/avatar/index.js +33 -32
  68. package/badge.view.d.ts +8 -0
  69. package/brush-range/component.d.ts +1 -3
  70. package/brush-range/component.js +27 -27
  71. package/buttons/remove-button.d.ts +1 -1
  72. package/buttons/remove-button.style.scss +1 -1
  73. package/buttons/svg-button.d.ts +1 -1
  74. package/buttons/svg-button.js +16 -16
  75. package/calendar/_calendar.scss +2 -2
  76. package/calendar/calendar.js +1 -1
  77. package/calendar/index.js +2 -2
  78. package/checkbox/checkbox.scss +1 -22
  79. package/choice-chips/index.d.ts +3 -1
  80. package/choice-chips/index.js +1 -1
  81. package/color-palette/color-palette.js +1 -1
  82. package/color-palette/color-palette.style.scss +1 -1
  83. package/color-palette/color-picker.js +2 -2
  84. package/color-palette/common-palettes.d.ts +1 -1
  85. package/color-palette/common-palettes.js +1 -1
  86. package/color-palette/native.d.ts +15 -2
  87. package/component-catalog.d.ts +9 -7
  88. package/configurator-actions.d.ts +67 -0
  89. package/configurator-actions.js +1 -0
  90. package/configurator-aggregation-list.d.ts +14 -0
  91. package/configurator-aggregation-list.js +61 -0
  92. package/configurator-drop-zone.d.ts +38 -0
  93. package/configurator-drop-zone.js +64 -0
  94. package/configurator-field-icon.d.ts +10 -0
  95. package/configurator-field-icon.js +1 -0
  96. package/configurator-focus.d.ts +4 -0
  97. package/configurator-focus.js +39 -0
  98. package/configurator-sections.d.ts +42 -0
  99. package/configurator-sections.js +71 -0
  100. package/control-presentation.d.ts +8 -2
  101. package/control-presentation.js +25 -20
  102. package/controls.d.ts +1 -2
  103. package/controls.js +4 -3
  104. package/core/editor-popup-position.d.ts +6 -2
  105. package/core/editor-popup.d.ts +4 -0
  106. package/core/editor-popup.js +1 -1
  107. package/core/popover-controller.d.ts +35 -0
  108. package/core/popup-ownership.d.ts +2 -0
  109. package/core/title-tooltip.d.ts +2 -0
  110. package/core/tooltip-session.d.ts +29 -0
  111. package/core/tooltip-surface.d.ts +13 -0
  112. package/core/tooltip-text.d.ts +6 -0
  113. package/core/tooltip.d.ts +35 -0
  114. package/core/top-layer-popup.d.ts +4 -0
  115. package/core/top-layer-popup.js +1 -23
  116. package/date-time/attach.d.ts +1 -1
  117. package/date-time/field.d.ts +3 -2
  118. package/date-time/index.js +1 -1
  119. package/date-time/style.scss +64 -7
  120. package/date-time/time-selection.d.ts +3 -1
  121. package/date-time/types.d.ts +5 -1
  122. package/dialog/dialog-action-footer.d.ts +17 -2
  123. package/dialog/dialog.dom.d.ts +15 -2
  124. package/dialog/dialog.dom.js +9 -9
  125. package/dialog/dialog.parts.d.ts +1 -1
  126. package/dialog/dialog.parts.js +1 -1
  127. package/distribution-chart/_distribution-chart.scss +12 -54
  128. package/distribution-chart/area-chart.js +1 -1
  129. package/distribution-chart/bar-chart.js +1 -1
  130. package/distribution-chart/index.d.ts +1 -1
  131. package/distribution-chart/line-chart.js +1 -1
  132. package/dropdown/content.js +1 -1
  133. package/dropdown/control.js +1 -1
  134. package/dropdown/editor-dropdown.style.scss +5 -0
  135. package/dropdown/index.js +2 -2
  136. package/dropdown/lookup-field.d.ts +5 -0
  137. package/dropdown/lookup-field.js +2 -1
  138. package/dropdown/popup.d.ts +2 -2
  139. package/dropdown/popup.js +1 -1
  140. package/duration/index.js +1 -1
  141. package/editor-actions.js +1 -1
  142. package/field-configurator.d.ts +27 -0
  143. package/field-configurator.js +4 -170
  144. package/field-expansion.d.ts +9 -0
  145. package/filter/filters/slider/_slider.scss +8 -25
  146. package/filter/filters/slider/control.js +2 -0
  147. package/filter/filters/slider/runtime.js +49 -22
  148. package/filter/filters/slider/single.js +1 -1
  149. package/filter-badge.js +1 -1
  150. package/filter-controls.d.ts +0 -1
  151. package/filter-controls.js +5 -6
  152. package/form-controls/index.d.ts +10 -2
  153. package/form-controls/index.js +7 -7
  154. package/form-controls/presentation.js +12 -12
  155. package/formatting/index.d.ts +1 -1
  156. package/formatting/index.js +22 -21
  157. package/formatting/styles.scss +2 -47
  158. package/framework.js +226 -222
  159. package/history-controls.js +27 -1
  160. package/icon-toolbar.d.ts +62 -0
  161. package/icon-toolbar.js +1 -0
  162. package/masked-input/index.js +1 -1
  163. package/native-control.d.ts +1 -2
  164. package/native-control.js +1 -1
  165. package/native-controls.d.ts +54 -2
  166. package/native-styles.css +1 -1
  167. package/native.js +46 -43
  168. package/number-input/index.js +1 -1
  169. package/package.json +36 -1
  170. package/pagination.js +11 -11
  171. package/pdf-viewer/index.js +1 -1
  172. package/pickers.d.ts +5 -1
  173. package/preact-mount.js +1 -1
  174. package/preact.d.ts +8 -6
  175. package/preact.js +71 -64
  176. package/rating-choice.js +1 -1
  177. package/react-control.d.ts +2 -0
  178. package/react-control.js +2 -2
  179. package/react.d.ts +5 -6
  180. package/react.js +68 -66
  181. package/reorder-list.js +1 -1
  182. package/resource-picker/resource-picker-popup.js +1 -1
  183. package/resource-picker/resource-picker.js +4 -4
  184. package/rich-text/engine.d.ts +1 -0
  185. package/rich-text/format-html.d.ts +2 -0
  186. package/rich-text/index.d.ts +4 -0
  187. package/rich-text/index.js +1 -1
  188. package/rich-text/model.d.ts +2 -0
  189. package/rich-text/style.scss +165 -70
  190. package/rich-text/syntax.d.ts +5 -0
  191. package/rich-text/translations.d.ts +2 -0
  192. package/search-input/index.js +1 -1
  193. package/search-input/native.d.ts +21 -2
  194. package/select.d.ts +3 -1
  195. package/select.js +1 -1
  196. package/status-feedback/exit-snapshot.js +4 -4
  197. package/status-feedback/popover.js +4 -4
  198. package/styles/_alert.scss +18 -4
  199. package/styles/_compositions.scss +3 -3
  200. package/styles/_editor-slider.scss +0 -2
  201. package/styles/_field-configurator.scss +147 -0
  202. package/styles/_fields-grid.scss +37 -0
  203. package/styles/_palette.scss +0 -24
  204. package/styles/_primitives.scss +28 -19
  205. package/styles/configurator-actions.scss +141 -0
  206. package/styles/{legacy-pagination.css → pagination.css} +19 -2
  207. package/styles.css +1 -1
  208. package/styles.scss +2 -2
  209. package/surfaces.d.ts +36 -2
  210. package/surfaces.js +35 -132
  211. package/svelte.js +3 -3
  212. package/switch/index.js +15 -14
  213. package/time-grid.d.ts +0 -1
  214. package/time-grid.js +38 -37
  215. package/timeline-track/index.js +2 -2
  216. package/ui.css +1 -1
  217. package/vue.d.ts +26 -30
  218. package/vue.js +117 -121
  219. package/_chunks/chart-frame-Cmc7xU1i.js +0 -130
  220. package/_chunks/choice-chips-CHQTUdLs.js +0 -110
  221. package/_chunks/color-picker-CudqPYZo.js +0 -138
  222. package/_chunks/control-tooltip-uscKfAnV.js +0 -100
  223. package/_chunks/dialog.parts-CKGkC5zP.js +0 -134
  224. package/_chunks/editor-popup-WDdtVDNA.js +0 -81
  225. package/_chunks/history-controls-B3u3INEK.js +0 -27
  226. package/_chunks/mount-DQ1cpppK.js +0 -257
  227. package/_chunks/native-control-C_yok8_-.js +0 -605
  228. package/_chunks/request-trail-DSlFix6i.js +0 -618
  229. package/_chunks/rich-text-CH7gIqOS.js +0 -636
  230. package/avatar/index.view.d.ts +0 -25
  231. package/color-palette/native.view.d.ts +0 -15
  232. package/control-presentation.view.d.ts +0 -8
  233. package/dialog/dialog-action-footer.view.d.ts +0 -20
  234. package/dialog/dialog.dom.view.d.ts +0 -15
  235. package/form-controls/index.view.d.ts +0 -10
  236. package/formatting/control-tooltip.d.ts +0 -27
  237. package/native-controls.view.d.ts +0 -54
  238. package/search-input/native.view.d.ts +0 -21
  239. package/surfaces.view.d.ts +0 -63
  240. /package/styles/{legacy-rating.css → rating.css} +0 -0
package/MIGRATION.md ADDED
@@ -0,0 +1,36 @@
1
+ # Current UI APIs
2
+
3
+ This change removes compatibility-only component names, CSS hooks and forwarding modules. Native mounting APIs (`createPreactElement`, `mountColorPicker`, native controls and dialogs) and React, Vue, Angular and Svelte adapters remain supported.
4
+
5
+ ## Component names
6
+
7
+ Use the current names from the matching framework entry:
8
+
9
+ | Removed name | Current name |
10
+ | --- | --- |
11
+ | `Icon` | `SvgIcon` |
12
+ | `RemovableChip` | `FilterChip` |
13
+ | `Slider` | `SingleValueSlider` |
14
+ | `RangeSlider` | `PreactRangeSlider` |
15
+ | `ResourcePicker` | `SharedResourcePicker` |
16
+ | `FeedbackPanel` | `StatusFeedbackPanel` |
17
+
18
+ The same names apply to the Angular/Svelte `UiComponent` component selector. Local import aliases are ordinary language aliases and remain available, for example `import { SingleValueSlider as Slider } from '@revolist/ui/react'`.
19
+
20
+ Import `Legend` from `@revolist/ui/legend` or the framework entry, rather than `@revolist/ui/filter-controls`. Use `ControlTooltip` instead of the unused `TooltipSurface` export. Render `DialogActionFooter` or `ActionFooterView` directly instead of calling the removed `renderDialogActionFooter(h, props)` signature.
21
+
22
+ ## Styling
23
+
24
+ `TimeGrid` and `BrushRange` no longer accept `legacyClassPrefix`. Use `rv-time-grid__*` and `brush-range__*` respectively. Slider endpoints use the shared `fromSlider` and `toSlider` classes. Product-owned filter headers, summaries and action controls retain their product-owned names.
25
+
26
+ Checkbox customization uses `--rv-ui-checkbox-bg`, `--rv-ui-checkbox-border`, `--rv-ui-checkbox-checked`, `--rv-ui-checkbox-check` and `--rv-ui-checkbox-focus`; RowSelect/ColumnDialog variable aliases are removed.
27
+
28
+ The active rating and pagination style rules are now in `styles/rating.css` and `styles/pagination.css`, and remain included by the main stylesheet. Primitive `$legacy-*` Sass aliases are removed; internal styles use the existing palette lookup API. The unused scalar-slider fill element is removed; its current range input owns the fill.
29
+
30
+ ## Date/time labels
31
+
32
+ A time picker uses `text.chooseTime`, falling back to its default time label. It no longer borrows `text.chooseDate`. Date pickers continue to use `text.chooseDate`.
33
+
34
+ ## Source ownership
35
+
36
+ Forwarding-only `.ts` modules have been replaced by their owning TSX implementations at the canonical module paths. Public package entry names stay unchanged. The native mounting bridge remains the shared owner of element-returning adapters.
package/OWNERSHIP.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Shared UI ownership
2
2
 
3
3
  `@revolist/ui` is the implementation owner for reusable product controls. Pro's
4
- existing exports and leaf modules are compatibility adapters. Product code owns
4
+ canonical exports and leaf modules contain the current implementations. Product code owns
5
5
  values, validation, commands, persistence and domain layout.
6
6
 
7
7
  AI prompt, suggestions, applied-request trail, action status, result and assistant compositions live in
@@ -11,28 +11,28 @@ view snapshots. Framework adapters and native mounting reuse the same TSX.
11
11
 
12
12
  | Component family | Implementation owner under `src/` | Style owner under `src/` |
13
13
  | --- | --- | --- |
14
- | Native button, input, select, textarea, summary | `control-presentation.view.tsx`; Preact `native-control.tsx` | `styles/_primitives.scss`, `styles/_control.scss`, `_form.scss` |
14
+ | Native button, input, select, textarea, summary | `control-presentation.tsx`; Preact `native-control.tsx` | `styles/_primitives.scss`, `styles/_control.scss`, `_form.scss` |
15
15
  | Button variants, icon button, toggle, group | `controls.tsx`, `buttons/` | `styles/_primitives.scss` |
16
16
  | Icon | `icons/icon.tsx` | `styles/_primitives.scss` |
17
17
  | Checkbox | `checkbox/index.ts` | `checkbox/checkbox.scss` |
18
18
  | Switch | `switch/index.tsx` | `styles/_primitives.scss` |
19
19
  | Radio group | `controls.tsx` | `_form.scss`, `styles/_compositions.scss` |
20
20
  | Choice chips, segmented control, tabs | `choice-chips/`, `segmented-switch/`; semantic exports in `controls.tsx` | `styles/_primitives.scss` |
21
- | Search | `search-input/native.view.tsx`; Preact `search-input/index.tsx` | `styles/_primitives.scss` |
22
- | Number/date/time inputs, stepper | `controls.tsx`; grid scalar/counter adapters in `native-controls.view.tsx` | `_form.scss`, `styles/_editor-counter.scss` |
21
+ | Search | `search-input/native.tsx`; Preact `search-input/index.tsx` | `styles/_primitives.scss` |
22
+ | Number/date/time inputs, stepper | `controls.tsx`; grid scalar/counter adapters in `native-controls.tsx` | `_form.scss`, `styles/_editor-counter.scss` |
23
23
  | Listbox, panes, split layout | `editor-layout/index.tsx`; neutral aliases in `controls.tsx` | `editor-layout/style.scss` |
24
24
  | Form field, hint, error, section, disclosure | `form-controls/`, `controls.tsx` | `_form.scss`, `styles/_compositions.scss` |
25
25
  | Chips | `form-controls/presentation.tsx` | `styles/_primitives.scss` |
26
- | Scalar/range sliders | `filter/filters/slider/`, `native-controls.view.tsx` | `filter/filters/slider/_slider.scss`, `styles/_editor-slider.scss` |
26
+ | Scalar/range sliders | `filter/filters/slider/`, `native-controls.tsx` | `filter/filters/slider/_slider.scss`, `styles/_editor-slider.scss` |
27
27
  | Calendar and date pickers | `calendar/`, `pickers.tsx` | `calendar/_calendar.scss`, `styles/_compositions.scss` |
28
28
  | Dropdown, combobox, multi-select | `dropdown/`; compositions in `pickers.tsx` | `dropdown/editor-dropdown.style.scss`, `styles/_compositions.scss` |
29
29
  | Color palette/picker | `color-palette/` | `color-palette/*.scss` |
30
30
  | Resource picker, avatar | `resource-picker/`, `avatar/` | `resource-picker/resource-picker.scss`, `avatar/avatar.style.scss` |
31
- | Dialog, popover, tooltip, menu, resize | `surfaces.view.tsx`, `dialog/`, `core/`; Preact compositions in `controls.tsx` and `pickers.tsx` | `_dialog.scss`, `styles/_primitives.scss`, `styles/_compositions.scss` |
31
+ | Dialog, popover, tooltip, menu, resize | `surfaces.tsx`, `dialog/`, `core/`; Preact compositions in `controls.tsx` and `pickers.tsx` | `_dialog.scss`, `styles/_primitives.scss`, `styles/_compositions.scss` |
32
32
  | Toolbar, panel, empty state, alerts | `controls.tsx` | `styles/_compositions.scss` |
33
33
  | Status feedback and badges | `status-feedback/`, `controls.tsx` | `status-feedback/status-feedback.scss`, `styles/_primitives.scss` |
34
- | Loading | `native-controls.view.tsx`, `controls.tsx` | `styles/_loading.scss`, `styles/_compositions.scss` |
35
- | Pagination, progress, rating | `pagination.ts`, `progress/`, `native-controls.view.tsx`, `controls.tsx` | `progress/_bar.scss`, `progress/_circular.scss`, `styles/legacy-rating.css`, `styles/legacy-pagination.css`, `styles/_compositions.scss` |
34
+ | Loading | `native-controls.tsx`, `controls.tsx` | `styles/_loading.scss`, `styles/_compositions.scss` |
35
+ | Pagination, progress, rating | `pagination.ts`, `progress/`, `native-controls.tsx`, `controls.tsx` | `progress/_bar.scss`, `progress/_circular.scss`, `styles/rating.css`, `styles/pagination.css`, `styles/_compositions.scss` |
36
36
  | BarChart, LineChart, AreaChart; distribution adapter and brush range | `distribution-chart/bar-chart.tsx`, `line-chart.tsx`, `area-chart.tsx`; shared `chart-frame.tsx` and `geometry.ts`; `brush-range/` | `distribution-chart/_distribution-chart.scss`, `brush-range/_brush-range.scss` |
37
37
  | Option rows, legend, inline fields | `filter-controls.tsx` | `styles/_filter-controls.scss` |
38
38
  | Weekly time grid and keyboard/paint gesture lifecycle | `time-grid.tsx` | `styles/_time-grid.scss` |
@@ -72,7 +72,7 @@ integration tests. Canonical suite selection is documented in `TESTING.md`.
72
72
 
73
73
  History and export commands use UI's `SvgButton` (or `IconButton` convenience composition) for SVG, count badge and pointer/keyboard tooltip presentation. Element-returning adapters use `decorateIconAction`; Charts renders controls through Preact. Products supply localized labels, permissions, actions and history counts. `ToolbarGroup` groups commands with spacing; `ButtonGroup` remains the bordered choice composition. Both danger button variants use the same red outline presentation.
74
74
 
75
- Structured filter adapters retain aggregation, matching, amount/date validation, timezone policy, preset meaning and commit transactions. UI receives explicit data and formatted labels. Expression parsing, syntax tokens, diagnostics and debounce remain in Pro; UI owns the highlighted input's geometry and scroll synchronization. TimeGrid owns keyboard focus and paint gesture cleanup; Pro expands visual buckets into selected hourly filter values. Legacy filter CSS classes remain adapter hooks, with theme aliases at the Pro boundary.
75
+ Structured filter adapters retain aggregation, matching, amount/date validation, timezone policy, preset meaning and commit transactions. UI receives explicit data and formatted labels. Expression parsing, syntax tokens, diagnostics and debounce remain in Pro; UI owns the highlighted input's geometry and scroll synchronization. TimeGrid owns keyboard focus and paint gesture cleanup; Pro expands visual buckets into selected hourly filter values. Filter consumers use the canonical TimeGrid and BrushRange classes and semantic UI tokens.
76
76
 
77
77
  ## Grid-backed filter compositions stay in Pro
78
78
 
@@ -120,4 +120,4 @@ Link-style action buttons use `Button variant="link"` or `SvgButton variant="lin
120
120
 
121
121
  ## Preact element construction
122
122
 
123
- All shared UI markup is Preact TSX. Element-returning compatibility APIs mount the same TSX through `preact-mount.tsx`; they do not build parallel DOM trees. Lifecycle controllers may attach, position, focus and dispose rendered roots. Grid/Stencil VNode adapters retain the Core rendering contract. Charts controls use Preact through the same mount boundary; chart scene/export geometry remains scene-owned.
123
+ All shared UI markup is Preact TSX. Element-returning native APIs mount the same TSX through `preact-mount.ts`; they do not build parallel DOM trees. Lifecycle controllers may attach, position, focus and dispose rendered roots. Grid/Stencil VNode adapters retain the Core rendering contract. Charts controls use Preact through the same mount boundary; chart scene/export geometry remains scene-owned.
package/README.md CHANGED
@@ -65,6 +65,22 @@ export function ReportName() {
65
65
 
66
66
  Controls can be used without a RevoGrid instance. Grid cell templates, providers, row data, and product-specific scheduling logic stay in their owning product packages.
67
67
 
68
+ ## Popover dismissal
69
+
70
+ `Popover` accepts `closeOnOutside` and `closeOnEscape`, both enabled by default, matching `PopoverController`. Set either to `false` independently; changes also apply while open. `open` remains controlled: update it in `onClose` (Vue: `@close`), or close it directly from an action.
71
+
72
+ ```vue
73
+ <Popover
74
+ :open="open"
75
+ :anchor="anchor"
76
+ :close-on-outside="false"
77
+ :close-on-escape="false"
78
+ @close="open = false"
79
+ >
80
+ <button @click="open = false">Done</button>
81
+ </Popover>
82
+ ```
83
+
68
84
  ## Framework integrations
69
85
 
70
86
  | Framework | Entry point | Integration | Guide |
@@ -114,7 +130,7 @@ Every component in the shared adapter catalog is listed below. Each name links t
114
130
 
115
131
  Actions, grouped commands, toggled state, icons, compact sizing, busy states and pill corners.
116
132
 
117
- [Button](https://github.com/revolist/revo-ui/blob/main/docs/api/Button.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [IconButton](https://github.com/revolist/revo-ui/blob/main/docs/api/IconButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [SvgButton](https://github.com/revolist/revo-ui/blob/main/docs/api/SvgButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [ToggleButton](https://github.com/revolist/revo-ui/blob/main/docs/api/ToggleButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [ButtonGroup](https://github.com/revolist/revo-ui/blob/main/docs/api/ButtonGroup.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [DeleteButton](https://github.com/revolist/revo-ui/blob/main/docs/api/DeleteButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [RemoveButton](https://github.com/revolist/revo-ui/blob/main/docs/api/RemoveButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [Icon](https://github.com/revolist/revo-ui/blob/main/docs/api/Icon.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [SvgIcon](https://github.com/revolist/revo-ui/blob/main/docs/api/SvgIcon.md) ([examples](https://ui.rv-grid.com/components/buttons/))
133
+ [Button](https://github.com/revolist/revo-ui/blob/main/docs/api/Button.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [IconButton](https://github.com/revolist/revo-ui/blob/main/docs/api/IconButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [SvgButton](https://github.com/revolist/revo-ui/blob/main/docs/api/SvgButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [ToggleButton](https://github.com/revolist/revo-ui/blob/main/docs/api/ToggleButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [ButtonGroup](https://github.com/revolist/revo-ui/blob/main/docs/api/ButtonGroup.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [DeleteButton](https://github.com/revolist/revo-ui/blob/main/docs/api/DeleteButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [RemoveButton](https://github.com/revolist/revo-ui/blob/main/docs/api/RemoveButton.md) ([examples](https://ui.rv-grid.com/components/buttons/)) | [SvgIcon](https://github.com/revolist/revo-ui/blob/main/docs/api/SvgIcon.md) ([examples](https://ui.rv-grid.com/components/buttons/))
118
134
 
119
135
  ### Selection controls
120
136
 
@@ -138,13 +154,13 @@ Text, search and numeric entry; field labels, validation, inline layouts and edi
138
154
 
139
155
  Single or multiple selections, searchable options, selected-value templates, avatars, resource lists and assignee fields.
140
156
 
141
- [Dropdown](https://github.com/revolist/revo-ui/blob/main/docs/api/Dropdown.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [DropdownPopup](https://github.com/revolist/revo-ui/blob/main/docs/api/DropdownPopup.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [DropdownPopupContent](https://github.com/revolist/revo-ui/blob/main/docs/api/DropdownPopupContent.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [Combobox](https://github.com/revolist/revo-ui/blob/main/docs/api/Combobox.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [MultiSelect](https://github.com/revolist/revo-ui/blob/main/docs/api/MultiSelect.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [Chip](https://github.com/revolist/revo-ui/blob/main/docs/api/Chip.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [FilterChip](https://github.com/revolist/revo-ui/blob/main/docs/api/FilterChip.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [RemovableChip](https://github.com/revolist/revo-ui/blob/main/docs/api/RemovableChip.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [Avatar](https://github.com/revolist/revo-ui/blob/main/docs/api/Avatar.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [ResourcePicker](https://github.com/revolist/revo-ui/blob/main/docs/api/ResourcePicker.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [SharedResourcePicker](https://github.com/revolist/revo-ui/blob/main/docs/api/SharedResourcePicker.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [ResourcePickerAvatar](https://github.com/revolist/revo-ui/blob/main/docs/api/ResourcePickerAvatar.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [AssigneePicker](https://github.com/revolist/revo-ui/blob/main/docs/api/AssigneePicker.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [AssigneeField](https://github.com/revolist/revo-ui/blob/main/docs/api/AssigneeField.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [AssigneePickerLayout](https://github.com/revolist/revo-ui/blob/main/docs/api/AssigneePickerLayout.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/))
157
+ [Dropdown](https://github.com/revolist/revo-ui/blob/main/docs/api/Dropdown.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [DropdownPopup](https://github.com/revolist/revo-ui/blob/main/docs/api/DropdownPopup.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [DropdownPopupContent](https://github.com/revolist/revo-ui/blob/main/docs/api/DropdownPopupContent.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [Combobox](https://github.com/revolist/revo-ui/blob/main/docs/api/Combobox.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [MultiSelect](https://github.com/revolist/revo-ui/blob/main/docs/api/MultiSelect.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [Chip](https://github.com/revolist/revo-ui/blob/main/docs/api/Chip.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [FilterChip](https://github.com/revolist/revo-ui/blob/main/docs/api/FilterChip.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [Avatar](https://github.com/revolist/revo-ui/blob/main/docs/api/Avatar.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [SharedResourcePicker](https://github.com/revolist/revo-ui/blob/main/docs/api/SharedResourcePicker.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [ResourcePickerAvatar](https://github.com/revolist/revo-ui/blob/main/docs/api/ResourcePickerAvatar.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [AssigneePicker](https://github.com/revolist/revo-ui/blob/main/docs/api/AssigneePicker.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [AssigneeField](https://github.com/revolist/revo-ui/blob/main/docs/api/AssigneeField.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/)) | [AssigneePickerLayout](https://github.com/revolist/revo-ui/blob/main/docs/api/AssigneePickerLayout.md) ([examples](https://ui.rv-grid.com/components/selects-chips-and-resources/))
142
158
 
143
159
  ### Sliders
144
160
 
145
161
  Scalar and interval controls with labels, value badges, thumb values, ticks and units.
146
162
 
147
- [Slider](https://github.com/revolist/revo-ui/blob/main/docs/api/Slider.md) ([examples](https://ui.rv-grid.com/components/sliders/)) | [RangeSlider](https://github.com/revolist/revo-ui/blob/main/docs/api/RangeSlider.md) ([examples](https://ui.rv-grid.com/components/sliders/)) | [SingleValueSlider](https://github.com/revolist/revo-ui/blob/main/docs/api/SingleValueSlider.md) ([examples](https://ui.rv-grid.com/components/sliders/)) | [PreactRangeSlider](https://github.com/revolist/revo-ui/blob/main/docs/api/PreactRangeSlider.md) ([examples](https://ui.rv-grid.com/components/sliders/)) | [SliderField](https://github.com/revolist/revo-ui/blob/main/docs/api/SliderField.md) ([examples](https://ui.rv-grid.com/components/sliders/))
163
+ [SingleValueSlider](https://github.com/revolist/revo-ui/blob/main/docs/api/SingleValueSlider.md) ([examples](https://ui.rv-grid.com/components/sliders/)) | [PreactRangeSlider](https://github.com/revolist/revo-ui/blob/main/docs/api/PreactRangeSlider.md) ([examples](https://ui.rv-grid.com/components/sliders/)) | [SliderField](https://github.com/revolist/revo-ui/blob/main/docs/api/SliderField.md) ([examples](https://ui.rv-grid.com/components/sliders/))
148
164
 
149
165
  ### Timeline track
150
166
 
@@ -198,7 +214,7 @@ Command menus, nested commands, separators and grouped toolbar actions.
198
214
 
199
215
  Semantic badges, counters, alerts, progress indicators, loading surfaces, empty states and feedback panels.
200
216
 
201
- [Badge](https://github.com/revolist/revo-ui/blob/main/docs/api/Badge.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [CountBadge](https://github.com/revolist/revo-ui/blob/main/docs/api/CountBadge.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [Alert](https://github.com/revolist/revo-ui/blob/main/docs/api/Alert.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [Spinner](https://github.com/revolist/revo-ui/blob/main/docs/api/Spinner.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [LoadingOverlay](https://github.com/revolist/revo-ui/blob/main/docs/api/LoadingOverlay.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [EmptyState](https://github.com/revolist/revo-ui/blob/main/docs/api/EmptyState.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [FeedbackPanel](https://github.com/revolist/revo-ui/blob/main/docs/api/FeedbackPanel.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [StatusFeedbackPanel](https://github.com/revolist/revo-ui/blob/main/docs/api/StatusFeedbackPanel.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [StatusBadge](https://github.com/revolist/revo-ui/blob/main/docs/api/StatusBadge.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/))
217
+ [Badge](https://github.com/revolist/revo-ui/blob/main/docs/api/Badge.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [CountBadge](https://github.com/revolist/revo-ui/blob/main/docs/api/CountBadge.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [Alert](https://github.com/revolist/revo-ui/blob/main/docs/api/Alert.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [Spinner](https://github.com/revolist/revo-ui/blob/main/docs/api/Spinner.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [LoadingOverlay](https://github.com/revolist/revo-ui/blob/main/docs/api/LoadingOverlay.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [EmptyState](https://github.com/revolist/revo-ui/blob/main/docs/api/EmptyState.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [StatusFeedbackPanel](https://github.com/revolist/revo-ui/blob/main/docs/api/StatusFeedbackPanel.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/)) | [StatusBadge](https://github.com/revolist/revo-ui/blob/main/docs/api/StatusBadge.md) ([examples](https://ui.rv-grid.com/components/status-and-feedback/))
202
218
 
203
219
  ### Layout
204
220
 
@@ -426,3 +442,5 @@ Motion follows the system's reduced-motion preference. `data-rv-ui-motion="off"`
426
442
  ## Licensing
427
443
 
428
444
  Revo UI is [MIT licensed](LICENSE). Anyone can use, modify, and distribute it, including in commercial projects.
445
+
446
+ See [Current UI APIs](MIGRATION.md) for removed compatibility names and consumer migrations.
@@ -0,0 +1,4 @@
1
+ //#region ../../node_modules/.pnpm/@fortawesome+fontawesome-free@7.3.1/node_modules/@fortawesome/fontawesome-free/svgs/solid/arrow-down.svg?raw
2
+ var e = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc. --><path fill=\"currentColor\" d=\"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7-105.4-105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"/></svg>", t = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc. --><path fill=\"currentColor\" d=\"M214.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-370.7 105.4 105.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z\"/></svg>";
3
+ //#endregion
4
+ export { e as n, t };
@@ -0,0 +1,14 @@
1
+ import { t as e } from "./jsxRuntime.module-F6UFnpT-.js";
2
+ import { badgeClassName as t } from "../badge.js";
3
+ //#region src/badge.view.tsx
4
+ function n({ children: n, className: r = "", variant: i, shape: a }) {
5
+ return /* @__PURE__ */ e("span", {
6
+ class: `${t({
7
+ variant: i,
8
+ shape: a
9
+ })} ${r}`,
10
+ children: n
11
+ });
12
+ }
13
+ //#endregion
14
+ export { n as t };
@@ -0,0 +1,4 @@
1
+ //#region ../../node_modules/.pnpm/@fortawesome+fontawesome-free@7.3.1/node_modules/@fortawesome/fontawesome-free/svgs/solid/calculator.svg?raw
2
+ var e = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc. --><path fill=\"currentColor\" d=\"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM96 64l192 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L96 160c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32zm16 168a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zm80 24a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm128-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM88 352a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm128-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zm80 24a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM64 424c0-13.3 10.7-24 24-24l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 448c-13.3 0-24-10.7-24-24zm232-24c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z\"/></svg>";
3
+ //#endregion
4
+ export { e as t };
@@ -1,7 +1,7 @@
1
1
  import { i as e, n as t, t as n } from "./hooks.module-CG3gN83z.js";
2
2
  import { t as r } from "./jsxRuntime.module-F6UFnpT-.js";
3
- import { l as i, t as a } from "./native-control-C_yok8_-.js";
4
- import { createControlId as o } from "../core/control-id.js";
3
+ import { createControlId as i } from "../core/control-id.js";
4
+ import { l as a, t as o } from "./native-control-pFMuHf3G.js";
5
5
  import { DEFAULT_CALENDAR_TRANSLATIONS as s } from "../calendar/translations.js";
6
6
  import { a as c, n as l } from "./iso-B0YHBK7m.js";
7
7
  import { a as u, c as d, d as f, f as p, l as m, n as h, p as g, r as _, s as v, t as y, u as b } from "./model-mPO2tG2f.js";
@@ -9,7 +9,7 @@ import { CalendarHeader as ee, CalendarWeekdays as te } from "../calendar/header
9
9
  import { CalendarMonthGrid as x } from "../calendar/month-grid.js";
10
10
  import { CalendarYearGrid as ne } from "../calendar/year-grid.js";
11
11
  //#region src/calendar/caption.tsx
12
- function re({ month: e, system: n, locale: a, layout: o, start: s, end: c, disabled: l, labels: u, onChange: d }) {
12
+ function re({ month: e, system: n, locale: i, layout: o, start: s, end: c, disabled: l, labels: u, onChange: d }) {
13
13
  let h = m(e, n), g = f(e, n), _ = t(() => {
14
14
  let t = m(e, n)[0], r = s ? m(s, n)[0] : v(t, -600, n), i = c ? m(c, n)[0] : v(t, 120, n), a = [];
15
15
  for (let e = r; e <= i; e = v(e, 12, n)) a.push(e);
@@ -22,7 +22,7 @@ function re({ month: e, system: n, locale: a, layout: o, start: s, end: c, disab
22
22
  ]);
23
23
  return /* @__PURE__ */ r("div", {
24
24
  class: "revo-calendar__caption",
25
- children: [o === "dropdown-years" ? /* @__PURE__ */ r("span", { children: b(e, a, { month: "long" }, n) }) : /* @__PURE__ */ r(i, {
25
+ children: [o === "dropdown-years" ? /* @__PURE__ */ r("span", { children: b(e, i, { month: "long" }, n) }) : /* @__PURE__ */ r(a, {
26
26
  className: "rv-select",
27
27
  config: {
28
28
  ariaLabel: u.chooseMonth,
@@ -33,11 +33,11 @@ function re({ month: e, system: n, locale: a, layout: o, start: s, end: c, disab
33
33
  value: String(g.month),
34
34
  source: h.map((e, t) => ({
35
35
  value: String(t + 1),
36
- label: b(e, a, { month: "short" }, n),
36
+ label: b(e, i, { month: "short" }, n),
37
37
  disabled: !!(s && e < p(s, n) || c && e > p(c, n))
38
38
  })),
39
39
  onChange: (e) => d(h[Number(e) - 1])
40
- }), o === "dropdown-months" ? /* @__PURE__ */ r("span", { children: b(e, a, { year: "numeric" }, n) }) : /* @__PURE__ */ r(i, {
40
+ }), o === "dropdown-months" ? /* @__PURE__ */ r("span", { children: b(e, i, { year: "numeric" }, n) }) : /* @__PURE__ */ r(a, {
41
41
  className: "rv-select",
42
42
  config: {
43
43
  ariaLabel: u.chooseYear,
@@ -48,7 +48,7 @@ function re({ month: e, system: n, locale: a, layout: o, start: s, end: c, disab
48
48
  value: h[0],
49
49
  source: _.map((e) => ({
50
50
  value: e,
51
- label: b(e, a, { year: "numeric" }, n)
51
+ label: b(e, i, { year: "numeric" }, n)
52
52
  })),
53
53
  onChange: (e) => {
54
54
  let t = v(e, g.month - 1, n);
@@ -60,8 +60,8 @@ function re({ month: e, system: n, locale: a, layout: o, start: s, end: c, disab
60
60
  //#endregion
61
61
  //#region src/calendar/calendar.tsx
62
62
  var ie = "2026-08-02";
63
- function S({ locale: i = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1, allowOutsideMonthSelection: S = !1, fixedWeeks: ae = !0, showTodayButton: oe = !1, showHeader: se = !0, showNavigation: C = !0, showPreviousButton: ce = C, showNextButton: le = C, showMonthLabel: ue = !0, showWeekdays: de = !0, enableYearView: w = !0, translations: fe = {}, ...T }) {
64
- let [E] = e(() => o("rv-calendar-feedback")), D = T.calendarSystem ?? "gregory", O = Math.max(1, Math.min(12, Math.trunc(T.numberOfMonths || 1))), k = t(() => {
63
+ function S({ locale: a = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1, allowOutsideMonthSelection: S = !1, fixedWeeks: ae = !0, showTodayButton: oe = !1, showHeader: se = !0, showNavigation: C = !0, showPreviousButton: ce = C, showNextButton: le = C, showMonthLabel: ue = !0, showWeekdays: de = !0, enableYearView: w = !0, translations: fe = {}, ...T }) {
64
+ let [E] = e(() => i("rv-calendar-feedback")), D = T.calendarSystem ?? "gregory", O = Math.max(1, Math.min(12, Math.trunc(T.numberOfMonths || 1))), k = t(() => {
65
65
  let e = T.views ? [...new Set(T.views.filter((e) => e === "month" || e === "year"))] : w ? ["month", "year"] : ["month"];
66
66
  return e.length ? e : ["month"];
67
67
  }, [T.views, w]), [A, pe] = e(T.defaultView && k.includes(T.defaultView) ? T.defaultView : k[0]), j = k.includes(A) ? A : k[0], M = p(T.month, D), N = t(() => Array.from({ length: O }, (e, t) => v(M, t, D)), [
@@ -121,7 +121,7 @@ function S({ locale: i = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1,
121
121
  let e = F.current.get(r);
122
122
  e && (I.current = !1, e.focus());
123
123
  }));
124
- }, q = (e) => T.formatMonth?.(e, i) ?? b(e, i, {
124
+ }, q = (e) => T.formatMonth?.(e, a) ?? b(e, a, {
125
125
  month: "long",
126
126
  year: "numeric"
127
127
  }, D), J = j === "year", Y = J ? 12 : T.pagedNavigation ? O : 1, X = H(v(M, -Y, D), J ? 1 : O), Z = H(v(M, Y, D), J ? 1 : O), Q = (e, t = J ? 1 : O) => {
@@ -140,13 +140,13 @@ function S({ locale: i = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1,
140
140
  children: (J ? [M] : me).map((e, t) => /* @__PURE__ */ r("section", {
141
141
  class: "revo-calendar__month-panel",
142
142
  children: [se && /* @__PURE__ */ r(ee, {
143
- label: J ? b(e, i, { year: "numeric" }, D) : q(e),
143
+ label: J ? b(e, a, { year: "numeric" }, D) : q(e),
144
144
  previousLabel: J ? L.previousYear : L.previousMonth,
145
145
  nextLabel: J ? L.nextYear : L.nextMonth,
146
146
  caption: !J && T.captionLayout && T.captionLayout !== "label" ? /* @__PURE__ */ r(re, {
147
147
  month: e,
148
148
  system: D,
149
- locale: i,
149
+ locale: a,
150
150
  layout: T.captionLayout,
151
151
  start: z,
152
152
  end: B,
@@ -172,8 +172,8 @@ function S({ locale: i = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1,
172
172
  minDate: T.minDate,
173
173
  maxDate: T.maxDate,
174
174
  isMonthDisabled: T.isMonthDisabled,
175
- locale: i,
176
- ariaLabel: `${L.chooseMonth} ${b(M, i, { year: "numeric" }, D)}`,
175
+ locale: a,
176
+ ariaLabel: `${L.chooseMonth} ${b(M, a, { year: "numeric" }, D)}`,
177
177
  onEscape: () => G("month"),
178
178
  onSelect: (e) => {
179
179
  Q(e, O), G("month");
@@ -184,7 +184,7 @@ function S({ locale: i = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1,
184
184
  "aria-label": `${q(e)} ${L.calendar}`,
185
185
  children: [de && /* @__PURE__ */ r(te, {
186
186
  dates: he,
187
- locale: i,
187
+ locale: a,
188
188
  format: T.formatWeekday ?? ((e, t) => b(e, t, { weekday: /^(fa|ar)(-|$)/.test(t) ? "narrow" : "short" }, D)),
189
189
  weekNumberLabel: T.showWeekNumber ? L.weekNumber : void 0
190
190
  }), /* @__PURE__ */ r(x, {
@@ -202,9 +202,9 @@ function S({ locale: i = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1,
202
202
  showOutsideDays: m,
203
203
  allowOutsideMonthSelection: S,
204
204
  dayClassName: T.dayClassName,
205
- renderDay: T.renderDay ?? ((e) => b(e, i, { day: "numeric" }, D)),
205
+ renderDay: T.renderDay ?? ((e) => b(e, a, { day: "numeric" }, D)),
206
206
  isDisabled: W,
207
- formatDayLabel: (e) => T.formatDayLabel?.(e, i) ?? b(e, i, {
207
+ formatDayLabel: (e) => T.formatDayLabel?.(e, a) ?? b(e, a, {
208
208
  weekday: "long",
209
209
  month: "long",
210
210
  day: "numeric",
@@ -212,7 +212,7 @@ function S({ locale: i = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1,
212
212
  }, D),
213
213
  weekNumber: T.showWeekNumber ? (e) => {
214
214
  let t = d(T.weekNumbering === "local" ? e : g(e, (4 - c(e) + 7) % 7), T.weekNumbering === "local" ? f : 1, T.weekNumbering === "local" ? 1 : 4, T.weekNumbering === "local" ? D : "gregory");
215
- return T.formatWeekNumber?.(t) ?? new Intl.NumberFormat(i).format(t);
215
+ return T.formatWeekNumber?.(t) ?? new Intl.NumberFormat(a).format(t);
216
216
  } : void 0,
217
217
  weekNumberLabel: L.weekNumber,
218
218
  setDayRef: _e,
@@ -226,7 +226,7 @@ function S({ locale: i = "en-US", weekStartsOn: f = 1, showOutsideDays: m = !1,
226
226
  }),
227
227
  T.presets?.length ? /* @__PURE__ */ r("div", {
228
228
  class: "revo-calendar__presets",
229
- children: T.presets.map((e) => /* @__PURE__ */ r(a, {
229
+ children: T.presets.map((e) => /* @__PURE__ */ r(o, {
230
230
  disabled: W(e.date),
231
231
  onClick: () => $(e.date),
232
232
  children: e.label
@@ -0,0 +1,145 @@
1
+ import { i as e } from "./preact.module-BBM36DnO.js";
2
+ import { i as t, t as n } from "./hooks.module-CG3gN83z.js";
3
+ import { t as r } from "./jsxRuntime.module-F6UFnpT-.js";
4
+ import { r as i } from "./tooltip-D4xkio5G.js";
5
+ import { t as a } from "./tooltip-text-BXsUEmBH.js";
6
+ //#region src/distribution-chart/geometry.ts
7
+ function o(e) {
8
+ let t = e.map(({ value: e }) => Number.isFinite(e) ? Math.max(0, e) : 0), n = Math.max(1, ...t);
9
+ return {
10
+ values: t,
11
+ max: n,
12
+ points: t.map((t, r) => ({
13
+ x: e.length <= 1 ? 50 : r / (e.length - 1) * 100,
14
+ y: 96 - t / n * 88
15
+ }))
16
+ };
17
+ }
18
+ function s(e, t) {
19
+ return t === "step" ? `H ${e.x} V ${e.y}` : `L ${e.x} ${e.y}`;
20
+ }
21
+ function c(e, t, n = "linear") {
22
+ return `M ${e.x} ${e.y} ${s(t, n)}`;
23
+ }
24
+ //#endregion
25
+ //#region src/distribution-chart/chart-frame.tsx
26
+ function l({ title: e, details: t = [] }) {
27
+ return [e, ...t].filter(Boolean).join(". ");
28
+ }
29
+ function u({ title: t, details: n = [] }) {
30
+ return /* @__PURE__ */ r(e, { children: [/* @__PURE__ */ r("strong", { children: t }), n.map((e) => /* @__PURE__ */ r("span", { children: e }, e))] });
31
+ }
32
+ function d({ data: e, ariaLabel: i, variant: s, height: c = 72, className: d = "", showGrid: f = !1, showLabels: m = !1, showValues: h = !1, legend: g, formatValue: _ = String, tooltip: v = !0, tooltipIndicator: y = "none", renderTooltip: b, positions: x, datumColors: S, renderDatum: C, children: w }) {
33
+ let { values: T, max: E } = o(e), [D, O] = t(0), k = n([]), A = Math.min(D, Math.max(0, e.length - 1)), j = (t) => {
34
+ if (!e.length) return;
35
+ let n = Math.max(0, Math.min(t, e.length - 1));
36
+ O(n), k.current[n]?.focus();
37
+ };
38
+ return /* @__PURE__ */ r("div", {
39
+ class: `rv-distribution-chart rv-distribution-chart--${s} ${d}`.trim(),
40
+ role: "group",
41
+ "aria-label": i,
42
+ "data-empty": e.length ? void 0 : "true",
43
+ children: [
44
+ /* @__PURE__ */ r("div", {
45
+ class: "rv-distribution-chart__region",
46
+ style: { height: `${Math.max(40, Math.min(240, c))}px` },
47
+ children: [
48
+ f && /* @__PURE__ */ r("div", {
49
+ class: "rv-distribution-chart__grid",
50
+ "aria-hidden": "true",
51
+ children: [
52
+ 0,
53
+ 1,
54
+ 2,
55
+ 3,
56
+ 4
57
+ ].map((e) => /* @__PURE__ */ r("span", {}, e))
58
+ }),
59
+ w,
60
+ /* @__PURE__ */ r("div", {
61
+ class: "rv-distribution-chart__data",
62
+ role: "list",
63
+ children: e.map((t, n) => {
64
+ let i = x?.[n], a = !i;
65
+ return /* @__PURE__ */ r(p, {
66
+ indicator: y,
67
+ tooltipText: v ? l(t.tooltip) : void 0,
68
+ tooltipContent: b ? b(t, n) : u(t.tooltip),
69
+ datumRef: (e) => {
70
+ k.current[n] = e;
71
+ },
72
+ class: `rv-distribution-chart__datum${t.selected ? " is-selected" : ""}${a ? " is-bar" : " is-point"}`,
73
+ role: "listitem",
74
+ tabIndex: n === A ? 0 : -1,
75
+ "aria-label": l(t.tooltip),
76
+ style: {
77
+ "--rv-distribution-accent": S?.[n],
78
+ ...a ? {} : {
79
+ left: `${i.x}%`,
80
+ top: `${i.y}%`
81
+ }
82
+ },
83
+ onFocus: () => O(n),
84
+ onKeyDown: (t) => {
85
+ t.key === "ArrowRight" || t.key === "ArrowDown" ? (t.preventDefault(), j(n + 1)) : t.key === "ArrowLeft" || t.key === "ArrowUp" ? (t.preventDefault(), j(n - 1)) : t.key === "Home" ? (t.preventDefault(), j(0)) : t.key === "End" && (t.preventDefault(), j(e.length - 1));
86
+ },
87
+ children: [C(t, n), h && /* @__PURE__ */ r("span", {
88
+ class: "rv-distribution-chart__value",
89
+ style: a ? {
90
+ top: `${100 - Math.max(3, T[n] / E * 100)}%`,
91
+ transform: "translate(-50%, -100%)"
92
+ } : void 0,
93
+ "aria-hidden": "true",
94
+ children: _(t.value)
95
+ })]
96
+ }, t.key);
97
+ })
98
+ })
99
+ ]
100
+ }),
101
+ m && /* @__PURE__ */ r("div", {
102
+ class: `rv-distribution-chart__labels${s === "bar" ? " is-bar" : ""}`,
103
+ "aria-hidden": "true",
104
+ children: e.map((e) => /* @__PURE__ */ r(a, {
105
+ title: e.tooltip.title,
106
+ children: e.tooltip.title
107
+ }, e.key))
108
+ }),
109
+ g && /* @__PURE__ */ r("div", {
110
+ class: "rv-distribution-chart__legend",
111
+ children: [/* @__PURE__ */ r("i", { "aria-hidden": "true" }), g]
112
+ })
113
+ ]
114
+ });
115
+ }
116
+ function f({ children: e }) {
117
+ return /* @__PURE__ */ r("svg", {
118
+ class: "rv-distribution-chart__plot",
119
+ viewBox: "0 0 100 100",
120
+ preserveAspectRatio: "none",
121
+ "aria-hidden": "true",
122
+ focusable: "false",
123
+ children: e
124
+ });
125
+ }
126
+ function p({ tooltipText: t, tooltipContent: n, indicator: a, children: o, onFocus: s, onKeyDown: c, datumRef: l, ...u }) {
127
+ let d = i(t ?? "", !0, {
128
+ className: `rv-distribution-chart__tooltip rv-distribution-chart__tooltip--${a}`,
129
+ content: /* @__PURE__ */ r(e, { children: [a !== "none" && /* @__PURE__ */ r("i", { "aria-hidden": "true" }), n] })
130
+ });
131
+ return /* @__PURE__ */ r("span", {
132
+ ref: l,
133
+ ...u,
134
+ ...t ? d.triggerProps : {},
135
+ onKeyDown: (e) => {
136
+ d.triggerProps.onKeyDown(e), e.defaultPrevented || c?.(e);
137
+ },
138
+ onFocus: (e) => {
139
+ s?.(e), t && d.triggerProps.onFocus(e);
140
+ },
141
+ children: [o, t && d.tooltip]
142
+ });
143
+ }
144
+ //#endregion
145
+ export { c as i, f as n, o as r, d as t };
@@ -0,0 +1,4 @@
1
+ //#region ../../node_modules/.pnpm/@fortawesome+fontawesome-free@7.3.1/node_modules/@fortawesome/fontawesome-free/svgs/solid/check.svg?raw
2
+ var e = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc. --><path fill=\"currentColor\" d=\"M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z\"/></svg>";
3
+ //#endregion
4
+ export { e as t };
@@ -0,0 +1,126 @@
1
+ import { i as e, r as t, t as n } from "./hooks.module-CG3gN83z.js";
2
+ import { t as r } from "./jsxRuntime.module-F6UFnpT-.js";
3
+ import { n as i } from "./popover-controller-D-AvKQ7B.js";
4
+ import { SvgIcon as a } from "../icons/icon.js";
5
+ import { t as o } from "./native-control-pFMuHf3G.js";
6
+ import { RemoveButton as s } from "../buttons/remove-button.js";
7
+ //#region ../../node_modules/.pnpm/@fortawesome+fontawesome-free@7.3.1/node_modules/@fortawesome/fontawesome-free/svgs/solid/circle-info.svg?raw
8
+ var c = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><!--! Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2026 Fonticons, Inc. --><path fill=\"currentColor\" d=\"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM224 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-8 64l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"/></svg>";
9
+ //#endregion
10
+ //#region src/choice-chips/index.tsx
11
+ function l({ value: i, options: a, onChange: o, ariaLabel: s, appearance: c = "soft", scrollable: l = !1, size: u = "medium", className: f = "", itemClassName: p = "", disabled: m = !1, testId: h }) {
12
+ let g = n(null), [_, v] = e(""), y = () => {
13
+ let e = g.current;
14
+ if (!l || !e) return;
15
+ let t = e.scrollLeft > 1, n = e.scrollWidth - e.clientWidth - e.scrollLeft > 1;
16
+ v(`${t ? "left" : ""} ${n ? "right" : ""}`.trim());
17
+ };
18
+ t(() => {
19
+ if (!l || !g.current || (y(), typeof ResizeObserver > "u")) return;
20
+ let e = new ResizeObserver(y);
21
+ e.observe(g.current);
22
+ for (let t of g.current.children) e.observe(t);
23
+ return () => e.disconnect();
24
+ }, [l, a]);
25
+ let b = Array.isArray(i) ? i : i === void 0 ? [] : [i];
26
+ return /* @__PURE__ */ r("div", {
27
+ ref: g,
28
+ onScroll: l ? y : void 0,
29
+ "data-scroll-edges": l ? _ : void 0,
30
+ class: `rv-choice-chips rv-choice-chips--${c} rv-choice-chips--${u}${l ? " rv-choice-chips--scrollable" : ""} ${f}`.trim(),
31
+ role: "group",
32
+ "aria-label": s,
33
+ "data-testid": h,
34
+ children: a.map((e) => {
35
+ let t = b.includes(e.value), n = m || !!e.disabled;
36
+ return /* @__PURE__ */ r(d, {
37
+ className: `${p} ${e.className ?? ""}`.trim(),
38
+ style: e.style,
39
+ color: e.color,
40
+ selected: t,
41
+ "aria-label": e.ariaLabel,
42
+ title: e.title,
43
+ disabled: n,
44
+ "data-value": String(e.value),
45
+ "data-testid": e.testId,
46
+ onSelect: () => {
47
+ n || o(e.value, e);
48
+ },
49
+ info: e.info,
50
+ onRemove: e.onRemove,
51
+ removeLabel: e.removeLabel,
52
+ children: e.label
53
+ }, String(e.value));
54
+ })
55
+ });
56
+ }
57
+ function u({ "data-tooltip": e, title: s, ref: l, ...u }) {
58
+ let d = n(null), f = e ?? (typeof s == "object" ? s.value : s);
59
+ return t(() => {
60
+ if (!d.current || !f) return;
61
+ let e = new i();
62
+ return e.bind(d.current, f, { trigger: "click" }), () => e.destroy();
63
+ }, [f]), /* @__PURE__ */ r(o, {
64
+ ...u,
65
+ type: "button",
66
+ ref: (e) => {
67
+ d.current = e, typeof l == "function" ? l(e) : l && (l.current = e);
68
+ },
69
+ class: `rv-choice-chip-info ${u.className ?? u.class ?? ""}`.trim(),
70
+ children: /* @__PURE__ */ r(a, {
71
+ svg: c,
72
+ size: 12
73
+ })
74
+ });
75
+ }
76
+ function d({ children: e, color: t, selected: n, onSelect: i, info: a, onRemove: o, removeLabel: c, removeClassName: l = "", className: u = "", disabled: d, ...f }) {
77
+ let p = t ? typeof f.style == "string" ? `${f.style};--rv-choice-chip-color:${t}` : {
78
+ ...f.style,
79
+ "--rv-choice-chip-color": t
80
+ } : f.style;
81
+ return !a && !o && i ? /* @__PURE__ */ r("button", {
82
+ ...f,
83
+ style: p,
84
+ "data-color": t ? "true" : void 0,
85
+ type: "button",
86
+ class: `rv-choice-chip ${u}`.trim(),
87
+ "aria-pressed": n,
88
+ disabled: d,
89
+ onClick: i,
90
+ children: e
91
+ }) : /* @__PURE__ */ r("span", {
92
+ class: `rv-choice-chip rv-choice-chip--composite ${u}`.trim(),
93
+ role: f.role,
94
+ style: p,
95
+ "data-color": t ? "true" : void 0,
96
+ "data-selected": n ? "true" : void 0,
97
+ "aria-disabled": d || void 0,
98
+ children: [
99
+ i ? /* @__PURE__ */ r("button", {
100
+ ...f,
101
+ type: "button",
102
+ class: "rv-choice-chip-label",
103
+ "aria-pressed": n,
104
+ disabled: d,
105
+ onClick: i,
106
+ children: e
107
+ }) : /* @__PURE__ */ r("span", {
108
+ class: "rv-choice-chip-label",
109
+ children: e
110
+ }),
111
+ a,
112
+ o && /* @__PURE__ */ r(s, {
113
+ compact: !0,
114
+ className: l,
115
+ disabled: typeof d == "object" ? d.value : d,
116
+ locale: {
117
+ title: c ?? "Remove",
118
+ ariaLabel: c ?? "Remove"
119
+ },
120
+ onClick: o
121
+ })
122
+ ]
123
+ });
124
+ }
125
+ //#endregion
126
+ export { u as n, l as r, d as t };