@plenustech/design-system 0.2.3 → 0.2.5

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 (233) hide show
  1. package/README.md +8 -0
  2. package/dist/components/actions/ButtonTile/ButtonTile.module.css.cjs +1 -1
  3. package/dist/components/actions/ButtonTile/ButtonTile.module.css.js +10 -10
  4. package/dist/components/actions/Toolbar/Toolbar.cjs +1 -1
  5. package/dist/components/actions/Toolbar/Toolbar.cjs.map +1 -1
  6. package/dist/components/actions/Toolbar/Toolbar.js +64 -53
  7. package/dist/components/actions/Toolbar/Toolbar.js.map +1 -1
  8. package/dist/components/charts/ChartGauge/ChartGauge.cjs +2 -0
  9. package/dist/components/charts/ChartGauge/ChartGauge.cjs.map +1 -0
  10. package/dist/components/charts/ChartGauge/ChartGauge.js +307 -0
  11. package/dist/components/charts/ChartGauge/ChartGauge.js.map +1 -0
  12. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs +2 -0
  13. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs.map +1 -0
  14. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js +76 -0
  15. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js.map +1 -0
  16. package/dist/components/charts/ChartGauge/gaugeLayout.cjs +2 -0
  17. package/dist/components/charts/ChartGauge/gaugeLayout.cjs.map +1 -0
  18. package/dist/components/charts/ChartGauge/gaugeLayout.js +107 -0
  19. package/dist/components/charts/ChartGauge/gaugeLayout.js.map +1 -0
  20. package/dist/components/charts/ChartGauge/gaugeReading.cjs +2 -0
  21. package/dist/components/charts/ChartGauge/gaugeReading.cjs.map +1 -0
  22. package/dist/components/charts/ChartGauge/gaugeReading.js +112 -0
  23. package/dist/components/charts/ChartGauge/gaugeReading.js.map +1 -0
  24. package/dist/components/charts/ChartGauge/gaugeScale.cjs +2 -0
  25. package/dist/components/charts/ChartGauge/gaugeScale.cjs.map +1 -0
  26. package/dist/components/charts/ChartGauge/gaugeScale.js +57 -0
  27. package/dist/components/charts/ChartGauge/gaugeScale.js.map +1 -0
  28. package/dist/components/charts/ChartMap/ChartMap.cjs +2 -0
  29. package/dist/components/charts/ChartMap/ChartMap.cjs.map +1 -0
  30. package/dist/components/charts/ChartMap/ChartMap.js +523 -0
  31. package/dist/components/charts/ChartMap/ChartMap.js.map +1 -0
  32. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs +2 -0
  33. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs.map +1 -0
  34. package/dist/components/charts/ChartMap/ChartMap.module.css.js +124 -0
  35. package/dist/components/charts/ChartMap/ChartMap.module.css.js.map +1 -0
  36. package/dist/components/charts/ChartMap/ChartMapLegend.cjs +2 -0
  37. package/dist/components/charts/ChartMap/ChartMapLegend.cjs.map +1 -0
  38. package/dist/components/charts/ChartMap/ChartMapLegend.js +102 -0
  39. package/dist/components/charts/ChartMap/ChartMapLegend.js.map +1 -0
  40. package/dist/components/charts/ChartMap/ChartMapTable.cjs +2 -0
  41. package/dist/components/charts/ChartMap/ChartMapTable.cjs.map +1 -0
  42. package/dist/components/charts/ChartMap/ChartMapTable.js +118 -0
  43. package/dist/components/charts/ChartMap/ChartMapTable.js.map +1 -0
  44. package/dist/components/charts/ChartMap/mapGeometry.cjs +2 -0
  45. package/dist/components/charts/ChartMap/mapGeometry.cjs.map +1 -0
  46. package/dist/components/charts/ChartMap/mapGeometry.js +113 -0
  47. package/dist/components/charts/ChartMap/mapGeometry.js.map +1 -0
  48. package/dist/components/charts/ChartMap/mapLabels.cjs +2 -0
  49. package/dist/components/charts/ChartMap/mapLabels.cjs.map +1 -0
  50. package/dist/components/charts/ChartMap/mapLabels.js +80 -0
  51. package/dist/components/charts/ChartMap/mapLabels.js.map +1 -0
  52. package/dist/components/charts/ChartMap/mapScales.cjs +2 -0
  53. package/dist/components/charts/ChartMap/mapScales.cjs.map +1 -0
  54. package/dist/components/charts/ChartMap/mapScales.js +131 -0
  55. package/dist/components/charts/ChartMap/mapScales.js.map +1 -0
  56. package/dist/components/charts/ChartMap/polylabel.cjs +2 -0
  57. package/dist/components/charts/ChartMap/polylabel.cjs.map +1 -0
  58. package/dist/components/charts/ChartMap/polylabel.js +50 -0
  59. package/dist/components/charts/ChartMap/polylabel.js.map +1 -0
  60. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs +2 -0
  61. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs.map +1 -0
  62. package/dist/components/charts/ChartTimeline/ChartTimeline.js +703 -0
  63. package/dist/components/charts/ChartTimeline/ChartTimeline.js.map +1 -0
  64. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs +2 -0
  65. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs.map +1 -0
  66. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js +124 -0
  67. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js.map +1 -0
  68. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs +2 -0
  69. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs.map +1 -0
  70. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js +42 -0
  71. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js.map +1 -0
  72. package/dist/components/charts/ChartTimeline/timelineLayout.cjs +2 -0
  73. package/dist/components/charts/ChartTimeline/timelineLayout.cjs.map +1 -0
  74. package/dist/components/charts/ChartTimeline/timelineLayout.js +109 -0
  75. package/dist/components/charts/ChartTimeline/timelineLayout.js.map +1 -0
  76. package/dist/components/charts/ChartTimeline/timelineTime.cjs +2 -0
  77. package/dist/components/charts/ChartTimeline/timelineTime.cjs.map +1 -0
  78. package/dist/components/charts/ChartTimeline/timelineTime.js +91 -0
  79. package/dist/components/charts/ChartTimeline/timelineTime.js.map +1 -0
  80. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs +2 -0
  81. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs.map +1 -0
  82. package/dist/components/charts/ChartTimeline/timelineTooltip.js +77 -0
  83. package/dist/components/charts/ChartTimeline/timelineTooltip.js.map +1 -0
  84. package/dist/components/charts/core/ChartLegend.cjs +1 -1
  85. package/dist/components/charts/core/ChartLegend.cjs.map +1 -1
  86. package/dist/components/charts/core/ChartLegend.js +37 -25
  87. package/dist/components/charts/core/ChartLegend.js.map +1 -1
  88. package/dist/components/charts/core/useChartMetrics.cjs +1 -1
  89. package/dist/components/charts/core/useChartMetrics.cjs.map +1 -1
  90. package/dist/components/charts/core/useChartMetrics.js +20 -25
  91. package/dist/components/charts/core/useChartMetrics.js.map +1 -1
  92. package/dist/components/data-display/CodeBlock/syntax.cjs +10 -3
  93. package/dist/components/data-display/CodeBlock/syntax.cjs.map +1 -1
  94. package/dist/components/data-display/CodeBlock/syntax.js +68 -48
  95. package/dist/components/data-display/CodeBlock/syntax.js.map +1 -1
  96. package/dist/components/data-display/List/List.cjs.map +1 -1
  97. package/dist/components/data-display/List/List.js.map +1 -1
  98. package/dist/components/data-display/List/List.module.css.cjs +1 -1
  99. package/dist/components/data-display/List/List.module.css.js +34 -24
  100. package/dist/components/data-display/List/List.module.css.js.map +1 -1
  101. package/dist/components/data-display/List/ListingOptions.cjs +1 -1
  102. package/dist/components/data-display/List/ListingOptions.cjs.map +1 -1
  103. package/dist/components/data-display/List/ListingOptions.js +98 -74
  104. package/dist/components/data-display/List/ListingOptions.js.map +1 -1
  105. package/dist/components/data-display/List/useListing.cjs.map +1 -1
  106. package/dist/components/data-display/List/useListing.js.map +1 -1
  107. package/dist/components/data-display/Timeline/Timeline.cjs +1 -1
  108. package/dist/components/data-display/Timeline/Timeline.cjs.map +1 -1
  109. package/dist/components/data-display/Timeline/Timeline.js +6 -6
  110. package/dist/components/data-display/Timeline/Timeline.js.map +1 -1
  111. package/dist/components/data-display/Timeline/Timeline.module.css.cjs +1 -1
  112. package/dist/components/data-display/Timeline/Timeline.module.css.js +18 -16
  113. package/dist/components/data-display/Timeline/Timeline.module.css.js.map +1 -1
  114. package/dist/components/forms/Checkbox/Checkbox.module.css.cjs +1 -1
  115. package/dist/components/forms/Checkbox/Checkbox.module.css.js +5 -5
  116. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.cjs +1 -1
  117. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.js +1 -1
  118. package/dist/components/forms/ComboBox/ComboBox.cjs.map +1 -1
  119. package/dist/components/forms/ComboBox/ComboBox.js.map +1 -1
  120. package/dist/components/forms/Field/Field.cjs +1 -1
  121. package/dist/components/forms/Field/Field.cjs.map +1 -1
  122. package/dist/components/forms/Field/Field.js +22 -22
  123. package/dist/components/forms/Field/Field.js.map +1 -1
  124. package/dist/components/forms/Field/Field.module.css.cjs +1 -1
  125. package/dist/components/forms/Field/Field.module.css.js +19 -17
  126. package/dist/components/forms/Field/Field.module.css.js.map +1 -1
  127. package/dist/components/forms/InputText/InputText.cjs +1 -1
  128. package/dist/components/forms/InputText/InputText.cjs.map +1 -1
  129. package/dist/components/forms/InputText/InputText.js +24 -24
  130. package/dist/components/forms/InputText/InputText.js.map +1 -1
  131. package/dist/components/forms/InputText/InputText.module.css.cjs +1 -1
  132. package/dist/components/forms/InputText/InputText.module.css.js +9 -7
  133. package/dist/components/forms/InputText/InputText.module.css.js.map +1 -1
  134. package/dist/components/forms/RadioGroup/RadioGroup.module.css.cjs +1 -1
  135. package/dist/components/forms/RadioGroup/RadioGroup.module.css.js +4 -4
  136. package/dist/components/forms/Select/Select.cjs.map +1 -1
  137. package/dist/components/forms/Select/Select.js.map +1 -1
  138. package/dist/components/forms/Switch/Switch.module.css.cjs +1 -1
  139. package/dist/components/forms/Switch/Switch.module.css.js +6 -6
  140. package/dist/components/icons/suite.cjs +1 -0
  141. package/dist/components/icons/suite.js +10894 -0
  142. package/dist/components/navigation/Pagination/Pagination.cjs +1 -1
  143. package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -1
  144. package/dist/components/navigation/Pagination/Pagination.js +71 -44
  145. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  146. package/dist/components/navigation/Pagination/Pagination.module.css.cjs +1 -1
  147. package/dist/components/navigation/Pagination/Pagination.module.css.js +18 -14
  148. package/dist/components/navigation/Pagination/Pagination.module.css.js.map +1 -1
  149. package/dist/components/navigation/TabsNav/TabsNav.cjs +2 -0
  150. package/dist/components/navigation/TabsNav/TabsNav.cjs.map +1 -0
  151. package/dist/components/navigation/TabsNav/TabsNav.js +21 -0
  152. package/dist/components/navigation/TabsNav/TabsNav.js.map +1 -0
  153. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs +2 -0
  154. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs.map +1 -0
  155. package/dist/components/navigation/TabsNav/TabsNav.module.css.js +18 -0
  156. package/dist/components/navigation/TabsNav/TabsNav.module.css.js.map +1 -0
  157. package/dist/components/overlays/Dialog/Dialog.cjs.map +1 -1
  158. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  159. package/dist/components/overlays/Dialog/DialogFrame.cjs +1 -1
  160. package/dist/components/overlays/Dialog/DialogFrame.cjs.map +1 -1
  161. package/dist/components/overlays/Dialog/DialogFrame.js +30 -30
  162. package/dist/components/overlays/Dialog/DialogFrame.js.map +1 -1
  163. package/dist/components/overlays/Drawer/Drawer.cjs.map +1 -1
  164. package/dist/components/overlays/Drawer/Drawer.js.map +1 -1
  165. package/dist/components/overlays/Menu/Menu.cjs +1 -1
  166. package/dist/components/overlays/Menu/Menu.cjs.map +1 -1
  167. package/dist/components/overlays/Menu/Menu.js +37 -36
  168. package/dist/components/overlays/Menu/Menu.js.map +1 -1
  169. package/dist/components/overlays/Menu/keyShortcuts.cjs +2 -0
  170. package/dist/components/overlays/Menu/keyShortcuts.cjs.map +1 -0
  171. package/dist/components/overlays/Menu/keyShortcuts.js +55 -0
  172. package/dist/components/overlays/Menu/keyShortcuts.js.map +1 -0
  173. package/dist/components/overlays/Tooltip/Tooltip.cjs +1 -1
  174. package/dist/components/overlays/Tooltip/Tooltip.cjs.map +1 -1
  175. package/dist/components/overlays/Tooltip/Tooltip.js +81 -56
  176. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  177. package/dist/design-system.css +1 -1
  178. package/dist/icons.cjs +2 -0
  179. package/dist/icons.cjs.map +1 -0
  180. package/dist/icons.js +2054 -0
  181. package/dist/icons.js.map +1 -0
  182. package/dist/index.cjs +1 -1
  183. package/dist/index.js +184 -174
  184. package/dist/index.js.map +1 -1
  185. package/dist/types/components/charts/ChartGauge/ChartGauge.d.ts +83 -0
  186. package/dist/types/components/charts/ChartGauge/gaugeLayout.d.ts +64 -0
  187. package/dist/types/components/charts/ChartGauge/gaugeReading.d.ts +97 -0
  188. package/dist/types/components/charts/ChartGauge/gaugeScale.d.ts +38 -0
  189. package/dist/types/components/charts/ChartGauge/index.d.ts +2 -0
  190. package/dist/types/components/charts/ChartMap/ChartMap.d.ts +104 -0
  191. package/dist/types/components/charts/ChartMap/ChartMapLegend.d.ts +44 -0
  192. package/dist/types/components/charts/ChartMap/ChartMapTable.d.ts +38 -0
  193. package/dist/types/components/charts/ChartMap/index.d.ts +4 -0
  194. package/dist/types/components/charts/ChartMap/mapGeometry.d.ts +56 -0
  195. package/dist/types/components/charts/ChartMap/mapLabels.d.ts +51 -0
  196. package/dist/types/components/charts/ChartMap/mapScales.d.ts +76 -0
  197. package/dist/types/components/charts/ChartMap/polylabel.d.ts +9 -0
  198. package/dist/types/components/charts/ChartTimeline/ChartTimeline.d.ts +137 -0
  199. package/dist/types/components/charts/ChartTimeline/ChartTimelineTable.d.ts +25 -0
  200. package/dist/types/components/charts/ChartTimeline/index.d.ts +2 -0
  201. package/dist/types/components/charts/ChartTimeline/timelineLayout.d.ts +70 -0
  202. package/dist/types/components/charts/ChartTimeline/timelineTime.d.ts +16 -0
  203. package/dist/types/components/charts/ChartTimeline/timelineTooltip.d.ts +45 -0
  204. package/dist/types/components/charts/core/ChartLegend.d.ts +3 -1
  205. package/dist/types/components/data-display/CodeBlock/syntax.d.ts +1 -1
  206. package/dist/types/components/data-display/List/List.d.ts +1 -1
  207. package/dist/types/components/data-display/List/useListing.d.ts +7 -1
  208. package/dist/types/components/data-display/Timeline/Timeline.d.ts +4 -1
  209. package/dist/types/components/data-display/Timeline/index.d.ts +1 -1
  210. package/dist/types/components/forms/ComboBox/ComboBox.d.ts +7 -1
  211. package/dist/types/components/forms/Field/Field.d.ts +1 -1
  212. package/dist/types/components/forms/InputText/InputText.d.ts +1 -1
  213. package/dist/types/components/forms/Select/Select.d.ts +5 -1
  214. package/dist/types/components/icons/suite.d.ts +2051 -0
  215. package/dist/types/components/navigation/Pagination/Pagination.d.ts +13 -1
  216. package/dist/types/components/navigation/Pagination/index.d.ts +1 -1
  217. package/dist/types/components/navigation/TabsNav/TabsNav.d.ts +20 -0
  218. package/dist/types/components/navigation/TabsNav/index.d.ts +2 -0
  219. package/dist/types/components/overlays/Dialog/Dialog.d.ts +19 -7
  220. package/dist/types/components/overlays/Dialog/DialogFrame.d.ts +8 -2
  221. package/dist/types/components/overlays/Drawer/Drawer.d.ts +2 -2
  222. package/dist/types/components/overlays/Menu/Menu.d.ts +3 -1
  223. package/dist/types/components/overlays/Menu/keyShortcuts.d.ts +2 -0
  224. package/dist/types/components/overlays/Tooltip/Tooltip.d.ts +26 -5
  225. package/dist/types/icons.d.ts +6 -0
  226. package/dist/types/index.d.ts +11 -3
  227. package/dist/types/utils/formatters/formatarDuracao.d.ts +5 -0
  228. package/dist/types/utils/formatters/index.d.ts +1 -0
  229. package/dist/utils/formatters/formatarDuracao.cjs +2 -0
  230. package/dist/utils/formatters/formatarDuracao.cjs.map +1 -0
  231. package/dist/utils/formatters/formatarDuracao.js +10 -0
  232. package/dist/utils/formatters/formatarDuracao.js.map +1 -0
  233. package/package.json +10 -1
