@plenustech/design-system 0.2.2 → 0.2.4

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 (508) hide show
  1. package/dist/components/actions/ButtonTile/ButtonTile.cjs +2 -0
  2. package/dist/components/actions/ButtonTile/ButtonTile.cjs.map +1 -0
  3. package/dist/components/actions/ButtonTile/ButtonTile.js +23 -0
  4. package/dist/components/actions/ButtonTile/ButtonTile.js.map +1 -0
  5. package/dist/components/actions/ButtonTile/ButtonTile.module.css.cjs +2 -0
  6. package/dist/components/actions/ButtonTile/ButtonTile.module.css.cjs.map +1 -0
  7. package/dist/components/actions/ButtonTile/ButtonTile.module.css.js +16 -0
  8. package/dist/components/actions/ButtonTile/ButtonTile.module.css.js.map +1 -0
  9. package/dist/components/actions/Toolbar/Toolbar.cjs +2 -0
  10. package/dist/components/actions/Toolbar/Toolbar.cjs.map +1 -0
  11. package/dist/components/actions/Toolbar/Toolbar.js +118 -0
  12. package/dist/components/actions/Toolbar/Toolbar.js.map +1 -0
  13. package/dist/components/actions/Toolbar/Toolbar.module.css.cjs +2 -0
  14. package/dist/components/actions/Toolbar/Toolbar.module.css.cjs.map +1 -0
  15. package/dist/components/actions/Toolbar/Toolbar.module.css.js +20 -0
  16. package/dist/components/actions/Toolbar/Toolbar.module.css.js.map +1 -0
  17. package/dist/components/charts/ChartArea/ChartArea.cjs +1 -1
  18. package/dist/components/charts/ChartArea/ChartArea.cjs.map +1 -1
  19. package/dist/components/charts/ChartArea/ChartArea.js +196 -148
  20. package/dist/components/charts/ChartArea/ChartArea.js.map +1 -1
  21. package/dist/components/charts/ChartArea/ChartArea.module.css.cjs +1 -1
  22. package/dist/components/charts/ChartArea/ChartArea.module.css.js +12 -10
  23. package/dist/components/charts/ChartArea/ChartArea.module.css.js.map +1 -1
  24. package/dist/components/charts/ChartBar/ChartBar.cjs +1 -1
  25. package/dist/components/charts/ChartBar/ChartBar.cjs.map +1 -1
  26. package/dist/components/charts/ChartBar/ChartBar.js +168 -145
  27. package/dist/components/charts/ChartBar/ChartBar.js.map +1 -1
  28. package/dist/components/charts/ChartBar/ChartBar.module.css.cjs +1 -1
  29. package/dist/components/charts/ChartBar/ChartBar.module.css.js +12 -10
  30. package/dist/components/charts/ChartBar/ChartBar.module.css.js.map +1 -1
  31. package/dist/components/charts/ChartCombo/ChartCombo.cjs +1 -1
  32. package/dist/components/charts/ChartCombo/ChartCombo.cjs.map +1 -1
  33. package/dist/components/charts/ChartCombo/ChartCombo.js +179 -154
  34. package/dist/components/charts/ChartCombo/ChartCombo.js.map +1 -1
  35. package/dist/components/charts/ChartCombo/ChartCombo.module.css.cjs +1 -1
  36. package/dist/components/charts/ChartCombo/ChartCombo.module.css.js +16 -14
  37. package/dist/components/charts/ChartCombo/ChartCombo.module.css.js.map +1 -1
  38. package/dist/components/charts/ChartDonut/ChartDonut.cjs +1 -1
  39. package/dist/components/charts/ChartDonut/ChartDonut.cjs.map +1 -1
  40. package/dist/components/charts/ChartDonut/ChartDonut.js +72 -61
  41. package/dist/components/charts/ChartDonut/ChartDonut.js.map +1 -1
  42. package/dist/components/charts/ChartGauge/ChartGauge.cjs +2 -0
  43. package/dist/components/charts/ChartGauge/ChartGauge.cjs.map +1 -0
  44. package/dist/components/charts/ChartGauge/ChartGauge.js +307 -0
  45. package/dist/components/charts/ChartGauge/ChartGauge.js.map +1 -0
  46. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs +2 -0
  47. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs.map +1 -0
  48. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js +76 -0
  49. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js.map +1 -0
  50. package/dist/components/charts/ChartGauge/gaugeLayout.cjs +2 -0
  51. package/dist/components/charts/ChartGauge/gaugeLayout.cjs.map +1 -0
  52. package/dist/components/charts/ChartGauge/gaugeLayout.js +107 -0
  53. package/dist/components/charts/ChartGauge/gaugeLayout.js.map +1 -0
  54. package/dist/components/charts/ChartGauge/gaugeReading.cjs +2 -0
  55. package/dist/components/charts/ChartGauge/gaugeReading.cjs.map +1 -0
  56. package/dist/components/charts/ChartGauge/gaugeReading.js +112 -0
  57. package/dist/components/charts/ChartGauge/gaugeReading.js.map +1 -0
  58. package/dist/components/charts/ChartGauge/gaugeScale.cjs +2 -0
  59. package/dist/components/charts/ChartGauge/gaugeScale.cjs.map +1 -0
  60. package/dist/components/charts/ChartGauge/gaugeScale.js +57 -0
  61. package/dist/components/charts/ChartGauge/gaugeScale.js.map +1 -0
  62. package/dist/components/charts/ChartLine/ChartLine.cjs +1 -1
  63. package/dist/components/charts/ChartLine/ChartLine.cjs.map +1 -1
  64. package/dist/components/charts/ChartLine/ChartLine.js +196 -143
  65. package/dist/components/charts/ChartLine/ChartLine.js.map +1 -1
  66. package/dist/components/charts/ChartLine/ChartLine.module.css.cjs +1 -1
  67. package/dist/components/charts/ChartLine/ChartLine.module.css.js +16 -14
  68. package/dist/components/charts/ChartLine/ChartLine.module.css.js.map +1 -1
  69. package/dist/components/charts/ChartMap/ChartMap.cjs +2 -0
  70. package/dist/components/charts/ChartMap/ChartMap.cjs.map +1 -0
  71. package/dist/components/charts/ChartMap/ChartMap.js +523 -0
  72. package/dist/components/charts/ChartMap/ChartMap.js.map +1 -0
  73. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs +2 -0
  74. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs.map +1 -0
  75. package/dist/components/charts/ChartMap/ChartMap.module.css.js +124 -0
  76. package/dist/components/charts/ChartMap/ChartMap.module.css.js.map +1 -0
  77. package/dist/components/charts/ChartMap/ChartMapLegend.cjs +2 -0
  78. package/dist/components/charts/ChartMap/ChartMapLegend.cjs.map +1 -0
  79. package/dist/components/charts/ChartMap/ChartMapLegend.js +102 -0
  80. package/dist/components/charts/ChartMap/ChartMapLegend.js.map +1 -0
  81. package/dist/components/charts/ChartMap/ChartMapTable.cjs +2 -0
  82. package/dist/components/charts/ChartMap/ChartMapTable.cjs.map +1 -0
  83. package/dist/components/charts/ChartMap/ChartMapTable.js +118 -0
  84. package/dist/components/charts/ChartMap/ChartMapTable.js.map +1 -0
  85. package/dist/components/charts/ChartMap/mapGeometry.cjs +2 -0
  86. package/dist/components/charts/ChartMap/mapGeometry.cjs.map +1 -0
  87. package/dist/components/charts/ChartMap/mapGeometry.js +113 -0
  88. package/dist/components/charts/ChartMap/mapGeometry.js.map +1 -0
  89. package/dist/components/charts/ChartMap/mapLabels.cjs +2 -0
  90. package/dist/components/charts/ChartMap/mapLabels.cjs.map +1 -0
  91. package/dist/components/charts/ChartMap/mapLabels.js +80 -0
  92. package/dist/components/charts/ChartMap/mapLabels.js.map +1 -0
  93. package/dist/components/charts/ChartMap/mapScales.cjs +2 -0
  94. package/dist/components/charts/ChartMap/mapScales.cjs.map +1 -0
  95. package/dist/components/charts/ChartMap/mapScales.js +131 -0
  96. package/dist/components/charts/ChartMap/mapScales.js.map +1 -0
  97. package/dist/components/charts/ChartMap/polylabel.cjs +2 -0
  98. package/dist/components/charts/ChartMap/polylabel.cjs.map +1 -0
  99. package/dist/components/charts/ChartMap/polylabel.js +50 -0
  100. package/dist/components/charts/ChartMap/polylabel.js.map +1 -0
  101. package/dist/components/charts/ChartPie/ChartPie.cjs +1 -1
  102. package/dist/components/charts/ChartPie/ChartPie.cjs.map +1 -1
  103. package/dist/components/charts/ChartPie/ChartPie.js +71 -60
  104. package/dist/components/charts/ChartPie/ChartPie.js.map +1 -1
  105. package/dist/components/charts/ChartRadial/ChartRadial.cjs +1 -1
  106. package/dist/components/charts/ChartRadial/ChartRadial.cjs.map +1 -1
  107. package/dist/components/charts/ChartRadial/ChartRadial.js +101 -84
  108. package/dist/components/charts/ChartRadial/ChartRadial.js.map +1 -1
  109. package/dist/components/charts/ChartSankey/ChartSankey.cjs +1 -1
  110. package/dist/components/charts/ChartSankey/ChartSankey.cjs.map +1 -1
  111. package/dist/components/charts/ChartSankey/ChartSankey.js +148 -125
  112. package/dist/components/charts/ChartSankey/ChartSankey.js.map +1 -1
  113. package/dist/components/charts/ChartScatter/ChartScatter.cjs +1 -1
  114. package/dist/components/charts/ChartScatter/ChartScatter.cjs.map +1 -1
  115. package/dist/components/charts/ChartScatter/ChartScatter.js +138 -106
  116. package/dist/components/charts/ChartScatter/ChartScatter.js.map +1 -1
  117. package/dist/components/charts/ChartScatter/ChartScatter.module.css.cjs +1 -1
  118. package/dist/components/charts/ChartScatter/ChartScatter.module.css.js +3 -3
  119. package/dist/components/charts/ChartSunburst/ChartSunburst.cjs +1 -1
  120. package/dist/components/charts/ChartSunburst/ChartSunburst.cjs.map +1 -1
  121. package/dist/components/charts/ChartSunburst/ChartSunburst.js +115 -100
  122. package/dist/components/charts/ChartSunburst/ChartSunburst.js.map +1 -1
  123. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs +2 -0
  124. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs.map +1 -0
  125. package/dist/components/charts/ChartTimeline/ChartTimeline.js +703 -0
  126. package/dist/components/charts/ChartTimeline/ChartTimeline.js.map +1 -0
  127. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs +2 -0
  128. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs.map +1 -0
  129. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js +124 -0
  130. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js.map +1 -0
  131. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs +2 -0
  132. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs.map +1 -0
  133. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js +42 -0
  134. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js.map +1 -0
  135. package/dist/components/charts/ChartTimeline/timelineLayout.cjs +2 -0
  136. package/dist/components/charts/ChartTimeline/timelineLayout.cjs.map +1 -0
  137. package/dist/components/charts/ChartTimeline/timelineLayout.js +109 -0
  138. package/dist/components/charts/ChartTimeline/timelineLayout.js.map +1 -0
  139. package/dist/components/charts/ChartTimeline/timelineTime.cjs +2 -0
  140. package/dist/components/charts/ChartTimeline/timelineTime.cjs.map +1 -0
  141. package/dist/components/charts/ChartTimeline/timelineTime.js +91 -0
  142. package/dist/components/charts/ChartTimeline/timelineTime.js.map +1 -0
  143. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs +2 -0
  144. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs.map +1 -0
  145. package/dist/components/charts/ChartTimeline/timelineTooltip.js +77 -0
  146. package/dist/components/charts/ChartTimeline/timelineTooltip.js.map +1 -0
  147. package/dist/components/charts/ChartTooltip/ChartTooltip.cjs +1 -1
  148. package/dist/components/charts/ChartTooltip/ChartTooltip.cjs.map +1 -1
  149. package/dist/components/charts/ChartTooltip/ChartTooltip.js +1 -1
  150. package/dist/components/charts/ChartTooltip/ChartTooltip.js.map +1 -1
  151. package/dist/components/charts/ChartTreemap/ChartTreemap.cjs +1 -1
  152. package/dist/components/charts/ChartTreemap/ChartTreemap.cjs.map +1 -1
  153. package/dist/components/charts/ChartTreemap/ChartTreemap.js +100 -89
  154. package/dist/components/charts/ChartTreemap/ChartTreemap.js.map +1 -1
  155. package/dist/components/charts/ChartWaterfall/ChartWaterfall.cjs +1 -1
  156. package/dist/components/charts/ChartWaterfall/ChartWaterfall.cjs.map +1 -1
  157. package/dist/components/charts/ChartWaterfall/ChartWaterfall.js +125 -105
  158. package/dist/components/charts/ChartWaterfall/ChartWaterfall.js.map +1 -1
  159. package/dist/components/charts/ChartWaterfall/ChartWaterfall.module.css.cjs +1 -1
  160. package/dist/components/charts/ChartWaterfall/ChartWaterfall.module.css.js +8 -6
  161. package/dist/components/charts/ChartWaterfall/ChartWaterfall.module.css.js.map +1 -1
  162. package/dist/components/charts/core/CartesianFrame.cjs +1 -1
  163. package/dist/components/charts/core/CartesianFrame.cjs.map +1 -1
  164. package/dist/components/charts/core/CartesianFrame.js +61 -96
  165. package/dist/components/charts/core/CartesianFrame.js.map +1 -1
  166. package/dist/components/charts/core/Chart.module.css.cjs +1 -1
  167. package/dist/components/charts/core/Chart.module.css.js +52 -54
  168. package/dist/components/charts/core/Chart.module.css.js.map +1 -1
  169. package/dist/components/charts/core/ChartFrame.cjs +1 -1
  170. package/dist/components/charts/core/ChartFrame.cjs.map +1 -1
  171. package/dist/components/charts/core/ChartFrame.js +53 -47
  172. package/dist/components/charts/core/ChartFrame.js.map +1 -1
  173. package/dist/components/charts/core/ChartLegend.cjs +1 -1
  174. package/dist/components/charts/core/ChartLegend.cjs.map +1 -1
  175. package/dist/components/charts/core/ChartLegend.js +37 -25
  176. package/dist/components/charts/core/ChartLegend.js.map +1 -1
  177. package/dist/components/charts/core/PointBands.cjs +2 -0
  178. package/dist/components/charts/core/PointBands.cjs.map +1 -0
  179. package/dist/components/charts/core/PointBands.js +41 -0
  180. package/dist/components/charts/core/PointBands.js.map +1 -0
  181. package/dist/components/charts/core/cartesianLayout.cjs +1 -1
  182. package/dist/components/charts/core/cartesianLayout.cjs.map +1 -1
  183. package/dist/components/charts/core/cartesianLayout.js +49 -41
  184. package/dist/components/charts/core/cartesianLayout.js.map +1 -1
  185. package/dist/components/charts/core/hoverPath.cjs +2 -0
  186. package/dist/components/charts/core/hoverPath.cjs.map +1 -0
  187. package/dist/components/charts/core/hoverPath.js +7 -0
  188. package/dist/components/charts/core/hoverPath.js.map +1 -0
  189. package/dist/components/charts/core/pointLabels.cjs +2 -0
  190. package/dist/components/charts/core/pointLabels.cjs.map +1 -0
  191. package/dist/components/charts/core/pointLabels.js +12 -0
  192. package/dist/components/charts/core/pointLabels.js.map +1 -0
  193. package/dist/components/charts/core/tooltips.cjs +2 -0
  194. package/dist/components/charts/core/tooltips.cjs.map +1 -0
  195. package/dist/components/charts/core/tooltips.js +48 -0
  196. package/dist/components/charts/core/tooltips.js.map +1 -0
  197. package/dist/components/charts/core/useCartesianLayout.cjs +2 -0
  198. package/dist/components/charts/core/useCartesianLayout.cjs.map +1 -0
  199. package/dist/components/charts/core/useCartesianLayout.js +38 -0
  200. package/dist/components/charts/core/useCartesianLayout.js.map +1 -0
  201. package/dist/components/charts/core/useChartMetrics.cjs +1 -1
  202. package/dist/components/charts/core/useChartMetrics.cjs.map +1 -1
  203. package/dist/components/charts/core/useChartMetrics.js +20 -25
  204. package/dist/components/charts/core/useChartMetrics.js.map +1 -1
  205. package/dist/components/charts/core/useSeriesToggle.cjs +1 -1
  206. package/dist/components/charts/core/useSeriesToggle.cjs.map +1 -1
  207. package/dist/components/charts/core/useSeriesToggle.js +19 -12
  208. package/dist/components/charts/core/useSeriesToggle.js.map +1 -1
  209. package/dist/components/data-display/Accordion/Accordion.cjs +1 -1
  210. package/dist/components/data-display/Accordion/Accordion.cjs.map +1 -1
  211. package/dist/components/data-display/Accordion/Accordion.js +56 -46
  212. package/dist/components/data-display/Accordion/Accordion.js.map +1 -1
  213. package/dist/components/data-display/Accordion/Accordion.module.css.cjs +1 -1
  214. package/dist/components/data-display/Accordion/Accordion.module.css.js +16 -16
  215. package/dist/components/data-display/List/List.cjs.map +1 -1
  216. package/dist/components/data-display/List/List.js.map +1 -1
  217. package/dist/components/data-display/List/List.module.css.cjs +1 -1
  218. package/dist/components/data-display/List/List.module.css.js +34 -24
  219. package/dist/components/data-display/List/List.module.css.js.map +1 -1
  220. package/dist/components/data-display/List/ListingOptions.cjs +1 -1
  221. package/dist/components/data-display/List/ListingOptions.cjs.map +1 -1
  222. package/dist/components/data-display/List/ListingOptions.js +98 -74
  223. package/dist/components/data-display/List/ListingOptions.js.map +1 -1
  224. package/dist/components/data-display/List/useListing.cjs.map +1 -1
  225. package/dist/components/data-display/List/useListing.js.map +1 -1
  226. package/dist/components/data-display/SortableList/SortableList.cjs +2 -0
  227. package/dist/components/data-display/SortableList/SortableList.cjs.map +1 -0
  228. package/dist/components/data-display/SortableList/SortableList.js +168 -0
  229. package/dist/components/data-display/SortableList/SortableList.js.map +1 -0
  230. package/dist/components/data-display/SortableList/SortableList.module.css.cjs +2 -0
  231. package/dist/components/data-display/SortableList/SortableList.module.css.cjs.map +1 -0
  232. package/dist/components/data-display/SortableList/SortableList.module.css.js +34 -0
  233. package/dist/components/data-display/SortableList/SortableList.module.css.js.map +1 -0
  234. package/dist/components/data-display/Table/Table.cjs +1 -1
  235. package/dist/components/data-display/Table/Table.cjs.map +1 -1
  236. package/dist/components/data-display/Table/Table.js +86 -85
  237. package/dist/components/data-display/Table/Table.js.map +1 -1
  238. package/dist/components/data-display/Table/Table.module.css.cjs +1 -1
  239. package/dist/components/data-display/Table/Table.module.css.js +50 -51
  240. package/dist/components/data-display/Table/Table.module.css.js.map +1 -1
  241. package/dist/components/data-display/Tag/Tag.cjs +2 -0
  242. package/dist/components/data-display/Tag/Tag.cjs.map +1 -0
  243. package/dist/components/data-display/Tag/Tag.js +50 -0
  244. package/dist/components/data-display/Tag/Tag.js.map +1 -0
  245. package/dist/components/data-display/Tag/Tag.module.css.cjs +2 -0
  246. package/dist/components/data-display/Tag/Tag.module.css.cjs.map +1 -0
  247. package/dist/components/data-display/Tag/Tag.module.css.js +22 -0
  248. package/dist/components/data-display/Tag/Tag.module.css.js.map +1 -0
  249. package/dist/components/data-display/Timeline/Timeline.cjs +2 -0
  250. package/dist/components/data-display/Timeline/Timeline.cjs.map +1 -0
  251. package/dist/components/data-display/Timeline/Timeline.js +31 -0
  252. package/dist/components/data-display/Timeline/Timeline.js.map +1 -0
  253. package/dist/components/data-display/Timeline/Timeline.module.css.cjs +2 -0
  254. package/dist/components/data-display/Timeline/Timeline.module.css.cjs.map +1 -0
  255. package/dist/components/data-display/Timeline/Timeline.module.css.js +30 -0
  256. package/dist/components/data-display/Timeline/Timeline.module.css.js.map +1 -0
  257. package/dist/components/feedback/Skeleton/Skeleton.cjs +2 -0
  258. package/dist/components/feedback/Skeleton/Skeleton.cjs.map +1 -0
  259. package/dist/components/feedback/Skeleton/Skeleton.js +17 -0
  260. package/dist/components/feedback/Skeleton/Skeleton.js.map +1 -0
  261. package/dist/components/feedback/Skeleton/Skeleton.module.css.cjs +2 -0
  262. package/dist/components/feedback/Skeleton/Skeleton.module.css.cjs.map +1 -0
  263. package/dist/components/feedback/Skeleton/Skeleton.module.css.js +15 -0
  264. package/dist/components/feedback/Skeleton/Skeleton.module.css.js.map +1 -0
  265. package/dist/components/feedback/Toast/Toast.module.css.cjs +2 -0
  266. package/dist/components/feedback/Toast/Toast.module.css.cjs.map +1 -0
  267. package/dist/components/feedback/Toast/Toast.module.css.js +31 -0
  268. package/dist/components/feedback/Toast/Toast.module.css.js.map +1 -0
  269. package/dist/components/feedback/Toast/ToastRegion.cjs +2 -0
  270. package/dist/components/feedback/Toast/ToastRegion.cjs.map +1 -0
  271. package/dist/components/feedback/Toast/ToastRegion.js +62 -0
  272. package/dist/components/feedback/Toast/ToastRegion.js.map +1 -0
  273. package/dist/components/feedback/Toast/toastStore.cjs +2 -0
  274. package/dist/components/feedback/Toast/toastStore.cjs.map +1 -0
  275. package/dist/components/feedback/Toast/toastStore.js +33 -0
  276. package/dist/components/feedback/Toast/toastStore.js.map +1 -0
  277. package/dist/components/forms/Checkbox/Checkbox.cjs +1 -1
  278. package/dist/components/forms/Checkbox/Checkbox.cjs.map +1 -1
  279. package/dist/components/forms/Checkbox/Checkbox.js +43 -31
  280. package/dist/components/forms/Checkbox/Checkbox.js.map +1 -1
  281. package/dist/components/forms/Checkbox/Checkbox.module.css.cjs +1 -1
  282. package/dist/components/forms/Checkbox/Checkbox.module.css.js +1 -1
  283. package/dist/components/forms/CheckboxGroup/CheckboxGroup.cjs +2 -0
  284. package/dist/components/forms/CheckboxGroup/CheckboxGroup.cjs.map +1 -0
  285. package/dist/components/forms/CheckboxGroup/CheckboxGroup.js +54 -0
  286. package/dist/components/forms/CheckboxGroup/CheckboxGroup.js.map +1 -0
  287. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.cjs +2 -0
  288. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.cjs.map +1 -0
  289. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.js +22 -0
  290. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.js.map +1 -0
  291. package/dist/components/forms/ColorPicker/ColorPicker.cjs +2 -0
  292. package/dist/components/forms/ColorPicker/ColorPicker.cjs.map +1 -0
  293. package/dist/components/forms/ColorPicker/ColorPicker.js +57 -0
  294. package/dist/components/forms/ColorPicker/ColorPicker.js.map +1 -0
  295. package/dist/components/forms/ColorPicker/ColorPicker.module.css.cjs +2 -0
  296. package/dist/components/forms/ColorPicker/ColorPicker.module.css.cjs.map +1 -0
  297. package/dist/components/forms/ColorPicker/ColorPicker.module.css.js +22 -0
  298. package/dist/components/forms/ColorPicker/ColorPicker.module.css.js.map +1 -0
  299. package/dist/components/forms/ComboBox/ComboBox.cjs.map +1 -1
  300. package/dist/components/forms/ComboBox/ComboBox.js.map +1 -1
  301. package/dist/components/forms/ComboBox/ComboBox.module.css.cjs +1 -1
  302. package/dist/components/forms/ComboBox/ComboBox.module.css.js +20 -20
  303. package/dist/components/forms/Field/Field.cjs +1 -1
  304. package/dist/components/forms/Field/Field.cjs.map +1 -1
  305. package/dist/components/forms/Field/Field.js +21 -20
  306. package/dist/components/forms/Field/Field.js.map +1 -1
  307. package/dist/components/forms/Field/Field.module.css.cjs +1 -1
  308. package/dist/components/forms/Field/Field.module.css.js +18 -12
  309. package/dist/components/forms/Field/Field.module.css.js.map +1 -1
  310. package/dist/components/forms/FileUpload/FileUpload.cjs +2 -0
  311. package/dist/components/forms/FileUpload/FileUpload.cjs.map +1 -0
  312. package/dist/components/forms/FileUpload/FileUpload.js +142 -0
  313. package/dist/components/forms/FileUpload/FileUpload.js.map +1 -0
  314. package/dist/components/forms/FileUpload/FileUpload.module.css.cjs +2 -0
  315. package/dist/components/forms/FileUpload/FileUpload.module.css.cjs.map +1 -0
  316. package/dist/components/forms/FileUpload/FileUpload.module.css.js +46 -0
  317. package/dist/components/forms/FileUpload/FileUpload.module.css.js.map +1 -0
  318. package/dist/components/forms/InputPassword/InputPassword.module.css.cjs +1 -1
  319. package/dist/components/forms/InputPassword/InputPassword.module.css.js +12 -12
  320. package/dist/components/forms/InputText/InputText.cjs +1 -1
  321. package/dist/components/forms/InputText/InputText.cjs.map +1 -1
  322. package/dist/components/forms/InputText/InputText.js +55 -47
  323. package/dist/components/forms/InputText/InputText.js.map +1 -1
  324. package/dist/components/forms/InputText/InputText.module.css.cjs +1 -1
  325. package/dist/components/forms/InputText/InputText.module.css.js +10 -10
  326. package/dist/components/forms/RadioGroup/RadioGroup.module.css.cjs +1 -1
  327. package/dist/components/forms/RadioGroup/RadioGroup.module.css.js +4 -4
  328. package/dist/components/forms/SegmentedControl/SegmentedControl.cjs +2 -0
  329. package/dist/components/forms/SegmentedControl/SegmentedControl.cjs.map +1 -0
  330. package/dist/components/forms/SegmentedControl/SegmentedControl.js +52 -0
  331. package/dist/components/forms/SegmentedControl/SegmentedControl.js.map +1 -0
  332. package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.cjs +2 -0
  333. package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.cjs.map +1 -0
  334. package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.js +22 -0
  335. package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.js.map +1 -0
  336. package/dist/components/forms/Select/Select.module.css.cjs +1 -1
  337. package/dist/components/forms/Select/Select.module.css.js +13 -13
  338. package/dist/components/forms/Switch/Switch.module.css.cjs +1 -1
  339. package/dist/components/forms/Switch/Switch.module.css.js +2 -2
  340. package/dist/components/icons/icons.cjs +1 -1
  341. package/dist/components/icons/icons.cjs.map +1 -1
  342. package/dist/components/icons/icons.js +198 -40
  343. package/dist/components/icons/icons.js.map +1 -1
  344. package/dist/components/navigation/SkipLink/SkipLink.cjs +2 -0
  345. package/dist/components/navigation/SkipLink/SkipLink.cjs.map +1 -0
  346. package/dist/components/navigation/SkipLink/SkipLink.js +9 -0
  347. package/dist/components/navigation/SkipLink/SkipLink.js.map +1 -0
  348. package/dist/components/navigation/SkipLink/SkipLink.module.css.cjs +2 -0
  349. package/dist/components/navigation/SkipLink/SkipLink.module.css.cjs.map +1 -0
  350. package/dist/components/navigation/SkipLink/SkipLink.module.css.js +8 -0
  351. package/dist/components/navigation/SkipLink/SkipLink.module.css.js.map +1 -0
  352. package/dist/components/navigation/Steps/Steps.cjs +2 -0
  353. package/dist/components/navigation/Steps/Steps.cjs.map +1 -0
  354. package/dist/components/navigation/Steps/Steps.js +30 -0
  355. package/dist/components/navigation/Steps/Steps.js.map +1 -0
  356. package/dist/components/navigation/Steps/Steps.module.css.cjs +2 -0
  357. package/dist/components/navigation/Steps/Steps.module.css.cjs.map +1 -0
  358. package/dist/components/navigation/Steps/Steps.module.css.js +26 -0
  359. package/dist/components/navigation/Steps/Steps.module.css.js.map +1 -0
  360. package/dist/components/navigation/Tabs/Tabs.cjs +1 -1
  361. package/dist/components/navigation/Tabs/Tabs.cjs.map +1 -1
  362. package/dist/components/navigation/Tabs/Tabs.js +88 -79
  363. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  364. package/dist/components/navigation/Tabs/Tabs.module.css.cjs +1 -1
  365. package/dist/components/navigation/Tabs/Tabs.module.css.js +18 -14
  366. package/dist/components/navigation/Tabs/Tabs.module.css.js.map +1 -1
  367. package/dist/components/navigation/TabsNav/TabsNav.cjs +2 -0
  368. package/dist/components/navigation/TabsNav/TabsNav.cjs.map +1 -0
  369. package/dist/components/navigation/TabsNav/TabsNav.js +21 -0
  370. package/dist/components/navigation/TabsNav/TabsNav.js.map +1 -0
  371. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs +2 -0
  372. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs.map +1 -0
  373. package/dist/components/navigation/TabsNav/TabsNav.module.css.js +18 -0
  374. package/dist/components/navigation/TabsNav/TabsNav.module.css.js.map +1 -0
  375. package/dist/components/overlays/Dialog/Dialog.cjs +1 -1
  376. package/dist/components/overlays/Dialog/Dialog.cjs.map +1 -1
  377. package/dist/components/overlays/Dialog/Dialog.js +11 -58
  378. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  379. package/dist/components/overlays/Dialog/DialogFrame.cjs +2 -0
  380. package/dist/components/overlays/Dialog/DialogFrame.cjs.map +1 -0
  381. package/dist/components/overlays/Dialog/DialogFrame.js +65 -0
  382. package/dist/components/overlays/Dialog/DialogFrame.js.map +1 -0
  383. package/dist/components/overlays/Drawer/Drawer.cjs +2 -0
  384. package/dist/components/overlays/Drawer/Drawer.cjs.map +1 -0
  385. package/dist/components/overlays/Drawer/Drawer.js +17 -0
  386. package/dist/components/overlays/Drawer/Drawer.js.map +1 -0
  387. package/dist/components/overlays/Drawer/Drawer.module.css.cjs +2 -0
  388. package/dist/components/overlays/Drawer/Drawer.module.css.cjs.map +1 -0
  389. package/dist/components/overlays/Drawer/Drawer.module.css.js +23 -0
  390. package/dist/components/overlays/Drawer/Drawer.module.css.js.map +1 -0
  391. package/dist/components/overlays/Menu/Menu.cjs +1 -1
  392. package/dist/components/overlays/Menu/Menu.cjs.map +1 -1
  393. package/dist/components/overlays/Menu/Menu.js +105 -86
  394. package/dist/components/overlays/Menu/Menu.js.map +1 -1
  395. package/dist/components/overlays/Menu/Menu.module.css.cjs +1 -1
  396. package/dist/components/overlays/Menu/Menu.module.css.js +24 -6
  397. package/dist/components/overlays/Menu/Menu.module.css.js.map +1 -1
  398. package/dist/design-system.css +1 -1
  399. package/dist/index.cjs +1 -1
  400. package/dist/index.js +190 -118
  401. package/dist/index.js.map +1 -1
  402. package/dist/types/components/actions/ButtonTile/ButtonTile.d.ts +14 -0
  403. package/dist/types/components/actions/ButtonTile/index.d.ts +2 -0
  404. package/dist/types/components/actions/Toolbar/Toolbar.d.ts +27 -0
  405. package/dist/types/components/actions/Toolbar/index.d.ts +2 -0
  406. package/dist/types/components/charts/ChartArea/ChartArea.d.ts +15 -4
  407. package/dist/types/components/charts/ChartBar/ChartBar.d.ts +11 -4
  408. package/dist/types/components/charts/ChartCombo/ChartCombo.d.ts +16 -4
  409. package/dist/types/components/charts/ChartDonut/ChartDonut.d.ts +5 -1
  410. package/dist/types/components/charts/ChartGauge/ChartGauge.d.ts +83 -0
  411. package/dist/types/components/charts/ChartGauge/gaugeLayout.d.ts +64 -0
  412. package/dist/types/components/charts/ChartGauge/gaugeReading.d.ts +97 -0
  413. package/dist/types/components/charts/ChartGauge/gaugeScale.d.ts +38 -0
  414. package/dist/types/components/charts/ChartGauge/index.d.ts +2 -0
  415. package/dist/types/components/charts/ChartLine/ChartLine.d.ts +15 -4
  416. package/dist/types/components/charts/ChartMap/ChartMap.d.ts +104 -0
  417. package/dist/types/components/charts/ChartMap/ChartMapLegend.d.ts +44 -0
  418. package/dist/types/components/charts/ChartMap/ChartMapTable.d.ts +38 -0
  419. package/dist/types/components/charts/ChartMap/index.d.ts +4 -0
  420. package/dist/types/components/charts/ChartMap/mapGeometry.d.ts +56 -0
  421. package/dist/types/components/charts/ChartMap/mapLabels.d.ts +51 -0
  422. package/dist/types/components/charts/ChartMap/mapScales.d.ts +76 -0
  423. package/dist/types/components/charts/ChartMap/polylabel.d.ts +9 -0
  424. package/dist/types/components/charts/ChartPie/ChartPie.d.ts +5 -1
  425. package/dist/types/components/charts/ChartRadial/ChartRadial.d.ts +5 -1
  426. package/dist/types/components/charts/ChartSankey/ChartSankey.d.ts +5 -1
  427. package/dist/types/components/charts/ChartScatter/ChartScatter.d.ts +7 -1
  428. package/dist/types/components/charts/ChartSunburst/ChartSunburst.d.ts +11 -2
  429. package/dist/types/components/charts/ChartTimeline/ChartTimeline.d.ts +137 -0
  430. package/dist/types/components/charts/ChartTimeline/ChartTimelineTable.d.ts +25 -0
  431. package/dist/types/components/charts/ChartTimeline/index.d.ts +2 -0
  432. package/dist/types/components/charts/ChartTimeline/timelineLayout.d.ts +70 -0
  433. package/dist/types/components/charts/ChartTimeline/timelineTime.d.ts +16 -0
  434. package/dist/types/components/charts/ChartTimeline/timelineTooltip.d.ts +45 -0
  435. package/dist/types/components/charts/ChartTooltip/ChartTooltip.d.ts +2 -0
  436. package/dist/types/components/charts/ChartTreemap/ChartTreemap.d.ts +11 -2
  437. package/dist/types/components/charts/ChartWaterfall/ChartWaterfall.d.ts +8 -3
  438. package/dist/types/components/charts/core/CartesianFrame.d.ts +6 -1
  439. package/dist/types/components/charts/core/ChartFrame.d.ts +7 -1
  440. package/dist/types/components/charts/core/ChartLegend.d.ts +3 -1
  441. package/dist/types/components/charts/core/PointBands.d.ts +22 -0
  442. package/dist/types/components/charts/core/cartesianLayout.d.ts +10 -4
  443. package/dist/types/components/charts/core/hoverPath.d.ts +10 -0
  444. package/dist/types/components/charts/core/index.d.ts +13 -3
  445. package/dist/types/components/charts/core/pointLabels.d.ts +13 -0
  446. package/dist/types/components/charts/core/tooltips.d.ts +49 -0
  447. package/dist/types/components/charts/core/useCartesianLayout.d.ts +20 -0
  448. package/dist/types/components/charts/core/useSeriesToggle.d.ts +15 -1
  449. package/dist/types/components/data-display/Accordion/Accordion.d.ts +6 -1
  450. package/dist/types/components/data-display/Accordion/index.d.ts +1 -1
  451. package/dist/types/components/data-display/List/List.d.ts +1 -1
  452. package/dist/types/components/data-display/List/useListing.d.ts +7 -1
  453. package/dist/types/components/data-display/SortableList/SortableList.d.ts +22 -0
  454. package/dist/types/components/data-display/SortableList/index.d.ts +2 -0
  455. package/dist/types/components/data-display/Tag/Tag.d.ts +13 -0
  456. package/dist/types/components/data-display/Tag/index.d.ts +2 -0
  457. package/dist/types/components/data-display/Timeline/Timeline.d.ts +15 -0
  458. package/dist/types/components/data-display/Timeline/index.d.ts +2 -0
  459. package/dist/types/components/feedback/Skeleton/Skeleton.d.ts +13 -0
  460. package/dist/types/components/feedback/Skeleton/index.d.ts +2 -0
  461. package/dist/types/components/feedback/Toast/ToastRegion.d.ts +2 -0
  462. package/dist/types/components/feedback/Toast/index.d.ts +3 -0
  463. package/dist/types/components/feedback/Toast/toastStore.d.ts +24 -0
  464. package/dist/types/components/forms/CheckboxGroup/CheckboxGroup.d.ts +28 -0
  465. package/dist/types/components/forms/CheckboxGroup/index.d.ts +2 -0
  466. package/dist/types/components/forms/ColorPicker/ColorPicker.d.ts +26 -0
  467. package/dist/types/components/forms/ColorPicker/index.d.ts +2 -0
  468. package/dist/types/components/forms/ComboBox/ComboBox.d.ts +7 -1
  469. package/dist/types/components/forms/Field/Field.d.ts +6 -2
  470. package/dist/types/components/forms/Field/index.d.ts +1 -1
  471. package/dist/types/components/forms/FileUpload/FileUpload.d.ts +37 -0
  472. package/dist/types/components/forms/FileUpload/index.d.ts +2 -0
  473. package/dist/types/components/forms/InputText/InputText.d.ts +4 -2
  474. package/dist/types/components/forms/SegmentedControl/SegmentedControl.d.ts +23 -0
  475. package/dist/types/components/forms/SegmentedControl/index.d.ts +2 -0
  476. package/dist/types/components/icons/icons.d.ts +29 -0
  477. package/dist/types/components/icons/index.d.ts +1 -1
  478. package/dist/types/components/navigation/SkipLink/SkipLink.d.ts +7 -0
  479. package/dist/types/components/navigation/SkipLink/index.d.ts +2 -0
  480. package/dist/types/components/navigation/Steps/Steps.d.ts +16 -0
  481. package/dist/types/components/navigation/Steps/index.d.ts +2 -0
  482. package/dist/types/components/navigation/Tabs/Tabs.d.ts +5 -1
  483. package/dist/types/components/navigation/TabsNav/TabsNav.d.ts +20 -0
  484. package/dist/types/components/navigation/TabsNav/index.d.ts +2 -0
  485. package/dist/types/components/overlays/Dialog/Dialog.d.ts +21 -9
  486. package/dist/types/components/overlays/Dialog/DialogFrame.d.ts +13 -0
  487. package/dist/types/components/overlays/Drawer/Drawer.d.ts +9 -0
  488. package/dist/types/components/overlays/Drawer/index.d.ts +2 -0
  489. package/dist/types/components/overlays/Menu/Menu.d.ts +16 -2
  490. package/dist/types/components/overlays/Menu/index.d.ts +1 -1
  491. package/dist/types/index.d.ts +43 -7
  492. package/dist/types/utils/formatters/formatarDuracao.d.ts +5 -0
  493. package/dist/types/utils/formatters/formatarNumero.d.ts +6 -1
  494. package/dist/types/utils/formatters/formatarTamanhoDeArquivo.d.ts +7 -0
  495. package/dist/types/utils/formatters/index.d.ts +4 -1
  496. package/dist/utils/formatters/formatarDuracao.cjs +2 -0
  497. package/dist/utils/formatters/formatarDuracao.cjs.map +1 -0
  498. package/dist/utils/formatters/formatarDuracao.js +10 -0
  499. package/dist/utils/formatters/formatarDuracao.js.map +1 -0
  500. package/dist/utils/formatters/formatarNumero.cjs +1 -1
  501. package/dist/utils/formatters/formatarNumero.cjs.map +1 -1
  502. package/dist/utils/formatters/formatarNumero.js +42 -17
  503. package/dist/utils/formatters/formatarNumero.js.map +1 -1
  504. package/dist/utils/formatters/formatarTamanhoDeArquivo.cjs +2 -0
  505. package/dist/utils/formatters/formatarTamanhoDeArquivo.cjs.map +1 -0
  506. package/dist/utils/formatters/formatarTamanhoDeArquivo.js +17 -0
  507. package/dist/utils/formatters/formatarTamanhoDeArquivo.js.map +1 -0
  508. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sources":["../../../../src/components/forms/Checkbox/Checkbox.tsx"],"sourcesContent":["import { useCallback, useId, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport styles from './Checkbox.module.css';\n\nexport interface CheckboxProps extends Omit<ComponentPropsWithRef<'input'>, 'type' | 'size'> {\n error?: string;\n hint?: string;\n indeterminate?: boolean;\n /** Sem rotulo visivel, o nome vem de `aria-label` ou `aria-labelledby`. */\n label?: ReactNode;\n}\n\nexport function Checkbox({\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n className,\n error,\n hint,\n id: providedId,\n indeterminate = false,\n label,\n ref,\n ...props\n}: CheckboxProps) {\n const generatedId = useId();\n const id = providedId ?? `checkbox-${generatedId}`;\n const messageId = `${id}-message`;\n const describedBy = [ariaDescribedBy, error || hint ? messageId : undefined]\n .filter(Boolean)\n .join(' ') || undefined;\n const classes = [styles.input, error && styles.error, className].filter(Boolean).join(' ');\n\n const aplicarIndeterminado = useCallback(\n (node: HTMLInputElement | null) => {\n if (node) {\n node.indeterminate = indeterminate;\n }\n },\n [indeterminate],\n );\n const mergedRef = useMergedRefs(aplicarIndeterminado, ref);\n\n return (\n <div className={styles.field}>\n <label className={styles.control} htmlFor={id}>\n <input\n {...props}\n ref={mergedRef}\n className={classes}\n id={id}\n aria-describedby={describedBy}\n aria-invalid={error ? true : ariaInvalid}\n type=\"checkbox\"\n />\n {label && <span className={styles.text}>{label}</span>}\n </label>\n {(error || hint) && (\n <span className={error ? styles.errorMessage : styles.hint} id={messageId} role={error ? 'alert' : undefined}>\n {error || hint}\n </span>\n )}\n </div>\n );\n}\n"],"names":["Checkbox","ariaDescribedBy","ariaInvalid","className","error","hint","providedId","indeterminate","label","ref","props","generatedId","useId","id","messageId","describedBy","classes","styles","aplicarIndeterminado","useCallback","node","mergedRef","useMergedRefs","jsxs","jsx"],"mappings":";;;;AAYO,SAASA,EAAS;AAAA,EACvB,oBAAoBC;AAAA,EACpB,gBAAgBC;AAAA,EAChB,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,eAAAC,IAAgB;AAAA,EAChB,OAAAC;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,GAAkB;AAChB,QAAMC,IAAcC,EAAA,GACdC,IAAKP,KAAc,YAAYK,CAAW,IAC1CG,IAAY,GAAGD,CAAE,YACjBE,IAAc,CAACd,GAAiBG,KAASC,IAAOS,IAAY,MAAS,EACxE,OAAO,OAAO,EACd,KAAK,GAAG,KAAK,QACVE,IAAU,CAACC,EAAO,OAAOb,KAASa,EAAO,OAAOd,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAEnFe,IAAuBC;AAAA,IAC3B,CAACC,MAAkC;AACjC,MAAIA,MACFA,EAAK,gBAAgBb;AAAA,IAEzB;AAAA,IACA,CAACA,CAAa;AAAA,EAAA,GAEVc,IAAYC,EAAcJ,GAAsBT,CAAG;AAEzD,SACE,gBAAAc,EAAC,OAAA,EAAI,WAAWN,EAAO,OACrB,UAAA;AAAA,IAAA,gBAAAM,EAAC,SAAA,EAAM,WAAWN,EAAO,SAAS,SAASJ,GACzC,UAAA;AAAA,MAAA,gBAAAW;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGd;AAAA,UACJ,KAAKW;AAAA,UACL,WAAWL;AAAA,UACX,IAAAH;AAAA,UACA,oBAAkBE;AAAA,UAClB,gBAAcX,IAAQ,KAAOF;AAAA,UAC7B,MAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAENM,KAAS,gBAAAgB,EAAC,QAAA,EAAK,WAAWP,EAAO,MAAO,UAAAT,EAAA,CAAM;AAAA,IAAA,GACjD;AAAA,KACEJ,KAASC,MACT,gBAAAmB,EAAC,QAAA,EAAK,WAAWpB,IAAQa,EAAO,eAAeA,EAAO,MAAM,IAAIH,GAAW,MAAMV,IAAQ,UAAU,QAChG,eAASC,EAAA,CACZ;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"Checkbox.js","sources":["../../../../src/components/forms/Checkbox/Checkbox.tsx"],"sourcesContent":["import { useCallback, useId, type ChangeEvent, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport { useCheckboxGroup } from '../CheckboxGroup/CheckboxGroup';\nimport styles from './Checkbox.module.css';\n\nexport interface CheckboxProps extends Omit<ComponentPropsWithRef<'input'>, 'type' | 'size'> {\n error?: string;\n hint?: string;\n indeterminate?: boolean;\n /** Sem rotulo visivel, o nome vem de `aria-label` ou `aria-labelledby`. */\n label?: ReactNode;\n}\n\nexport function Checkbox({\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n className,\n error,\n hint,\n id: providedId,\n indeterminate = false,\n label,\n ref,\n ...props\n}: CheckboxProps) {\n const group = useCheckboxGroup();\n const groupValue = group && typeof props.value === 'string' ? props.value : undefined;\n const inGroup = group !== null && groupValue !== undefined;\n const invalid = Boolean(error) || (inGroup && group.invalid);\n const generatedId = useId();\n const id = providedId ?? `checkbox-${generatedId}`;\n const messageId = `${id}-message`;\n const describedBy = [ariaDescribedBy, error || hint ? messageId : undefined]\n .filter(Boolean)\n .join(' ') || undefined;\n const classes = [styles.input, invalid && styles.error, className].filter(Boolean).join(' ');\n\n const aplicarIndeterminado = useCallback(\n (node: HTMLInputElement | null) => {\n if (node) {\n node.indeterminate = indeterminate;\n }\n },\n [indeterminate],\n );\n const mergedRef = useMergedRefs(aplicarIndeterminado, ref);\n\n return (\n <div className={styles.field}>\n <label className={styles.control} htmlFor={id}>\n <input\n {...props}\n ref={mergedRef}\n className={classes}\n id={id}\n {...(inGroup && {\n checked: group.values.includes(groupValue),\n disabled: props.disabled ?? group.disabled,\n name: group.name,\n // Obrigatório é marcar ao menos uma: o `required` nativo só vale enquanto o grupo está vazio.\n required: group.required && group.values.length === 0,\n onChange: (event: ChangeEvent<HTMLInputElement>) => {\n group.toggle(groupValue, event.target.checked);\n props.onChange?.(event);\n },\n })}\n aria-describedby={describedBy}\n aria-invalid={invalid ? true : ariaInvalid}\n type=\"checkbox\"\n />\n {label && <span className={styles.text}>{label}</span>}\n </label>\n {(error || hint) && (\n <span className={error ? styles.errorMessage : styles.hint} id={messageId} role={error ? 'alert' : undefined}>\n {error || hint}\n </span>\n )}\n </div>\n );\n}\n"],"names":["Checkbox","ariaDescribedBy","ariaInvalid","className","error","hint","providedId","indeterminate","label","ref","props","group","useCheckboxGroup","groupValue","inGroup","invalid","generatedId","useId","id","messageId","describedBy","classes","styles","aplicarIndeterminado","useCallback","node","mergedRef","useMergedRefs","jsxs","jsx","event","_a"],"mappings":";;;;;AAaO,SAASA,EAAS;AAAA,EACvB,oBAAoBC;AAAA,EACpB,gBAAgBC;AAAA,EAChB,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,eAAAC,IAAgB;AAAA,EAChB,OAAAC;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,GAAkB;AAChB,QAAMC,IAAQC,EAAA,GACRC,IAAaF,KAAS,OAAOD,EAAM,SAAU,WAAWA,EAAM,QAAQ,QACtEI,IAAUH,MAAU,QAAQE,MAAe,QAC3CE,IAAU,EAAQX,KAAWU,KAAWH,EAAM,SAC9CK,IAAcC,EAAA,GACdC,IAAKZ,KAAc,YAAYU,CAAW,IAC1CG,IAAY,GAAGD,CAAE,YACjBE,IAAc,CAACnB,GAAiBG,KAASC,IAAOc,IAAY,MAAS,EACxE,OAAO,OAAO,EACd,KAAK,GAAG,KAAK,QACVE,IAAU,CAACC,EAAO,OAAOP,KAAWO,EAAO,OAAOnB,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAErFoB,IAAuBC;AAAA,IAC3B,CAACC,MAAkC;AACjC,MAAIA,MACFA,EAAK,gBAAgBlB;AAAA,IAEzB;AAAA,IACA,CAACA,CAAa;AAAA,EAAA,GAEVmB,IAAYC,EAAcJ,GAAsBd,CAAG;AAEzD,SACE,gBAAAmB,EAAC,OAAA,EAAI,WAAWN,EAAO,OACrB,UAAA;AAAA,IAAA,gBAAAM,EAAC,SAAA,EAAM,WAAWN,EAAO,SAAS,SAASJ,GACzC,UAAA;AAAA,MAAA,gBAAAW;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGnB;AAAA,UACJ,KAAKgB;AAAA,UACL,WAAWL;AAAA,UACX,IAAAH;AAAA,UACC,GAAIJ,KAAW;AAAA,YACd,SAASH,EAAM,OAAO,SAASE,CAAU;AAAA,YACzC,UAAUH,EAAM,YAAYC,EAAM;AAAA,YAClC,MAAMA,EAAM;AAAA;AAAA,YAEZ,UAAUA,EAAM,YAAYA,EAAM,OAAO,WAAW;AAAA,YACpD,UAAU,CAACmB,MAAyC;;AAClD,cAAAnB,EAAM,OAAOE,GAAYiB,EAAM,OAAO,OAAO,IAC7CC,IAAArB,EAAM,aAAN,QAAAqB,EAAA,KAAArB,GAAiBoB;AAAA,YACnB;AAAA,UAAA;AAAA,UAEF,oBAAkBV;AAAA,UAClB,gBAAcL,IAAU,KAAOb;AAAA,UAC/B,MAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAENM,KAAS,gBAAAqB,EAAC,QAAA,EAAK,WAAWP,EAAO,MAAO,UAAAd,EAAA,CAAM;AAAA,IAAA,GACjD;AAAA,KACEJ,KAASC,MACT,gBAAAwB,EAAC,QAAA,EAAK,WAAWzB,IAAQkB,EAAO,eAAeA,EAAO,MAAM,IAAIH,GAAW,MAAMf,IAAQ,UAAU,QAChG,eAASC,EAAA,CACZ;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -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_wy7pm_8",n="_errorMessage_thq98_88 _errorMessage_wy7pm_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",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=_;
2
2
  //# sourceMappingURL=Checkbox.module.css.cjs.map
@@ -1,4 +1,4 @@
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_wy7pm_8", n = "_errorMessage_thq98_88 _errorMessage_wy7pm_9", c = {
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 = {
2
2
  field: t,
3
3
  control: _,
4
4
  input: r,
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),t=require("react"),P=require("../../../hooks/useFormReset.cjs"),$=require("../../../hooks/useMergedRefs.cjs"),e=require("./CheckboxGroup.module.css.cjs"),m=t.createContext(null);function O(){return t.useContext(m)}function T({"aria-describedby":p,children:g,className:j,defaultValue:d=[],disabled:v=!1,error:s,hint:c,label:h,name:k,onValueChange:n,orientation:R="vertical",ref:G,required:i=!1,value:l,...q}){const u=t.useId(),y=k??`checkbox-group-${u}`,a=`checkbox-group-${u}-message`,C=[p,s||c?a:void 0].filter(Boolean).join(" ")||void 0,[N,f]=t.useState(d),r=l??N,B=P.useFormReset(()=>f(d)),M=$.useMergedRefs(B,G);function I(x,S){const b=S?[...r,x]:r.filter(F=>F!==x);l===void 0&&f(b),n==null||n(b)}return o.jsx(m.Provider,{value:{disabled:v,invalid:!!s,name:y,required:i,toggle:I,values:r},children:o.jsxs("fieldset",{...q,ref:M,className:[e.default.group,j].filter(Boolean).join(" "),"aria-describedby":C,children:[o.jsxs("legend",{className:e.default.legend,children:[h,i&&o.jsx("span",{className:e.default.required,"aria-hidden":"true",children:"*"})]}),o.jsx("div",{className:[e.default.options,e.default[R]].join(" "),children:g}),(s||c)&&o.jsx("span",{className:s?e.default.errorMessage:e.default.hint,id:a,role:s?"alert":void 0,children:s||c})]})})}exports.CheckboxGroup=T;exports.useCheckboxGroup=O;
2
+ //# sourceMappingURL=CheckboxGroup.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxGroup.cjs","sources":["../../../../src/components/forms/CheckboxGroup/CheckboxGroup.tsx"],"sourcesContent":["import { createContext, useContext, useId, useState, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { useFormReset } from '../../../hooks/useFormReset';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport styles from './CheckboxGroup.module.css';\n\ninterface CheckboxGroupContextValue {\n disabled: boolean;\n invalid: boolean;\n name: string;\n required: boolean;\n toggle: (value: string, checked: boolean) => void;\n values: readonly string[];\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null);\n\n/** O `Checkbox` com `value` dentro de um grupo lê daqui o estado; fora dele, segue solto. */\nexport function useCheckboxGroup() {\n return useContext(CheckboxGroupContext);\n}\n\nexport type CheckboxGroupOrientation = 'vertical' | 'horizontal';\n\nexport interface CheckboxGroupProps extends Omit<ComponentPropsWithRef<'fieldset'>, 'defaultValue' | 'onChange'> {\n children: ReactNode;\n defaultValue?: readonly string[];\n disabled?: boolean;\n error?: string;\n hint?: string;\n label: string;\n name?: string;\n onValueChange?: (values: string[]) => void;\n orientation?: CheckboxGroupOrientation;\n /** Exige ao menos uma caixa marcada no envio. */\n required?: boolean;\n value?: readonly string[];\n}\n\nexport function CheckboxGroup({\n 'aria-describedby': ariaDescribedBy,\n children,\n className,\n defaultValue = [],\n disabled = false,\n error,\n hint,\n label,\n name: providedName,\n onValueChange,\n orientation = 'vertical',\n ref,\n required = false,\n value,\n ...props\n}: CheckboxGroupProps) {\n const generatedId = useId();\n const name = providedName ?? `checkbox-group-${generatedId}`;\n const messageId = `checkbox-group-${generatedId}-message`;\n const describedBy = [ariaDescribedBy, error || hint ? messageId : undefined].filter(Boolean).join(' ') || undefined;\n const [uncontrolledValues, setUncontrolledValues] = useState(defaultValue);\n const values = value ?? uncontrolledValues;\n const resetRef = useFormReset<HTMLFieldSetElement>(() => setUncontrolledValues(defaultValue));\n const mergedRef = useMergedRefs(resetRef, ref);\n\n function toggle(item: string, checked: boolean) {\n const next = checked ? [...values, item] : values.filter((current) => current !== item);\n\n if (value === undefined) {\n setUncontrolledValues(next);\n }\n\n onValueChange?.(next);\n }\n\n return (\n <CheckboxGroupContext.Provider value={{ disabled, invalid: Boolean(error), name, required, toggle, values }}>\n <fieldset\n {...props}\n ref={mergedRef}\n className={[styles.group, className].filter(Boolean).join(' ')}\n aria-describedby={describedBy}\n >\n <legend className={styles.legend}>\n {label}\n {required && <span className={styles.required} aria-hidden=\"true\">*</span>}\n </legend>\n <div className={[styles.options, styles[orientation]].join(' ')}>{children}</div>\n {(error || hint) && (\n <span className={error ? styles.errorMessage : styles.hint} id={messageId} role={error ? 'alert' : undefined}>\n {error || hint}\n </span>\n )}\n </fieldset>\n </CheckboxGroupContext.Provider>\n );\n}\n"],"names":["CheckboxGroupContext","createContext","useCheckboxGroup","useContext","CheckboxGroup","ariaDescribedBy","children","className","defaultValue","disabled","error","hint","label","providedName","onValueChange","orientation","ref","required","value","props","generatedId","useId","name","messageId","describedBy","uncontrolledValues","setUncontrolledValues","useState","values","resetRef","useFormReset","mergedRef","useMergedRefs","toggle","item","checked","next","current","jsx","jsxs","styles"],"mappings":"+QAcMA,EAAuBC,EAAAA,cAAgD,IAAI,EAG1E,SAASC,GAAmB,CACjC,OAAOC,EAAAA,WAAWH,CAAoB,CACxC,CAmBO,SAASI,EAAc,CAC5B,mBAAoBC,EACpB,SAAAC,EACA,UAAAC,EACA,aAAAC,EAAe,CAAA,EACf,SAAAC,EAAW,GACX,MAAAC,EACA,KAAAC,EACA,MAAAC,EACA,KAAMC,EACN,cAAAC,EACA,YAAAC,EAAc,WACd,IAAAC,EACA,SAAAC,EAAW,GACX,MAAAC,EACA,GAAGC,CACL,EAAuB,CACrB,MAAMC,EAAcC,EAAAA,MAAA,EACdC,EAAOT,GAAgB,kBAAkBO,CAAW,GACpDG,EAAY,kBAAkBH,CAAW,WACzCI,EAAc,CAACnB,EAAiBK,GAASC,EAAOY,EAAY,MAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAK,OACpG,CAACE,EAAoBC,CAAqB,EAAIC,EAAAA,SAASnB,CAAY,EACnEoB,EAASV,GAASO,EAClBI,EAAWC,EAAAA,aAAkC,IAAMJ,EAAsBlB,CAAY,CAAC,EACtFuB,EAAYC,EAAAA,cAAcH,EAAUb,CAAG,EAE7C,SAASiB,EAAOC,EAAcC,EAAkB,CAC9C,MAAMC,EAAOD,EAAU,CAAC,GAAGP,EAAQM,CAAI,EAAIN,EAAO,OAAQS,GAAYA,IAAYH,CAAI,EAElFhB,IAAU,QACZQ,EAAsBU,CAAI,EAG5BtB,GAAA,MAAAA,EAAgBsB,EAClB,CAEA,OACEE,EAAAA,IAACtC,EAAqB,SAArB,CAA8B,MAAO,CAAE,SAAAS,EAAU,QAAS,EAAQC,EAAQ,KAAAY,EAAM,SAAAL,EAAU,OAAAgB,EAAQ,OAAAL,GACjG,SAAAW,EAAAA,KAAC,WAAA,CACE,GAAGpB,EACJ,IAAKY,EACL,UAAW,CAACS,UAAO,MAAOjC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC7D,mBAAkBiB,EAElB,SAAA,CAAAe,EAAAA,KAAC,SAAA,CAAO,UAAWC,EAAAA,QAAO,OACvB,SAAA,CAAA5B,EACAK,SAAa,OAAA,CAAK,UAAWuB,EAAAA,QAAO,SAAU,cAAY,OAAO,SAAA,GAAA,CAAC,CAAA,EACrE,EACAF,EAAAA,IAAC,MAAA,CAAI,UAAW,CAACE,EAAAA,QAAO,QAASA,UAAOzB,CAAW,CAAC,EAAE,KAAK,GAAG,EAAI,SAAAT,CAAA,CAAS,GACzEI,GAASC,IACT2B,MAAC,OAAA,CAAK,UAAW5B,EAAQ8B,EAAAA,QAAO,aAAeA,EAAAA,QAAO,KAAM,GAAIjB,EAAW,KAAMb,EAAQ,QAAU,OAChG,YAASC,CAAA,CACZ,CAAA,CAAA,CAAA,EAGN,CAEJ"}
@@ -0,0 +1,54 @@
1
+ import { jsx as s, jsxs as p } from "react/jsx-runtime";
2
+ import { useId as S, useState as U, useContext as q, createContext as w } from "react";
3
+ import { useFormReset as z } from "../../../hooks/useFormReset.js";
4
+ import { useMergedRefs as A } from "../../../hooks/useMergedRefs.js";
5
+ import e from "./CheckboxGroup.module.css.js";
6
+ const x = w(null);
7
+ function L() {
8
+ return q(x);
9
+ }
10
+ function O({
11
+ "aria-describedby": b,
12
+ children: g,
13
+ className: v,
14
+ defaultValue: c = [],
15
+ disabled: h = !1,
16
+ error: o,
17
+ hint: t,
18
+ label: j,
19
+ name: k,
20
+ onValueChange: n,
21
+ orientation: N = "vertical",
22
+ ref: y,
23
+ required: i = !1,
24
+ value: d,
25
+ ...B
26
+ }) {
27
+ const l = S(), R = k ?? `checkbox-group-${l}`, a = `checkbox-group-${l}-message`, G = [b, o || t ? a : void 0].filter(Boolean).join(" ") || void 0, [I, m] = U(c), r = d ?? I, C = z(() => m(c)), M = A(C, y);
28
+ function $(f, F) {
29
+ const u = F ? [...r, f] : r.filter((P) => P !== f);
30
+ d === void 0 && m(u), n == null || n(u);
31
+ }
32
+ return /* @__PURE__ */ s(x.Provider, { value: { disabled: h, invalid: !!o, name: R, required: i, toggle: $, values: r }, children: /* @__PURE__ */ p(
33
+ "fieldset",
34
+ {
35
+ ...B,
36
+ ref: M,
37
+ className: [e.group, v].filter(Boolean).join(" "),
38
+ "aria-describedby": G,
39
+ children: [
40
+ /* @__PURE__ */ p("legend", { className: e.legend, children: [
41
+ j,
42
+ i && /* @__PURE__ */ s("span", { className: e.required, "aria-hidden": "true", children: "*" })
43
+ ] }),
44
+ /* @__PURE__ */ s("div", { className: [e.options, e[N]].join(" "), children: g }),
45
+ (o || t) && /* @__PURE__ */ s("span", { className: o ? e.errorMessage : e.hint, id: a, role: o ? "alert" : void 0, children: o || t })
46
+ ]
47
+ }
48
+ ) });
49
+ }
50
+ export {
51
+ O as CheckboxGroup,
52
+ L as useCheckboxGroup
53
+ };
54
+ //# sourceMappingURL=CheckboxGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxGroup.js","sources":["../../../../src/components/forms/CheckboxGroup/CheckboxGroup.tsx"],"sourcesContent":["import { createContext, useContext, useId, useState, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { useFormReset } from '../../../hooks/useFormReset';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport styles from './CheckboxGroup.module.css';\n\ninterface CheckboxGroupContextValue {\n disabled: boolean;\n invalid: boolean;\n name: string;\n required: boolean;\n toggle: (value: string, checked: boolean) => void;\n values: readonly string[];\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null);\n\n/** O `Checkbox` com `value` dentro de um grupo lê daqui o estado; fora dele, segue solto. */\nexport function useCheckboxGroup() {\n return useContext(CheckboxGroupContext);\n}\n\nexport type CheckboxGroupOrientation = 'vertical' | 'horizontal';\n\nexport interface CheckboxGroupProps extends Omit<ComponentPropsWithRef<'fieldset'>, 'defaultValue' | 'onChange'> {\n children: ReactNode;\n defaultValue?: readonly string[];\n disabled?: boolean;\n error?: string;\n hint?: string;\n label: string;\n name?: string;\n onValueChange?: (values: string[]) => void;\n orientation?: CheckboxGroupOrientation;\n /** Exige ao menos uma caixa marcada no envio. */\n required?: boolean;\n value?: readonly string[];\n}\n\nexport function CheckboxGroup({\n 'aria-describedby': ariaDescribedBy,\n children,\n className,\n defaultValue = [],\n disabled = false,\n error,\n hint,\n label,\n name: providedName,\n onValueChange,\n orientation = 'vertical',\n ref,\n required = false,\n value,\n ...props\n}: CheckboxGroupProps) {\n const generatedId = useId();\n const name = providedName ?? `checkbox-group-${generatedId}`;\n const messageId = `checkbox-group-${generatedId}-message`;\n const describedBy = [ariaDescribedBy, error || hint ? messageId : undefined].filter(Boolean).join(' ') || undefined;\n const [uncontrolledValues, setUncontrolledValues] = useState(defaultValue);\n const values = value ?? uncontrolledValues;\n const resetRef = useFormReset<HTMLFieldSetElement>(() => setUncontrolledValues(defaultValue));\n const mergedRef = useMergedRefs(resetRef, ref);\n\n function toggle(item: string, checked: boolean) {\n const next = checked ? [...values, item] : values.filter((current) => current !== item);\n\n if (value === undefined) {\n setUncontrolledValues(next);\n }\n\n onValueChange?.(next);\n }\n\n return (\n <CheckboxGroupContext.Provider value={{ disabled, invalid: Boolean(error), name, required, toggle, values }}>\n <fieldset\n {...props}\n ref={mergedRef}\n className={[styles.group, className].filter(Boolean).join(' ')}\n aria-describedby={describedBy}\n >\n <legend className={styles.legend}>\n {label}\n {required && <span className={styles.required} aria-hidden=\"true\">*</span>}\n </legend>\n <div className={[styles.options, styles[orientation]].join(' ')}>{children}</div>\n {(error || hint) && (\n <span className={error ? styles.errorMessage : styles.hint} id={messageId} role={error ? 'alert' : undefined}>\n {error || hint}\n </span>\n )}\n </fieldset>\n </CheckboxGroupContext.Provider>\n );\n}\n"],"names":["CheckboxGroupContext","createContext","useCheckboxGroup","useContext","CheckboxGroup","ariaDescribedBy","children","className","defaultValue","disabled","error","hint","label","providedName","onValueChange","orientation","ref","required","value","props","generatedId","useId","name","messageId","describedBy","uncontrolledValues","setUncontrolledValues","useState","values","resetRef","useFormReset","mergedRef","useMergedRefs","toggle","item","checked","next","current","jsx","jsxs","styles"],"mappings":";;;;;AAcA,MAAMA,IAAuBC,EAAgD,IAAI;AAG1E,SAASC,IAAmB;AACjC,SAAOC,EAAWH,CAAoB;AACxC;AAmBO,SAASI,EAAc;AAAA,EAC5B,oBAAoBC;AAAA,EACpB,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC,IAAe,CAAA;AAAA,EACf,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAMC;AAAA,EACN,eAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,KAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,GAAGC;AACL,GAAuB;AACrB,QAAMC,IAAcC,EAAA,GACdC,IAAOT,KAAgB,kBAAkBO,CAAW,IACpDG,IAAY,kBAAkBH,CAAW,YACzCI,IAAc,CAACnB,GAAiBK,KAASC,IAAOY,IAAY,MAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,QACpG,CAACE,GAAoBC,CAAqB,IAAIC,EAASnB,CAAY,GACnEoB,IAASV,KAASO,GAClBI,IAAWC,EAAkC,MAAMJ,EAAsBlB,CAAY,CAAC,GACtFuB,IAAYC,EAAcH,GAAUb,CAAG;AAE7C,WAASiB,EAAOC,GAAcC,GAAkB;AAC9C,UAAMC,IAAOD,IAAU,CAAC,GAAGP,GAAQM,CAAI,IAAIN,EAAO,OAAO,CAACS,MAAYA,MAAYH,CAAI;AAEtF,IAAIhB,MAAU,UACZQ,EAAsBU,CAAI,GAG5BtB,KAAA,QAAAA,EAAgBsB;AAAA,EAClB;AAEA,SACE,gBAAAE,EAACtC,EAAqB,UAArB,EAA8B,OAAO,EAAE,UAAAS,GAAU,SAAS,EAAQC,GAAQ,MAAAY,GAAM,UAAAL,GAAU,QAAAgB,GAAQ,QAAAL,KACjG,UAAA,gBAAAW;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGpB;AAAA,MACJ,KAAKY;AAAA,MACL,WAAW,CAACS,EAAO,OAAOjC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC7D,oBAAkBiB;AAAA,MAElB,UAAA;AAAA,QAAA,gBAAAe,EAAC,UAAA,EAAO,WAAWC,EAAO,QACvB,UAAA;AAAA,UAAA5B;AAAA,UACAK,uBAAa,QAAA,EAAK,WAAWuB,EAAO,UAAU,eAAY,QAAO,UAAA,IAAA,CAAC;AAAA,QAAA,GACrE;AAAA,QACA,gBAAAF,EAAC,OAAA,EAAI,WAAW,CAACE,EAAO,SAASA,EAAOzB,CAAW,CAAC,EAAE,KAAK,GAAG,GAAI,UAAAT,EAAA,CAAS;AAAA,SACzEI,KAASC,MACT,gBAAA2B,EAAC,QAAA,EAAK,WAAW5B,IAAQ8B,EAAO,eAAeA,EAAO,MAAM,IAAIjB,GAAW,MAAMb,IAAQ,UAAU,QAChG,eAASC,EAAA,CACZ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;"}
@@ -0,0 +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=_;
2
+ //# sourceMappingURL=CheckboxGroup.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxGroup.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
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 = {
2
+ group: t,
3
+ legend: _,
4
+ required: o,
5
+ options: e,
6
+ vertical: r,
7
+ horizontal: n,
8
+ hint: s,
9
+ errorMessage: i
10
+ };
11
+ export {
12
+ p as default,
13
+ i as errorMessage,
14
+ t as group,
15
+ s as hint,
16
+ n as horizontal,
17
+ _ as legend,
18
+ e as options,
19
+ o as required,
20
+ r as vertical
21
+ };
22
+ //# sourceMappingURL=CheckboxGroup.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxGroup.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),p=require("react"),l=require("./ColorPicker.module.css.cjs"),x=require("../../overlays/Tooltip/Tooltip.cjs"),N=require("../../icons/icons.cjs");function q({className:t,defaultOption:a,defaultValue:d,disabled:u=!1,label:s,name:m,onValueChange:r,options:c,size:f="md",value:i,...v}){const j=`color-picker-${p.useId()}`,k=m??j,n=i!==void 0,b=a?[{label:a.label??"Padrão",value:null},...c]:[...c];return o.jsx("div",{...v,"aria-label":s,className:[l.default.picker,l.default[f],t].filter(Boolean).join(" "),role:"radiogroup",children:b.map(e=>o.jsx(x.Tooltip,{content:e.label,children:o.jsxs("label",{className:[l.default.swatch,e.value===null&&l.default.none].filter(Boolean).join(" "),style:{backgroundColor:e.color},children:[o.jsx("input",{checked:n?i===e.value:void 0,className:l.default.input,defaultChecked:n?void 0:d===e.value,disabled:u,name:k,onChange:()=>r==null?void 0:r(e.value),type:"radio",value:e.value??""}),o.jsx(N.IconCheck,{className:l.default.check}),o.jsx("span",{className:l.default.hiddenText,children:e.label})]})},e.value??""))})}exports.ColorPicker=q;
2
+ //# sourceMappingURL=ColorPicker.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.cjs","sources":["../../../../src/components/forms/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import { useId, type ComponentPropsWithRef } from 'react';\nimport { IconCheck } from '../../icons';\nimport { Tooltip } from '../../overlays/Tooltip';\nimport styles from './ColorPicker.module.css';\n\nexport interface ColorPickerOption {\n /** Qualquer cor do CSS; é só o desenho da amostra. */\n color: string;\n /** Nome da cor: é o que o leitor de tela anuncia e o que aparece como dica. */\n label: string;\n value: string;\n}\n\nexport type ColorPickerSize = 'sm' | 'md';\n\nexport interface ColorPickerProps extends Omit<ComponentPropsWithRef<'div'>, 'defaultValue' | 'onChange'> {\n /** Primeira amostra, que significa sem cor: escolhida, o valor é `null`. */\n defaultOption?: { label?: string };\n defaultValue?: string | null;\n disabled?: boolean;\n /** Nome do grupo, para o leitor de tela. */\n label: string;\n name?: string;\n onValueChange?: (value: string | null) => void;\n options: readonly ColorPickerOption[];\n size?: ColorPickerSize;\n value?: string | null;\n}\n\ninterface Swatch {\n color?: string;\n label: string;\n value: string | null;\n}\n\n/** Escolha de cor por amostras. Por baixo são rádios nativos: setas, Tab e formulário vêm do navegador. */\nexport function ColorPicker({\n className,\n defaultOption,\n defaultValue,\n disabled = false,\n label,\n name: providedName,\n onValueChange,\n options,\n size = 'md',\n value,\n ...props\n}: ColorPickerProps) {\n const generatedName = `color-picker-${useId()}`;\n const name = providedName ?? generatedName;\n const controlled = value !== undefined;\n const swatches: Swatch[] = defaultOption\n ? [{ label: defaultOption.label ?? 'Padrão', value: null }, ...options]\n : [...options];\n\n return (\n <div\n {...props}\n aria-label={label}\n className={[styles.picker, styles[size], className].filter(Boolean).join(' ')}\n role=\"radiogroup\"\n >\n {swatches.map((swatch) => (\n <Tooltip content={swatch.label} key={swatch.value ?? ''}>\n <label\n className={[styles.swatch, swatch.value === null && styles.none].filter(Boolean).join(' ')}\n style={{ backgroundColor: swatch.color }}\n >\n <input\n checked={controlled ? value === swatch.value : undefined}\n className={styles.input}\n defaultChecked={controlled ? undefined : defaultValue === swatch.value}\n disabled={disabled}\n name={name}\n onChange={() => onValueChange?.(swatch.value)}\n type=\"radio\"\n value={swatch.value ?? ''}\n />\n <IconCheck className={styles.check} />\n <span className={styles.hiddenText}>{swatch.label}</span>\n </label>\n </Tooltip>\n ))}\n </div>\n );\n}\n"],"names":["ColorPicker","className","defaultOption","defaultValue","disabled","label","providedName","onValueChange","options","size","value","props","generatedName","useId","name","controlled","swatches","jsx","styles","swatch","Tooltip","jsxs","IconCheck"],"mappings":"qQAoCO,SAASA,EAAY,CAC1B,UAAAC,EACA,cAAAC,EACA,aAAAC,EACA,SAAAC,EAAW,GACX,MAAAC,EACA,KAAMC,EACN,cAAAC,EACA,QAAAC,EACA,KAAAC,EAAO,KACP,MAAAC,EACA,GAAGC,CACL,EAAqB,CACnB,MAAMC,EAAgB,gBAAgBC,EAAAA,MAAA,CAAO,GACvCC,EAAOR,GAAgBM,EACvBG,EAAaL,IAAU,OACvBM,EAAqBd,EACvB,CAAC,CAAE,MAAOA,EAAc,OAAS,SAAU,MAAO,IAAA,EAAQ,GAAGM,CAAO,EACpE,CAAC,GAAGA,CAAO,EAEf,OACES,EAAAA,IAAC,MAAA,CACE,GAAGN,EACJ,aAAYN,EACZ,UAAW,CAACa,EAAAA,QAAO,OAAQA,EAAAA,QAAOT,CAAI,EAAGR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC5E,KAAK,aAEJ,SAAAe,EAAS,IAAKG,SACZC,UAAA,CAAQ,QAASD,EAAO,MACvB,SAAAE,EAAAA,KAAC,QAAA,CACC,UAAW,CAACH,EAAAA,QAAO,OAAQC,EAAO,QAAU,MAAQD,UAAO,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EACzF,MAAO,CAAE,gBAAiBC,EAAO,KAAA,EAEjC,SAAA,CAAAF,EAAAA,IAAC,QAAA,CACC,QAASF,EAAaL,IAAUS,EAAO,MAAQ,OAC/C,UAAWD,EAAAA,QAAO,MAClB,eAAgBH,EAAa,OAAYZ,IAAiBgB,EAAO,MACjE,SAAAf,EACA,KAAAU,EACA,SAAU,IAAMP,GAAA,YAAAA,EAAgBY,EAAO,OACvC,KAAK,QACL,MAAOA,EAAO,OAAS,EAAA,CAAA,EAEzBF,EAAAA,IAACK,EAAAA,UAAA,CAAU,UAAWJ,EAAAA,QAAO,KAAA,CAAO,QACnC,OAAA,CAAK,UAAWA,EAAAA,QAAO,WAAa,WAAO,KAAA,CAAM,CAAA,CAAA,CAAA,GAhBjBC,EAAO,OAAS,EAkBrD,CACD,CAAA,CAAA,CAGP"}
@@ -0,0 +1,57 @@
1
+ import { jsx as o, jsxs as N } from "react/jsx-runtime";
2
+ import { useId as j } from "react";
3
+ import l from "./ColorPicker.module.css.js";
4
+ import { Tooltip as x } from "../../overlays/Tooltip/Tooltip.js";
5
+ import { IconCheck as y } from "../../icons/icons.js";
6
+ function $({
7
+ className: d,
8
+ defaultOption: i,
9
+ defaultValue: m,
10
+ disabled: s = !1,
11
+ label: t,
12
+ name: p,
13
+ onValueChange: r,
14
+ options: a,
15
+ size: u = "md",
16
+ value: c,
17
+ ...v
18
+ }) {
19
+ const f = `color-picker-${j()}`, k = p ?? f, n = c !== void 0, b = i ? [{ label: i.label ?? "Padrão", value: null }, ...a] : [...a];
20
+ return /* @__PURE__ */ o(
21
+ "div",
22
+ {
23
+ ...v,
24
+ "aria-label": t,
25
+ className: [l.picker, l[u], d].filter(Boolean).join(" "),
26
+ role: "radiogroup",
27
+ children: b.map((e) => /* @__PURE__ */ o(x, { content: e.label, children: /* @__PURE__ */ N(
28
+ "label",
29
+ {
30
+ className: [l.swatch, e.value === null && l.none].filter(Boolean).join(" "),
31
+ style: { backgroundColor: e.color },
32
+ children: [
33
+ /* @__PURE__ */ o(
34
+ "input",
35
+ {
36
+ checked: n ? c === e.value : void 0,
37
+ className: l.input,
38
+ defaultChecked: n ? void 0 : m === e.value,
39
+ disabled: s,
40
+ name: k,
41
+ onChange: () => r == null ? void 0 : r(e.value),
42
+ type: "radio",
43
+ value: e.value ?? ""
44
+ }
45
+ ),
46
+ /* @__PURE__ */ o(y, { className: l.check }),
47
+ /* @__PURE__ */ o("span", { className: l.hiddenText, children: e.label })
48
+ ]
49
+ }
50
+ ) }, e.value ?? ""))
51
+ }
52
+ );
53
+ }
54
+ export {
55
+ $ as ColorPicker
56
+ };
57
+ //# sourceMappingURL=ColorPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.js","sources":["../../../../src/components/forms/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import { useId, type ComponentPropsWithRef } from 'react';\nimport { IconCheck } from '../../icons';\nimport { Tooltip } from '../../overlays/Tooltip';\nimport styles from './ColorPicker.module.css';\n\nexport interface ColorPickerOption {\n /** Qualquer cor do CSS; é só o desenho da amostra. */\n color: string;\n /** Nome da cor: é o que o leitor de tela anuncia e o que aparece como dica. */\n label: string;\n value: string;\n}\n\nexport type ColorPickerSize = 'sm' | 'md';\n\nexport interface ColorPickerProps extends Omit<ComponentPropsWithRef<'div'>, 'defaultValue' | 'onChange'> {\n /** Primeira amostra, que significa sem cor: escolhida, o valor é `null`. */\n defaultOption?: { label?: string };\n defaultValue?: string | null;\n disabled?: boolean;\n /** Nome do grupo, para o leitor de tela. */\n label: string;\n name?: string;\n onValueChange?: (value: string | null) => void;\n options: readonly ColorPickerOption[];\n size?: ColorPickerSize;\n value?: string | null;\n}\n\ninterface Swatch {\n color?: string;\n label: string;\n value: string | null;\n}\n\n/** Escolha de cor por amostras. Por baixo são rádios nativos: setas, Tab e formulário vêm do navegador. */\nexport function ColorPicker({\n className,\n defaultOption,\n defaultValue,\n disabled = false,\n label,\n name: providedName,\n onValueChange,\n options,\n size = 'md',\n value,\n ...props\n}: ColorPickerProps) {\n const generatedName = `color-picker-${useId()}`;\n const name = providedName ?? generatedName;\n const controlled = value !== undefined;\n const swatches: Swatch[] = defaultOption\n ? [{ label: defaultOption.label ?? 'Padrão', value: null }, ...options]\n : [...options];\n\n return (\n <div\n {...props}\n aria-label={label}\n className={[styles.picker, styles[size], className].filter(Boolean).join(' ')}\n role=\"radiogroup\"\n >\n {swatches.map((swatch) => (\n <Tooltip content={swatch.label} key={swatch.value ?? ''}>\n <label\n className={[styles.swatch, swatch.value === null && styles.none].filter(Boolean).join(' ')}\n style={{ backgroundColor: swatch.color }}\n >\n <input\n checked={controlled ? value === swatch.value : undefined}\n className={styles.input}\n defaultChecked={controlled ? undefined : defaultValue === swatch.value}\n disabled={disabled}\n name={name}\n onChange={() => onValueChange?.(swatch.value)}\n type=\"radio\"\n value={swatch.value ?? ''}\n />\n <IconCheck className={styles.check} />\n <span className={styles.hiddenText}>{swatch.label}</span>\n </label>\n </Tooltip>\n ))}\n </div>\n );\n}\n"],"names":["ColorPicker","className","defaultOption","defaultValue","disabled","label","providedName","onValueChange","options","size","value","props","generatedName","useId","name","controlled","swatches","jsx","styles","swatch","Tooltip","jsxs","IconCheck"],"mappings":";;;;;AAoCO,SAASA,EAAY;AAAA,EAC1B,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,MAAMC;AAAA,EACN,eAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAgB,gBAAgBC,EAAA,CAAO,IACvCC,IAAOR,KAAgBM,GACvBG,IAAaL,MAAU,QACvBM,IAAqBd,IACvB,CAAC,EAAE,OAAOA,EAAc,SAAS,UAAU,OAAO,KAAA,GAAQ,GAAGM,CAAO,IACpE,CAAC,GAAGA,CAAO;AAEf,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGN;AAAA,MACJ,cAAYN;AAAA,MACZ,WAAW,CAACa,EAAO,QAAQA,EAAOT,CAAI,GAAGR,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC5E,MAAK;AAAA,MAEJ,UAAAe,EAAS,IAAI,CAACG,wBACZC,GAAA,EAAQ,SAASD,EAAO,OACvB,UAAA,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,CAACH,EAAO,QAAQC,EAAO,UAAU,QAAQD,EAAO,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,UACzF,OAAO,EAAE,iBAAiBC,EAAO,MAAA;AAAA,UAEjC,UAAA;AAAA,YAAA,gBAAAF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAASF,IAAaL,MAAUS,EAAO,QAAQ;AAAA,gBAC/C,WAAWD,EAAO;AAAA,gBAClB,gBAAgBH,IAAa,SAAYZ,MAAiBgB,EAAO;AAAA,gBACjE,UAAAf;AAAA,gBACA,MAAAU;AAAA,gBACA,UAAU,MAAMP,KAAA,gBAAAA,EAAgBY,EAAO;AAAA,gBACvC,MAAK;AAAA,gBACL,OAAOA,EAAO,SAAS;AAAA,cAAA;AAAA,YAAA;AAAA,YAEzB,gBAAAF,EAACK,GAAA,EAAU,WAAWJ,EAAO,MAAA,CAAO;AAAA,8BACnC,QAAA,EAAK,WAAWA,EAAO,YAAa,YAAO,MAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,KAhBjBC,EAAO,SAAS,EAkBrD,CACD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c="_picker_1crw3_2",e="_sm_1crw3_8",t="_md_1crw3_13",n="_swatch_1crw3_19",_="_none_1crw3_34",s="_input_1crw3_45",o="_check_1crw3_54",r="_hiddenText_1crw3_85",d={picker:c,sm:e,md:t,swatch:n,none:_,input:s,check:o,hiddenText:r};exports.check=o;exports.default=d;exports.hiddenText=r;exports.input=s;exports.md=t;exports.none=_;exports.picker=c;exports.sm=e;exports.swatch=n;
2
+ //# sourceMappingURL=ColorPicker.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ const c = "_picker_1crw3_2", _ = "_sm_1crw3_8", n = "_md_1crw3_13", t = "_swatch_1crw3_19", e = "_none_1crw3_34", s = "_input_1crw3_45", o = "_check_1crw3_54", r = "_hiddenText_1crw3_85", w = {
2
+ picker: c,
3
+ sm: _,
4
+ md: n,
5
+ swatch: t,
6
+ none: e,
7
+ input: s,
8
+ check: o,
9
+ hiddenText: r
10
+ };
11
+ export {
12
+ o as check,
13
+ w as default,
14
+ r as hiddenText,
15
+ s as input,
16
+ n as md,
17
+ e as none,
18
+ c as picker,
19
+ _ as sm,
20
+ t as swatch
21
+ };
22
+ //# sourceMappingURL=ColorPicker.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.cjs","sources":["../../../../src/components/forms/ComboBox/ComboBox.tsx"],"sourcesContent":["import {\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport { useOverlayPosition } from '@react-aria/overlays';\nimport { ListingOptions, optionId } from '../../data-display/List/ListingOptions';\nimport { useListing, type ListingItem } from '../../data-display/List/useListing';\nimport { Badge } from '../../data-display/Badge';\nimport { useFormReset } from '../../../hooks/useFormReset';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport { Field } from '../Field';\nimport { FormValue } from '../Field/FormValue';\nimport styles from './ComboBox.module.css';\n\nexport type ComboBoxSize = 'sm' | 'md';\n\nexport interface ComboBoxOption {\n disabled?: boolean;\n label: string;\n value: string;\n}\n\n/** As propriedades nativas vao ao campo de texto, que e o controle; o `className` soma ao do sistema. */\ninterface ComboBoxBaseProps\n extends Omit<ComponentPropsWithRef<'input'>, 'defaultValue' | 'name' | 'onChange' | 'size' | 'type' | 'value'> {\n emptyMessage?: string;\n error?: string;\n hint?: string;\n label?: string;\n /**\n * Nome do campo no formulario. Com ele, um input oculto carrega o valor para\n * o `FormData`: sem controle nativo por baixo, o envio ignorava o campo.\n */\n name?: string;\n loading?: boolean;\n onSearch?: (term: string) => void;\n options: readonly ComboBoxOption[];\n size?: ComboBoxSize;\n}\n\nexport interface ComboBoxSingleProps extends ComboBoxBaseProps {\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n selectionMode?: 'single';\n value?: string;\n}\n\nexport interface ComboBoxMultipleProps extends ComboBoxBaseProps {\n defaultValue?: readonly string[];\n onValueChange?: (values: readonly string[]) => void;\n selectionMode: 'multiple';\n value?: readonly string[];\n}\n\nexport type ComboBoxProps = ComboBoxSingleProps | ComboBoxMultipleProps;\n\nfunction comoItens(valor: string | readonly string[] | undefined): ListingItem[] | undefined {\n if (valor === undefined) {\n return undefined;\n }\n\n return (typeof valor === 'string' ? [valor] : valor).map((value) => ({ value, label: '' }));\n}\n\nfunction relatarEscolha(props: ComboBoxProps, escolhidos: readonly ListingItem[]) {\n if (props.selectionMode === 'multiple') {\n props.onValueChange?.(escolhidos.map((item) => item.value));\n return;\n }\n\n const [primeiro] = escolhidos;\n\n if (primeiro) {\n props.onValueChange?.(primeiro.value);\n }\n}\n\nexport function ComboBox(allProps: ComboBoxProps) {\n const {\n 'aria-describedby': ariaDescribedBy,\n className,\n defaultValue,\n name,\n disabled = false,\n emptyMessage = 'Nenhum resultado',\n error,\n hint,\n id: providedId,\n label,\n loading = false,\n onBlur,\n onClick,\n onKeyDown,\n onSearch,\n // Fora do resto, que vai ao campo: quem o chama e `relatarEscolha`, que conhece o modo.\n onValueChange,\n options,\n placeholder,\n ref,\n required = false,\n selectionMode = 'single',\n size = 'md',\n value,\n ...props\n } = allProps;\n const multiple = selectionMode === 'multiple';\n const inputRef = useRef<HTMLInputElement>(null);\n const controlRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const baseId = `combobox-${useId()}`;\n const [open, setOpen] = useState(false);\n const [filtering, setFiltering] = useState(false);\n const resetRef = useFormReset<HTMLInputElement>(() => {\n listing.reset();\n fechar();\n });\n const mergedRef = useMergedRefs(inputRef, resetRef, ref);\n\n // O valor e a chave, e nao a opcao: com opcoes que chegam depois, filtrar por elas perdia a escolha.\n const listing = useListing({\n items: options,\n selectionMode,\n defaultValue: comoItens(defaultValue),\n value: comoItens(value),\n onSearch,\n onSelectionChange: (escolhidos) => relatarEscolha(allProps, escolhidos),\n });\n\n const escolhidos = listing.selected;\n const [chosen] = escolhidos;\n // Na escolha multipla o campo so guarda a busca: quem mostra o que esta escolhido sao as etiquetas.\n const texto = multiple || filtering ? listing.term : chosen?.label ?? '';\n const ancoraRef = multiple ? controlRef : inputRef;\n const activeIndex = listing.visible.findIndex((option) => option.value === listing.focusedKey);\n\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: ancoraRef,\n overlayRef: panelRef,\n placement: 'bottom start',\n offset: 6,\n containerPadding: 8,\n isOpen: open,\n });\n const [largura, setLargura] = useState<number>();\n const alturaMaxima = Math.min(Number(positionProps.style?.maxHeight) || 280, 280);\n\n useLayoutEffect(() => {\n setLargura(ancoraRef.current?.offsetWidth);\n }, [ancoraRef, open]);\n\n // Sem medida, como no servidor, o campo resume as escolhas; medido, mostra todas as etiquetas enquanto couberem.\n const [resumir, setResumir] = useState(true);\n const selecaoRef = useRef<HTMLSpanElement>(null);\n const chaveDasEscolhas = escolhidos.map((item) => item.value).join('\\n');\n\n useLayoutEffect(() => {\n const moldura = controlRef.current;\n\n if (!moldura || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n // Desenhar todas e medir na mesma passada, antes da pintura, para o campo nao piscar ao redimensionar.\n const observador = new ResizeObserver(() => {\n flushSync(() => setResumir(false));\n const selecao = selecaoRef.current;\n flushSync(() => setResumir(Boolean(selecao && selecao.scrollWidth > selecao.clientWidth)));\n });\n\n observador.observe(moldura);\n\n return () => observador.disconnect();\n }, [chaveDasEscolhas, multiple]);\n\n function encerrarFiltro() {\n setFiltering(false);\n listing.filter('');\n }\n\n function fechar() {\n setOpen(false);\n encerrarFiltro();\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n onKeyDown?.(event);\n\n if (event.key === 'ArrowDown' && !open) {\n event.preventDefault();\n setOpen(true);\n listing.focusFirst();\n return;\n }\n\n if (event.key === 'Escape') {\n fechar();\n return;\n }\n\n if (event.key === 'Enter') {\n const alvo = listing.visible.find((option) => option.value === listing.focusedKey);\n\n if (open && alvo && !alvo.disabled) {\n event.preventDefault();\n listing.select(alvo);\n\n if (!multiple) {\n fechar();\n }\n }\n return;\n }\n\n const ultimo = escolhidos[escolhidos.length - 1];\n\n if (event.key === 'Backspace' && multiple && texto === '' && ultimo) {\n listing.select(ultimo);\n return;\n }\n\n listing.handleKeyDown(event);\n }\n\n return (\n <Field aria-describedby={ariaDescribedBy} error={error} hint={hint} id={providedId} label={label} required={required}>\n {({ id, describedBy, invalid }) => {\n const resumoId = id + '-selection';\n const campo = (\n <input\n {...props}\n ref={mergedRef}\n className={[multiple ? styles.search : styles.input, !multiple && styles[size], !multiple && error && styles.error, className]\n .filter(Boolean)\n .join(' ')}\n id={id}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n aria-describedby={[describedBy, multiple && escolhidos.length > 0 && resumoId].filter(Boolean).join(' ') || undefined}\n aria-invalid={invalid || undefined}\n aria-expanded={open}\n aria-autocomplete=\"list\"\n aria-controls={open ? baseId + '-options' : undefined}\n aria-activedescendant={open && activeIndex >= 0 ? optionId(baseId, activeIndex) : undefined}\n aria-required={required || undefined}\n disabled={disabled}\n placeholder={placeholder}\n value={texto}\n // Sair do campo desfaz a busca: o texto volta a dizer o que esta escolhido.\n onBlur={(event: FocusEvent<HTMLInputElement>) => {\n fechar();\n onBlur?.(event);\n }}\n onChange={(event) => {\n setFiltering(true);\n setOpen(true);\n listing.filter(event.target.value);\n }}\n onClick={(event: MouseEvent<HTMLInputElement>) => {\n setOpen(true);\n onClick?.(event);\n }}\n onKeyDown={handleKeyDown}\n />\n );\n\n return (\n <>\n {(escolhidos.length > 0 ? escolhidos : [undefined]).map((item) => (\n <FormValue\n disabled={disabled}\n key={item?.value ?? ''}\n name={name}\n onFocus={() => inputRef.current?.focus()}\n required={required}\n value={item?.value ?? ''}\n />\n ))}\n {multiple ? (\n <div\n className={[styles.control, styles[size], error && styles.error].filter(Boolean).join(' ')}\n // O clique na moldura, fora do campo, leva o foco a ele em vez de tira-lo.\n onMouseDown={(event) => {\n if (event.target !== inputRef.current) {\n event.preventDefault();\n inputRef.current?.focus();\n }\n }}\n ref={controlRef}\n >\n {chosen && (\n <>\n <span aria-hidden=\"true\" className={styles.selection} ref={selecaoRef}>\n {(resumir ? [chosen] : escolhidos).map((item) => (\n <Badge key={item.value}>{item.label}</Badge>\n ))}\n {resumir && escolhidos.length > 1 && (\n <span className={styles.rest}>+{escolhidos.length - 1}</span>\n )}\n </span>\n <span className={styles.summary} id={resumoId}>\n {escolhidos.length === 1 ? '1 selecionado' : `${escolhidos.length} selecionados`}:{' '}\n {escolhidos.map((item) => item.label).join(', ')}\n </span>\n </>\n )}\n {campo}\n </div>\n ) : (\n campo\n )}\n {open &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n // Camada de cima: o `ariaHideOutside` do Dialog ignora quem a declara.\n data-react-aria-top-layer=\"true\"\n // O clique no painel, fora de uma opcao, nao tira o foco do campo nem fecha a lista.\n onMouseDown={(event) => event.preventDefault()}\n style={{ ...positionProps.style, width: largura, maxHeight: alturaMaxima }}\n >\n <ListingOptions\n baseId={baseId}\n empty={<p className={styles.empty}>{emptyMessage}</p>}\n holdsFocus={false}\n label={label ?? placeholder ?? 'Opções'}\n listing={listing}\n loading={loading}\n onSelect={multiple ? undefined : fechar}\n />\n </div>,\n document.body,\n )}\n </>\n );\n }}\n </Field>\n );\n}\n"],"names":["comoItens","valor","value","relatarEscolha","props","escolhidos","_a","item","primeiro","_b","ComboBox","allProps","ariaDescribedBy","className","defaultValue","name","disabled","emptyMessage","error","hint","providedId","label","loading","onBlur","onClick","onKeyDown","onSearch","onValueChange","options","placeholder","ref","required","selectionMode","size","multiple","inputRef","useRef","controlRef","panelRef","baseId","useId","open","setOpen","useState","filtering","setFiltering","resetRef","useFormReset","listing","fechar","mergedRef","useMergedRefs","useListing","chosen","texto","ancoraRef","activeIndex","option","positionProps","useOverlayPosition","largura","setLargura","alturaMaxima","useLayoutEffect","resumir","setResumir","selecaoRef","chaveDasEscolhas","moldura","observador","flushSync","selecao","encerrarFiltro","handleKeyDown","event","alvo","ultimo","jsx","Field","id","describedBy","invalid","resumoId","campo","styles","optionId","jsxs","Fragment","FormValue","Badge","createPortal","ListingOptions"],"mappings":"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"}
1
+ {"version":3,"file":"ComboBox.cjs","sources":["../../../../src/components/forms/ComboBox/ComboBox.tsx"],"sourcesContent":["import {\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport { useOverlayPosition } from '@react-aria/overlays';\nimport { ListingOptions, optionId } from '../../data-display/List/ListingOptions';\nimport { useListing, type ListingItem } from '../../data-display/List/useListing';\nimport { Badge } from '../../data-display/Badge';\nimport { useFormReset } from '../../../hooks/useFormReset';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport { Field } from '../Field';\nimport { FormValue } from '../Field/FormValue';\nimport styles from './ComboBox.module.css';\n\nexport type ComboBoxSize = 'sm' | 'md';\n\nexport interface ComboBoxOption {\n /** Segunda linha da opção, como a coleção de um documento. A busca local procura só no rótulo. */\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. */\n icon?: ReactNode;\n label: string;\n value: string;\n}\n\n/** As propriedades nativas vao ao campo de texto, que e o controle; o `className` soma ao do sistema. */\ninterface ComboBoxBaseProps\n extends Omit<ComponentPropsWithRef<'input'>, 'defaultValue' | 'name' | 'onChange' | 'size' | 'type' | 'value'> {\n emptyMessage?: string;\n error?: string;\n hint?: string;\n label?: string;\n /**\n * Nome do campo no formulario. Com ele, um input oculto carrega o valor para\n * o `FormData`: sem controle nativo por baixo, o envio ignorava o campo.\n */\n name?: string;\n loading?: boolean;\n onSearch?: (term: string) => void;\n options: readonly ComboBoxOption[];\n size?: ComboBoxSize;\n}\n\nexport interface ComboBoxSingleProps extends ComboBoxBaseProps {\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n selectionMode?: 'single';\n value?: string;\n}\n\nexport interface ComboBoxMultipleProps extends ComboBoxBaseProps {\n defaultValue?: readonly string[];\n onValueChange?: (values: readonly string[]) => void;\n selectionMode: 'multiple';\n value?: readonly string[];\n}\n\nexport type ComboBoxProps = ComboBoxSingleProps | ComboBoxMultipleProps;\n\nfunction comoItens(valor: string | readonly string[] | undefined): ListingItem[] | undefined {\n if (valor === undefined) {\n return undefined;\n }\n\n return (typeof valor === 'string' ? [valor] : valor).map((value) => ({ value, label: '' }));\n}\n\nfunction relatarEscolha(props: ComboBoxProps, escolhidos: readonly ListingItem[]) {\n if (props.selectionMode === 'multiple') {\n props.onValueChange?.(escolhidos.map((item) => item.value));\n return;\n }\n\n const [primeiro] = escolhidos;\n\n if (primeiro) {\n props.onValueChange?.(primeiro.value);\n }\n}\n\nexport function ComboBox(allProps: ComboBoxProps) {\n const {\n 'aria-describedby': ariaDescribedBy,\n className,\n defaultValue,\n name,\n disabled = false,\n emptyMessage = 'Nenhum resultado',\n error,\n hint,\n id: providedId,\n label,\n loading = false,\n onBlur,\n onClick,\n onKeyDown,\n onSearch,\n // Fora do resto, que vai ao campo: quem o chama e `relatarEscolha`, que conhece o modo.\n onValueChange,\n options,\n placeholder,\n ref,\n required = false,\n selectionMode = 'single',\n size = 'md',\n value,\n ...props\n } = allProps;\n const multiple = selectionMode === 'multiple';\n const inputRef = useRef<HTMLInputElement>(null);\n const controlRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const baseId = `combobox-${useId()}`;\n const [open, setOpen] = useState(false);\n const [filtering, setFiltering] = useState(false);\n const resetRef = useFormReset<HTMLInputElement>(() => {\n listing.reset();\n fechar();\n });\n const mergedRef = useMergedRefs(inputRef, resetRef, ref);\n\n // O valor e a chave, e nao a opcao: com opcoes que chegam depois, filtrar por elas perdia a escolha.\n const listing = useListing({\n items: options,\n selectionMode,\n defaultValue: comoItens(defaultValue),\n value: comoItens(value),\n onSearch,\n onSelectionChange: (escolhidos) => relatarEscolha(allProps, escolhidos),\n });\n\n const escolhidos = listing.selected;\n const [chosen] = escolhidos;\n // Na escolha multipla o campo so guarda a busca: quem mostra o que esta escolhido sao as etiquetas.\n const texto = multiple || filtering ? listing.term : chosen?.label ?? '';\n const ancoraRef = multiple ? controlRef : inputRef;\n const activeIndex = listing.visible.findIndex((option) => option.value === listing.focusedKey);\n\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: ancoraRef,\n overlayRef: panelRef,\n placement: 'bottom start',\n offset: 6,\n containerPadding: 8,\n isOpen: open,\n });\n const [largura, setLargura] = useState<number>();\n const alturaMaxima = Math.min(Number(positionProps.style?.maxHeight) || 280, 280);\n\n useLayoutEffect(() => {\n setLargura(ancoraRef.current?.offsetWidth);\n }, [ancoraRef, open]);\n\n // Sem medida, como no servidor, o campo resume as escolhas; medido, mostra todas as etiquetas enquanto couberem.\n const [resumir, setResumir] = useState(true);\n const selecaoRef = useRef<HTMLSpanElement>(null);\n const chaveDasEscolhas = escolhidos.map((item) => item.value).join('\\n');\n\n useLayoutEffect(() => {\n const moldura = controlRef.current;\n\n if (!moldura || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n // Desenhar todas e medir na mesma passada, antes da pintura, para o campo nao piscar ao redimensionar.\n const observador = new ResizeObserver(() => {\n flushSync(() => setResumir(false));\n const selecao = selecaoRef.current;\n flushSync(() => setResumir(Boolean(selecao && selecao.scrollWidth > selecao.clientWidth)));\n });\n\n observador.observe(moldura);\n\n return () => observador.disconnect();\n }, [chaveDasEscolhas, multiple]);\n\n function encerrarFiltro() {\n setFiltering(false);\n listing.filter('');\n }\n\n function fechar() {\n setOpen(false);\n encerrarFiltro();\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n onKeyDown?.(event);\n\n if (event.key === 'ArrowDown' && !open) {\n event.preventDefault();\n setOpen(true);\n listing.focusFirst();\n return;\n }\n\n if (event.key === 'Escape') {\n fechar();\n return;\n }\n\n if (event.key === 'Enter') {\n const alvo = listing.visible.find((option) => option.value === listing.focusedKey);\n\n if (open && alvo && !alvo.disabled) {\n event.preventDefault();\n listing.select(alvo);\n\n if (!multiple) {\n fechar();\n }\n }\n return;\n }\n\n const ultimo = escolhidos[escolhidos.length - 1];\n\n if (event.key === 'Backspace' && multiple && texto === '' && ultimo) {\n listing.select(ultimo);\n return;\n }\n\n listing.handleKeyDown(event);\n }\n\n return (\n <Field aria-describedby={ariaDescribedBy} error={error} hint={hint} id={providedId} label={label} required={required}>\n {({ id, describedBy, invalid }) => {\n const resumoId = id + '-selection';\n const campo = (\n <input\n {...props}\n ref={mergedRef}\n className={[multiple ? styles.search : styles.input, !multiple && styles[size], !multiple && error && styles.error, className]\n .filter(Boolean)\n .join(' ')}\n id={id}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n aria-describedby={[describedBy, multiple && escolhidos.length > 0 && resumoId].filter(Boolean).join(' ') || undefined}\n aria-invalid={invalid || undefined}\n aria-expanded={open}\n aria-autocomplete=\"list\"\n aria-controls={open ? baseId + '-options' : undefined}\n aria-activedescendant={open && activeIndex >= 0 ? optionId(baseId, activeIndex) : undefined}\n aria-required={required || undefined}\n disabled={disabled}\n placeholder={placeholder}\n value={texto}\n // Sair do campo desfaz a busca: o texto volta a dizer o que esta escolhido.\n onBlur={(event: FocusEvent<HTMLInputElement>) => {\n fechar();\n onBlur?.(event);\n }}\n onChange={(event) => {\n setFiltering(true);\n setOpen(true);\n listing.filter(event.target.value);\n }}\n onClick={(event: MouseEvent<HTMLInputElement>) => {\n setOpen(true);\n onClick?.(event);\n }}\n onKeyDown={handleKeyDown}\n />\n );\n\n return (\n <>\n {(escolhidos.length > 0 ? escolhidos : [undefined]).map((item) => (\n <FormValue\n disabled={disabled}\n key={item?.value ?? ''}\n name={name}\n onFocus={() => inputRef.current?.focus()}\n required={required}\n value={item?.value ?? ''}\n />\n ))}\n {multiple ? (\n <div\n className={[styles.control, styles[size], error && styles.error].filter(Boolean).join(' ')}\n // O clique na moldura, fora do campo, leva o foco a ele em vez de tira-lo.\n onMouseDown={(event) => {\n if (event.target !== inputRef.current) {\n event.preventDefault();\n inputRef.current?.focus();\n }\n }}\n ref={controlRef}\n >\n {chosen && (\n <>\n <span aria-hidden=\"true\" className={styles.selection} ref={selecaoRef}>\n {(resumir ? [chosen] : escolhidos).map((item) => (\n <Badge key={item.value}>{item.label}</Badge>\n ))}\n {resumir && escolhidos.length > 1 && (\n <span className={styles.rest}>+{escolhidos.length - 1}</span>\n )}\n </span>\n <span className={styles.summary} id={resumoId}>\n {escolhidos.length === 1 ? '1 selecionado' : `${escolhidos.length} selecionados`}:{' '}\n {escolhidos.map((item) => item.label).join(', ')}\n </span>\n </>\n )}\n {campo}\n </div>\n ) : (\n campo\n )}\n {open &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n // Camada de cima: o `ariaHideOutside` do Dialog ignora quem a declara.\n data-react-aria-top-layer=\"true\"\n // O clique no painel, fora de uma opcao, nao tira o foco do campo nem fecha a lista.\n onMouseDown={(event) => event.preventDefault()}\n style={{ ...positionProps.style, width: largura, maxHeight: alturaMaxima }}\n >\n <ListingOptions\n baseId={baseId}\n empty={<p className={styles.empty}>{emptyMessage}</p>}\n holdsFocus={false}\n label={label ?? placeholder ?? 'Opções'}\n listing={listing}\n loading={loading}\n onSelect={multiple ? undefined : fechar}\n />\n </div>,\n document.body,\n )}\n </>\n );\n }}\n </Field>\n );\n}\n"],"names":["comoItens","valor","value","relatarEscolha","props","escolhidos","_a","item","primeiro","_b","ComboBox","allProps","ariaDescribedBy","className","defaultValue","name","disabled","emptyMessage","error","hint","providedId","label","loading","onBlur","onClick","onKeyDown","onSearch","onValueChange","options","placeholder","ref","required","selectionMode","size","multiple","inputRef","useRef","controlRef","panelRef","baseId","useId","open","setOpen","useState","filtering","setFiltering","resetRef","useFormReset","listing","fechar","mergedRef","useMergedRefs","useListing","chosen","texto","ancoraRef","activeIndex","option","positionProps","useOverlayPosition","largura","setLargura","alturaMaxima","useLayoutEffect","resumir","setResumir","selecaoRef","chaveDasEscolhas","moldura","observador","flushSync","selecao","encerrarFiltro","handleKeyDown","event","alvo","ultimo","jsx","Field","id","describedBy","invalid","resumoId","campo","styles","optionId","jsxs","Fragment","FormValue","Badge","createPortal","ListingOptions"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.js","sources":["../../../../src/components/forms/ComboBox/ComboBox.tsx"],"sourcesContent":["import {\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport { useOverlayPosition } from '@react-aria/overlays';\nimport { ListingOptions, optionId } from '../../data-display/List/ListingOptions';\nimport { useListing, type ListingItem } from '../../data-display/List/useListing';\nimport { Badge } from '../../data-display/Badge';\nimport { useFormReset } from '../../../hooks/useFormReset';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport { Field } from '../Field';\nimport { FormValue } from '../Field/FormValue';\nimport styles from './ComboBox.module.css';\n\nexport type ComboBoxSize = 'sm' | 'md';\n\nexport interface ComboBoxOption {\n disabled?: boolean;\n label: string;\n value: string;\n}\n\n/** As propriedades nativas vao ao campo de texto, que e o controle; o `className` soma ao do sistema. */\ninterface ComboBoxBaseProps\n extends Omit<ComponentPropsWithRef<'input'>, 'defaultValue' | 'name' | 'onChange' | 'size' | 'type' | 'value'> {\n emptyMessage?: string;\n error?: string;\n hint?: string;\n label?: string;\n /**\n * Nome do campo no formulario. Com ele, um input oculto carrega o valor para\n * o `FormData`: sem controle nativo por baixo, o envio ignorava o campo.\n */\n name?: string;\n loading?: boolean;\n onSearch?: (term: string) => void;\n options: readonly ComboBoxOption[];\n size?: ComboBoxSize;\n}\n\nexport interface ComboBoxSingleProps extends ComboBoxBaseProps {\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n selectionMode?: 'single';\n value?: string;\n}\n\nexport interface ComboBoxMultipleProps extends ComboBoxBaseProps {\n defaultValue?: readonly string[];\n onValueChange?: (values: readonly string[]) => void;\n selectionMode: 'multiple';\n value?: readonly string[];\n}\n\nexport type ComboBoxProps = ComboBoxSingleProps | ComboBoxMultipleProps;\n\nfunction comoItens(valor: string | readonly string[] | undefined): ListingItem[] | undefined {\n if (valor === undefined) {\n return undefined;\n }\n\n return (typeof valor === 'string' ? [valor] : valor).map((value) => ({ value, label: '' }));\n}\n\nfunction relatarEscolha(props: ComboBoxProps, escolhidos: readonly ListingItem[]) {\n if (props.selectionMode === 'multiple') {\n props.onValueChange?.(escolhidos.map((item) => item.value));\n return;\n }\n\n const [primeiro] = escolhidos;\n\n if (primeiro) {\n props.onValueChange?.(primeiro.value);\n }\n}\n\nexport function ComboBox(allProps: ComboBoxProps) {\n const {\n 'aria-describedby': ariaDescribedBy,\n className,\n defaultValue,\n name,\n disabled = false,\n emptyMessage = 'Nenhum resultado',\n error,\n hint,\n id: providedId,\n label,\n loading = false,\n onBlur,\n onClick,\n onKeyDown,\n onSearch,\n // Fora do resto, que vai ao campo: quem o chama e `relatarEscolha`, que conhece o modo.\n onValueChange,\n options,\n placeholder,\n ref,\n required = false,\n selectionMode = 'single',\n size = 'md',\n value,\n ...props\n } = allProps;\n const multiple = selectionMode === 'multiple';\n const inputRef = useRef<HTMLInputElement>(null);\n const controlRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const baseId = `combobox-${useId()}`;\n const [open, setOpen] = useState(false);\n const [filtering, setFiltering] = useState(false);\n const resetRef = useFormReset<HTMLInputElement>(() => {\n listing.reset();\n fechar();\n });\n const mergedRef = useMergedRefs(inputRef, resetRef, ref);\n\n // O valor e a chave, e nao a opcao: com opcoes que chegam depois, filtrar por elas perdia a escolha.\n const listing = useListing({\n items: options,\n selectionMode,\n defaultValue: comoItens(defaultValue),\n value: comoItens(value),\n onSearch,\n onSelectionChange: (escolhidos) => relatarEscolha(allProps, escolhidos),\n });\n\n const escolhidos = listing.selected;\n const [chosen] = escolhidos;\n // Na escolha multipla o campo so guarda a busca: quem mostra o que esta escolhido sao as etiquetas.\n const texto = multiple || filtering ? listing.term : chosen?.label ?? '';\n const ancoraRef = multiple ? controlRef : inputRef;\n const activeIndex = listing.visible.findIndex((option) => option.value === listing.focusedKey);\n\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: ancoraRef,\n overlayRef: panelRef,\n placement: 'bottom start',\n offset: 6,\n containerPadding: 8,\n isOpen: open,\n });\n const [largura, setLargura] = useState<number>();\n const alturaMaxima = Math.min(Number(positionProps.style?.maxHeight) || 280, 280);\n\n useLayoutEffect(() => {\n setLargura(ancoraRef.current?.offsetWidth);\n }, [ancoraRef, open]);\n\n // Sem medida, como no servidor, o campo resume as escolhas; medido, mostra todas as etiquetas enquanto couberem.\n const [resumir, setResumir] = useState(true);\n const selecaoRef = useRef<HTMLSpanElement>(null);\n const chaveDasEscolhas = escolhidos.map((item) => item.value).join('\\n');\n\n useLayoutEffect(() => {\n const moldura = controlRef.current;\n\n if (!moldura || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n // Desenhar todas e medir na mesma passada, antes da pintura, para o campo nao piscar ao redimensionar.\n const observador = new ResizeObserver(() => {\n flushSync(() => setResumir(false));\n const selecao = selecaoRef.current;\n flushSync(() => setResumir(Boolean(selecao && selecao.scrollWidth > selecao.clientWidth)));\n });\n\n observador.observe(moldura);\n\n return () => observador.disconnect();\n }, [chaveDasEscolhas, multiple]);\n\n function encerrarFiltro() {\n setFiltering(false);\n listing.filter('');\n }\n\n function fechar() {\n setOpen(false);\n encerrarFiltro();\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n onKeyDown?.(event);\n\n if (event.key === 'ArrowDown' && !open) {\n event.preventDefault();\n setOpen(true);\n listing.focusFirst();\n return;\n }\n\n if (event.key === 'Escape') {\n fechar();\n return;\n }\n\n if (event.key === 'Enter') {\n const alvo = listing.visible.find((option) => option.value === listing.focusedKey);\n\n if (open && alvo && !alvo.disabled) {\n event.preventDefault();\n listing.select(alvo);\n\n if (!multiple) {\n fechar();\n }\n }\n return;\n }\n\n const ultimo = escolhidos[escolhidos.length - 1];\n\n if (event.key === 'Backspace' && multiple && texto === '' && ultimo) {\n listing.select(ultimo);\n return;\n }\n\n listing.handleKeyDown(event);\n }\n\n return (\n <Field aria-describedby={ariaDescribedBy} error={error} hint={hint} id={providedId} label={label} required={required}>\n {({ id, describedBy, invalid }) => {\n const resumoId = id + '-selection';\n const campo = (\n <input\n {...props}\n ref={mergedRef}\n className={[multiple ? styles.search : styles.input, !multiple && styles[size], !multiple && error && styles.error, className]\n .filter(Boolean)\n .join(' ')}\n id={id}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n aria-describedby={[describedBy, multiple && escolhidos.length > 0 && resumoId].filter(Boolean).join(' ') || undefined}\n aria-invalid={invalid || undefined}\n aria-expanded={open}\n aria-autocomplete=\"list\"\n aria-controls={open ? baseId + '-options' : undefined}\n aria-activedescendant={open && activeIndex >= 0 ? optionId(baseId, activeIndex) : undefined}\n aria-required={required || undefined}\n disabled={disabled}\n placeholder={placeholder}\n value={texto}\n // Sair do campo desfaz a busca: o texto volta a dizer o que esta escolhido.\n onBlur={(event: FocusEvent<HTMLInputElement>) => {\n fechar();\n onBlur?.(event);\n }}\n onChange={(event) => {\n setFiltering(true);\n setOpen(true);\n listing.filter(event.target.value);\n }}\n onClick={(event: MouseEvent<HTMLInputElement>) => {\n setOpen(true);\n onClick?.(event);\n }}\n onKeyDown={handleKeyDown}\n />\n );\n\n return (\n <>\n {(escolhidos.length > 0 ? escolhidos : [undefined]).map((item) => (\n <FormValue\n disabled={disabled}\n key={item?.value ?? ''}\n name={name}\n onFocus={() => inputRef.current?.focus()}\n required={required}\n value={item?.value ?? ''}\n />\n ))}\n {multiple ? (\n <div\n className={[styles.control, styles[size], error && styles.error].filter(Boolean).join(' ')}\n // O clique na moldura, fora do campo, leva o foco a ele em vez de tira-lo.\n onMouseDown={(event) => {\n if (event.target !== inputRef.current) {\n event.preventDefault();\n inputRef.current?.focus();\n }\n }}\n ref={controlRef}\n >\n {chosen && (\n <>\n <span aria-hidden=\"true\" className={styles.selection} ref={selecaoRef}>\n {(resumir ? [chosen] : escolhidos).map((item) => (\n <Badge key={item.value}>{item.label}</Badge>\n ))}\n {resumir && escolhidos.length > 1 && (\n <span className={styles.rest}>+{escolhidos.length - 1}</span>\n )}\n </span>\n <span className={styles.summary} id={resumoId}>\n {escolhidos.length === 1 ? '1 selecionado' : `${escolhidos.length} selecionados`}:{' '}\n {escolhidos.map((item) => item.label).join(', ')}\n </span>\n </>\n )}\n {campo}\n </div>\n ) : (\n campo\n )}\n {open &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n // Camada de cima: o `ariaHideOutside` do Dialog ignora quem a declara.\n data-react-aria-top-layer=\"true\"\n // O clique no painel, fora de uma opcao, nao tira o foco do campo nem fecha a lista.\n onMouseDown={(event) => event.preventDefault()}\n style={{ ...positionProps.style, width: largura, maxHeight: alturaMaxima }}\n >\n <ListingOptions\n baseId={baseId}\n empty={<p className={styles.empty}>{emptyMessage}</p>}\n holdsFocus={false}\n label={label ?? placeholder ?? 'Opções'}\n listing={listing}\n loading={loading}\n onSelect={multiple ? undefined : fechar}\n />\n </div>,\n document.body,\n )}\n </>\n );\n }}\n </Field>\n );\n}\n"],"names":["comoItens","valor","value","relatarEscolha","props","escolhidos","_a","item","primeiro","_b","ComboBox","allProps","ariaDescribedBy","className","defaultValue","name","disabled","emptyMessage","error","hint","providedId","label","loading","onBlur","onClick","onKeyDown","onSearch","onValueChange","options","placeholder","ref","required","selectionMode","size","multiple","inputRef","useRef","controlRef","panelRef","baseId","useId","open","setOpen","useState","filtering","setFiltering","resetRef","useFormReset","listing","fechar","mergedRef","useMergedRefs","useListing","chosen","texto","ancoraRef","activeIndex","option","positionProps","useOverlayPosition","largura","setLargura","alturaMaxima","useLayoutEffect","resumir","setResumir","selecaoRef","chaveDasEscolhas","moldura","observador","flushSync","selecao","encerrarFiltro","handleKeyDown","event","alvo","ultimo","jsx","Field","id","describedBy","invalid","resumoId","campo","styles","optionId","jsxs","Fragment","FormValue","Badge","createPortal","ListingOptions"],"mappings":"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"}
1
+ {"version":3,"file":"ComboBox.js","sources":["../../../../src/components/forms/ComboBox/ComboBox.tsx"],"sourcesContent":["import {\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport { useOverlayPosition } from '@react-aria/overlays';\nimport { ListingOptions, optionId } from '../../data-display/List/ListingOptions';\nimport { useListing, type ListingItem } from '../../data-display/List/useListing';\nimport { Badge } from '../../data-display/Badge';\nimport { useFormReset } from '../../../hooks/useFormReset';\nimport { useMergedRefs } from '../../../hooks/useMergedRefs';\nimport { Field } from '../Field';\nimport { FormValue } from '../Field/FormValue';\nimport styles from './ComboBox.module.css';\n\nexport type ComboBoxSize = 'sm' | 'md';\n\nexport interface ComboBoxOption {\n /** Segunda linha da opção, como a coleção de um documento. A busca local procura só no rótulo. */\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. */\n icon?: ReactNode;\n label: string;\n value: string;\n}\n\n/** As propriedades nativas vao ao campo de texto, que e o controle; o `className` soma ao do sistema. */\ninterface ComboBoxBaseProps\n extends Omit<ComponentPropsWithRef<'input'>, 'defaultValue' | 'name' | 'onChange' | 'size' | 'type' | 'value'> {\n emptyMessage?: string;\n error?: string;\n hint?: string;\n label?: string;\n /**\n * Nome do campo no formulario. Com ele, um input oculto carrega o valor para\n * o `FormData`: sem controle nativo por baixo, o envio ignorava o campo.\n */\n name?: string;\n loading?: boolean;\n onSearch?: (term: string) => void;\n options: readonly ComboBoxOption[];\n size?: ComboBoxSize;\n}\n\nexport interface ComboBoxSingleProps extends ComboBoxBaseProps {\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n selectionMode?: 'single';\n value?: string;\n}\n\nexport interface ComboBoxMultipleProps extends ComboBoxBaseProps {\n defaultValue?: readonly string[];\n onValueChange?: (values: readonly string[]) => void;\n selectionMode: 'multiple';\n value?: readonly string[];\n}\n\nexport type ComboBoxProps = ComboBoxSingleProps | ComboBoxMultipleProps;\n\nfunction comoItens(valor: string | readonly string[] | undefined): ListingItem[] | undefined {\n if (valor === undefined) {\n return undefined;\n }\n\n return (typeof valor === 'string' ? [valor] : valor).map((value) => ({ value, label: '' }));\n}\n\nfunction relatarEscolha(props: ComboBoxProps, escolhidos: readonly ListingItem[]) {\n if (props.selectionMode === 'multiple') {\n props.onValueChange?.(escolhidos.map((item) => item.value));\n return;\n }\n\n const [primeiro] = escolhidos;\n\n if (primeiro) {\n props.onValueChange?.(primeiro.value);\n }\n}\n\nexport function ComboBox(allProps: ComboBoxProps) {\n const {\n 'aria-describedby': ariaDescribedBy,\n className,\n defaultValue,\n name,\n disabled = false,\n emptyMessage = 'Nenhum resultado',\n error,\n hint,\n id: providedId,\n label,\n loading = false,\n onBlur,\n onClick,\n onKeyDown,\n onSearch,\n // Fora do resto, que vai ao campo: quem o chama e `relatarEscolha`, que conhece o modo.\n onValueChange,\n options,\n placeholder,\n ref,\n required = false,\n selectionMode = 'single',\n size = 'md',\n value,\n ...props\n } = allProps;\n const multiple = selectionMode === 'multiple';\n const inputRef = useRef<HTMLInputElement>(null);\n const controlRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const baseId = `combobox-${useId()}`;\n const [open, setOpen] = useState(false);\n const [filtering, setFiltering] = useState(false);\n const resetRef = useFormReset<HTMLInputElement>(() => {\n listing.reset();\n fechar();\n });\n const mergedRef = useMergedRefs(inputRef, resetRef, ref);\n\n // O valor e a chave, e nao a opcao: com opcoes que chegam depois, filtrar por elas perdia a escolha.\n const listing = useListing({\n items: options,\n selectionMode,\n defaultValue: comoItens(defaultValue),\n value: comoItens(value),\n onSearch,\n onSelectionChange: (escolhidos) => relatarEscolha(allProps, escolhidos),\n });\n\n const escolhidos = listing.selected;\n const [chosen] = escolhidos;\n // Na escolha multipla o campo so guarda a busca: quem mostra o que esta escolhido sao as etiquetas.\n const texto = multiple || filtering ? listing.term : chosen?.label ?? '';\n const ancoraRef = multiple ? controlRef : inputRef;\n const activeIndex = listing.visible.findIndex((option) => option.value === listing.focusedKey);\n\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: ancoraRef,\n overlayRef: panelRef,\n placement: 'bottom start',\n offset: 6,\n containerPadding: 8,\n isOpen: open,\n });\n const [largura, setLargura] = useState<number>();\n const alturaMaxima = Math.min(Number(positionProps.style?.maxHeight) || 280, 280);\n\n useLayoutEffect(() => {\n setLargura(ancoraRef.current?.offsetWidth);\n }, [ancoraRef, open]);\n\n // Sem medida, como no servidor, o campo resume as escolhas; medido, mostra todas as etiquetas enquanto couberem.\n const [resumir, setResumir] = useState(true);\n const selecaoRef = useRef<HTMLSpanElement>(null);\n const chaveDasEscolhas = escolhidos.map((item) => item.value).join('\\n');\n\n useLayoutEffect(() => {\n const moldura = controlRef.current;\n\n if (!moldura || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n // Desenhar todas e medir na mesma passada, antes da pintura, para o campo nao piscar ao redimensionar.\n const observador = new ResizeObserver(() => {\n flushSync(() => setResumir(false));\n const selecao = selecaoRef.current;\n flushSync(() => setResumir(Boolean(selecao && selecao.scrollWidth > selecao.clientWidth)));\n });\n\n observador.observe(moldura);\n\n return () => observador.disconnect();\n }, [chaveDasEscolhas, multiple]);\n\n function encerrarFiltro() {\n setFiltering(false);\n listing.filter('');\n }\n\n function fechar() {\n setOpen(false);\n encerrarFiltro();\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n onKeyDown?.(event);\n\n if (event.key === 'ArrowDown' && !open) {\n event.preventDefault();\n setOpen(true);\n listing.focusFirst();\n return;\n }\n\n if (event.key === 'Escape') {\n fechar();\n return;\n }\n\n if (event.key === 'Enter') {\n const alvo = listing.visible.find((option) => option.value === listing.focusedKey);\n\n if (open && alvo && !alvo.disabled) {\n event.preventDefault();\n listing.select(alvo);\n\n if (!multiple) {\n fechar();\n }\n }\n return;\n }\n\n const ultimo = escolhidos[escolhidos.length - 1];\n\n if (event.key === 'Backspace' && multiple && texto === '' && ultimo) {\n listing.select(ultimo);\n return;\n }\n\n listing.handleKeyDown(event);\n }\n\n return (\n <Field aria-describedby={ariaDescribedBy} error={error} hint={hint} id={providedId} label={label} required={required}>\n {({ id, describedBy, invalid }) => {\n const resumoId = id + '-selection';\n const campo = (\n <input\n {...props}\n ref={mergedRef}\n className={[multiple ? styles.search : styles.input, !multiple && styles[size], !multiple && error && styles.error, className]\n .filter(Boolean)\n .join(' ')}\n id={id}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n aria-describedby={[describedBy, multiple && escolhidos.length > 0 && resumoId].filter(Boolean).join(' ') || undefined}\n aria-invalid={invalid || undefined}\n aria-expanded={open}\n aria-autocomplete=\"list\"\n aria-controls={open ? baseId + '-options' : undefined}\n aria-activedescendant={open && activeIndex >= 0 ? optionId(baseId, activeIndex) : undefined}\n aria-required={required || undefined}\n disabled={disabled}\n placeholder={placeholder}\n value={texto}\n // Sair do campo desfaz a busca: o texto volta a dizer o que esta escolhido.\n onBlur={(event: FocusEvent<HTMLInputElement>) => {\n fechar();\n onBlur?.(event);\n }}\n onChange={(event) => {\n setFiltering(true);\n setOpen(true);\n listing.filter(event.target.value);\n }}\n onClick={(event: MouseEvent<HTMLInputElement>) => {\n setOpen(true);\n onClick?.(event);\n }}\n onKeyDown={handleKeyDown}\n />\n );\n\n return (\n <>\n {(escolhidos.length > 0 ? escolhidos : [undefined]).map((item) => (\n <FormValue\n disabled={disabled}\n key={item?.value ?? ''}\n name={name}\n onFocus={() => inputRef.current?.focus()}\n required={required}\n value={item?.value ?? ''}\n />\n ))}\n {multiple ? (\n <div\n className={[styles.control, styles[size], error && styles.error].filter(Boolean).join(' ')}\n // O clique na moldura, fora do campo, leva o foco a ele em vez de tira-lo.\n onMouseDown={(event) => {\n if (event.target !== inputRef.current) {\n event.preventDefault();\n inputRef.current?.focus();\n }\n }}\n ref={controlRef}\n >\n {chosen && (\n <>\n <span aria-hidden=\"true\" className={styles.selection} ref={selecaoRef}>\n {(resumir ? [chosen] : escolhidos).map((item) => (\n <Badge key={item.value}>{item.label}</Badge>\n ))}\n {resumir && escolhidos.length > 1 && (\n <span className={styles.rest}>+{escolhidos.length - 1}</span>\n )}\n </span>\n <span className={styles.summary} id={resumoId}>\n {escolhidos.length === 1 ? '1 selecionado' : `${escolhidos.length} selecionados`}:{' '}\n {escolhidos.map((item) => item.label).join(', ')}\n </span>\n </>\n )}\n {campo}\n </div>\n ) : (\n campo\n )}\n {open &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n // Camada de cima: o `ariaHideOutside` do Dialog ignora quem a declara.\n data-react-aria-top-layer=\"true\"\n // O clique no painel, fora de uma opcao, nao tira o foco do campo nem fecha a lista.\n onMouseDown={(event) => event.preventDefault()}\n style={{ ...positionProps.style, width: largura, maxHeight: alturaMaxima }}\n >\n <ListingOptions\n baseId={baseId}\n empty={<p className={styles.empty}>{emptyMessage}</p>}\n holdsFocus={false}\n label={label ?? placeholder ?? 'Opções'}\n listing={listing}\n loading={loading}\n onSelect={multiple ? undefined : fechar}\n />\n </div>,\n document.body,\n )}\n </>\n );\n }}\n </Field>\n );\n}\n"],"names":["comoItens","valor","value","relatarEscolha","props","escolhidos","_a","item","primeiro","_b","ComboBox","allProps","ariaDescribedBy","className","defaultValue","name","disabled","emptyMessage","error","hint","providedId","label","loading","onBlur","onClick","onKeyDown","onSearch","onValueChange","options","placeholder","ref","required","selectionMode","size","multiple","inputRef","useRef","controlRef","panelRef","baseId","useId","open","setOpen","useState","filtering","setFiltering","resetRef","useFormReset","listing","fechar","mergedRef","useMergedRefs","useListing","chosen","texto","ancoraRef","activeIndex","option","positionProps","useOverlayPosition","largura","setLargura","alturaMaxima","useLayoutEffect","resumir","setResumir","selecaoRef","chaveDasEscolhas","moldura","observador","flushSync","selecao","encerrarFiltro","handleKeyDown","event","alvo","ultimo","jsx","Field","id","describedBy","invalid","resumoId","campo","styles","optionId","jsxs","Fragment","FormValue","Badge","createPortal","ListingOptions"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t="_input_at14z_1",e="_error_at14z_17",s="_sm_at14z_47",_="_md_at14z_53",o="_control_at14z_58 _input_at14z_1",r="_search_at14z_76",n="_selection_at14z_95",a="_rest_at14z_105",c="_summary_at14z_111",m="_panel_at14z_120",l="_empty_at14z_132",u={input:t,error:e,sm:s,md:_,control:o,search:r,selection:n,rest:a,summary:c,panel:m,empty:l};exports.control=o;exports.default=u;exports.empty=l;exports.error=e;exports.input=t;exports.md=_;exports.panel=m;exports.rest=a;exports.search=r;exports.selection=n;exports.sm=s;exports.summary=c;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s="_input_smn36_1",n="_error_smn36_17",e="_sm_smn36_47",t="_md_smn36_53",_="_control_smn36_58 _input_smn36_1",m="_search_smn36_76",o="_selection_smn36_95",r="_rest_smn36_105",c="_summary_smn36_111",l="_panel_smn36_120",a="_empty_smn36_132",u={input:s,error:n,sm:e,md:t,control:_,search:m,selection:o,rest:r,summary:c,panel:l,empty:a};exports.control=_;exports.default=u;exports.empty=a;exports.error=n;exports.input=s;exports.md=t;exports.panel=l;exports.rest=r;exports.search=m;exports.selection=o;exports.sm=e;exports.summary=c;
2
2
  //# sourceMappingURL=ComboBox.module.css.cjs.map
@@ -1,28 +1,28 @@
1
- const t = "_input_at14z_1", _ = "_error_at14z_17", s = "_sm_at14z_47", n = "_md_at14z_53", o = "_control_at14z_58 _input_at14z_1", e = "_search_at14z_76", a = "_selection_at14z_95", r = "_rest_at14z_105", c = "_summary_at14z_111", m = "_panel_at14z_120", z = "_empty_at14z_132", l = {
2
- input: t,
3
- error: _,
4
- sm: s,
5
- md: n,
6
- control: o,
7
- search: e,
8
- selection: a,
1
+ const s = "_input_smn36_1", n = "_error_smn36_17", _ = "_sm_smn36_47", t = "_md_smn36_53", m = "_control_smn36_58 _input_smn36_1", o = "_search_smn36_76", e = "_selection_smn36_95", r = "_rest_smn36_105", c = "_summary_smn36_111", a = "_panel_smn36_120", l = "_empty_smn36_132", p = {
2
+ input: s,
3
+ error: n,
4
+ sm: _,
5
+ md: t,
6
+ control: m,
7
+ search: o,
8
+ selection: e,
9
9
  rest: r,
10
10
  summary: c,
11
- panel: m,
12
- empty: z
11
+ panel: a,
12
+ empty: l
13
13
  };
14
14
  export {
15
- o as control,
16
- l as default,
17
- z as empty,
18
- _ as error,
19
- t as input,
20
- n as md,
21
- m as panel,
15
+ m as control,
16
+ p as default,
17
+ l as empty,
18
+ n as error,
19
+ s as input,
20
+ t as md,
21
+ a as panel,
22
22
  r as rest,
23
- e as search,
24
- a as selection,
25
- s as sm,
23
+ o as search,
24
+ e as selection,
25
+ _ as sm,
26
26
  c as summary
27
27
  };
28
28
  //# sourceMappingURL=ComboBox.module.css.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),q=require("react"),s=require("./Field.module.css.cjs"),x=require("../Label/Label.cjs");function y({"aria-describedby":u,className:f,characterCount:a=0,children:j,error:e,hint:l,id:m,label:t,maxLength:n,required:v=!1,showCharacterCount:c=!1,...b}){const g=q.useId(),d=m??`field-${g}`,o=`${d}-message`,r=`${d}-character-count`,$=[u,e||l?o:void 0,c?r:void 0].filter(Boolean).join(" ")||void 0;return i.jsxs("div",{...b,className:[s.default.field,f].filter(Boolean).join(" "),children:[t&&i.jsx(x.Label,{htmlFor:d,required:v,children:t}),j({id:d,describedBy:$,invalid:!!e}),(e||l)&&i.jsx("span",{className:e?s.default.errorMessage:s.default.hint,id:o,role:e?"alert":void 0,children:e||l}),c&&i.jsx("span",{className:s.default.characterCount,id:r,children:n?`${a}/${n}`:a})]})}exports.Field=y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime"),q=require("react"),s=require("./Field.module.css.cjs"),x=require("../Label/Label.cjs");function y({"aria-describedby":r,className:f,characterCount:i=0,children:m,error:e,hint:a,id:j,label:t,maxLength:n,required:v=!1,showCharacterCount:o=!1,size:b="md",...g}){const B=q.useId(),l=j??`field-${B}`,c=`${l}-message`,u=`${l}-character-count`,N=[r,e||a?c:void 0,o?u:void 0].filter(Boolean).join(" ")||void 0,$=[s.default.control,b==="sm"&&s.default.sm,e&&s.default.invalid].filter(Boolean).join(" ");return d.jsxs("div",{...g,className:[s.default.field,f].filter(Boolean).join(" "),children:[t&&d.jsx(x.Label,{htmlFor:l,required:v,children:t}),m({className:$,describedBy:N,id:l,invalid:!!e}),(e||a)&&d.jsx("span",{className:e?s.default.errorMessage:s.default.hint,id:c,role:e?"alert":void 0,children:e||a}),o&&d.jsx("span",{className:s.default.characterCount,id:u,children:n?`${i}/${n}`:i})]})}exports.Field=y;
2
2
  //# sourceMappingURL=Field.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Field.cjs","sources":["../../../../src/components/forms/Field/Field.tsx"],"sourcesContent":["import { useId, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { Label } from '../Label';\nimport styles from './Field.module.css';\n\nexport interface FieldWiring {\n id: string;\n describedBy: string | undefined;\n invalid: boolean;\n}\n\nexport interface FieldProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {\n 'aria-describedby'?: string;\n characterCount?: number;\n children: (wiring: FieldWiring) => ReactNode;\n error?: string;\n hint?: string;\n id?: string;\n label?: string;\n maxLength?: number;\n required?: boolean;\n showCharacterCount?: boolean;\n}\n\nexport function Field({\n 'aria-describedby': ariaDescribedBy,\n className,\n characterCount = 0,\n children,\n error,\n hint,\n id: providedId,\n label,\n maxLength,\n required = false,\n showCharacterCount = false,\n ...props\n}: FieldProps) {\n const generatedId = useId();\n const id = providedId ?? `field-${generatedId}`;\n const messageId = `${id}-message`;\n const characterCountId = `${id}-character-count`;\n const describedBy = [\n ariaDescribedBy,\n error || hint ? messageId : undefined,\n showCharacterCount ? characterCountId : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <div {...props} className={[styles.field, className].filter(Boolean).join(' ')}>\n {label && <Label htmlFor={id} required={required}>{label}</Label>}\n {children({ id, describedBy, invalid: Boolean(error) })}\n {(error || hint) && (\n <span className={error ? styles.errorMessage : styles.hint} id={messageId} role={error ? 'alert' : undefined}>\n {error || hint}\n </span>\n )}\n {showCharacterCount && (\n <span className={styles.characterCount} id={characterCountId}>\n {maxLength ? `${characterCount}/${maxLength}` : characterCount}\n </span>\n )}\n </div>\n );\n}\n"],"names":["Field","ariaDescribedBy","className","characterCount","children","error","hint","providedId","label","maxLength","required","showCharacterCount","props","generatedId","useId","id","messageId","characterCountId","describedBy","jsxs","styles","jsx","Label"],"mappings":"4MAuBO,SAASA,EAAM,CACpB,mBAAoBC,EACpB,UAAAC,EACA,eAAAC,EAAiB,EACjB,SAAAC,EACA,MAAAC,EACA,KAAAC,EACA,GAAIC,EACJ,MAAAC,EACA,UAAAC,EACA,SAAAC,EAAW,GACX,mBAAAC,EAAqB,GACrB,GAAGC,CACL,EAAe,CACb,MAAMC,EAAcC,EAAAA,MAAA,EACdC,EAAKR,GAAc,SAASM,CAAW,GACvCG,EAAY,GAAGD,CAAE,WACjBE,EAAmB,GAAGF,CAAE,mBACxBG,EAAc,CAClBjB,EACAI,GAASC,EAAOU,EAAY,OAC5BL,EAAqBM,EAAmB,MAAA,EAEvC,OAAO,OAAO,EACd,KAAK,GAAG,GAAK,OAEhB,OACEE,EAAAA,KAAC,MAAA,CAAK,GAAGP,EAAO,UAAW,CAACQ,UAAO,MAAOlB,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC1E,SAAA,CAAAM,GAASa,EAAAA,IAACC,EAAAA,MAAA,CAAM,QAASP,EAAI,SAAAL,EAAqB,SAAAF,EAAM,EACxDJ,EAAS,CAAE,GAAAW,EAAI,YAAAG,EAAa,QAAS,EAAQb,EAAQ,GACpDA,GAASC,IACTe,EAAAA,IAAC,OAAA,CAAK,UAAWhB,EAAQe,UAAO,aAAeA,EAAAA,QAAO,KAAM,GAAIJ,EAAW,KAAMX,EAAQ,QAAU,OAChG,YAASC,EACZ,EAEDK,GACCU,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,eAAgB,GAAIH,EACzC,SAAAR,EAAY,GAAGN,CAAc,IAAIM,CAAS,GAAKN,CAAA,CAClD,CAAA,EAEJ,CAEJ"}
1
+ {"version":3,"file":"Field.cjs","sources":["../../../../src/components/forms/Field/Field.tsx"],"sourcesContent":["import { useId, type ComponentPropsWithRef, type ReactNode } from 'react';\nimport { Label } from '../Label';\nimport styles from './Field.module.css';\n\nexport type FieldSize = 'sm' | 'md';\n\nexport interface FieldWiring {\n /** O visual dos campos do sistema para o controle — borda, foco, erro e tamanho. A classe do controle vence a dele. */\n className: string;\n describedBy: string | undefined;\n id: string;\n invalid: boolean;\n}\n\nexport interface FieldProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {\n 'aria-describedby'?: string;\n characterCount?: number;\n children: (wiring: FieldWiring) => ReactNode;\n error?: string;\n hint?: string;\n id?: string;\n label?: string;\n maxLength?: number;\n required?: boolean;\n showCharacterCount?: boolean;\n size?: FieldSize;\n}\n\nexport function Field({\n 'aria-describedby': ariaDescribedBy,\n className,\n characterCount = 0,\n children,\n error,\n hint,\n id: providedId,\n label,\n maxLength,\n required = false,\n showCharacterCount = false,\n size = 'md',\n ...props\n}: FieldProps) {\n const generatedId = useId();\n const id = providedId ?? `field-${generatedId}`;\n const messageId = `${id}-message`;\n const characterCountId = `${id}-character-count`;\n const describedBy = [\n ariaDescribedBy,\n error || hint ? messageId : undefined,\n showCharacterCount ? characterCountId : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n const controlClassName = [styles.control, size === 'sm' && styles.sm, error && styles.invalid].filter(Boolean).join(' ');\n\n return (\n <div {...props} className={[styles.field, className].filter(Boolean).join(' ')}>\n {label && <Label htmlFor={id} required={required}>{label}</Label>}\n {children({ className: controlClassName, describedBy, id, invalid: Boolean(error) })}\n {(error || hint) && (\n <span className={error ? styles.errorMessage : styles.hint} id={messageId} role={error ? 'alert' : undefined}>\n {error || hint}\n </span>\n )}\n {showCharacterCount && (\n <span className={styles.characterCount} id={characterCountId}>\n {maxLength ? `${characterCount}/${maxLength}` : characterCount}\n </span>\n )}\n </div>\n );\n}\n"],"names":["Field","ariaDescribedBy","className","characterCount","children","error","hint","providedId","label","maxLength","required","showCharacterCount","size","props","generatedId","useId","id","messageId","characterCountId","describedBy","controlClassName","styles","jsxs","jsx","Label"],"mappings":"4MA4BO,SAASA,EAAM,CACpB,mBAAoBC,EACpB,UAAAC,EACA,eAAAC,EAAiB,EACjB,SAAAC,EACA,MAAAC,EACA,KAAAC,EACA,GAAIC,EACJ,MAAAC,EACA,UAAAC,EACA,SAAAC,EAAW,GACX,mBAAAC,EAAqB,GACrB,KAAAC,EAAO,KACP,GAAGC,CACL,EAAe,CACb,MAAMC,EAAcC,EAAAA,MAAA,EACdC,EAAKT,GAAc,SAASO,CAAW,GACvCG,EAAY,GAAGD,CAAE,WACjBE,EAAmB,GAAGF,CAAE,mBACxBG,EAAc,CAClBlB,EACAI,GAASC,EAAOW,EAAY,OAC5BN,EAAqBO,EAAmB,MAAA,EAEvC,OAAO,OAAO,EACd,KAAK,GAAG,GAAK,OACVE,EAAmB,CAACC,EAAAA,QAAO,QAAST,IAAS,MAAQS,UAAO,GAAIhB,GAASgB,EAAAA,QAAO,OAAO,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEvH,OACEC,EAAAA,KAAC,MAAA,CAAK,GAAGT,EAAO,UAAW,CAACQ,UAAO,MAAOnB,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC1E,SAAA,CAAAM,GAASe,EAAAA,IAACC,EAAAA,MAAA,CAAM,QAASR,EAAI,SAAAN,EAAqB,SAAAF,EAAM,EACxDJ,EAAS,CAAE,UAAWgB,EAAkB,YAAAD,EAAa,GAAAH,EAAI,QAAS,EAAQX,EAAQ,GACjFA,GAASC,IACTiB,EAAAA,IAAC,OAAA,CAAK,UAAWlB,EAAQgB,UAAO,aAAeA,EAAAA,QAAO,KAAM,GAAIJ,EAAW,KAAMZ,EAAQ,QAAU,OAChG,YAASC,EACZ,EAEDK,GACCY,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,eAAgB,GAAIH,EACzC,SAAAT,EAAY,GAAGN,CAAc,IAAIM,CAAS,GAAKN,CAAA,CAClD,CAAA,EAEJ,CAEJ"}