@@ -1,115 +1,139 @@
1
- import { jsxs as N, jsx as r } from "react/jsx-runtime";
2
- import { useCallback as J, useEffect as P } from "react";
3
- import { useVirtualWindow as Q } from "./useVirtualWindow.js";
1
+ import { jsxs as h, jsx as r } from "react/jsx-runtime";
2
+ import { useCallback as Q, useEffect as S, Fragment as U } from "react";
3
+ import { useVirtualWindow as X } from "./useVirtualWindow.js";
4
4
  import i from "./List.module.css.js";
5
- function x(l, n) {
6
- return l + "-option-" + n;
5
+ function $(o, l) {
6
+ return o + "-option-" + l;
7
7
  }
8
- function Z({
9
- baseId: l,
10
- className: n,
11
- elementRef: f,
12
- empty: y,
13
- height: v,
14
- holdsFocus: p = !0,
8
+ function Y(o) {
9
+ const l = [];
10
+ for (const n of o) {
11
+ const d = l.at(-1);
12
+ n.item.group !== void 0 && (d == null ? void 0 : d.group) === n.item.group ? d.options.push(n) : l.push({ group: n.item.group, options: [n] });
13
+ }
14
+ return l;
15
+ }
16
+ function ee({
17
+ baseId: o,
18
+ className: l,
19
+ elementRef: n,
20
+ empty: d,
21
+ height: m,
22
+ holdsFocus: N = !0,
15
23
  label: L,
16
24
  listing: M,
17
- loading: s = !1,
18
- loadingMessage: g = "Carregando",
19
- onKeyDown: T,
20
- onSelect: h,
21
- style: j,
22
- tabIndex: W = 0
25
+ loading: p = !1,
26
+ loadingMessage: j = "Carregando",
27
+ onKeyDown: W,
28
+ onSelect: g,
29
+ style: k,
30
+ tabIndex: q = 0
23
31
  }) {
24
- const { detached: B, focusedKey: o, isSelected: q, select: A, selectionMode: m, visible: t } = M, k = t.findIndex((e) => e.value === o);
25
- function G(e, a) {
26
- e.disabled || (A(e, a), h == null || h(e));
32
+ const { detached: B, focusedKey: f, isSelected: A, select: G, selectionMode: y, visible: s } = M, C = s.findIndex((e) => e.value === f);
33
+ function H(e, a) {
34
+ e.disabled || (G(e, a), g == null || g(e));
27
35
  }
28
- const { active: I, attachScroll: w, measureItem: C, onScroll: E, padding: d, scrollToIndex: D, start: K, end: H } = Q(
29
- t.length,
30
- v
31
- ), O = J(
36
+ const { active: I, attachScroll: w, measureItem: D, onScroll: E, padding: b, scrollToIndex: T, start: x, end: J } = X(
37
+ s.length,
38
+ m
39
+ ), K = Q(
32
40
  (e) => {
33
- w(e), f && (f.current = e);
41
+ w(e), n && (n.current = e);
34
42
  },
35
- [w, f]
43
+ [w, n]
36
44
  );
37
- P(() => {
38
- var a, c;
39
- const e = t.findIndex((u) => u.value === o);
40
- o === void 0 || e < 0 || (I ? D(e) : (c = (a = document.getElementById(x(l, e))) == null ? void 0 : a.scrollIntoView) == null || c.call(a, { block: "nearest" }));
41
- }, [I, l, o, D, t]);
42
- const V = t.slice(K, H);
43
- if (m === "none")
44
- return /* @__PURE__ */ N(
45
+ S(() => {
46
+ var a, t;
47
+ const e = s.findIndex((u) => u.value === f);
48
+ f === void 0 || e < 0 || (I ? T(e) : (t = (a = document.getElementById($(o, e))) == null ? void 0 : a.scrollIntoView) == null || t.call(a, { block: "nearest" }));
49
+ }, [I, o, f, T, s]);
50
+ const O = s.slice(x, J);
51
+ if (y === "none")
52
+ return /* @__PURE__ */ h(
45
53
  "ul",
46
54
  {
47
- "aria-busy": s || void 0,
48
- className: [i.options, n].filter(Boolean).join(" "),
49
- id: l + "-options",
55
+ "aria-busy": p || void 0,
56
+ className: [i.options, l].filter(Boolean).join(" "),
57
+ id: o + "-options",
50
58
  onScroll: E,
51
- ref: O,
52
- style: { height: v, ...j },
59
+ ref: K,
60
+ style: { height: m, ...k },
53
61
  children: [
54
- s && /* @__PURE__ */ r("li", { className: i.status, children: g }),
55
- /* @__PURE__ */ r("li", { "aria-hidden": "true", className: i.spacer, style: { height: d.before } }),
56
- V.map((e, a) => /* @__PURE__ */ r("li", { className: i.option, ref: a === 0 ? C : void 0, children: e.label }, e.value)),
57
- /* @__PURE__ */ r("li", { "aria-hidden": "true", className: i.spacer, style: { height: d.after } }),
58
- !s && t.length === 0 && y
62
+ p && /* @__PURE__ */ r("li", { className: i.status, children: j }),
63
+ /* @__PURE__ */ r("li", { "aria-hidden": "true", className: i.spacer, style: { height: b.before } }),
64
+ O.map((e, a) => /* @__PURE__ */ r("li", { className: i.option, ref: a === 0 ? D : void 0, children: e.label }, e.value)),
65
+ /* @__PURE__ */ r("li", { "aria-hidden": "true", className: i.spacer, style: { height: b.after } }),
66
+ !p && s.length === 0 && d
59
67
  ]
60
68
  }
61
69
  );
62
- function z(e, a, c) {
63
- const u = q(e.value);
64
- return /* @__PURE__ */ N(
70
+ function V(e, a, t) {
71
+ const u = A(e.value), c = a > 0 ? $(o, a - 1) : `${o}-selected-${e.value}`;
72
+ return /* @__PURE__ */ h(
65
73
  "div",
66
74
  {
75
+ "aria-describedby": e.description ? `${c}-description` : void 0,
67
76
  "aria-disabled": e.disabled || void 0,
77
+ "aria-labelledby": e.description ? `${c}-label` : void 0,
68
78
  "aria-posinset": a > 0 ? a : void 0,
69
79
  "aria-selected": u,
70
- "aria-setsize": a > 0 ? t.length : void 0,
71
- className: [i.option, o === e.value && i.focused, e.disabled && i.disabled].filter(Boolean).join(" "),
72
- id: a > 0 ? x(l, a - 1) : void 0,
73
- onClick: (b) => G(e, b.shiftKey),
74
- onMouseDown: p ? void 0 : (b) => b.preventDefault(),
75
- ref: c ? C : void 0,
80
+ "aria-setsize": a > 0 ? s.length : void 0,
81
+ className: [i.option, f === e.value && i.focused, e.disabled && i.disabled].filter(Boolean).join(" "),
82
+ id: c,
83
+ onClick: (v) => H(e, v.shiftKey),
84
+ onMouseDown: N ? void 0 : (v) => v.preventDefault(),
85
+ ref: t ? D : void 0,
76
86
  role: "option",
77
87
  children: [
78
- m === "multiple" && /* @__PURE__ */ r("span", { "aria-hidden": "true", className: [i.box, u && i.checked].filter(Boolean).join(" ") }),
79
- e.label
88
+ y === "multiple" && /* @__PURE__ */ r("span", { "aria-hidden": "true", className: [i.box, u && i.checked].filter(Boolean).join(" ") }),
89
+ e.icon && /* @__PURE__ */ r("span", { "aria-hidden": "true", className: i.optionIcon, children: e.icon }),
90
+ e.description ? /* @__PURE__ */ h("span", { className: i.optionText, children: [
91
+ /* @__PURE__ */ r("span", { id: `${c}-label`, children: e.label }),
92
+ /* @__PURE__ */ r("span", { className: i.optionDescription, id: `${c}-description`, children: e.description })
93
+ ] }) : e.label
80
94
  ]
81
95
  },
82
96
  e.value
83
97
  );
84
98
  }
85
- return /* @__PURE__ */ N(
99
+ const P = Y(O.map((e, a) => ({ item: e, position: x + a + 1 })));
100
+ return /* @__PURE__ */ h(
86
101
  "div",
87
102
  {
88
- "aria-activedescendant": p && k >= 0 ? x(l, k) : void 0,
89
- "aria-busy": s || void 0,
103
+ "aria-activedescendant": N && C >= 0 ? $(o, C) : void 0,
104
+ "aria-busy": p || void 0,
90
105
  "aria-label": L,
91
- "aria-multiselectable": m === "multiple" || void 0,
92
- className: [i.options, n].filter(Boolean).join(" "),
93
- id: l + "-options",
94
- onKeyDown: T,
106
+ "aria-multiselectable": y === "multiple" || void 0,
107
+ className: [i.options, l].filter(Boolean).join(" "),
108
+ id: o + "-options",
109
+ onKeyDown: W,
95
110
  onScroll: E,
96
- ref: O,
111
+ ref: K,
97
112
  role: "listbox",
98
- style: { height: v, ...j },
99
- tabIndex: p ? W : void 0,
113
+ style: { height: m, ...k },
114
+ tabIndex: N ? q : void 0,
100
115
  children: [
101
- s && /* @__PURE__ */ r("p", { className: i.status, children: g }),
102
- B.length > 0 && /* @__PURE__ */ r("div", { "aria-label": "Selecionados", className: i.group, role: "group", children: B.map((e) => z(e, 0, !1)) }),
103
- /* @__PURE__ */ r("div", { "aria-hidden": "true", className: i.spacer, style: { height: d.before } }),
104
- V.map((e, a) => z(e, K + a + 1, a === 0)),
105
- /* @__PURE__ */ r("div", { "aria-hidden": "true", className: i.spacer, style: { height: d.after } }),
106
- !s && t.length === 0 && y
116
+ p && /* @__PURE__ */ r("p", { className: i.status, children: j }),
117
+ B.length > 0 && /* @__PURE__ */ r("div", { "aria-label": "Selecionados", className: i.group, role: "group", children: B.map((e) => V(e, 0, !1)) }),
118
+ /* @__PURE__ */ r("div", { "aria-hidden": "true", className: i.spacer, style: { height: b.before } }),
119
+ P.map(({ group: e, options: a }) => {
120
+ const [t] = a, u = a.map(({ item: v, position: z }) => V(v, z, z === x + 1));
121
+ if (e === void 0)
122
+ return /* @__PURE__ */ r(U, { children: u }, t.item.value);
123
+ const c = `${o}-group-${t.position}`;
124
+ return /* @__PURE__ */ h("div", { "aria-labelledby": c, className: i.section, role: "group", children: [
125
+ /* @__PURE__ */ r("div", { className: i.sectionTitle, id: c, role: "presentation", children: e }),
126
+ u
127
+ ] }, `${e}:${t.item.value}`);
128
+ }),
129
+ /* @__PURE__ */ r("div", { "aria-hidden": "true", className: i.spacer, style: { height: b.after } }),
130
+ !p && s.length === 0 && d
107
131
  ]
108
132
  }
109
133
  );
110
134
  }
111
135
  export {
112
- Z as ListingOptions,
113
- x as optionId
136
+ ee as ListingOptions,
137
+ $ as optionId
114
138
  };
115
139
  //# sourceMappingURL=ListingOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListingOptions.js","sources":["../../../../src/components/data-display/List/ListingOptions.tsx"],"sourcesContent":["import { useCallback, useEffect, type CSSProperties, type KeyboardEvent, type ReactNode, type RefObject } from 'react';\nimport type { Listing, ListingItem } from './useListing';\nimport { useVirtualWindow } from './useVirtualWindow';\nimport styles from './List.module.css';\n\nexport interface ListingOptionsProps {\n baseId: string;\n className?: string;\n elementRef?: RefObject<HTMLElement | null>;\n empty?: ReactNode;\n height?: number;\n label?: string;\n listing: Listing;\n loading?: boolean;\n loadingMessage?: string;\n holdsFocus?: boolean;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n onSelect?: (item: ListingItem) => void;\n style?: CSSProperties;\n tabIndex?: number;\n}\n\nexport function optionId(baseId: string, index: number) {\n return baseId + '-option-' + index;\n}\n\nexport function ListingOptions({\n baseId,\n className,\n elementRef,\n empty,\n height,\n holdsFocus = true,\n label,\n listing,\n loading = false,\n loadingMessage = 'Carregando',\n onKeyDown,\n onSelect,\n style,\n tabIndex = 0,\n}: ListingOptionsProps) {\n const { detached, focusedKey, isSelected, select, selectionMode, visible } = listing;\n const activeIndex = visible.findIndex((item) => item.value === focusedKey);\n\n function choose(item: ListingItem, extend: boolean) {\n if (item.disabled) {\n return;\n }\n\n select(item, extend);\n onSelect?.(item);\n }\n const { active, attachScroll, measureItem, onScroll, padding, scrollToIndex, start, end } = useVirtualWindow(\n visible.length,\n height,\n );\n\n const attachElement = useCallback(\n (node: HTMLElement | null) => {\n attachScroll(node);\n\n if (elementRef) {\n elementRef.current = node;\n }\n },\n [attachScroll, elementRef],\n );\n\n useEffect(() => {\n const index = visible.findIndex((item) => item.value === focusedKey);\n\n if (focusedKey === undefined || index < 0) {\n return;\n }\n\n if (active) {\n scrollToIndex(index);\n } else {\n document.getElementById(optionId(baseId, index))?.scrollIntoView?.({ block: 'nearest' });\n }\n }, [active, baseId, focusedKey, scrollToIndex, visible]);\n\n const rendered = visible.slice(start, end);\n\n if (selectionMode === 'none') {\n return (\n <ul\n aria-busy={loading || undefined}\n className={[styles.options, className].filter(Boolean).join(' ')}\n id={baseId + '-options'}\n onScroll={onScroll}\n ref={attachElement}\n style={{ height, ...style }}\n >\n {loading && <li className={styles.status}>{loadingMessage}</li>}\n <li aria-hidden=\"true\" className={styles.spacer} style={{ height: padding.before }} />\n {rendered.map((item, index) => (\n <li className={styles.option} key={item.value} ref={index === 0 ? measureItem : undefined}>\n {item.label}\n </li>\n ))}\n <li aria-hidden=\"true\" className={styles.spacer} style={{ height: padding.after }} />\n {!loading && visible.length === 0 && empty}\n </ul>\n );\n }\n\n function renderOption(item: ListingItem, position: number, measured: boolean) {\n const selected = isSelected(item.value);\n\n return (\n <div\n aria-disabled={item.disabled || undefined}\n aria-posinset={position > 0 ? position : undefined}\n aria-selected={selected}\n aria-setsize={position > 0 ? visible.length : undefined}\n className={[styles.option, focusedKey === item.value && styles.focused, item.disabled && styles.disabled]\n .filter(Boolean)\n .join(' ')}\n id={position > 0 ? optionId(baseId, position - 1) : undefined}\n key={item.value}\n onClick={(event) => choose(item, event.shiftKey)}\n // So segura o foco onde ele esta quando quem o tem e o campo de busca; a lista que detem o foco o recebe.\n onMouseDown={holdsFocus ? undefined : (event) => event.preventDefault()}\n ref={measured ? measureItem : undefined}\n role=\"option\"\n >\n {selectionMode === 'multiple' && (\n <span aria-hidden=\"true\" className={[styles.box, selected && styles.checked].filter(Boolean).join(' ')} />\n )}\n {item.label}\n </div>\n );\n }\n\n return (\n <div\n aria-activedescendant={holdsFocus && activeIndex >= 0 ? optionId(baseId, activeIndex) : undefined}\n aria-busy={loading || undefined}\n aria-label={label}\n aria-multiselectable={selectionMode === 'multiple' || undefined}\n className={[styles.options, className].filter(Boolean).join(' ')}\n id={baseId + '-options'}\n onKeyDown={onKeyDown}\n onScroll={onScroll}\n ref={attachElement}\n role=\"listbox\"\n style={{ height, ...style }}\n tabIndex={holdsFocus ? tabIndex : undefined}\n >\n {loading && <p className={styles.status}>{loadingMessage}</p>}\n {detached.length > 0 && (\n <div aria-label=\"Selecionados\" className={styles.group} role=\"group\">\n {detached.map((item) => renderOption(item, 0, false))}\n </div>\n )}\n <div aria-hidden=\"true\" className={styles.spacer} style={{ height: padding.before }} />\n {rendered.map((item, index) => renderOption(item, start + index + 1, index === 0))}\n <div aria-hidden=\"true\" className={styles.spacer} style={{ height: padding.after }} />\n {!loading && visible.length === 0 && empty}\n </div>\n );\n}\n"],"names":["optionId","baseId","index","ListingOptions","className","elementRef","empty","height","holdsFocus","label","listing","loading","loadingMessage","onKeyDown","onSelect","style","tabIndex","detached","focusedKey","isSelected","select","selectionMode","visible","activeIndex","item","choose","extend","active","attachScroll","measureItem","onScroll","padding","scrollToIndex","start","end","useVirtualWindow","attachElement","useCallback","node","useEffect","_b","_a","rendered","jsxs","styles","jsx","renderOption","position","measured","selected","event"],"mappings":"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"}
1
+ {"version":3,"file":"ListingOptions.js","sources":["../../../../src/components/data-display/List/ListingOptions.tsx"],"sourcesContent":["import { Fragment, useCallback, useEffect, type CSSProperties, type KeyboardEvent, type ReactNode, type RefObject } from 'react';\nimport type { Listing, ListingItem } from './useListing';\nimport { useVirtualWindow } from './useVirtualWindow';\nimport styles from './List.module.css';\n\nexport interface ListingOptionsProps {\n baseId: string;\n className?: string;\n elementRef?: RefObject<HTMLElement | null>;\n empty?: ReactNode;\n height?: number;\n label?: string;\n listing: Listing;\n loading?: boolean;\n loadingMessage?: string;\n holdsFocus?: boolean;\n onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;\n onSelect?: (item: ListingItem) => void;\n style?: CSSProperties;\n tabIndex?: number;\n}\n\nexport function optionId(baseId: string, index: number) {\n return baseId + '-option-' + index;\n}\n\ninterface RenderedOption {\n item: ListingItem;\n position: number;\n}\n\n/** Junta as opções seguidas de um mesmo grupo; as sem grupo ficam soltas, cada uma no seu bloco. */\nfunction groupConsecutive(options: readonly RenderedOption[]) {\n const blocks: { group?: string; options: RenderedOption[] }[] = [];\n\n for (const option of options) {\n const last = blocks.at(-1);\n\n if (option.item.group !== undefined && last?.group === option.item.group) {\n last.options.push(option);\n } else {\n blocks.push({ group: option.item.group, options: [option] });\n }\n }\n\n return blocks;\n}\n\nexport function ListingOptions({\n baseId,\n className,\n elementRef,\n empty,\n height,\n holdsFocus = true,\n label,\n listing,\n loading = false,\n loadingMessage = 'Carregando',\n onKeyDown,\n onSelect,\n style,\n tabIndex = 0,\n}: ListingOptionsProps) {\n const { detached, focusedKey, isSelected, select, selectionMode, visible } = listing;\n const activeIndex = visible.findIndex((item) => item.value === focusedKey);\n\n function choose(item: ListingItem, extend: boolean) {\n if (item.disabled) {\n return;\n }\n\n select(item, extend);\n onSelect?.(item);\n }\n const { active, attachScroll, measureItem, onScroll, padding, scrollToIndex, start, end } = useVirtualWindow(\n visible.length,\n height,\n );\n\n const attachElement = useCallback(\n (node: HTMLElement | null) => {\n attachScroll(node);\n\n if (elementRef) {\n elementRef.current = node;\n }\n },\n [attachScroll, elementRef],\n );\n\n useEffect(() => {\n const index = visible.findIndex((item) => item.value === focusedKey);\n\n if (focusedKey === undefined || index < 0) {\n return;\n }\n\n if (active) {\n scrollToIndex(index);\n } else {\n document.getElementById(optionId(baseId, index))?.scrollIntoView?.({ block: 'nearest' });\n }\n }, [active, baseId, focusedKey, scrollToIndex, visible]);\n\n const rendered = visible.slice(start, end);\n\n if (selectionMode === 'none') {\n return (\n <ul\n aria-busy={loading || undefined}\n className={[styles.options, className].filter(Boolean).join(' ')}\n id={baseId + '-options'}\n onScroll={onScroll}\n ref={attachElement}\n style={{ height, ...style }}\n >\n {loading && <li className={styles.status}>{loadingMessage}</li>}\n <li aria-hidden=\"true\" className={styles.spacer} style={{ height: padding.before }} />\n {rendered.map((item, index) => (\n <li className={styles.option} key={item.value} ref={index === 0 ? measureItem : undefined}>\n {item.label}\n </li>\n ))}\n <li aria-hidden=\"true\" className={styles.spacer} style={{ height: padding.after }} />\n {!loading && visible.length === 0 && empty}\n </ul>\n );\n }\n\n function renderOption(item: ListingItem, position: number, measured: boolean) {\n const selected = isSelected(item.value);\n const id = position > 0 ? optionId(baseId, position - 1) : `${baseId}-selected-${item.value}`;\n\n return (\n <div\n aria-describedby={item.description ? `${id}-description` : undefined}\n aria-disabled={item.disabled || undefined}\n aria-labelledby={item.description ? `${id}-label` : undefined}\n aria-posinset={position > 0 ? position : undefined}\n aria-selected={selected}\n aria-setsize={position > 0 ? visible.length : undefined}\n className={[styles.option, focusedKey === item.value && styles.focused, item.disabled && styles.disabled]\n .filter(Boolean)\n .join(' ')}\n id={id}\n key={item.value}\n onClick={(event) => choose(item, event.shiftKey)}\n // So segura o foco onde ele esta quando quem o tem e o campo de busca; a lista que detem o foco o recebe.\n onMouseDown={holdsFocus ? undefined : (event) => event.preventDefault()}\n ref={measured ? measureItem : undefined}\n role=\"option\"\n >\n {selectionMode === 'multiple' && (\n <span aria-hidden=\"true\" className={[styles.box, selected && styles.checked].filter(Boolean).join(' ')} />\n )}\n {item.icon && (\n <span aria-hidden=\"true\" className={styles.optionIcon}>\n {item.icon}\n </span>\n )}\n {item.description ? (\n <span className={styles.optionText}>\n <span id={`${id}-label`}>{item.label}</span>\n <span className={styles.optionDescription} id={`${id}-description`}>\n {item.description}\n </span>\n </span>\n ) : (\n item.label\n )}\n </div>\n );\n }\n\n const blocks = groupConsecutive(rendered.map((item, index) => ({ item, position: start + index + 1 })));\n\n return (\n <div\n aria-activedescendant={holdsFocus && activeIndex >= 0 ? optionId(baseId, activeIndex) : undefined}\n aria-busy={loading || undefined}\n aria-label={label}\n aria-multiselectable={selectionMode === 'multiple' || undefined}\n className={[styles.options, className].filter(Boolean).join(' ')}\n id={baseId + '-options'}\n onKeyDown={onKeyDown}\n onScroll={onScroll}\n ref={attachElement}\n role=\"listbox\"\n style={{ height, ...style }}\n tabIndex={holdsFocus ? tabIndex : undefined}\n >\n {loading && <p className={styles.status}>{loadingMessage}</p>}\n {detached.length > 0 && (\n <div aria-label=\"Selecionados\" className={styles.group} role=\"group\">\n {detached.map((item) => renderOption(item, 0, false))}\n </div>\n )}\n <div aria-hidden=\"true\" className={styles.spacer} style={{ height: padding.before }} />\n {blocks.map(({ group, options }) => {\n const [first] = options;\n const rendering = options.map(({ item, position }) => renderOption(item, position, position === start + 1));\n\n if (group === undefined) {\n return <Fragment key={first.item.value}>{rendering}</Fragment>;\n }\n\n const titleId = `${baseId}-group-${first.position}`;\n\n return (\n <div aria-labelledby={titleId} className={styles.section} key={`${group}:${first.item.value}`} role=\"group\">\n <div className={styles.sectionTitle} id={titleId} role=\"presentation\">\n {group}\n </div>\n {rendering}\n </div>\n );\n })}\n <div aria-hidden=\"true\" className={styles.spacer} style={{ height: padding.after }} />\n {!loading && visible.length === 0 && empty}\n </div>\n );\n}\n"],"names":["optionId","baseId","index","groupConsecutive","options","blocks","option","last","ListingOptions","className","elementRef","empty","height","holdsFocus","label","listing","loading","loadingMessage","onKeyDown","onSelect","style","tabIndex","detached","focusedKey","isSelected","select","selectionMode","visible","activeIndex","item","choose","extend","active","attachScroll","measureItem","onScroll","padding","scrollToIndex","start","end","useVirtualWindow","attachElement","useCallback","node","useEffect","_b","_a","rendered","jsxs","styles","jsx","renderOption","position","measured","selected","id","event","group","first","rendering","Fragment","titleId"],"mappings":";;;;AAsBO,SAASA,EAASC,GAAgBC,GAAe;AACtD,SAAOD,IAAS,aAAaC;AAC/B;AAQA,SAASC,EAAiBC,GAAoC;AAC5D,QAAMC,IAA0D,CAAA;AAEhE,aAAWC,KAAUF,GAAS;AAC5B,UAAMG,IAAOF,EAAO,GAAG,EAAE;AAEzB,IAAIC,EAAO,KAAK,UAAU,WAAaC,KAAA,gBAAAA,EAAM,WAAUD,EAAO,KAAK,QACjEC,EAAK,QAAQ,KAAKD,CAAM,IAExBD,EAAO,KAAK,EAAE,OAAOC,EAAO,KAAK,OAAO,SAAS,CAACA,CAAM,GAAG;AAAA,EAE/D;AAEA,SAAOD;AACT;AAEO,SAASG,GAAe;AAAA,EAC7B,QAAAP;AAAA,EACA,WAAAQ;AAAA,EACA,YAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,gBAAAC,IAAiB;AAAA,EACjB,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC,IAAW;AACb,GAAwB;AACtB,QAAM,EAAE,UAAAC,GAAU,YAAAC,GAAY,YAAAC,GAAY,QAAAC,GAAQ,eAAAC,GAAe,SAAAC,MAAYZ,GACvEa,IAAcD,EAAQ,UAAU,CAACE,MAASA,EAAK,UAAUN,CAAU;AAEzE,WAASO,EAAOD,GAAmBE,GAAiB;AAClD,IAAIF,EAAK,aAITJ,EAAOI,GAAME,CAAM,GACnBZ,KAAA,QAAAA,EAAWU;AAAA,EACb;AACA,QAAM,EAAE,QAAAG,GAAQ,cAAAC,GAAc,aAAAC,GAAa,UAAAC,GAAU,SAAAC,GAAS,eAAAC,GAAe,OAAAC,GAAO,KAAAC,EAAA,IAAQC;AAAA,IAC1Fb,EAAQ;AAAA,IACRf;AAAA,EAAA,GAGI6B,IAAgBC;AAAA,IACpB,CAACC,MAA6B;AAC5B,MAAAV,EAAaU,CAAI,GAEbjC,MACFA,EAAW,UAAUiC;AAAA,IAEzB;AAAA,IACA,CAACV,GAAcvB,CAAU;AAAA,EAAA;AAG3B,EAAAkC,EAAU,MAAM;;AACd,UAAM1C,IAAQyB,EAAQ,UAAU,CAACE,MAASA,EAAK,UAAUN,CAAU;AAEnE,IAAIA,MAAe,UAAarB,IAAQ,MAIpC8B,IACFK,EAAcnC,CAAK,KAEnB2C,KAAAC,IAAA,SAAS,eAAe9C,EAASC,GAAQC,CAAK,CAAC,MAA/C,gBAAA4C,EAAkD,mBAAlD,QAAAD,EAAA,KAAAC,GAAmE,EAAE,OAAO;EAEhF,GAAG,CAACd,GAAQ/B,GAAQsB,GAAYc,GAAeV,CAAO,CAAC;AAEvD,QAAMoB,IAAWpB,EAAQ,MAAMW,GAAOC,CAAG;AAEzC,MAAIb,MAAkB;AACpB,WACE,gBAAAsB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAWhC,KAAW;AAAA,QACtB,WAAW,CAACiC,EAAO,SAASxC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,QAC/D,IAAIR,IAAS;AAAA,QACb,UAAAkC;AAAA,QACA,KAAKM;AAAA,QACL,OAAO,EAAE,QAAA7B,GAAQ,GAAGQ,EAAA;AAAA,QAEnB,UAAA;AAAA,UAAAJ,KAAW,gBAAAkC,EAAC,MAAA,EAAG,WAAWD,EAAO,QAAS,UAAAhC,GAAe;AAAA,UAC1D,gBAAAiC,EAAC,MAAA,EAAG,eAAY,QAAO,WAAWD,EAAO,QAAQ,OAAO,EAAE,QAAQb,EAAQ,OAAA,EAAO,CAAG;AAAA,UACnFW,EAAS,IAAI,CAAClB,GAAM3B,MACnB,gBAAAgD,EAAC,QAAG,WAAWD,EAAO,QAAyB,KAAK/C,MAAU,IAAIgC,IAAc,QAC7E,YAAK,MAAA,GAD2BL,EAAK,KAExC,CACD;AAAA,UACD,gBAAAqB,EAAC,MAAA,EAAG,eAAY,QAAO,WAAWD,EAAO,QAAQ,OAAO,EAAE,QAAQb,EAAQ,MAAA,EAAM,CAAG;AAAA,UAClF,CAACpB,KAAWW,EAAQ,WAAW,KAAKhB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAK3C,WAASwC,EAAatB,GAAmBuB,GAAkBC,GAAmB;AAC5E,UAAMC,IAAW9B,EAAWK,EAAK,KAAK,GAChC0B,IAAKH,IAAW,IAAIpD,EAASC,GAAQmD,IAAW,CAAC,IAAI,GAAGnD,CAAM,aAAa4B,EAAK,KAAK;AAE3F,WACE,gBAAAmB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,oBAAkBnB,EAAK,cAAc,GAAG0B,CAAE,iBAAiB;AAAA,QAC3D,iBAAe1B,EAAK,YAAY;AAAA,QAChC,mBAAiBA,EAAK,cAAc,GAAG0B,CAAE,WAAW;AAAA,QACpD,iBAAeH,IAAW,IAAIA,IAAW;AAAA,QACzC,iBAAeE;AAAA,QACf,gBAAcF,IAAW,IAAIzB,EAAQ,SAAS;AAAA,QAC9C,WAAW,CAACsB,EAAO,QAAQ1B,MAAeM,EAAK,SAASoB,EAAO,SAASpB,EAAK,YAAYoB,EAAO,QAAQ,EACrG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,IAAAM;AAAA,QAEA,SAAS,CAACC,MAAU1B,EAAOD,GAAM2B,EAAM,QAAQ;AAAA,QAE/C,aAAa3C,IAAa,SAAY,CAAC2C,MAAUA,EAAM,eAAA;AAAA,QACvD,KAAKH,IAAWnB,IAAc;AAAA,QAC9B,MAAK;AAAA,QAEJ,UAAA;AAAA,UAAAR,MAAkB,cACjB,gBAAAwB,EAAC,QAAA,EAAK,eAAY,QAAO,WAAW,CAACD,EAAO,KAAKK,KAAYL,EAAO,OAAO,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG;AAAA,UAEzGpB,EAAK,QACJ,gBAAAqB,EAAC,QAAA,EAAK,eAAY,QAAO,WAAWD,EAAO,YACxC,UAAApB,EAAK,KAAA,CACR;AAAA,UAEDA,EAAK,cACJ,gBAAAmB,EAAC,QAAA,EAAK,WAAWC,EAAO,YACtB,UAAA;AAAA,YAAA,gBAAAC,EAAC,UAAK,IAAI,GAAGK,CAAE,UAAW,YAAK,OAAM;AAAA,YACrC,gBAAAL,EAAC,QAAA,EAAK,WAAWD,EAAO,mBAAmB,IAAI,GAAGM,CAAE,gBACjD,UAAA1B,EAAK,YAAA,CACR;AAAA,UAAA,EAAA,CACF,IAEAA,EAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAvBFA,EAAK;AAAA,IAAA;AAAA,EA2BhB;AAEA,QAAMxB,IAASF,EAAiB4C,EAAS,IAAI,CAAClB,GAAM3B,OAAW,EAAE,MAAA2B,GAAM,UAAUS,IAAQpC,IAAQ,EAAA,EAAI,CAAC;AAEtG,SACE,gBAAA8C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,yBAAuBnC,KAAce,KAAe,IAAI5B,EAASC,GAAQ2B,CAAW,IAAI;AAAA,MACxF,aAAWZ,KAAW;AAAA,MACtB,cAAYF;AAAA,MACZ,wBAAsBY,MAAkB,cAAc;AAAA,MACtD,WAAW,CAACuB,EAAO,SAASxC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC/D,IAAIR,IAAS;AAAA,MACb,WAAAiB;AAAA,MACA,UAAAiB;AAAA,MACA,KAAKM;AAAA,MACL,MAAK;AAAA,MACL,OAAO,EAAE,QAAA7B,GAAQ,GAAGQ,EAAA;AAAA,MACpB,UAAUP,IAAaQ,IAAW;AAAA,MAEjC,UAAA;AAAA,QAAAL,KAAW,gBAAAkC,EAAC,KAAA,EAAE,WAAWD,EAAO,QAAS,UAAAhC,GAAe;AAAA,QACxDK,EAAS,SAAS,KACjB,gBAAA4B,EAAC,SAAI,cAAW,gBAAe,WAAWD,EAAO,OAAO,MAAK,SAC1D,UAAA3B,EAAS,IAAI,CAACO,MAASsB,EAAatB,GAAM,GAAG,EAAK,CAAC,GACtD;AAAA,QAEF,gBAAAqB,EAAC,OAAA,EAAI,eAAY,QAAO,WAAWD,EAAO,QAAQ,OAAO,EAAE,QAAQb,EAAQ,OAAA,EAAO,CAAG;AAAA,QACpF/B,EAAO,IAAI,CAAC,EAAE,OAAAoD,GAAO,SAAArD,QAAc;AAClC,gBAAM,CAACsD,CAAK,IAAItD,GACVuD,IAAYvD,EAAQ,IAAI,CAAC,EAAE,MAAAyB,GAAM,UAAAuB,EAAA,MAAeD,EAAatB,GAAMuB,GAAUA,MAAad,IAAQ,CAAC,CAAC;AAE1G,cAAImB,MAAU;AACZ,mBAAO,gBAAAP,EAACU,GAAA,EAAiC,UAAAD,EAAA,GAAnBD,EAAM,KAAK,KAAkB;AAGrD,gBAAMG,IAAU,GAAG5D,CAAM,UAAUyD,EAAM,QAAQ;AAEjD,iBACE,gBAAAV,EAAC,SAAI,mBAAiBa,GAAS,WAAWZ,EAAO,SAA8C,MAAK,SAClG,UAAA;AAAA,YAAA,gBAAAC,EAAC,OAAA,EAAI,WAAWD,EAAO,cAAc,IAAIY,GAAS,MAAK,gBACpD,UAAAJ,EAAA,CACH;AAAA,YACCE;AAAA,UAAA,EAAA,GAJ4D,GAAGF,CAAK,IAAIC,EAAM,KAAK,KAAK,EAK3F;AAAA,QAEJ,CAAC;AAAA,QACD,gBAAAR,EAAC,OAAA,EAAI,eAAY,QAAO,WAAWD,EAAO,QAAQ,OAAO,EAAE,QAAQb,EAAQ,MAAA,EAAM,CAAG;AAAA,QACnF,CAACpB,KAAWW,EAAQ,WAAW,KAAKhB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG3C;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useListing.cjs","sources":["../../../../src/components/data-display/List/useListing.ts"],"sourcesContent":["import { useMemo, useRef, useState, type KeyboardEvent } from 'react';\nimport { useSelection, type SelectionItem, type SelectionStatus } from '../../../hooks/useSelection';\nimport { containsTerm } from '../../../utils/textSearch';\n\nexport type ListingSelectionMode = 'none' | 'single' | 'multiple';\n\nexport interface ListingItem {\n disabled?: boolean;\n label: string;\n value: string;\n}\n\nexport interface UseListingOptions {\n defaultValue?: readonly ListingItem[];\n items: readonly ListingItem[];\n onSearch?: (term: string) => void;\n onSelectionChange?: (items: readonly ListingItem[]) => void;\n selectionMode?: ListingSelectionMode;\n value?: readonly ListingItem[];\n}\n\nexport interface Listing {\n detached: readonly ListingItem[];\n focus: (value?: string) => void;\n focusFirst: () => void;\n focusLast: () => void;\n focusedKey?: string;\n handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n isSelected: (value: string) => boolean;\n filter: (term: string) => void;\n reset: () => void;\n typeahead: (character: string) => void;\n select: (item: ListingItem, extend?: boolean) => void;\n selected: readonly ListingItem[];\n selectionMode: ListingSelectionMode;\n status: SelectionStatus;\n toggleAll: () => void;\n term: string;\n visible: readonly ListingItem[];\n}\n\n/** Teclas que, num campo de texto, editam o texto; nele, a listagem nao as toma para si. */\nconst TECLAS_DE_EDICAO = ['Home', 'End', ' '];\n\nexport function useListing({\n defaultValue,\n items,\n onSearch,\n onSelectionChange,\n selectionMode = 'none',\n value,\n}: UseListingOptions): Listing {\n const [term, setTerm] = useState('');\n\n const visible = useMemo(() => {\n if (onSearch || !term) {\n return items;\n }\n\n return items.filter((item) => containsTerm(item.label, term));\n }, [items, onSearch, term]);\n\n const collection = useMemo<SelectionItem[]>(\n () => visible.map((item) => ({ key: item.value, disabled: item.disabled, textValue: item.label })),\n [visible],\n );\n\n // Toda opcao ja vista fica registrada, inclusive a que so chegou pelo valor. Com busca assincrona, `items`\n // e trocada a cada consulta, e resolver a escolha so contra ela descartava o que veio de outra consulta.\n const conhecidos = useRef(new Map<string, ListingItem>());\n\n for (const item of [...(defaultValue ?? []), ...(value ?? [])]) {\n if (!conhecidos.current.has(item.value)) {\n conhecidos.current.set(item.value, item);\n }\n }\n\n for (const item of items) {\n conhecidos.current.set(item.value, item);\n }\n\n const conhecido = (chave: string): ListingItem => conhecidos.current.get(chave) ?? { value: chave, label: '' };\n\n const selection = useSelection({\n items: collection,\n mode: selectionMode,\n defaultSelectedKeys: defaultValue?.map((item) => item.value),\n selectedKeys: value?.map((item) => item.value),\n onSelectionChange: (keys) => onSelectionChange?.([...keys].map(conhecido)),\n });\n\n const selected = (value ?? selection.selectedItems.map((item) => ({ value: item.key, label: '' }))).map((item) =>\n conhecido(item.value),\n );\n\n const detached = useMemo(() => {\n if (!term || selectionMode !== 'multiple') {\n return [];\n }\n\n const visibleValues = new Set(visible.map((item) => item.value));\n\n return selected.filter((item) => !visibleValues.has(item.value));\n }, [selected, selectionMode, term, visible]);\n\n function handleKeyDown(event: KeyboardEvent<HTMLElement>) {\n if (selectionMode === 'none' || (event.target instanceof HTMLInputElement && TECLAS_DE_EDICAO.includes(event.key))) {\n return;\n }\n\n const estender = event.shiftKey;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (selection.focusedKey === undefined) {\n selection.focusFirst(estender);\n } else {\n selection.focusNext(estender);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n selection.focusPrevious(estender);\n } else if (event.key === 'Home') {\n event.preventDefault();\n selection.focusFirst(estender);\n } else if (event.key === 'End') {\n event.preventDefault();\n selection.focusLast(estender);\n } else if (event.key === 'Enter' || event.key === ' ') {\n const focused = visible.find((item) => item.value === selection.focusedKey);\n\n if (focused && !focused.disabled) {\n event.preventDefault();\n selection.select(focused.value);\n }\n }\n }\n\n return {\n detached,\n focus: selection.focus,\n focusFirst: selection.focusFirst,\n focusLast: selection.focusLast,\n focusedKey: selection.focusedKey,\n handleKeyDown,\n isSelected: (itemValue) => selected.some((item) => item.value === itemValue),\n filter: (nextTerm) => {\n setTerm(nextTerm);\n selection.focus(undefined);\n onSearch?.(nextTerm);\n },\n reset: selection.reset,\n typeahead: selection.search,\n select: (item, extend) => {\n if (item.disabled) {\n return;\n }\n\n if (extend && selectionMode === 'multiple') {\n selection.selectRange(item.value);\n return;\n }\n\n selection.select(item.value);\n },\n selected,\n selectionMode,\n status: selection.status,\n toggleAll: selection.toggleAll,\n term,\n visible,\n };\n}\n"],"names":["TECLAS_DE_EDICAO","useListing","defaultValue","items","onSearch","onSelectionChange","selectionMode","value","term","setTerm","useState","visible","useMemo","item","containsTerm","collection","conhecidos","useRef","conhecido","chave","selection","useSelection","keys","selected","detached","visibleValues","handleKeyDown","event","estender","focused","itemValue","nextTerm","extend"],"mappings":"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"}
1
+ {"version":3,"file":"useListing.cjs","sources":["../../../../src/components/data-display/List/useListing.ts"],"sourcesContent":["import { useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { useSelection, type SelectionItem, type SelectionStatus } from '../../../hooks/useSelection';\nimport { containsTerm } from '../../../utils/textSearch';\n\nexport type ListingSelectionMode = 'none' | 'single' | 'multiple';\n\nexport interface ListingItem {\n /** Segunda linha da opção, como a coleção de um documento. */\n description?: string;\n disabled?: boolean;\n /** Título do grupo. As opções seguidas de um mesmo grupo aparecem juntas, sob ele. */\n group?: string;\n /** Decorativo, à frente do rótulo: quem nomeia a opção é o rótulo. */\n icon?: ReactNode;\n label: string;\n value: string;\n}\n\nexport interface UseListingOptions {\n defaultValue?: readonly ListingItem[];\n items: readonly ListingItem[];\n onSearch?: (term: string) => void;\n onSelectionChange?: (items: readonly ListingItem[]) => void;\n selectionMode?: ListingSelectionMode;\n value?: readonly ListingItem[];\n}\n\nexport interface Listing {\n detached: readonly ListingItem[];\n focus: (value?: string) => void;\n focusFirst: () => void;\n focusLast: () => void;\n focusedKey?: string;\n handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n isSelected: (value: string) => boolean;\n filter: (term: string) => void;\n reset: () => void;\n typeahead: (character: string) => void;\n select: (item: ListingItem, extend?: boolean) => void;\n selected: readonly ListingItem[];\n selectionMode: ListingSelectionMode;\n status: SelectionStatus;\n toggleAll: () => void;\n term: string;\n visible: readonly ListingItem[];\n}\n\n/** Teclas que, num campo de texto, editam o texto; nele, a listagem nao as toma para si. */\nconst TECLAS_DE_EDICAO = ['Home', 'End', ' '];\n\nexport function useListing({\n defaultValue,\n items,\n onSearch,\n onSelectionChange,\n selectionMode = 'none',\n value,\n}: UseListingOptions): Listing {\n const [term, setTerm] = useState('');\n\n const visible = useMemo(() => {\n if (onSearch || !term) {\n return items;\n }\n\n return items.filter((item) => containsTerm(item.label, term));\n }, [items, onSearch, term]);\n\n const collection = useMemo<SelectionItem[]>(\n () => visible.map((item) => ({ key: item.value, disabled: item.disabled, textValue: item.label })),\n [visible],\n );\n\n // Toda opcao ja vista fica registrada, inclusive a que so chegou pelo valor. Com busca assincrona, `items`\n // e trocada a cada consulta, e resolver a escolha so contra ela descartava o que veio de outra consulta.\n const conhecidos = useRef(new Map<string, ListingItem>());\n\n for (const item of [...(defaultValue ?? []), ...(value ?? [])]) {\n if (!conhecidos.current.has(item.value)) {\n conhecidos.current.set(item.value, item);\n }\n }\n\n for (const item of items) {\n conhecidos.current.set(item.value, item);\n }\n\n const conhecido = (chave: string): ListingItem => conhecidos.current.get(chave) ?? { value: chave, label: '' };\n\n const selection = useSelection({\n items: collection,\n mode: selectionMode,\n defaultSelectedKeys: defaultValue?.map((item) => item.value),\n selectedKeys: value?.map((item) => item.value),\n onSelectionChange: (keys) => onSelectionChange?.([...keys].map(conhecido)),\n });\n\n const selected = (value ?? selection.selectedItems.map((item) => ({ value: item.key, label: '' }))).map((item) =>\n conhecido(item.value),\n );\n\n const detached = useMemo(() => {\n if (!term || selectionMode !== 'multiple') {\n return [];\n }\n\n const visibleValues = new Set(visible.map((item) => item.value));\n\n return selected.filter((item) => !visibleValues.has(item.value));\n }, [selected, selectionMode, term, visible]);\n\n function handleKeyDown(event: KeyboardEvent<HTMLElement>) {\n if (selectionMode === 'none' || (event.target instanceof HTMLInputElement && TECLAS_DE_EDICAO.includes(event.key))) {\n return;\n }\n\n const estender = event.shiftKey;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (selection.focusedKey === undefined) {\n selection.focusFirst(estender);\n } else {\n selection.focusNext(estender);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n selection.focusPrevious(estender);\n } else if (event.key === 'Home') {\n event.preventDefault();\n selection.focusFirst(estender);\n } else if (event.key === 'End') {\n event.preventDefault();\n selection.focusLast(estender);\n } else if (event.key === 'Enter' || event.key === ' ') {\n const focused = visible.find((item) => item.value === selection.focusedKey);\n\n if (focused && !focused.disabled) {\n event.preventDefault();\n selection.select(focused.value);\n }\n }\n }\n\n return {\n detached,\n focus: selection.focus,\n focusFirst: selection.focusFirst,\n focusLast: selection.focusLast,\n focusedKey: selection.focusedKey,\n handleKeyDown,\n isSelected: (itemValue) => selected.some((item) => item.value === itemValue),\n filter: (nextTerm) => {\n setTerm(nextTerm);\n selection.focus(undefined);\n onSearch?.(nextTerm);\n },\n reset: selection.reset,\n typeahead: selection.search,\n select: (item, extend) => {\n if (item.disabled) {\n return;\n }\n\n if (extend && selectionMode === 'multiple') {\n selection.selectRange(item.value);\n return;\n }\n\n selection.select(item.value);\n },\n selected,\n selectionMode,\n status: selection.status,\n toggleAll: selection.toggleAll,\n term,\n visible,\n };\n}\n"],"names":["TECLAS_DE_EDICAO","useListing","defaultValue","items","onSearch","onSelectionChange","selectionMode","value","term","setTerm","useState","visible","useMemo","item","containsTerm","collection","conhecidos","useRef","conhecido","chave","selection","useSelection","keys","selected","detached","visibleValues","handleKeyDown","event","estender","focused","itemValue","nextTerm","extend"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useListing.js","sources":["../../../../src/components/data-display/List/useListing.ts"],"sourcesContent":["import { useMemo, useRef, useState, type KeyboardEvent } from 'react';\nimport { useSelection, type SelectionItem, type SelectionStatus } from '../../../hooks/useSelection';\nimport { containsTerm } from '../../../utils/textSearch';\n\nexport type ListingSelectionMode = 'none' | 'single' | 'multiple';\n\nexport interface ListingItem {\n disabled?: boolean;\n label: string;\n value: string;\n}\n\nexport interface UseListingOptions {\n defaultValue?: readonly ListingItem[];\n items: readonly ListingItem[];\n onSearch?: (term: string) => void;\n onSelectionChange?: (items: readonly ListingItem[]) => void;\n selectionMode?: ListingSelectionMode;\n value?: readonly ListingItem[];\n}\n\nexport interface Listing {\n detached: readonly ListingItem[];\n focus: (value?: string) => void;\n focusFirst: () => void;\n focusLast: () => void;\n focusedKey?: string;\n handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n isSelected: (value: string) => boolean;\n filter: (term: string) => void;\n reset: () => void;\n typeahead: (character: string) => void;\n select: (item: ListingItem, extend?: boolean) => void;\n selected: readonly ListingItem[];\n selectionMode: ListingSelectionMode;\n status: SelectionStatus;\n toggleAll: () => void;\n term: string;\n visible: readonly ListingItem[];\n}\n\n/** Teclas que, num campo de texto, editam o texto; nele, a listagem nao as toma para si. */\nconst TECLAS_DE_EDICAO = ['Home', 'End', ' '];\n\nexport function useListing({\n defaultValue,\n items,\n onSearch,\n onSelectionChange,\n selectionMode = 'none',\n value,\n}: UseListingOptions): Listing {\n const [term, setTerm] = useState('');\n\n const visible = useMemo(() => {\n if (onSearch || !term) {\n return items;\n }\n\n return items.filter((item) => containsTerm(item.label, term));\n }, [items, onSearch, term]);\n\n const collection = useMemo<SelectionItem[]>(\n () => visible.map((item) => ({ key: item.value, disabled: item.disabled, textValue: item.label })),\n [visible],\n );\n\n // Toda opcao ja vista fica registrada, inclusive a que so chegou pelo valor. Com busca assincrona, `items`\n // e trocada a cada consulta, e resolver a escolha so contra ela descartava o que veio de outra consulta.\n const conhecidos = useRef(new Map<string, ListingItem>());\n\n for (const item of [...(defaultValue ?? []), ...(value ?? [])]) {\n if (!conhecidos.current.has(item.value)) {\n conhecidos.current.set(item.value, item);\n }\n }\n\n for (const item of items) {\n conhecidos.current.set(item.value, item);\n }\n\n const conhecido = (chave: string): ListingItem => conhecidos.current.get(chave) ?? { value: chave, label: '' };\n\n const selection = useSelection({\n items: collection,\n mode: selectionMode,\n defaultSelectedKeys: defaultValue?.map((item) => item.value),\n selectedKeys: value?.map((item) => item.value),\n onSelectionChange: (keys) => onSelectionChange?.([...keys].map(conhecido)),\n });\n\n const selected = (value ?? selection.selectedItems.map((item) => ({ value: item.key, label: '' }))).map((item) =>\n conhecido(item.value),\n );\n\n const detached = useMemo(() => {\n if (!term || selectionMode !== 'multiple') {\n return [];\n }\n\n const visibleValues = new Set(visible.map((item) => item.value));\n\n return selected.filter((item) => !visibleValues.has(item.value));\n }, [selected, selectionMode, term, visible]);\n\n function handleKeyDown(event: KeyboardEvent<HTMLElement>) {\n if (selectionMode === 'none' || (event.target instanceof HTMLInputElement && TECLAS_DE_EDICAO.includes(event.key))) {\n return;\n }\n\n const estender = event.shiftKey;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (selection.focusedKey === undefined) {\n selection.focusFirst(estender);\n } else {\n selection.focusNext(estender);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n selection.focusPrevious(estender);\n } else if (event.key === 'Home') {\n event.preventDefault();\n selection.focusFirst(estender);\n } else if (event.key === 'End') {\n event.preventDefault();\n selection.focusLast(estender);\n } else if (event.key === 'Enter' || event.key === ' ') {\n const focused = visible.find((item) => item.value === selection.focusedKey);\n\n if (focused && !focused.disabled) {\n event.preventDefault();\n selection.select(focused.value);\n }\n }\n }\n\n return {\n detached,\n focus: selection.focus,\n focusFirst: selection.focusFirst,\n focusLast: selection.focusLast,\n focusedKey: selection.focusedKey,\n handleKeyDown,\n isSelected: (itemValue) => selected.some((item) => item.value === itemValue),\n filter: (nextTerm) => {\n setTerm(nextTerm);\n selection.focus(undefined);\n onSearch?.(nextTerm);\n },\n reset: selection.reset,\n typeahead: selection.search,\n select: (item, extend) => {\n if (item.disabled) {\n return;\n }\n\n if (extend && selectionMode === 'multiple') {\n selection.selectRange(item.value);\n return;\n }\n\n selection.select(item.value);\n },\n selected,\n selectionMode,\n status: selection.status,\n toggleAll: selection.toggleAll,\n term,\n visible,\n };\n}\n"],"names":["TECLAS_DE_EDICAO","useListing","defaultValue","items","onSearch","onSelectionChange","selectionMode","value","term","setTerm","useState","visible","useMemo","item","containsTerm","collection","conhecidos","useRef","conhecido","chave","selection","useSelection","keys","selected","detached","visibleValues","handleKeyDown","event","estender","focused","itemValue","nextTerm","extend"],"mappings":"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"}
1
+ {"version":3,"file":"useListing.js","sources":["../../../../src/components/data-display/List/useListing.ts"],"sourcesContent":["import { useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { useSelection, type SelectionItem, type SelectionStatus } from '../../../hooks/useSelection';\nimport { containsTerm } from '../../../utils/textSearch';\n\nexport type ListingSelectionMode = 'none' | 'single' | 'multiple';\n\nexport interface ListingItem {\n /** Segunda linha da opção, como a coleção de um documento. */\n description?: string;\n disabled?: boolean;\n /** Título do grupo. As opções seguidas de um mesmo grupo aparecem juntas, sob ele. */\n group?: string;\n /** Decorativo, à frente do rótulo: quem nomeia a opção é o rótulo. */\n icon?: ReactNode;\n label: string;\n value: string;\n}\n\nexport interface UseListingOptions {\n defaultValue?: readonly ListingItem[];\n items: readonly ListingItem[];\n onSearch?: (term: string) => void;\n onSelectionChange?: (items: readonly ListingItem[]) => void;\n selectionMode?: ListingSelectionMode;\n value?: readonly ListingItem[];\n}\n\nexport interface Listing {\n detached: readonly ListingItem[];\n focus: (value?: string) => void;\n focusFirst: () => void;\n focusLast: () => void;\n focusedKey?: string;\n handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n isSelected: (value: string) => boolean;\n filter: (term: string) => void;\n reset: () => void;\n typeahead: (character: string) => void;\n select: (item: ListingItem, extend?: boolean) => void;\n selected: readonly ListingItem[];\n selectionMode: ListingSelectionMode;\n status: SelectionStatus;\n toggleAll: () => void;\n term: string;\n visible: readonly ListingItem[];\n}\n\n/** Teclas que, num campo de texto, editam o texto; nele, a listagem nao as toma para si. */\nconst TECLAS_DE_EDICAO = ['Home', 'End', ' '];\n\nexport function useListing({\n defaultValue,\n items,\n onSearch,\n onSelectionChange,\n selectionMode = 'none',\n value,\n}: UseListingOptions): Listing {\n const [term, setTerm] = useState('');\n\n const visible = useMemo(() => {\n if (onSearch || !term) {\n return items;\n }\n\n return items.filter((item) => containsTerm(item.label, term));\n }, [items, onSearch, term]);\n\n const collection = useMemo<SelectionItem[]>(\n () => visible.map((item) => ({ key: item.value, disabled: item.disabled, textValue: item.label })),\n [visible],\n );\n\n // Toda opcao ja vista fica registrada, inclusive a que so chegou pelo valor. Com busca assincrona, `items`\n // e trocada a cada consulta, e resolver a escolha so contra ela descartava o que veio de outra consulta.\n const conhecidos = useRef(new Map<string, ListingItem>());\n\n for (const item of [...(defaultValue ?? []), ...(value ?? [])]) {\n if (!conhecidos.current.has(item.value)) {\n conhecidos.current.set(item.value, item);\n }\n }\n\n for (const item of items) {\n conhecidos.current.set(item.value, item);\n }\n\n const conhecido = (chave: string): ListingItem => conhecidos.current.get(chave) ?? { value: chave, label: '' };\n\n const selection = useSelection({\n items: collection,\n mode: selectionMode,\n defaultSelectedKeys: defaultValue?.map((item) => item.value),\n selectedKeys: value?.map((item) => item.value),\n onSelectionChange: (keys) => onSelectionChange?.([...keys].map(conhecido)),\n });\n\n const selected = (value ?? selection.selectedItems.map((item) => ({ value: item.key, label: '' }))).map((item) =>\n conhecido(item.value),\n );\n\n const detached = useMemo(() => {\n if (!term || selectionMode !== 'multiple') {\n return [];\n }\n\n const visibleValues = new Set(visible.map((item) => item.value));\n\n return selected.filter((item) => !visibleValues.has(item.value));\n }, [selected, selectionMode, term, visible]);\n\n function handleKeyDown(event: KeyboardEvent<HTMLElement>) {\n if (selectionMode === 'none' || (event.target instanceof HTMLInputElement && TECLAS_DE_EDICAO.includes(event.key))) {\n return;\n }\n\n const estender = event.shiftKey;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (selection.focusedKey === undefined) {\n selection.focusFirst(estender);\n } else {\n selection.focusNext(estender);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n selection.focusPrevious(estender);\n } else if (event.key === 'Home') {\n event.preventDefault();\n selection.focusFirst(estender);\n } else if (event.key === 'End') {\n event.preventDefault();\n selection.focusLast(estender);\n } else if (event.key === 'Enter' || event.key === ' ') {\n const focused = visible.find((item) => item.value === selection.focusedKey);\n\n if (focused && !focused.disabled) {\n event.preventDefault();\n selection.select(focused.value);\n }\n }\n }\n\n return {\n detached,\n focus: selection.focus,\n focusFirst: selection.focusFirst,\n focusLast: selection.focusLast,\n focusedKey: selection.focusedKey,\n handleKeyDown,\n isSelected: (itemValue) => selected.some((item) => item.value === itemValue),\n filter: (nextTerm) => {\n setTerm(nextTerm);\n selection.focus(undefined);\n onSearch?.(nextTerm);\n },\n reset: selection.reset,\n typeahead: selection.search,\n select: (item, extend) => {\n if (item.disabled) {\n return;\n }\n\n if (extend && selectionMode === 'multiple') {\n selection.selectRange(item.value);\n return;\n }\n\n selection.select(item.value);\n },\n selected,\n selectionMode,\n status: selection.status,\n toggleAll: selection.toggleAll,\n term,\n visible,\n };\n}\n"],"names":["TECLAS_DE_EDICAO","useListing","defaultValue","items","onSearch","onSelectionChange","selectionMode","value","term","setTerm","useState","visible","useMemo","item","containsTerm","collection","conhecidos","useRef","conhecido","chave","selection","useSelection","keys","selected","detached","visibleValues","handleKeyDown","event","estender","focused","itemValue","nextTerm","extend"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("./Timeline.module.css.cjs"),o=require("../../icons/icons.cjs");function m({className:r,current:d,items:n,label:i,...u}){const t=n.findIndex(s=>s.key===d);return e.jsx("ol",{...u,"aria-label":i,className:[a.default.timeline,r].filter(Boolean).join(" "),children:n.map((s,c)=>{const l=c<t?"complete":c===t?"current":"upcoming";return e.jsxs("li",{"aria-current":l==="current"?"step":void 0,className:[a.default.item,a.default[l]].join(" "),children:[e.jsx("span",{"aria-hidden":"true",className:a.default.marker,children:l==="complete"?e.jsx(o.IconCheck,{}):e.jsx("span",{className:a.default.dot})}),e.jsxs("span",{className:a.default.text,children:[e.jsx("span",{className:a.default.label,children:s.label}),l==="complete"&&e.jsx("span",{className:a.default.hiddenText,children:", concluído"}),l==="current"&&e.jsx("span",{className:a.default.hiddenText,children:", atual"}),s.description&&e.jsx("span",{className:a.default.description,children:s.description}),s.date&&e.jsx("span",{className:a.default.date,children:s.date})]})]},s.key)})})}exports.Timeline=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),e=require("./Timeline.module.css.cjs"),m=require("../../icons/icons.cjs");function p({className:r,current:d,items:n,label:i,size:u="md",...o}){const t=n.findIndex(l=>l.key===d);return a.jsx("ol",{...o,"aria-label":i,className:[e.default.timeline,e.default[u],r].filter(Boolean).join(" "),children:n.map((l,c)=>{const s=c<t?"complete":c===t?"current":"upcoming";return a.jsxs("li",{"aria-current":s==="current"?"step":void 0,className:[e.default.item,e.default[s]].join(" "),children:[a.jsx("span",{"aria-hidden":"true",className:e.default.marker,children:s==="complete"?a.jsx(m.IconCheck,{}):a.jsx("span",{className:e.default.dot})}),a.jsxs("span",{className:e.default.text,children:[a.jsx("span",{className:e.default.label,children:l.label}),s==="complete"&&a.jsx("span",{className:e.default.hiddenText,children:", concluído"}),s==="current"&&a.jsx("span",{className:e.default.hiddenText,children:", atual"}),l.description&&a.jsx("span",{className:e.default.description,children:l.description}),l.date&&a.jsx("span",{className:e.default.date,children:l.date})]})]},l.key)})})}exports.Timeline=p;
2
2
  //# sourceMappingURL=Timeline.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.cjs","sources":["../../../../src/components/data-display/Timeline/Timeline.tsx"],"sourcesContent":["import type { ComponentPropsWithRef } from 'react';\nimport { IconCheck } from '../../icons';\nimport styles from './Timeline.module.css';\n\nexport interface TimelineItem {\n date?: string;\n description?: string;\n key: string;\n label: string;\n}\n\nexport interface TimelineProps extends Omit<ComponentPropsWithRef<'ol'>, 'children'> {\n /** Chave do estado atual. Os anteriores contam como concluídos, os seguintes como por vir. */\n current: string;\n items: readonly TimelineItem[];\n /** Nome da lista, para o leitor de tela. */\n label: string;\n}\n\nexport function Timeline({ className, current, items, label, ...props }: TimelineProps) {\n const currentIndex = items.findIndex((item) => item.key === current);\n\n return (\n <ol {...props} aria-label={label} className={[styles.timeline, className].filter(Boolean).join(' ')}>\n {items.map((item, index) => {\n const state = index < currentIndex ? 'complete' : index === currentIndex ? 'current' : 'upcoming';\n\n return (\n <li\n aria-current={state === 'current' ? 'step' : undefined}\n className={[styles.item, styles[state]].join(' ')}\n key={item.key}\n >\n <span aria-hidden=\"true\" className={styles.marker}>\n {state === 'complete' ? <IconCheck /> : <span className={styles.dot} />}\n </span>\n <span className={styles.text}>\n <span className={styles.label}>{item.label}</span>\n {state === 'complete' && <span className={styles.hiddenText}>, concluído</span>}\n {state === 'current' && <span className={styles.hiddenText}>, atual</span>}\n {item.description && <span className={styles.description}>{item.description}</span>}\n {item.date && <span className={styles.date}>{item.date}</span>}\n </span>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"names":["Timeline","className","current","items","label","props","currentIndex","item","jsx","styles","index","state","jsxs","IconCheck"],"mappings":"+LAmBO,SAASA,EAAS,CAAE,UAAAC,EAAW,QAAAC,EAAS,MAAAC,EAAO,MAAAC,EAAO,GAAGC,GAAwB,CACtF,MAAMC,EAAeH,EAAM,UAAWI,GAASA,EAAK,MAAQL,CAAO,EAEnE,OACEM,EAAAA,IAAC,MAAI,GAAGH,EAAO,aAAYD,EAAO,UAAW,CAACK,EAAAA,QAAO,SAAUR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC/F,SAAAE,EAAM,IAAI,CAACI,EAAMG,IAAU,CAC1B,MAAMC,EAAQD,EAAQJ,EAAe,WAAaI,IAAUJ,EAAe,UAAY,WAEvF,OACEM,EAAAA,KAAC,KAAA,CACC,eAAcD,IAAU,UAAY,OAAS,OAC7C,UAAW,CAACF,EAAAA,QAAO,KAAMA,EAAAA,QAAOE,CAAK,CAAC,EAAE,KAAK,GAAG,EAGhD,SAAA,CAAAH,MAAC,QAAK,cAAY,OAAO,UAAWC,UAAO,OACxC,SAAAE,IAAU,WAAaH,EAAAA,IAACK,EAAAA,UAAA,EAAU,EAAKL,MAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,IAAK,EACvE,EACAG,EAAAA,KAAC,OAAA,CAAK,UAAWH,EAAAA,QAAO,KACtB,SAAA,CAAAD,MAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,MAAQ,WAAK,MAAM,EAC1CE,IAAU,YAAcH,EAAAA,IAAC,QAAK,UAAWC,EAAAA,QAAO,WAAY,SAAA,cAAW,EACvEE,IAAU,WAAaH,EAAAA,IAAC,QAAK,UAAWC,EAAAA,QAAO,WAAY,SAAA,UAAO,EAClEF,EAAK,aAAeC,MAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,YAAc,WAAK,WAAA,CAAY,EAC3EF,EAAK,MAAQC,MAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,KAAO,WAAK,IAAA,CAAK,CAAA,CAAA,CACzD,CAAA,CAAA,EAXKF,EAAK,GAAA,CAchB,CAAC,CAAA,CACH,CAEJ"}
1
+ {"version":3,"file":"Timeline.cjs","sources":["../../../../src/components/data-display/Timeline/Timeline.tsx"],"sourcesContent":["import type { ComponentPropsWithRef } from 'react';\nimport { IconCheck } from '../../icons';\nimport styles from './Timeline.module.css';\n\nexport type TimelineSize = 'sm' | 'md';\n\nexport interface TimelineItem {\n date?: string;\n description?: string;\n key: string;\n label: string;\n}\n\nexport interface TimelineProps extends Omit<ComponentPropsWithRef<'ol'>, 'children'> {\n /** Chave do estado atual. Os anteriores contam como concluídos, os seguintes como por vir. */\n current: string;\n items: readonly TimelineItem[];\n /** Nome da lista, para o leitor de tela. */\n label: string;\n /** `sm` para painéis estreitos: marcador de 16px e rótulo em caption. */\n size?: TimelineSize;\n}\n\nexport function Timeline({ className, current, items, label, size = 'md', ...props }: TimelineProps) {\n const currentIndex = items.findIndex((item) => item.key === current);\n\n return (\n <ol {...props} aria-label={label} className={[styles.timeline, styles[size], className].filter(Boolean).join(' ')}>\n {items.map((item, index) => {\n const state = index < currentIndex ? 'complete' : index === currentIndex ? 'current' : 'upcoming';\n\n return (\n <li\n aria-current={state === 'current' ? 'step' : undefined}\n className={[styles.item, styles[state]].join(' ')}\n key={item.key}\n >\n <span aria-hidden=\"true\" className={styles.marker}>\n {state === 'complete' ? <IconCheck /> : <span className={styles.dot} />}\n </span>\n <span className={styles.text}>\n <span className={styles.label}>{item.label}</span>\n {state === 'complete' && <span className={styles.hiddenText}>, concluído</span>}\n {state === 'current' && <span className={styles.hiddenText}>, atual</span>}\n {item.description && <span className={styles.description}>{item.description}</span>}\n {item.date && <span className={styles.date}>{item.date}</span>}\n </span>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"names":["Timeline","className","current","items","label","size","props","currentIndex","item","jsx","styles","index","state","jsxs","IconCheck"],"mappings":"+LAuBO,SAASA,EAAS,CAAE,UAAAC,EAAW,QAAAC,EAAS,MAAAC,EAAO,MAAAC,EAAO,KAAAC,EAAO,KAAM,GAAGC,GAAwB,CACnG,MAAMC,EAAeJ,EAAM,UAAWK,GAASA,EAAK,MAAQN,CAAO,EAEnE,OACEO,MAAC,KAAA,CAAI,GAAGH,EAAO,aAAYF,EAAO,UAAW,CAACM,EAAAA,QAAO,SAAUA,EAAAA,QAAOL,CAAI,EAAGJ,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC7G,SAAAE,EAAM,IAAI,CAACK,EAAMG,IAAU,CAC1B,MAAMC,EAAQD,EAAQJ,EAAe,WAAaI,IAAUJ,EAAe,UAAY,WAEvF,OACEM,EAAAA,KAAC,KAAA,CACC,eAAcD,IAAU,UAAY,OAAS,OAC7C,UAAW,CAACF,EAAAA,QAAO,KAAMA,EAAAA,QAAOE,CAAK,CAAC,EAAE,KAAK,GAAG,EAGhD,SAAA,CAAAH,MAAC,QAAK,cAAY,OAAO,UAAWC,UAAO,OACxC,SAAAE,IAAU,WAAaH,EAAAA,IAACK,EAAAA,UAAA,EAAU,EAAKL,MAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,IAAK,EACvE,EACAG,EAAAA,KAAC,OAAA,CAAK,UAAWH,EAAAA,QAAO,KACtB,SAAA,CAAAD,MAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,MAAQ,WAAK,MAAM,EAC1CE,IAAU,YAAcH,EAAAA,IAAC,QAAK,UAAWC,EAAAA,QAAO,WAAY,SAAA,cAAW,EACvEE,IAAU,WAAaH,EAAAA,IAAC,QAAK,UAAWC,EAAAA,QAAO,WAAY,SAAA,UAAO,EAClEF,EAAK,aAAeC,MAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,YAAc,WAAK,WAAA,CAAY,EAC3EF,EAAK,MAAQC,MAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,KAAO,WAAK,IAAA,CAAK,CAAA,CAAA,CACzD,CAAA,CAAA,EAXKF,EAAK,GAAA,CAchB,CAAC,CAAA,CACH,CAEJ"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as a, jsxs as t } from "react/jsx-runtime";
2
2
  import e from "./Timeline.module.css.js";
3
- import { IconCheck as m } from "../../icons/icons.js";
4
- function x({ className: i, current: o, items: s, label: d, ...p }) {
5
- const c = s.findIndex((n) => n.key === o);
6
- return /* @__PURE__ */ a("ol", { ...p, "aria-label": d, className: [e.timeline, i].filter(Boolean).join(" "), children: s.map((n, l) => {
3
+ import { IconCheck as h } from "../../icons/icons.js";
4
+ function f({ className: i, current: d, items: s, label: o, size: p = "md", ...m }) {
5
+ const c = s.findIndex((n) => n.key === d);
6
+ return /* @__PURE__ */ a("ol", { ...m, "aria-label": o, className: [e.timeline, e[p], i].filter(Boolean).join(" "), children: s.map((n, l) => {
7
7
  const r = l < c ? "complete" : l === c ? "current" : "upcoming";
8
8
  return /* @__PURE__ */ t(
9
9
  "li",
@@ -11,7 +11,7 @@ function x({ className: i, current: o, items: s, label: d, ...p }) {
11
11
  "aria-current": r === "current" ? "step" : void 0,
12
12
  className: [e.item, e[r]].join(" "),
13
13
  children: [
14
- /* @__PURE__ */ a("span", { "aria-hidden": "true", className: e.marker, children: r === "complete" ? /* @__PURE__ */ a(m, {}) : /* @__PURE__ */ a("span", { className: e.dot }) }),
14
+ /* @__PURE__ */ a("span", { "aria-hidden": "true", className: e.marker, children: r === "complete" ? /* @__PURE__ */ a(h, {}) : /* @__PURE__ */ a("span", { className: e.dot }) }),
15
15
  /* @__PURE__ */ t("span", { className: e.text, children: [
16
16
  /* @__PURE__ */ a("span", { className: e.label, children: n.label }),
17
17
  r === "complete" && /* @__PURE__ */ a("span", { className: e.hiddenText, children: ", concluído" }),
@@ -26,6 +26,6 @@ function x({ className: i, current: o, items: s, label: d, ...p }) {
26
26
  }) });
27
27
  }
28
28
  export {
29
- x as Timeline
29
+ f as Timeline
30
30
  };
31
31
  //# sourceMappingURL=Timeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.js","sources":["../../../../src/components/data-display/Timeline/Timeline.tsx"],"sourcesContent":["import type { ComponentPropsWithRef } from 'react';\nimport { IconCheck } from '../../icons';\nimport styles from './Timeline.module.css';\n\nexport interface TimelineItem {\n date?: string;\n description?: string;\n key: string;\n label: string;\n}\n\nexport interface TimelineProps extends Omit<ComponentPropsWithRef<'ol'>, 'children'> {\n /** Chave do estado atual. Os anteriores contam como concluídos, os seguintes como por vir. */\n current: string;\n items: readonly TimelineItem[];\n /** Nome da lista, para o leitor de tela. */\n label: string;\n}\n\nexport function Timeline({ className, current, items, label, ...props }: TimelineProps) {\n const currentIndex = items.findIndex((item) => item.key === current);\n\n return (\n <ol {...props} aria-label={label} className={[styles.timeline, className].filter(Boolean).join(' ')}>\n {items.map((item, index) => {\n const state = index < currentIndex ? 'complete' : index === currentIndex ? 'current' : 'upcoming';\n\n return (\n <li\n aria-current={state === 'current' ? 'step' : undefined}\n className={[styles.item, styles[state]].join(' ')}\n key={item.key}\n >\n <span aria-hidden=\"true\" className={styles.marker}>\n {state === 'complete' ? <IconCheck /> : <span className={styles.dot} />}\n </span>\n <span className={styles.text}>\n <span className={styles.label}>{item.label}</span>\n {state === 'complete' && <span className={styles.hiddenText}>, concluído</span>}\n {state === 'current' && <span className={styles.hiddenText}>, atual</span>}\n {item.description && <span className={styles.description}>{item.description}</span>}\n {item.date && <span className={styles.date}>{item.date}</span>}\n </span>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"names":["Timeline","className","current","items","label","props","currentIndex","item","jsx","styles","index","state","jsxs","IconCheck"],"mappings":";;;AAmBO,SAASA,EAAS,EAAE,WAAAC,GAAW,SAAAC,GAAS,OAAAC,GAAO,OAAAC,GAAO,GAAGC,KAAwB;AACtF,QAAMC,IAAeH,EAAM,UAAU,CAACI,MAASA,EAAK,QAAQL,CAAO;AAEnE,SACE,gBAAAM,EAAC,QAAI,GAAGH,GAAO,cAAYD,GAAO,WAAW,CAACK,EAAO,UAAUR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC/F,UAAAE,EAAM,IAAI,CAACI,GAAMG,MAAU;AAC1B,UAAMC,IAAQD,IAAQJ,IAAe,aAAaI,MAAUJ,IAAe,YAAY;AAEvF,WACE,gBAAAM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,gBAAcD,MAAU,YAAY,SAAS;AAAA,QAC7C,WAAW,CAACF,EAAO,MAAMA,EAAOE,CAAK,CAAC,EAAE,KAAK,GAAG;AAAA,QAGhD,UAAA;AAAA,UAAA,gBAAAH,EAAC,UAAK,eAAY,QAAO,WAAWC,EAAO,QACxC,UAAAE,MAAU,aAAa,gBAAAH,EAACK,GAAA,EAAU,IAAK,gBAAAL,EAAC,QAAA,EAAK,WAAWC,EAAO,KAAK,GACvE;AAAA,UACA,gBAAAG,EAAC,QAAA,EAAK,WAAWH,EAAO,MACtB,UAAA;AAAA,YAAA,gBAAAD,EAAC,QAAA,EAAK,WAAWC,EAAO,OAAQ,YAAK,OAAM;AAAA,YAC1CE,MAAU,cAAc,gBAAAH,EAAC,UAAK,WAAWC,EAAO,YAAY,UAAA,eAAW;AAAA,YACvEE,MAAU,aAAa,gBAAAH,EAAC,UAAK,WAAWC,EAAO,YAAY,UAAA,WAAO;AAAA,YAClEF,EAAK,eAAe,gBAAAC,EAAC,QAAA,EAAK,WAAWC,EAAO,aAAc,YAAK,YAAA,CAAY;AAAA,YAC3EF,EAAK,QAAQ,gBAAAC,EAAC,QAAA,EAAK,WAAWC,EAAO,MAAO,YAAK,KAAA,CAAK;AAAA,UAAA,EAAA,CACzD;AAAA,QAAA;AAAA,MAAA;AAAA,MAXKF,EAAK;AAAA,IAAA;AAAA,EAchB,CAAC,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"Timeline.js","sources":["../../../../src/components/data-display/Timeline/Timeline.tsx"],"sourcesContent":["import type { ComponentPropsWithRef } from 'react';\nimport { IconCheck } from '../../icons';\nimport styles from './Timeline.module.css';\n\nexport type TimelineSize = 'sm' | 'md';\n\nexport interface TimelineItem {\n date?: string;\n description?: string;\n key: string;\n label: string;\n}\n\nexport interface TimelineProps extends Omit<ComponentPropsWithRef<'ol'>, 'children'> {\n /** Chave do estado atual. Os anteriores contam como concluídos, os seguintes como por vir. */\n current: string;\n items: readonly TimelineItem[];\n /** Nome da lista, para o leitor de tela. */\n label: string;\n /** `sm` para painéis estreitos: marcador de 16px e rótulo em caption. */\n size?: TimelineSize;\n}\n\nexport function Timeline({ className, current, items, label, size = 'md', ...props }: TimelineProps) {\n const currentIndex = items.findIndex((item) => item.key === current);\n\n return (\n <ol {...props} aria-label={label} className={[styles.timeline, styles[size], className].filter(Boolean).join(' ')}>\n {items.map((item, index) => {\n const state = index < currentIndex ? 'complete' : index === currentIndex ? 'current' : 'upcoming';\n\n return (\n <li\n aria-current={state === 'current' ? 'step' : undefined}\n className={[styles.item, styles[state]].join(' ')}\n key={item.key}\n >\n <span aria-hidden=\"true\" className={styles.marker}>\n {state === 'complete' ? <IconCheck /> : <span className={styles.dot} />}\n </span>\n <span className={styles.text}>\n <span className={styles.label}>{item.label}</span>\n {state === 'complete' && <span className={styles.hiddenText}>, concluído</span>}\n {state === 'current' && <span className={styles.hiddenText}>, atual</span>}\n {item.description && <span className={styles.description}>{item.description}</span>}\n {item.date && <span className={styles.date}>{item.date}</span>}\n </span>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"names":["Timeline","className","current","items","label","size","props","currentIndex","item","jsx","styles","index","state","jsxs","IconCheck"],"mappings":";;;AAuBO,SAASA,EAAS,EAAE,WAAAC,GAAW,SAAAC,GAAS,OAAAC,GAAO,OAAAC,GAAO,MAAAC,IAAO,MAAM,GAAGC,KAAwB;AACnG,QAAMC,IAAeJ,EAAM,UAAU,CAACK,MAASA,EAAK,QAAQN,CAAO;AAEnE,SACE,gBAAAO,EAAC,MAAA,EAAI,GAAGH,GAAO,cAAYF,GAAO,WAAW,CAACM,EAAO,UAAUA,EAAOL,CAAI,GAAGJ,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC7G,UAAAE,EAAM,IAAI,CAACK,GAAMG,MAAU;AAC1B,UAAMC,IAAQD,IAAQJ,IAAe,aAAaI,MAAUJ,IAAe,YAAY;AAEvF,WACE,gBAAAM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,gBAAcD,MAAU,YAAY,SAAS;AAAA,QAC7C,WAAW,CAACF,EAAO,MAAMA,EAAOE,CAAK,CAAC,EAAE,KAAK,GAAG;AAAA,QAGhD,UAAA;AAAA,UAAA,gBAAAH,EAAC,UAAK,eAAY,QAAO,WAAWC,EAAO,QACxC,UAAAE,MAAU,aAAa,gBAAAH,EAACK,GAAA,EAAU,IAAK,gBAAAL,EAAC,QAAA,EAAK,WAAWC,EAAO,KAAK,GACvE;AAAA,UACA,gBAAAG,EAAC,QAAA,EAAK,WAAWH,EAAO,MACtB,UAAA;AAAA,YAAA,gBAAAD,EAAC,QAAA,EAAK,WAAWC,EAAO,OAAQ,YAAK,OAAM;AAAA,YAC1CE,MAAU,cAAc,gBAAAH,EAAC,UAAK,WAAWC,EAAO,YAAY,UAAA,eAAW;AAAA,YACvEE,MAAU,aAAa,gBAAAH,EAAC,UAAK,WAAWC,EAAO,YAAY,UAAA,WAAO;AAAA,YAClEF,EAAK,eAAe,gBAAAC,EAAC,QAAA,EAAK,WAAWC,EAAO,aAAc,YAAK,YAAA,CAAY;AAAA,YAC3EF,EAAK,QAAQ,gBAAAC,EAAC,QAAA,EAAK,WAAWC,EAAO,MAAO,YAAK,KAAA,CAAK;AAAA,UAAA,EAAA,CACzD;AAAA,QAAA;AAAA,MAAA;AAAA,MAXKF,EAAK;AAAA,IAAA;AAAA,EAchB,CAAC,EAAA,CACH;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_timeline_o3v8q_2",t="_item_o3v8q_12",_="_complete_o3v8q_35 _complete_7tv83_37",o="_current_o3v8q_43 _current_7tv83_63",n="_marker_o3v8q_47 _marker_7tv83_41",i="_dot_o3v8q_51",c="_text_o3v8q_62",r="_label_o3v8q_70 _label_7tv83_92",d="_upcoming_o3v8q_74",l="_description_o3v8q_78 _description_7tv83_107",s="_date_o3v8q_82",m="_hiddenText_o3v8q_89 _hiddenText_7tv83_113",v={timeline:e,item:t,complete:_,current:o,marker:n,dot:i,text:c,label:r,upcoming:d,description:l,date:s,hiddenText:m};exports.complete=_;exports.current=o;exports.date=s;exports.default=v;exports.description=l;exports.dot=i;exports.hiddenText=m;exports.item=t;exports.label=r;exports.marker=n;exports.text=c;exports.timeline=e;exports.upcoming=d;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_timeline_1xvma_2",t="_item_1xvma_12",_="_complete_1xvma_35 _complete_7tv83_37",m="_current_1xvma_43 _current_7tv83_63",n="_marker_1xvma_47 _marker_7tv83_41",o="_dot_1xvma_51",c="_text_1xvma_62",i="_label_1xvma_70 _label_7tv83_92",a="_upcoming_1xvma_74",r="_description_1xvma_78 _description_7tv83_107",s="_date_1xvma_82",d="_hiddenText_1xvma_89 _hiddenText_7tv83_113",l="_sm_1xvma_94",x={timeline:e,item:t,complete:_,current:m,marker:n,dot:o,text:c,label:i,upcoming:a,description:r,date:s,hiddenText:d,sm:l};exports.complete=_;exports.current=m;exports.date=s;exports.default=x;exports.description=r;exports.dot=o;exports.hiddenText=d;exports.item=t;exports.label=i;exports.marker=n;exports.sm=l;exports.text=c;exports.timeline=e;exports.upcoming=a;
2
2
  //# sourceMappingURL=Timeline.module.css.cjs.map
@@ -1,30 +1,32 @@
1
- const t = "_timeline_o3v8q_2", _ = "_item_o3v8q_12", e = "_complete_o3v8q_35 _complete_7tv83_37", o = "_current_o3v8q_43 _current_7tv83_63", n = "_marker_o3v8q_47 _marker_7tv83_41", c = "_dot_o3v8q_51", i = "_text_o3v8q_62", r = "_label_o3v8q_70 _label_7tv83_92", s = "_upcoming_o3v8q_74", d = "_description_o3v8q_78 _description_7tv83_107", v = "_date_o3v8q_82", l = "_hiddenText_o3v8q_89 _hiddenText_7tv83_113", m = {
1
+ const t = "_timeline_1xvma_2", _ = "_item_1xvma_12", e = "_complete_1xvma_35 _complete_7tv83_37", m = "_current_1xvma_43 _current_7tv83_63", n = "_marker_1xvma_47 _marker_7tv83_41", c = "_dot_1xvma_51", o = "_text_1xvma_62", a = "_label_1xvma_70 _label_7tv83_92", i = "_upcoming_1xvma_74", s = "_description_1xvma_78 _description_7tv83_107", r = "_date_1xvma_82", x = "_hiddenText_1xvma_89 _hiddenText_7tv83_113", d = "_sm_1xvma_94", v = {
2
2
  timeline: t,
3
3
  item: _,
4
4
  complete: e,
5
- current: o,
5
+ current: m,
6
6
  marker: n,
7
7
  dot: c,
8
- text: i,
9
- label: r,
10
- upcoming: s,
11
- description: d,
12
- date: v,
13
- hiddenText: l
8
+ text: o,
9
+ label: a,
10
+ upcoming: i,
11
+ description: s,
12
+ date: r,
13
+ hiddenText: x,
14
+ sm: d
14
15
  };
15
16
  export {
16
17
  e as complete,
17
- o as current,
18
- v as date,
19
- m as default,
20
- d as description,
18
+ m as current,
19
+ r as date,
20
+ v as default,
21
+ s as description,
21
22
  c as dot,
22
- l as hiddenText,
23
+ x as hiddenText,
23
24
  _ as item,
24
- r as label,
25
+ a as label,
25
26
  n as marker,
26
- i as text,
27
+ d as sm,
28
+ o as text,
27
29
  t as timeline,
28
- s as upcoming
30
+ i as upcoming
29
31
  };
30
32
  //# sourceMappingURL=Timeline.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Timeline.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t="_field_thq98_1",e="_control_thq98_8",r="_input_thq98_15",o="_error_thq98_36",_="_text_thq98_76",s="_hint_thq98_84 _hint_1qg91_8",n="_errorMessage_thq98_88 _errorMessage_1qg91_9",i={field:t,control:e,input:r,error:o,text:_,hint:s,errorMessage:n};exports.control=e;exports.default=i;exports.error=o;exports.errorMessage=n;exports.field=t;exports.hint=s;exports.input=r;exports.text=_;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t="_field_thq98_1",e="_control_thq98_8",r="_input_thq98_15",o="_error_thq98_36",_="_text_thq98_76",n="_hint_thq98_84 _hint_1ndjk_8",s="_errorMessage_thq98_88 _errorMessage_1ndjk_9",i={field:t,control:e,input:r,error:o,text:_,hint:n,errorMessage:s};exports.control=e;exports.default=i;exports.error=o;exports.errorMessage=s;exports.field=t;exports.hint=n;exports.input=r;exports.text=_;
2
2
  //# sourceMappingURL=Checkbox.module.css.cjs.map
@@ -1,19 +1,19 @@
1
- const t = "_field_thq98_1", _ = "_control_thq98_8", r = "_input_thq98_15", e = "_error_thq98_36", o = "_text_thq98_76", s = "_hint_thq98_84 _hint_1qg91_8", n = "_errorMessage_thq98_88 _errorMessage_1qg91_9", c = {
1
+ const t = "_field_thq98_1", _ = "_control_thq98_8", r = "_input_thq98_15", e = "_error_thq98_36", o = "_text_thq98_76", n = "_hint_thq98_84 _hint_1ndjk_8", s = "_errorMessage_thq98_88 _errorMessage_1ndjk_9", c = {
2
2
  field: t,
3
3
  control: _,
4
4
  input: r,
5
5
  error: e,
6
6
  text: o,
7
- hint: s,
8
- errorMessage: n
7
+ hint: n,
8
+ errorMessage: s
9
9
  };
10
10
  export {
11
11
  _ as control,
12
12
  c as default,
13
13
  e as error,
14
- n as errorMessage,
14
+ s as errorMessage,
15
15
  t as field,
16
- s as hint,
16
+ n as hint,
17
17
  r as input,
18
18
  o as text
19
19
  };
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_group_poytt_2 _group_1nbsm_1",t="_legend_poytt_6 _legend_1nbsm_11",o="_required_poytt_10 _required_1nbsm_20",r="_options_poytt_14",_="_vertical_poytt_19",n="_horizontal_poytt_23",s="_hint_poytt_28 _hint_1qg91_8",i="_errorMessage_poytt_32 _errorMessage_1qg91_9",l={group:e,legend:t,required:o,options:r,vertical:_,horizontal:n,hint:s,errorMessage:i};exports.default=l;exports.errorMessage=i;exports.group=e;exports.hint=s;exports.horizontal=n;exports.legend=t;exports.options=r;exports.required=o;exports.vertical=_;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_group_poytt_2 _group_1nbsm_1",t="_legend_poytt_6 _legend_1nbsm_11",o="_required_poytt_10 _required_1nbsm_20",r="_options_poytt_14",_="_vertical_poytt_19",n="_horizontal_poytt_23",s="_hint_poytt_28 _hint_1ndjk_8",i="_errorMessage_poytt_32 _errorMessage_1ndjk_9",l={group:e,legend:t,required:o,options:r,vertical:_,horizontal:n,hint:s,errorMessage:i};exports.default=l;exports.errorMessage=i;exports.group=e;exports.hint=s;exports.horizontal=n;exports.legend=t;exports.options=r;exports.required=o;exports.vertical=_;
2
2
  //# sourceMappingURL=CheckboxGroup.module.css.cjs.map
@@ -1,4 +1,4 @@
1
- const t = "_group_poytt_2 _group_1nbsm_1", _ = "_legend_poytt_6 _legend_1nbsm_11", o = "_required_poytt_10 _required_1nbsm_20", e = "_options_poytt_14", r = "_vertical_poytt_19", n = "_horizontal_poytt_23", s = "_hint_poytt_28 _hint_1qg91_8", i = "_errorMessage_poytt_32 _errorMessage_1qg91_9", p = {
1
+ const t = "_group_poytt_2 _group_1nbsm_1", _ = "_legend_poytt_6 _legend_1nbsm_11", o = "_required_poytt_10 _required_1nbsm_20", e = "_options_poytt_14", r = "_vertical_poytt_19", n = "_horizontal_poytt_23", s = "_hint_poytt_28 _hint_1ndjk_8", i = "_errorMessage_poytt_32 _errorMessage_1ndjk_9", p = {
2
2
  group: t,
3
3
  legend: _,
4
4
  required: o,