@gunkin/uiify 0.0.17-alpha → 0.0.20-alpha

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 (292) hide show
  1. package/agents/components.md +1 -1
  2. package/agents/index.md +1 -0
  3. package/agents/reference/components/breadcrumb.md +11 -1
  4. package/agents/reference/components/button.md +4 -4
  5. package/agents/reference/components/candle-chart.md +20 -1
  6. package/agents/reference/components/carousel.md +3 -2
  7. package/agents/reference/components/combobox.md +2 -1
  8. package/agents/reference/components/drawer.md +8 -1
  9. package/agents/reference/components/dropdown-menu.md +1 -1
  10. package/agents/reference/components/file-upload.md +12 -1
  11. package/agents/reference/components/line-chart.md +1 -0
  12. package/agents/reference/components/modal.md +8 -1
  13. package/agents/reference/components/number-field.md +14 -3
  14. package/agents/reference/components/pagination.md +22 -1
  15. package/agents/reference/components/slider.md +9 -1
  16. package/agents/reference/components/spinner.md +8 -1
  17. package/agents/reference/components/toast.md +14 -1
  18. package/dist/components/behavior.css +9 -9
  19. package/dist/components/behavior.css.map +1 -1
  20. package/dist/components/breadcrumb/Breadcrumb.d.ts.map +1 -1
  21. package/dist/components/breadcrumb/Breadcrumb.js +21 -4
  22. package/dist/components/breadcrumb/Breadcrumb.js.map +1 -1
  23. package/dist/components/breadcrumb/index.d.ts +1 -1
  24. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  25. package/dist/components/breadcrumb/index.js.map +1 -1
  26. package/dist/components/breadcrumb/types.d.ts +7 -0
  27. package/dist/components/breadcrumb/types.d.ts.map +1 -1
  28. package/dist/components/button/types.d.ts +4 -0
  29. package/dist/components/button/types.d.ts.map +1 -1
  30. package/dist/components/candle-chart/CandleChart.d.ts +1 -1
  31. package/dist/components/candle-chart/CandleChart.d.ts.map +1 -1
  32. package/dist/components/candle-chart/CandleChart.js +81 -46
  33. package/dist/components/candle-chart/CandleChart.js.map +1 -1
  34. package/dist/components/candle-chart/client/CandleChartClient.d.ts.map +1 -1
  35. package/dist/components/candle-chart/client/CandleChartClient.js +5 -0
  36. package/dist/components/candle-chart/client/CandleChartClient.js.map +1 -1
  37. package/dist/components/candle-chart/index.d.ts +1 -1
  38. package/dist/components/candle-chart/index.d.ts.map +1 -1
  39. package/dist/components/candle-chart/index.js.map +1 -1
  40. package/dist/components/candle-chart/types.d.ts +17 -0
  41. package/dist/components/candle-chart/types.d.ts.map +1 -1
  42. package/dist/components/carousel/CarouselMarkup.d.ts.map +1 -1
  43. package/dist/components/carousel/CarouselMarkup.js +20 -3
  44. package/dist/components/carousel/CarouselMarkup.js.map +1 -1
  45. package/dist/components/carousel/carousel-markup.js +2 -2
  46. package/dist/components/carousel/carousel-markup.js.map +1 -1
  47. package/dist/components/carousel/types.d.ts +3 -2
  48. package/dist/components/carousel/types.d.ts.map +1 -1
  49. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  50. package/dist/components/combobox/Combobox.js +37 -23
  51. package/dist/components/combobox/Combobox.js.map +1 -1
  52. package/dist/components/combobox/combobox-store.d.ts.map +1 -1
  53. package/dist/components/combobox/combobox-store.js +5 -2
  54. package/dist/components/combobox/combobox-store.js.map +1 -1
  55. package/dist/components/combobox/types.d.ts +2 -3
  56. package/dist/components/combobox/types.d.ts.map +1 -1
  57. package/dist/components/context-menu/ContextMenu.d.ts.map +1 -1
  58. package/dist/components/context-menu/ContextMenu.js +25 -5
  59. package/dist/components/context-menu/ContextMenu.js.map +1 -1
  60. package/dist/components/drawer/DrawerNative.d.ts +1 -1
  61. package/dist/components/drawer/DrawerNative.d.ts.map +1 -1
  62. package/dist/components/drawer/DrawerNative.js +5 -2
  63. package/dist/components/drawer/DrawerNative.js.map +1 -1
  64. package/dist/components/drawer/index.d.ts +1 -1
  65. package/dist/components/drawer/index.d.ts.map +1 -1
  66. package/dist/components/drawer/index.js.map +1 -1
  67. package/dist/components/drawer/types.d.ts +4 -0
  68. package/dist/components/drawer/types.d.ts.map +1 -1
  69. package/dist/components/dropdown-menu/DropdownMenu.d.ts.map +1 -1
  70. package/dist/components/dropdown-menu/DropdownMenu.js +31 -15
  71. package/dist/components/dropdown-menu/DropdownMenu.js.map +1 -1
  72. package/dist/components/dropdown-menu/DropdownMenuBar.d.ts.map +1 -1
  73. package/dist/components/dropdown-menu/DropdownMenuBar.js +7 -5
  74. package/dist/components/dropdown-menu/DropdownMenuBar.js.map +1 -1
  75. package/dist/components/dropdown-menu/types.d.ts +1 -1
  76. package/dist/components/dropdown-menu/types.d.ts.map +1 -1
  77. package/dist/components/file-upload/FileUpload.d.ts.map +1 -1
  78. package/dist/components/file-upload/FileUpload.js +11 -4
  79. package/dist/components/file-upload/FileUpload.js.map +1 -1
  80. package/dist/components/file-upload/FileUploadRoot.d.ts +1 -1
  81. package/dist/components/file-upload/FileUploadRoot.d.ts.map +1 -1
  82. package/dist/components/file-upload/FileUploadRoot.js +9 -0
  83. package/dist/components/file-upload/FileUploadRoot.js.map +1 -1
  84. package/dist/components/file-upload/index.d.ts +1 -1
  85. package/dist/components/file-upload/index.d.ts.map +1 -1
  86. package/dist/components/file-upload/index.js.map +1 -1
  87. package/dist/components/file-upload/types.d.ts +8 -0
  88. package/dist/components/file-upload/types.d.ts.map +1 -1
  89. package/dist/components/line-chart/LineChart.d.ts.map +1 -1
  90. package/dist/components/line-chart/LineChart.js +3 -2
  91. package/dist/components/line-chart/LineChart.js.map +1 -1
  92. package/dist/components/line-chart/line-chart-geometry.d.ts +2 -2
  93. package/dist/components/line-chart/line-chart-geometry.d.ts.map +1 -1
  94. package/dist/components/line-chart/line-chart-geometry.js +6 -6
  95. package/dist/components/line-chart/line-chart-geometry.js.map +1 -1
  96. package/dist/components/line-chart/types.d.ts +2 -0
  97. package/dist/components/line-chart/types.d.ts.map +1 -1
  98. package/dist/components/modal/Modal.d.ts +1 -1
  99. package/dist/components/modal/Modal.d.ts.map +1 -1
  100. package/dist/components/modal/Modal.js +5 -2
  101. package/dist/components/modal/Modal.js.map +1 -1
  102. package/dist/components/modal/index.d.ts +1 -1
  103. package/dist/components/modal/index.d.ts.map +1 -1
  104. package/dist/components/modal/index.js.map +1 -1
  105. package/dist/components/modal/types.d.ts +4 -0
  106. package/dist/components/modal/types.d.ts.map +1 -1
  107. package/dist/components/number-field/NumberField.d.ts +1 -1
  108. package/dist/components/number-field/NumberField.d.ts.map +1 -1
  109. package/dist/components/number-field/NumberField.js +25 -5
  110. package/dist/components/number-field/NumberField.js.map +1 -1
  111. package/dist/components/number-field/format.d.ts +1 -1
  112. package/dist/components/number-field/format.d.ts.map +1 -1
  113. package/dist/components/number-field/format.js +32 -7
  114. package/dist/components/number-field/format.js.map +1 -1
  115. package/dist/components/number-field/index.d.ts +1 -1
  116. package/dist/components/number-field/index.d.ts.map +1 -1
  117. package/dist/components/number-field/index.js.map +1 -1
  118. package/dist/components/number-field/types.d.ts +11 -2
  119. package/dist/components/number-field/types.d.ts.map +1 -1
  120. package/dist/components/otp-input/OtpInput.d.ts.map +1 -1
  121. package/dist/components/otp-input/OtpInput.js +2 -0
  122. package/dist/components/otp-input/OtpInput.js.map +1 -1
  123. package/dist/components/pagination/Pagination.d.ts.map +1 -1
  124. package/dist/components/pagination/Pagination.js +93 -29
  125. package/dist/components/pagination/Pagination.js.map +1 -1
  126. package/dist/components/pagination/PaginationShell.d.ts +2 -1
  127. package/dist/components/pagination/PaginationShell.d.ts.map +1 -1
  128. package/dist/components/pagination/PaginationShell.js +44 -9
  129. package/dist/components/pagination/PaginationShell.js.map +1 -1
  130. package/dist/components/pagination/index.d.ts +1 -1
  131. package/dist/components/pagination/index.d.ts.map +1 -1
  132. package/dist/components/pagination/index.js.map +1 -1
  133. package/dist/components/pagination/types.d.ts +18 -0
  134. package/dist/components/pagination/types.d.ts.map +1 -1
  135. package/dist/components/slider/client/SliderClient.d.ts.map +1 -1
  136. package/dist/components/slider/client/SliderClient.js +11 -2
  137. package/dist/components/slider/client/SliderClient.js.map +1 -1
  138. package/dist/components/slider/index.d.ts +1 -1
  139. package/dist/components/slider/index.d.ts.map +1 -1
  140. package/dist/components/slider/index.js.map +1 -1
  141. package/dist/components/slider/types.d.ts +5 -0
  142. package/dist/components/slider/types.d.ts.map +1 -1
  143. package/dist/components/spinner/Spinner.d.ts.map +1 -1
  144. package/dist/components/spinner/Spinner.js +6 -3
  145. package/dist/components/spinner/Spinner.js.map +1 -1
  146. package/dist/components/spinner/index.d.ts +1 -1
  147. package/dist/components/spinner/index.d.ts.map +1 -1
  148. package/dist/components/spinner/index.js.map +1 -1
  149. package/dist/components/spinner/types.d.ts +4 -0
  150. package/dist/components/spinner/types.d.ts.map +1 -1
  151. package/dist/components/tags-input/TagsInput.d.ts.map +1 -1
  152. package/dist/components/tags-input/TagsInput.js +2 -0
  153. package/dist/components/tags-input/TagsInput.js.map +1 -1
  154. package/dist/components/toast/Toast.d.ts +1 -1
  155. package/dist/components/toast/Toast.d.ts.map +1 -1
  156. package/dist/components/toast/Toast.js +33 -29
  157. package/dist/components/toast/Toast.js.map +1 -1
  158. package/dist/components/toast/ToastElements.d.ts.map +1 -1
  159. package/dist/components/toast/ToastElements.js +24 -12
  160. package/dist/components/toast/ToastElements.js.map +1 -1
  161. package/dist/components/toast/index.d.ts +1 -1
  162. package/dist/components/toast/index.d.ts.map +1 -1
  163. package/dist/components/toast/index.js.map +1 -1
  164. package/dist/components/toast/types.d.ts +10 -0
  165. package/dist/components/toast/types.d.ts.map +1 -1
  166. package/dist/components/toolbar/Toolbar.d.ts +2 -2
  167. package/dist/components/toolbar/Toolbar.d.ts.map +1 -1
  168. package/dist/components/toolbar/Toolbar.js +8 -4
  169. package/dist/components/toolbar/Toolbar.js.map +1 -1
  170. package/dist/core/direction.d.ts +2 -0
  171. package/dist/core/direction.d.ts.map +1 -1
  172. package/dist/core/direction.js +8 -3
  173. package/dist/core/direction.js.map +1 -1
  174. package/dist/core/dismissable-layer-registry.d.ts.map +1 -1
  175. package/dist/core/dismissable-layer-registry.js +3 -1
  176. package/dist/core/dismissable-layer-registry.js.map +1 -1
  177. package/dist/core/format-label.d.ts +2 -0
  178. package/dist/core/format-label.d.ts.map +1 -0
  179. package/dist/core/format-label.js +13 -0
  180. package/dist/core/format-label.js.map +1 -0
  181. package/dist/core/ime.d.ts +16 -0
  182. package/dist/core/ime.d.ts.map +1 -0
  183. package/dist/core/ime.js +7 -0
  184. package/dist/core/ime.js.map +1 -0
  185. package/dist/core/index.d.ts +3 -0
  186. package/dist/core/index.d.ts.map +1 -1
  187. package/dist/core/index.js +3 -0
  188. package/dist/core/index.js.map +1 -1
  189. package/dist/core/roving-focus-store.d.ts +3 -2
  190. package/dist/core/roving-focus-store.d.ts.map +1 -1
  191. package/dist/core/roving-focus-store.js +5 -3
  192. package/dist/core/roving-focus-store.js.map +1 -1
  193. package/dist/core/roving-focus.d.ts.map +1 -1
  194. package/dist/core/roving-focus.js +10 -5
  195. package/dist/core/roving-focus.js.map +1 -1
  196. package/dist/core/text-direction.d.ts +7 -0
  197. package/dist/core/text-direction.d.ts.map +1 -0
  198. package/dist/core/text-direction.js +7 -0
  199. package/dist/core/text-direction.js.map +1 -0
  200. package/dist/styles/index.css +1 -1
  201. package/package.json +2 -1
  202. package/skills/uiify/SKILL.md +58 -33
  203. package/skills/uiify/references/compositions/card-rhythm.md +0 -2
  204. package/skills/uiify/references/compositions/destructive-confirmation.md +1 -3
  205. package/skills/uiify/references/compositions/form-grouping.md +0 -2
  206. package/skills/uiify/references/compositions/hero-actions.md +3 -5
  207. package/skills/uiify/references/compositions/page-frame.md +0 -2
  208. package/skills/uiify/references/compositions/pricing-actions.md +0 -2
  209. package/skills/uiify/references/compositions/save-feedback.md +1 -3
  210. package/skills/uiify/references/compositions/table-controls.md +1 -3
  211. package/skills/uiify/references/elements/accordion.md +38 -0
  212. package/skills/uiify/references/elements/alert-modal.md +32 -5
  213. package/skills/uiify/references/elements/avatar.md +31 -2
  214. package/skills/uiify/references/elements/badge.md +32 -3
  215. package/skills/uiify/references/elements/bar-chart.md +39 -7
  216. package/skills/uiify/references/elements/breadcrumb.md +38 -0
  217. package/skills/uiify/references/elements/button.md +38 -3
  218. package/skills/uiify/references/elements/candle-chart.md +40 -0
  219. package/skills/uiify/references/elements/card.md +38 -1
  220. package/skills/uiify/references/elements/carousel.md +40 -0
  221. package/skills/uiify/references/elements/checkbox.md +39 -0
  222. package/skills/uiify/references/elements/code-block.md +31 -2
  223. package/skills/uiify/references/elements/collapsible.md +38 -0
  224. package/skills/uiify/references/elements/color-picker.md +39 -0
  225. package/skills/uiify/references/elements/combobox.md +37 -0
  226. package/skills/uiify/references/elements/command-palette.md +33 -12
  227. package/skills/uiify/references/elements/context-menu.md +38 -0
  228. package/skills/uiify/references/elements/cookie-banner.md +30 -2
  229. package/skills/uiify/references/elements/date-picker.md +33 -9
  230. package/skills/uiify/references/elements/divider.md +30 -2
  231. package/skills/uiify/references/elements/drawer.md +38 -0
  232. package/skills/uiify/references/elements/dropdown-menu.md +38 -0
  233. package/skills/uiify/references/elements/empty-state.md +30 -2
  234. package/skills/uiify/references/elements/feature-grid.md +41 -1
  235. package/skills/uiify/references/elements/field.md +33 -3
  236. package/skills/uiify/references/elements/file-upload.md +40 -0
  237. package/skills/uiify/references/elements/footer.md +35 -4
  238. package/skills/uiify/references/elements/form.md +31 -4
  239. package/skills/uiify/references/elements/header.md +31 -3
  240. package/skills/uiify/references/elements/hero.md +43 -3
  241. package/skills/uiify/references/elements/hover-card.md +38 -0
  242. package/skills/uiify/references/elements/image-gallery.md +36 -4
  243. package/skills/uiify/references/elements/inline-alert.md +30 -2
  244. package/skills/uiify/references/elements/input.md +31 -4
  245. package/skills/uiify/references/elements/line-chart.md +38 -0
  246. package/skills/uiify/references/elements/logo-wall.md +31 -2
  247. package/skills/uiify/references/elements/modal.md +38 -0
  248. package/skills/uiify/references/elements/number-field.md +41 -0
  249. package/skills/uiify/references/elements/otp-input.md +39 -0
  250. package/skills/uiify/references/elements/pagination.md +33 -4
  251. package/skills/uiify/references/elements/password-input.md +33 -9
  252. package/skills/uiify/references/elements/popup.md +38 -0
  253. package/skills/uiify/references/elements/pricing-table.md +55 -2
  254. package/skills/uiify/references/elements/progress-bar.md +32 -4
  255. package/skills/uiify/references/elements/radio-group.md +39 -0
  256. package/skills/uiify/references/elements/rating.md +39 -0
  257. package/skills/uiify/references/elements/search-input.md +35 -4
  258. package/skills/uiify/references/elements/segmented-control.md +39 -0
  259. package/skills/uiify/references/elements/select.md +29 -1
  260. package/skills/uiify/references/elements/sidebar.md +33 -10
  261. package/skills/uiify/references/elements/skeleton.md +38 -0
  262. package/skills/uiify/references/elements/slider.md +39 -0
  263. package/skills/uiify/references/elements/spinner.md +38 -0
  264. package/skills/uiify/references/elements/stats-bar.md +30 -2
  265. package/skills/uiify/references/elements/stepper.md +32 -9
  266. package/skills/uiify/references/elements/switch.md +31 -4
  267. package/skills/uiify/references/elements/table-of-contents.md +39 -0
  268. package/skills/uiify/references/elements/table.md +32 -3
  269. package/skills/uiify/references/elements/tabs.md +38 -0
  270. package/skills/uiify/references/elements/tags-input.md +39 -0
  271. package/skills/uiify/references/elements/testimonial.md +35 -4
  272. package/skills/uiify/references/elements/textarea.md +30 -3
  273. package/skills/uiify/references/elements/timeline.md +31 -3
  274. package/skills/uiify/references/elements/toast.md +27 -1
  275. package/skills/uiify/references/elements/toggle-group.md +39 -0
  276. package/skills/uiify/references/elements/toggle.md +39 -0
  277. package/skills/uiify/references/elements/toolbar.md +39 -0
  278. package/skills/uiify/references/elements/tooltip.md +38 -0
  279. package/skills/uiify/references/elements/virtual-scroll.md +39 -0
  280. package/skills/uiify/references/examples/alert-confirmation.md +34 -0
  281. package/skills/uiify/references/examples/field-validation.md +37 -0
  282. package/skills/uiify/references/examples/select-basic.md +35 -0
  283. package/skills/uiify/references/examples/table-controls.md +40 -0
  284. package/skills/uiify/references/guides/assets.md +14 -0
  285. package/skills/uiify/references/guides/content.md +11 -0
  286. package/skills/uiify/references/guides/hierarchy.md +14 -0
  287. package/skills/uiify/references/guides/i18n.md +21 -0
  288. package/skills/uiify/references/guides/reference.md +9 -0
  289. package/skills/uiify/references/guides/states.md +12 -0
  290. package/skills/uiify/references/guides/surface.md +27 -0
  291. package/skills/uiify/scripts/lint.mjs +1 -1
  292. package/skills/uiify/scripts/static.mjs +150 -14
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/Breadcrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAa,MAAM,OAAO,CAAC;AAIlE,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EAEnB,mBAAmB,EACnB,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAC5D,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAC9B,YAAY,GAAG,IAAI,CAerB;AAgBD,wBAAgB,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,IAAI,EAC3D,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAC9B,YAAY,GAAG,IAAI,CAoDrB;yBAtDe,cAAc;;;AAyD9B,wBAAgB,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,IAAI,EAC3D,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAC9B,YAAY,GAAG,IAAI,CAUrB;AAED,wBAAgB,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,GAAG,EAC1D,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAC9B,YAAY,GAAG,IAAI,CAwBrB;AAED,wBAAgB,mBAAmB,CAAC,GAAG,SAAS,WAAW,GAAG,MAAM,EAClE,KAAK,EAAE,wBAAwB,CAAC,GAAG,CAAC,GACnC,YAAY,GAAG,IAAI,CAerB;AA8BD,wBAAgB,sBAAsB,IAAI,YAAY,CAMrD;yBANe,sBAAsB;;;AAStC,eAAO,MAAM,UAAU;;;;;;;CAOtB,CAAC"}
1
+ {"version":3,"file":"Breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/Breadcrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAa,MAAM,OAAO,CAAC;AAIlE,OAAO,KAAK,EAEV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EAEnB,mBAAmB,EACnB,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAOpB,wBAAgB,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAC5D,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAC9B,YAAY,GAAG,IAAI,CAqBrB;AAgBD,wBAAgB,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,IAAI,EAC3D,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAC9B,YAAY,GAAG,IAAI,CAuDrB;yBAzDe,cAAc;;;AA4D9B,wBAAgB,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,IAAI,EAC3D,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAC9B,YAAY,GAAG,IAAI,CAUrB;AAED,wBAAgB,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,GAAG,EAC1D,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAC9B,YAAY,GAAG,IAAI,CAwBrB;AAED,wBAAgB,mBAAmB,CAAC,GAAG,SAAS,WAAW,GAAG,MAAM,EAClE,KAAK,EAAE,wBAAwB,CAAC,GAAG,CAAC,GACnC,YAAY,GAAG,IAAI,CAerB;AAkCD,wBAAgB,sBAAsB,IAAI,YAAY,CAMrD;yBANe,sBAAsB;;;AAStC,eAAO,MAAM,UAAU;;;;;;;CAOtB,CAAC"}
@@ -2,17 +2,27 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useRenderElement } from "@gunkin/uiify/core/render";
3
3
  import { DetailsContent, DetailsRoot, DetailsSummary } from "../../elements/details/index.js";
4
4
  import { collapseBreadcrumbItems } from "./breadcrumb-collapse.js";
5
+ const DEFAULT_BREADCRUMB_LABELS = {
6
+ root: "Breadcrumb",
7
+ showCollapsed: "Show collapsed breadcrumbs"
8
+ };
5
9
  function BreadcrumbRoot(props) {
6
10
  const {
7
11
  as,
8
12
  render,
9
- "aria-label": ariaLabel = "Breadcrumb",
13
+ "aria-label": ariaLabel,
14
+ labels,
10
15
  ...consumerProps
11
16
  } = props;
17
+ const resolvedLabels = { ...DEFAULT_BREADCRUMB_LABELS, ...labels };
12
18
  return useRenderElement({
13
19
  as,
14
20
  defaultTag: "nav",
15
- props: { ...consumerProps, "aria-label": ariaLabel, "data-uiify-breadcrumb": "" },
21
+ props: {
22
+ ...consumerProps,
23
+ "aria-label": ariaLabel ?? resolvedLabels.root,
24
+ "data-uiify-breadcrumb": ""
25
+ },
16
26
  render,
17
27
  state: {}
18
28
  });
@@ -36,12 +46,14 @@ function BreadcrumbList(props) {
36
46
  render,
37
47
  children,
38
48
  items,
49
+ labels,
39
50
  itemsAfterCollapse = 1,
40
51
  itemsBeforeCollapse = 1,
41
52
  maxItems,
42
53
  separator,
43
54
  ...consumerProps
44
55
  } = props;
56
+ const resolvedLabels = { ...DEFAULT_BREADCRUMB_LABELS, ...labels };
45
57
  if (maxItems !== void 0 && items === void 0) {
46
58
  throw new Error(
47
59
  "Breadcrumb.List: maxItems requires the data-driven `items` prop \u2014 collapsing can't safely introspect `children` (a .map() through a wrapper component hides real elements from child traversal until React actually renders them)."
@@ -56,6 +68,7 @@ function BreadcrumbList(props) {
56
68
  BreadcrumbEllipsis,
57
69
  {
58
70
  hiddenItems: collapsed.hidden,
71
+ labels: resolvedLabels,
59
72
  separator
60
73
  },
61
74
  "ellipsis"
@@ -125,10 +138,14 @@ function BreadcrumbSeparator(props) {
125
138
  state: {}
126
139
  });
127
140
  }
128
- function BreadcrumbEllipsis({ hiddenItems, separator }) {
141
+ function BreadcrumbEllipsis({
142
+ hiddenItems,
143
+ labels,
144
+ separator
145
+ }) {
129
146
  return /* @__PURE__ */ jsxs(BreadcrumbItem, { children: [
130
147
  /* @__PURE__ */ jsxs(DetailsRoot, { "data-part": "ellipsis", "data-uiify-breadcrumb": "", children: [
131
- /* @__PURE__ */ jsx(DetailsSummary, { "aria-label": "Show collapsed breadcrumbs", children: "\u2026" }),
148
+ /* @__PURE__ */ jsx(DetailsSummary, { "aria-label": labels.showCollapsed, children: "\u2026" }),
132
149
  /* @__PURE__ */ jsx(DetailsContent, { as: "ol", children: hiddenItems.map((item) => /* @__PURE__ */ jsx(
133
150
  BreadcrumbLink,
134
151
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import type { ElementType, ReactElement, ReactNode } from \"react\";\nimport { useRenderElement } from \"@gunkin/uiify/core/render\";\nimport { DetailsContent, DetailsRoot, DetailsSummary } from \"../../elements/details/index.js\";\nimport { collapseBreadcrumbItems } from \"./breadcrumb-collapse.js\";\nimport type {\n BreadcrumbRootProps,\n BreadcrumbListProps,\n BreadcrumbItemProps,\n BreadcrumbItemData,\n BreadcrumbLinkProps,\n BreadcrumbSeparatorProps,\n BreadcrumbEllipsisProps,\n} from \"./types.js\";\n\nexport function BreadcrumbRoot<TAs extends ElementType = \"nav\">(\n props: BreadcrumbRootProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n \"aria-label\": ariaLabel = \"Breadcrumb\",\n ...consumerProps\n } = props as BreadcrumbRootProps<\"nav\">;\n\n return useRenderElement({\n as,\n defaultTag: \"nav\",\n props: { ...consumerProps, \"aria-label\": ariaLabel, \"data-uiify-breadcrumb\": \"\" },\n render,\n state: {},\n });\n}\n\nfunction renderDataItem(item: BreadcrumbItemData, separator: ReactNode): ReactElement {\n return (\n <BreadcrumbItem key={item.key}>\n <BreadcrumbLink\n {...(item.current !== undefined ? { current: item.current } : {})}\n {...(item.href !== undefined ? { href: item.href } : {})}\n >\n {item.label}\n </BreadcrumbLink>\n {separator}\n </BreadcrumbItem>\n );\n}\n\nexport function BreadcrumbList<TAs extends ElementType = \"ol\">(\n props: BreadcrumbListProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n children,\n items,\n itemsAfterCollapse = 1,\n itemsBeforeCollapse = 1,\n maxItems,\n separator,\n ...consumerProps\n } = props as BreadcrumbListProps<\"ol\">;\n\n if (maxItems !== undefined && items === undefined) {\n throw new Error(\n \"Breadcrumb.List: maxItems requires the data-driven `items` prop — collapsing can't \" +\n \"safely introspect `children` (a .map() through a wrapper component hides real \" +\n \"elements from child traversal until React actually renders them).\",\n );\n }\n\n let content: ReactNode = children;\n if (items !== undefined) {\n const collapsed =\n maxItems === undefined\n ? undefined\n : collapseBreadcrumbItems(items, maxItems, itemsBeforeCollapse, itemsAfterCollapse);\n\n content = collapsed\n ? [\n ...collapsed.before.map((item) => renderDataItem(item, separator)),\n <BreadcrumbEllipsis\n hiddenItems={collapsed.hidden}\n key=\"ellipsis\"\n separator={separator}\n />,\n ...collapsed.after.map((item, index) =>\n renderDataItem(item, index === collapsed.after.length - 1 ? null : separator),\n ),\n ]\n : items.map((item, index) =>\n renderDataItem(item, index === items.length - 1 ? null : separator),\n );\n }\n\n return useRenderElement({\n as,\n defaultTag: \"ol\",\n props: { ...consumerProps, children: content, \"data-part\": \"list\" },\n render,\n state: {},\n });\n}\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport function BreadcrumbItem<TAs extends ElementType = \"li\">(\n props: BreadcrumbItemProps<TAs>,\n): ReactElement | null {\n const { as, render, children, ...consumerProps } = props as BreadcrumbItemProps<\"li\">;\n\n return useRenderElement({\n as,\n defaultTag: \"li\",\n props: { ...consumerProps, children, \"data-part\": \"item\" },\n render,\n state: {},\n });\n}\n\nexport function BreadcrumbLink<TAs extends ElementType = \"a\">(\n props: BreadcrumbLinkProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n children,\n current = false,\n href,\n ...consumerProps\n } = props as BreadcrumbLinkProps<\"a\">;\n\n return useRenderElement({\n as,\n defaultTag: \"a\",\n props: {\n ...consumerProps,\n \"data-part\": \"link\",\n \"aria-current\": current ? \"page\" : undefined,\n \"data-current\": current ? \"\" : undefined,\n href,\n children,\n },\n render,\n state: { current },\n });\n}\n\nexport function BreadcrumbSeparator<TAs extends ElementType = \"span\">(\n props: BreadcrumbSeparatorProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n children = \"/\",\n ...consumerProps\n } = props as BreadcrumbSeparatorProps<\"span\">;\n\n return useRenderElement({\n as,\n defaultTag: \"span\",\n props: { ...consumerProps, \"aria-hidden\": true, children, \"data-part\": \"separator\" },\n render,\n state: {},\n });\n}\n\n/**\n * Built on `@gunkin/uiify/elements/details`: `Details.Summary`/`Details.Content` are used without a\n * `part` (this trigger and panel carry no `data-part`, unlike Accordion/Collapsible's), and\n * `Details.Content` renders as `<ol>` via `as` instead of the default `<div>`.\n */\nfunction BreadcrumbEllipsis({ hiddenItems, separator }: BreadcrumbEllipsisProps): ReactElement {\n return (\n <BreadcrumbItem>\n <DetailsRoot data-part=\"ellipsis\" data-uiify-breadcrumb=\"\">\n <DetailsSummary aria-label=\"Show collapsed breadcrumbs\">…</DetailsSummary>\n <DetailsContent as=\"ol\">\n {hiddenItems.map((item) => (\n <BreadcrumbLink\n key={item.key}\n {...(item.current !== undefined ? { current: item.current } : {})}\n {...(item.href !== undefined ? { href: item.href } : {})}\n >\n {item.label}\n </BreadcrumbLink>\n ))}\n </DetailsContent>\n </DetailsRoot>\n {separator}\n </BreadcrumbItem>\n );\n}\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport function BreadcrumbEllipsisPart(): ReactElement {\n return (\n <BreadcrumbItem>\n <span aria-hidden=\"true\">…</span>\n </BreadcrumbItem>\n );\n}\nBreadcrumbEllipsisPart.displayName = \"BreadcrumbEllipsisPart\";\n\nexport const Breadcrumb = {\n Ellipsis: BreadcrumbEllipsisPart,\n Item: BreadcrumbItem,\n Link: BreadcrumbLink,\n List: BreadcrumbList,\n Root: BreadcrumbRoot,\n Separator: BreadcrumbSeparator,\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import type { ElementType, ReactElement, ReactNode } from \"react\";\nimport { useRenderElement } from \"@gunkin/uiify/core/render\";\nimport { DetailsContent, DetailsRoot, DetailsSummary } from \"../../elements/details/index.js\";\nimport { collapseBreadcrumbItems } from \"./breadcrumb-collapse.js\";\nimport type {\n BreadcrumbLabels,\n BreadcrumbRootProps,\n BreadcrumbListProps,\n BreadcrumbItemProps,\n BreadcrumbItemData,\n BreadcrumbLinkProps,\n BreadcrumbSeparatorProps,\n BreadcrumbEllipsisProps,\n} from \"./types.js\";\n\nconst DEFAULT_BREADCRUMB_LABELS: BreadcrumbLabels = {\n root: \"Breadcrumb\",\n showCollapsed: \"Show collapsed breadcrumbs\",\n};\n\nexport function BreadcrumbRoot<TAs extends ElementType = \"nav\">(\n props: BreadcrumbRootProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n \"aria-label\": ariaLabel,\n labels,\n ...consumerProps\n } = props as BreadcrumbRootProps<\"nav\">;\n const resolvedLabels = { ...DEFAULT_BREADCRUMB_LABELS, ...labels };\n\n return useRenderElement({\n as,\n defaultTag: \"nav\",\n props: {\n ...consumerProps,\n \"aria-label\": ariaLabel ?? resolvedLabels.root,\n \"data-uiify-breadcrumb\": \"\",\n },\n render,\n state: {},\n });\n}\n\nfunction renderDataItem(item: BreadcrumbItemData, separator: ReactNode): ReactElement {\n return (\n <BreadcrumbItem key={item.key}>\n <BreadcrumbLink\n {...(item.current !== undefined ? { current: item.current } : {})}\n {...(item.href !== undefined ? { href: item.href } : {})}\n >\n {item.label}\n </BreadcrumbLink>\n {separator}\n </BreadcrumbItem>\n );\n}\n\nexport function BreadcrumbList<TAs extends ElementType = \"ol\">(\n props: BreadcrumbListProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n children,\n items,\n labels,\n itemsAfterCollapse = 1,\n itemsBeforeCollapse = 1,\n maxItems,\n separator,\n ...consumerProps\n } = props as BreadcrumbListProps<\"ol\">;\n const resolvedLabels = { ...DEFAULT_BREADCRUMB_LABELS, ...labels };\n\n if (maxItems !== undefined && items === undefined) {\n throw new Error(\n \"Breadcrumb.List: maxItems requires the data-driven `items` prop — collapsing can't \" +\n \"safely introspect `children` (a .map() through a wrapper component hides real \" +\n \"elements from child traversal until React actually renders them).\",\n );\n }\n\n let content: ReactNode = children;\n if (items !== undefined) {\n const collapsed =\n maxItems === undefined\n ? undefined\n : collapseBreadcrumbItems(items, maxItems, itemsBeforeCollapse, itemsAfterCollapse);\n\n content = collapsed\n ? [\n ...collapsed.before.map((item) => renderDataItem(item, separator)),\n <BreadcrumbEllipsis\n hiddenItems={collapsed.hidden}\n key=\"ellipsis\"\n labels={resolvedLabels}\n separator={separator}\n />,\n ...collapsed.after.map((item, index) =>\n renderDataItem(item, index === collapsed.after.length - 1 ? null : separator),\n ),\n ]\n : items.map((item, index) =>\n renderDataItem(item, index === items.length - 1 ? null : separator),\n );\n }\n\n return useRenderElement({\n as,\n defaultTag: \"ol\",\n props: { ...consumerProps, children: content, \"data-part\": \"list\" },\n render,\n state: {},\n });\n}\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport function BreadcrumbItem<TAs extends ElementType = \"li\">(\n props: BreadcrumbItemProps<TAs>,\n): ReactElement | null {\n const { as, render, children, ...consumerProps } = props as BreadcrumbItemProps<\"li\">;\n\n return useRenderElement({\n as,\n defaultTag: \"li\",\n props: { ...consumerProps, children, \"data-part\": \"item\" },\n render,\n state: {},\n });\n}\n\nexport function BreadcrumbLink<TAs extends ElementType = \"a\">(\n props: BreadcrumbLinkProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n children,\n current = false,\n href,\n ...consumerProps\n } = props as BreadcrumbLinkProps<\"a\">;\n\n return useRenderElement({\n as,\n defaultTag: \"a\",\n props: {\n ...consumerProps,\n \"data-part\": \"link\",\n \"aria-current\": current ? \"page\" : undefined,\n \"data-current\": current ? \"\" : undefined,\n href,\n children,\n },\n render,\n state: { current },\n });\n}\n\nexport function BreadcrumbSeparator<TAs extends ElementType = \"span\">(\n props: BreadcrumbSeparatorProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n children = \"/\",\n ...consumerProps\n } = props as BreadcrumbSeparatorProps<\"span\">;\n\n return useRenderElement({\n as,\n defaultTag: \"span\",\n props: { ...consumerProps, \"aria-hidden\": true, children, \"data-part\": \"separator\" },\n render,\n state: {},\n });\n}\n\n/**\n * Built on `@gunkin/uiify/elements/details`: `Details.Summary`/`Details.Content` are used without a\n * `part` (this trigger and panel carry no `data-part`, unlike Accordion/Collapsible's), and\n * `Details.Content` renders as `<ol>` via `as` instead of the default `<div>`.\n */\nfunction BreadcrumbEllipsis({\n hiddenItems,\n labels,\n separator,\n}: BreadcrumbEllipsisProps): ReactElement {\n return (\n <BreadcrumbItem>\n <DetailsRoot data-part=\"ellipsis\" data-uiify-breadcrumb=\"\">\n <DetailsSummary aria-label={labels.showCollapsed}>…</DetailsSummary>\n <DetailsContent as=\"ol\">\n {hiddenItems.map((item) => (\n <BreadcrumbLink\n key={item.key}\n {...(item.current !== undefined ? { current: item.current } : {})}\n {...(item.href !== undefined ? { href: item.href } : {})}\n >\n {item.label}\n </BreadcrumbLink>\n ))}\n </DetailsContent>\n </DetailsRoot>\n {separator}\n </BreadcrumbItem>\n );\n}\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport function BreadcrumbEllipsisPart(): ReactElement {\n return (\n <BreadcrumbItem>\n <span aria-hidden=\"true\">…</span>\n </BreadcrumbItem>\n );\n}\nBreadcrumbEllipsisPart.displayName = \"BreadcrumbEllipsisPart\";\n\nexport const Breadcrumb = {\n Ellipsis: BreadcrumbEllipsisPart,\n Item: BreadcrumbItem,\n Link: BreadcrumbLink,\n List: BreadcrumbList,\n Root: BreadcrumbRoot,\n Separator: BreadcrumbSeparator,\n};\n"],"mappings":"AA+CI,SACE,KADF;AA9CJ,SAAS,wBAAwB;AACjC,SAAS,gBAAgB,aAAa,sBAAsB;AAC5D,SAAS,+BAA+B;AAYxC,MAAM,4BAA8C;AAAA,EAClD,MAAM;AAAA,EACN,eAAe;AACjB;AAEO,SAAS,eACd,OACqB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,iBAAiB,EAAE,GAAG,2BAA2B,GAAG,OAAO;AAEjE,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,YAAY;AAAA,IACZ,OAAO;AAAA,MACL,GAAG;AAAA,MACH,cAAc,aAAa,eAAe;AAAA,MAC1C,yBAAyB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,OAAO,CAAC;AAAA,EACV,CAAC;AACH;AAEA,SAAS,eAAe,MAA0B,WAAoC;AACpF,SACE,qBAAC,kBACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACE,GAAI,KAAK,YAAY,SAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,QAC9D,GAAI,KAAK,SAAS,SAAY,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,QAErD,eAAK;AAAA;AAAA,IACR;AAAA,IACC;AAAA,OAPkB,KAAK,GAQ1B;AAEJ;AAEO,SAAS,eACd,OACqB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,iBAAiB,EAAE,GAAG,2BAA2B,GAAG,OAAO;AAEjE,MAAI,aAAa,UAAa,UAAU,QAAW;AACjD,UAAM,IAAI;AAAA,MACR;AAAA,IAGF;AAAA,EACF;AAEA,MAAI,UAAqB;AACzB,MAAI,UAAU,QAAW;AACvB,UAAM,YACJ,aAAa,SACT,SACA,wBAAwB,OAAO,UAAU,qBAAqB,kBAAkB;AAEtF,cAAU,YACN;AAAA,MACE,GAAG,UAAU,OAAO,IAAI,CAAC,SAAS,eAAe,MAAM,SAAS,CAAC;AAAA,MACjE;AAAA,QAAC;AAAA;AAAA,UACC,aAAa,UAAU;AAAA,UAEvB,QAAQ;AAAA,UACR;AAAA;AAAA,QAFI;AAAA,MAGN;AAAA,MACA,GAAG,UAAU,MAAM;AAAA,QAAI,CAAC,MAAM,UAC5B,eAAe,MAAM,UAAU,UAAU,MAAM,SAAS,IAAI,OAAO,SAAS;AAAA,MAC9E;AAAA,IACF,IACA,MAAM;AAAA,MAAI,CAAC,MAAM,UACf,eAAe,MAAM,UAAU,MAAM,SAAS,IAAI,OAAO,SAAS;AAAA,IACpE;AAAA,EACN;AAEA,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,YAAY;AAAA,IACZ,OAAO,EAAE,GAAG,eAAe,UAAU,SAAS,aAAa,OAAO;AAAA,IAClE;AAAA,IACA,OAAO,CAAC;AAAA,EACV,CAAC;AACH;AACA,eAAe,cAAc;AAEtB,SAAS,eACd,OACqB;AACrB,QAAM,EAAE,IAAI,QAAQ,UAAU,GAAG,cAAc,IAAI;AAEnD,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,YAAY;AAAA,IACZ,OAAO,EAAE,GAAG,eAAe,UAAU,aAAa,OAAO;AAAA,IACzD;AAAA,IACA,OAAO,CAAC;AAAA,EACV,CAAC;AACH;AAEO,SAAS,eACd,OACqB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,YAAY;AAAA,IACZ,OAAO;AAAA,MACL,GAAG;AAAA,MACH,aAAa;AAAA,MACb,gBAAgB,UAAU,SAAS;AAAA,MACnC,gBAAgB,UAAU,KAAK;AAAA,MAC/B;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACA,OAAO,EAAE,QAAQ;AAAA,EACnB,CAAC;AACH;AAEO,SAAS,oBACd,OACqB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAI;AAEJ,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,YAAY;AAAA,IACZ,OAAO,EAAE,GAAG,eAAe,eAAe,MAAM,UAAU,aAAa,YAAY;AAAA,IACnF;AAAA,IACA,OAAO,CAAC;AAAA,EACV,CAAC;AACH;AAOA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAA0C;AACxC,SACE,qBAAC,kBACC;AAAA,yBAAC,eAAY,aAAU,YAAW,yBAAsB,IACtD;AAAA,0BAAC,kBAAe,cAAY,OAAO,eAAe,oBAAC;AAAA,MACnD,oBAAC,kBAAe,IAAG,MAChB,sBAAY,IAAI,CAAC,SAChB;AAAA,QAAC;AAAA;AAAA,UAEE,GAAI,KAAK,YAAY,SAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,UAC9D,GAAI,KAAK,SAAS,SAAY,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,UAErD,eAAK;AAAA;AAAA,QAJD,KAAK;AAAA,MAKZ,CACD,GACH;AAAA,OACF;AAAA,IACC;AAAA,KACH;AAEJ;AACA,mBAAmB,cAAc;AAE1B,SAAS,yBAAuC;AACrD,SACE,oBAAC,kBACC,8BAAC,UAAK,eAAY,QAAO,oBAAC,GAC5B;AAEJ;AACA,uBAAuB,cAAc;AAE9B,MAAM,aAAa;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,WAAW;AACb;","names":[]}
@@ -1,3 +1,3 @@
1
1
  export { Breadcrumb, BreadcrumbEllipsisPart as BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbRoot, BreadcrumbSeparator, } from "./Breadcrumb.js";
2
- export type { BreadcrumbItemData, BreadcrumbItemProps, BreadcrumbLinkOwnProps, BreadcrumbLinkProps, BreadcrumbListOwnProps, BreadcrumbListProps, BreadcrumbRootOwnProps, BreadcrumbRootProps, BreadcrumbSeparatorOwnProps, BreadcrumbSeparatorProps, } from "./types.js";
2
+ export type { BreadcrumbItemData, BreadcrumbLabels, BreadcrumbItemProps, BreadcrumbLinkOwnProps, BreadcrumbLinkProps, BreadcrumbListOwnProps, BreadcrumbListProps, BreadcrumbRootOwnProps, BreadcrumbRootProps, BreadcrumbSeparatorOwnProps, BreadcrumbSeparatorProps, } from "./types.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,sBAAsB,IAAI,kBAAkB,EAC5C,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,sBAAsB,IAAI,kBAAkB,EAC5C,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/breadcrumb/index.ts"],"sourcesContent":["export {\n Breadcrumb,\n BreadcrumbEllipsisPart as BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbRoot,\n BreadcrumbSeparator,\n} from \"./Breadcrumb.js\";\nexport type {\n BreadcrumbItemData,\n BreadcrumbItemProps,\n BreadcrumbLinkOwnProps,\n BreadcrumbLinkProps,\n BreadcrumbListOwnProps,\n BreadcrumbListProps,\n BreadcrumbRootOwnProps,\n BreadcrumbRootProps,\n BreadcrumbSeparatorOwnProps,\n BreadcrumbSeparatorProps,\n} from \"./types.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAC0B;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/breadcrumb/index.ts"],"sourcesContent":["export {\n Breadcrumb,\n BreadcrumbEllipsisPart as BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbRoot,\n BreadcrumbSeparator,\n} from \"./Breadcrumb.js\";\nexport type {\n BreadcrumbItemData,\n BreadcrumbLabels,\n BreadcrumbItemProps,\n BreadcrumbLinkOwnProps,\n BreadcrumbLinkProps,\n BreadcrumbListOwnProps,\n BreadcrumbListProps,\n BreadcrumbRootOwnProps,\n BreadcrumbRootProps,\n BreadcrumbSeparatorOwnProps,\n BreadcrumbSeparatorProps,\n} from \"./types.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAC0B;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -1,7 +1,12 @@
1
1
  import type { ElementType, ReactNode } from "react";
2
2
  import type { RenderableProps } from "@gunkin/uiify/core/render";
3
+ export interface BreadcrumbLabels {
4
+ readonly root: string;
5
+ readonly showCollapsed: string;
6
+ }
3
7
  export interface BreadcrumbRootOwnProps {
4
8
  readonly "aria-label"?: string;
9
+ readonly labels?: Partial<BreadcrumbLabels>;
5
10
  }
6
11
  export type BreadcrumbRootProps<TAs extends ElementType = "nav"> = RenderableProps<TAs, BreadcrumbRootOwnProps, Record<string, never>, HTMLElement>;
7
12
  /** One logical breadcrumb entry. Used by `BreadcrumbList`'s `items` prop —
@@ -15,6 +20,7 @@ export interface BreadcrumbItemData {
15
20
  }
16
21
  export interface BreadcrumbListOwnProps {
17
22
  readonly children?: ReactNode;
23
+ readonly labels?: Partial<BreadcrumbLabels>;
18
24
  /**
19
25
  * Data-driven items, required to use `maxItems`. Filtering children by
20
26
  * element type (`isValidElement` + a type check) can't see through a
@@ -47,6 +53,7 @@ export interface BreadcrumbSeparatorOwnProps {
47
53
  export type BreadcrumbSeparatorProps<TAs extends ElementType = "span"> = RenderableProps<TAs, BreadcrumbSeparatorOwnProps, Record<string, never>, HTMLElement>;
48
54
  export interface BreadcrumbEllipsisProps {
49
55
  readonly hiddenItems: readonly BreadcrumbItemData[];
56
+ readonly labels: BreadcrumbLabels;
50
57
  readonly separator?: ReactNode;
51
58
  }
52
59
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,mBAAmB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,IAAI,eAAe,CAChF,GAAG,EACH,sBAAsB,EACtB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,WAAW,CACZ,CAAC;AAEF;;8DAE8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,MAAM,MAAM,mBAAmB,CAAC,GAAG,SAAS,WAAW,GAAG,IAAI,IAAI,eAAe,CAC/E,GAAG,EACH,sBAAsB,EACtB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,gBAAgB,CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,GAAG,SAAS,WAAW,GAAG,IAAI,IAAI,eAAe,CAC/E,GAAG,EACH;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EACjC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,aAAa,CACd,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,mBAAmB,CAAC,GAAG,SAAS,WAAW,GAAG,GAAG,IAAI,eAAe,CAC9E,GAAG,EACH,sBAAsB,EACtB;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EACpB,iBAAiB,CAClB,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED,MAAM,MAAM,wBAAwB,CAAC,GAAG,SAAS,WAAW,GAAG,MAAM,IAAI,eAAe,CACtF,GAAG,EACH,2BAA2B,EAC3B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,WAAW,CACZ,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/types.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,15 @@ import type { RenderableProps } from "@gunkin/uiify/core/render";
3
3
  export type ButtonVariant = "secondary" | "outline" | "ghost" | "destructive" | "link";
4
4
  export type ButtonSize = "sm" | "md" | "lg" | "icon-sm" | "icon" | "icon-lg";
5
5
  export interface ButtonOwnProps {
6
+ /** Prevents activation and exposes the disabled state to assistive technology. */
6
7
  readonly disabled?: boolean;
7
8
  /** Marks the button as the chosen one of a set, or a toggle that is on. */
8
9
  readonly selected?: boolean;
10
+ /** Sets the native button action; defaults to `button`. Set `submit` or `reset` explicitly when needed. */
9
11
  readonly type?: "button" | "submit" | "reset";
12
+ /** Sets the control's height and, for icon sizes, its width. */
10
13
  readonly size?: ButtonSize;
14
+ /** Sets the visual treatment without changing the control's semantics. */
11
15
  readonly variant?: ButtonVariant;
12
16
  }
13
17
  export interface ButtonState {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAC;AACvF,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,WAAW,GAAG,QAAQ,IAAI,eAAe,CAC3E,GAAG,EACH,cAAc,EACd,WAAW,EACX,WAAW,CACZ,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAC;AACvF,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC9C,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,WAAW,GAAG,QAAQ,IAAI,eAAe,CAC3E,GAAG,EACH,cAAc,EACd,WAAW,EACX,WAAW,CACZ,CAAC"}
@@ -5,7 +5,7 @@ export declare function getPriceBounds(data: readonly CandleChartData[]): {
5
5
  min: number;
6
6
  };
7
7
  /** One candle glyph with its optional hit target; shared by the static list and virtual rows. */
8
- export declare function CandleChartCandle({ as: Tag, candle, index, x, slot, min, max, interactive, isActive, isSelected, cursorY, onCandleClick, onCandlePointerLeave, onCandlePointerMove, }: CandleChartCandleProps): ReactElement;
8
+ export declare function CandleChartCandle({ as: Tag, candle, hitLabel, index, x, slot, min, max, interactive, isActive, isSelected, cursorY, onCandleClick, onCandlePointerLeave, onCandlePointerMove, }: CandleChartCandleProps): ReactElement;
9
9
  export declare namespace CandleChartCandle {
10
10
  var displayName: string;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CandleChart.d.ts","sourceRoot":"","sources":["../../../src/components/candle-chart/CandleChart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EAGX,YAAY,EAEb,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAEV,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAsDpB,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAW7F;AAsHD,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EAAE,GAAG,EACP,MAAM,EACN,KAAK,EACL,CAAC,EACD,IAAI,EACJ,GAAG,EACH,GAAG,EACH,WAAW,EACX,QAAQ,EACR,UAAU,EACV,OAAO,EACP,aAAa,EACb,oBAAoB,EACpB,mBAAmB,GACpB,EAAE,sBAAsB,GAAG,YAAY,CAiCvC;yBAhDe,iBAAiB;;;AAmDjC,wBAAgB,WAAW,CAAC,GAAG,SAAS,WAAW,GAAG,QAAQ,EAC5D,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAC3B,YAAY,GAAG,IAAI,CA0JrB;yBA5Je,WAAW"}
1
+ {"version":3,"file":"CandleChart.d.ts","sourceRoot":"","sources":["../../../src/components/candle-chart/CandleChart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EAGX,YAAY,EAEb,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAEV,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAoEpB,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAW7F;AAsHD,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EAAE,GAAG,EACP,MAAM,EACN,QAAQ,EACR,KAAK,EACL,CAAC,EACD,IAAI,EACJ,GAAG,EACH,GAAG,EACH,WAAW,EACX,QAAQ,EACR,UAAU,EACV,OAAO,EACP,aAAa,EACb,oBAAoB,EACpB,mBAAmB,GACpB,EAAE,sBAAsB,GAAG,YAAY,CAiCvC;yBAjDe,iBAAiB;;;AAoDjC,wBAAgB,WAAW,CAAC,GAAG,SAAS,WAAW,GAAG,QAAQ,EAC5D,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAC3B,YAAY,GAAG,IAAI,CAsKrB;yBAxKe,WAAW"}
@@ -1,5 +1,19 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useRenderElement } from "@gunkin/uiify/core/render";
3
+ import { formatLabel } from "@gunkin/uiify/core/format-label";
4
+ const DEFAULT_CANDLE_CHART_LABELS = {
5
+ chart: "Candlestick chart",
6
+ candle: "Candle {time}",
7
+ candles: "candles",
8
+ months: "months",
9
+ prices: "prices",
10
+ data: "data",
11
+ time: "Time",
12
+ open: "Open",
13
+ high: "High",
14
+ low: "Low",
15
+ close: "Close"
16
+ };
3
17
  function percent(value) {
4
18
  const rounded = Math.round(value * 1e4) / 1e4;
5
19
  return `${rounded}%`;
@@ -28,16 +42,16 @@ function monthKey(time) {
28
42
  if (Number.isNaN(date.getTime())) return String(time);
29
43
  return `${date.getUTCFullYear()}-${date.getUTCMonth()}`;
30
44
  }
31
- function monthLabel(time) {
45
+ function monthLabel(time, locale) {
32
46
  const date = new Date(time);
33
47
  if (Number.isNaN(date.getTime())) return String(time);
34
- return new Intl.DateTimeFormat("en-US", {
48
+ return new Intl.DateTimeFormat(locale, {
35
49
  month: "short",
36
50
  timeZone: "UTC",
37
51
  year: "2-digit"
38
52
  }).format(date);
39
53
  }
40
- function monthLabelsFor(data) {
54
+ function monthLabelsFor(data, locale) {
41
55
  const labels = [];
42
56
  const seen = /* @__PURE__ */ new Set();
43
57
  data.forEach((candle, index) => {
@@ -45,20 +59,20 @@ function monthLabelsFor(data) {
45
59
  if (seen.has(key)) return;
46
60
  seen.add(key);
47
61
  labels.push({
48
- label: monthLabel(candle.time),
62
+ label: monthLabel(candle.time, locale),
49
63
  position: index / Math.max(data.length, 1) * 100
50
64
  });
51
65
  });
52
66
  return labels;
53
67
  }
54
- function priceLabelsFor(min, max) {
68
+ function priceLabelsFor(min, max, locale) {
55
69
  const tickCount = 6;
56
70
  const range = max - min;
57
71
  return Array.from({ length: tickCount }, (_, index) => {
58
72
  const ratio = index / (tickCount - 1);
59
73
  const value = max - range * ratio;
60
74
  return {
61
- label: new Intl.NumberFormat("en-US", { maximumFractionDigits: 2 }).format(value),
75
+ label: new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(value),
62
76
  position: ratio * 100
63
77
  };
64
78
  });
@@ -113,6 +127,7 @@ function axisLabelsFor(overrides, fallback) {
113
127
  function CandleChartCandle({
114
128
  as: Tag,
115
129
  candle,
130
+ hitLabel,
116
131
  index,
117
132
  x,
118
133
  slot,
@@ -146,7 +161,7 @@ function CandleChartCandle({
146
161
  {
147
162
  "data-part": "candle-hit",
148
163
  type: "button",
149
- "aria-label": `Candle ${String(candle.time)}`,
164
+ "aria-label": hitLabel,
150
165
  "aria-pressed": isSelected,
151
166
  onClick: () => onCandleClick?.(index),
152
167
  onKeyDown: handleKeyDown,
@@ -166,9 +181,11 @@ function CandleChart(props) {
166
181
  xAxis,
167
182
  yAxis,
168
183
  "aria-label": ariaLabel,
184
+ labels,
169
185
  activeCandleIndex,
170
186
  cursorY,
171
187
  interactive = false,
188
+ locale = "en-US",
172
189
  onCandleClick,
173
190
  onCandlePointerLeave,
174
191
  onCandlePointerMove,
@@ -179,18 +196,20 @@ function CandleChart(props) {
179
196
  slotOffset = 0,
180
197
  ...consumerProps
181
198
  } = props;
199
+ const accessibleLabels = { ...DEFAULT_CANDLE_CHART_LABELS, ...labels };
182
200
  const { min, max } = getPriceBounds(data);
183
- const label = ariaLabel ?? "Candlestick chart";
184
- const monthLabels = axisLabelsFor(xAxis, monthLabelsFor(data));
185
- const priceLabels = axisLabelsFor(yAxis, priceLabelsFor(min, max));
201
+ const label = ariaLabel ?? accessibleLabels.chart;
202
+ const monthLabels = axisLabelsFor(xAxis, monthLabelsFor(data, locale));
203
+ const priceLabels = axisLabelsFor(yAxis, priceLabelsFor(min, max, locale));
186
204
  const readoutIndex = activeCandleIndex ?? selectedCandleIndex ?? (data.length > 0 ? data.length - 1 : void 0);
187
205
  const readoutCandle = readoutIndex === void 0 ? void 0 : data[readoutIndex];
188
206
  const crosshairCandle = activeCandleIndex === void 0 ? void 0 : data[activeCandleIndex];
189
- const candles = candleLayer ?? /* @__PURE__ */ jsx("ol", { "data-part": "candles", "aria-label": `${label} candles`, children: data.map((candle, index) => /* @__PURE__ */ jsx(
207
+ const candles = candleLayer ?? /* @__PURE__ */ jsx("ol", { "data-part": "candles", "aria-label": `${label} ${accessibleLabels.candles}`, children: data.map((candle, index) => /* @__PURE__ */ jsx(
190
208
  CandleChartCandle,
191
209
  {
192
210
  as: "li",
193
211
  candle,
212
+ hitLabel: formatLabel(accessibleLabels.candle, { time: String(candle.time) }, locale),
194
213
  index,
195
214
  x: index / data.length * 100,
196
215
  slot: 100 / data.length,
@@ -249,44 +268,60 @@ function CandleChart(props) {
249
268
  }
250
269
  ) : null
251
270
  ] }),
252
- /* @__PURE__ */ jsx("div", { "data-part": "time-viewport", children: /* @__PURE__ */ jsxs("ol", { "data-part": "time-axis", "data-axis": "time", "aria-label": `${label} months`, children: [
253
- monthLabels.map((axisLabel, index) => /* @__PURE__ */ jsx(
254
- "li",
255
- {
256
- style: axisStyle("x", axisLabel.position),
257
- children: axisLabel.label
258
- },
259
- `${axisLabel.position}-${index}`
260
- )),
261
- interactive && crosshairCandle && activeCandleIndex !== void 0 ? /* @__PURE__ */ jsx(
262
- "li",
263
- {
264
- "data-part": "crosshair-time",
265
- style: crosshairStyle(slotOffset + activeCandleIndex, slotCount, void 0),
266
- children: String(crosshairCandle.time)
267
- }
268
- ) : null
269
- ] }) })
270
- ] }) }),
271
- /* @__PURE__ */ jsxs("ol", { "data-part": "price-axis", "data-axis": "price", "aria-label": `${label} prices`, children: [
272
- priceLabels.map((axisLabel, index) => /* @__PURE__ */ jsx(
273
- "li",
271
+ /* @__PURE__ */ jsx("div", { "data-part": "time-viewport", children: /* @__PURE__ */ jsxs(
272
+ "ol",
274
273
  {
275
- style: axisStyle("y", axisLabel.position),
276
- children: axisLabel.label
277
- },
278
- `${axisLabel.position}-${index}`
279
- )),
280
- interactive && crosshairCandle && activeCandleIndex !== void 0 ? /* @__PURE__ */ jsx("li", { "data-part": "crosshair-price", style: cursorStyle(cursorY), children: crosshairCandle.close }) : null
281
- ] })
274
+ "data-part": "time-axis",
275
+ "data-axis": "time",
276
+ "aria-label": `${label} ${accessibleLabels.months}`,
277
+ children: [
278
+ monthLabels.map((axisLabel, index) => /* @__PURE__ */ jsx(
279
+ "li",
280
+ {
281
+ style: axisStyle("x", axisLabel.position),
282
+ children: axisLabel.label
283
+ },
284
+ `${axisLabel.position}-${index}`
285
+ )),
286
+ interactive && crosshairCandle && activeCandleIndex !== void 0 ? /* @__PURE__ */ jsx(
287
+ "li",
288
+ {
289
+ "data-part": "crosshair-time",
290
+ style: crosshairStyle(slotOffset + activeCandleIndex, slotCount, void 0),
291
+ children: String(crosshairCandle.time)
292
+ }
293
+ ) : null
294
+ ]
295
+ }
296
+ ) })
297
+ ] }) }),
298
+ /* @__PURE__ */ jsxs(
299
+ "ol",
300
+ {
301
+ "data-part": "price-axis",
302
+ "data-axis": "price",
303
+ "aria-label": `${label} ${accessibleLabels.prices}`,
304
+ children: [
305
+ priceLabels.map((axisLabel, index) => /* @__PURE__ */ jsx(
306
+ "li",
307
+ {
308
+ style: axisStyle("y", axisLabel.position),
309
+ children: axisLabel.label
310
+ },
311
+ `${axisLabel.position}-${index}`
312
+ )),
313
+ interactive && crosshairCandle && activeCandleIndex !== void 0 ? /* @__PURE__ */ jsx("li", { "data-part": "crosshair-price", style: cursorStyle(cursorY), children: crosshairCandle.close }) : null
314
+ ]
315
+ }
316
+ )
282
317
  ] }),
283
- /* @__PURE__ */ jsxs("table", { "data-part": "data", "aria-label": `${label} data`, children: [
318
+ /* @__PURE__ */ jsxs("table", { "data-part": "data", "aria-label": `${label} ${accessibleLabels.data}`, children: [
284
319
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
285
- /* @__PURE__ */ jsx("th", { scope: "col", children: "Time" }),
286
- /* @__PURE__ */ jsx("th", { scope: "col", children: "Open" }),
287
- /* @__PURE__ */ jsx("th", { scope: "col", children: "High" }),
288
- /* @__PURE__ */ jsx("th", { scope: "col", children: "Low" }),
289
- /* @__PURE__ */ jsx("th", { scope: "col", children: "Close" })
320
+ /* @__PURE__ */ jsx("th", { scope: "col", children: accessibleLabels.time }),
321
+ /* @__PURE__ */ jsx("th", { scope: "col", children: accessibleLabels.open }),
322
+ /* @__PURE__ */ jsx("th", { scope: "col", children: accessibleLabels.high }),
323
+ /* @__PURE__ */ jsx("th", { scope: "col", children: accessibleLabels.low }),
324
+ /* @__PURE__ */ jsx("th", { scope: "col", children: accessibleLabels.close })
290
325
  ] }) }),
291
326
  /* @__PURE__ */ jsx("tbody", { children: data.map((candle, index) => /* @__PURE__ */ jsxs("tr", { children: [
292
327
  /* @__PURE__ */ jsx("th", { scope: "row", children: String(candle.time) }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/candle-chart/CandleChart.tsx"],"sourcesContent":["import type {\n CSSProperties,\n ElementType,\n KeyboardEvent,\n PointerEvent,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { useRenderElement } from \"@gunkin/uiify/core/render\";\nimport type {\n CandleChartAxisLabel,\n CandleChartCandleProps,\n CandleChartData,\n CandleChartProps,\n CandleChartViewProps,\n} from \"./types.js\";\n\ninterface CandleStyle extends CSSProperties {\n \"--candle-body-height\": string;\n \"--candle-body-top\": string;\n \"--candle-slot\": string;\n \"--candle-wick-height\": string;\n \"--candle-wick-top\": string;\n \"--candle-x\": string;\n \"--candle-cursor-y\"?: string;\n}\n\ninterface CrosshairStyle extends CSSProperties {\n \"--candle-crosshair-x\": string;\n \"--candle-cursor-y\"?: string;\n}\n\ninterface CursorStyle extends CSSProperties {\n \"--candle-cursor-y\"?: string;\n}\n\ninterface AxisStyle extends CSSProperties {\n \"--candle-axis-x\"?: string;\n \"--candle-axis-y\"?: string;\n}\n\ntype CandleDirection = \"down\" | \"flat\" | \"up\";\n\ninterface CandleGeometry {\n readonly bodyHeight: string;\n readonly bodyTop: string;\n readonly direction: CandleDirection;\n readonly slot: string;\n readonly wickHeight: string;\n readonly wickTop: string;\n readonly x: string;\n}\n\nfunction percent(value: number): string {\n const rounded = Math.round(value * 10000) / 10000;\n return `${rounded}%`;\n}\n\nfunction valueToPercent(value: number, min: number, range: number): number {\n if (range === 0) return 50;\n return Math.min(100, Math.max(0, ((min + range - value) / range) * 100));\n}\n\nfunction directionFor(candle: CandleChartData): CandleDirection {\n if (candle.close > candle.open) return \"up\";\n if (candle.close < candle.open) return \"down\";\n return \"flat\";\n}\n\nexport function getPriceBounds(data: readonly CandleChartData[]): { max: number; min: number } {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n for (const candle of data) {\n min = Math.min(min, candle.low);\n max = Math.max(max, candle.high);\n }\n\n if (data.length === 0) return { max: 1, min: 0 };\n return { max, min };\n}\n\ninterface AxisLabel {\n readonly label: ReactNode;\n readonly position: number;\n}\n\nfunction monthKey(time: string | number): string {\n const date = new Date(time);\n if (Number.isNaN(date.getTime())) return String(time);\n return `${date.getUTCFullYear()}-${date.getUTCMonth()}`;\n}\n\nfunction monthLabel(time: string | number): string {\n const date = new Date(time);\n if (Number.isNaN(date.getTime())) return String(time);\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n timeZone: \"UTC\",\n year: \"2-digit\",\n }).format(date);\n}\n\nfunction monthLabelsFor(data: readonly CandleChartData[]): AxisLabel[] {\n const labels: AxisLabel[] = [];\n const seen = new Set<string>();\n\n data.forEach((candle, index) => {\n const key = monthKey(candle.time);\n if (seen.has(key)) return;\n seen.add(key);\n labels.push({\n label: monthLabel(candle.time),\n position: (index / Math.max(data.length, 1)) * 100,\n });\n });\n\n return labels;\n}\n\nfunction priceLabelsFor(min: number, max: number): AxisLabel[] {\n const tickCount = 6;\n const range = max - min;\n\n return Array.from({ length: tickCount }, (_, index) => {\n const ratio = index / (tickCount - 1);\n const value = max - range * ratio;\n return {\n label: new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 2 }).format(value),\n position: ratio * 100,\n };\n });\n}\n\nfunction geometryFor(\n candle: CandleChartData,\n x: number,\n slot: number,\n min: number,\n max: number,\n): CandleGeometry {\n const range = max - min;\n const open = valueToPercent(candle.open, min, range);\n const close = valueToPercent(candle.close, min, range);\n const high = valueToPercent(candle.high, min, range);\n const low = valueToPercent(candle.low, min, range);\n\n return {\n bodyHeight: percent(Math.abs(close - open)),\n bodyTop: percent(Math.min(open, close)),\n direction: directionFor(candle),\n slot: percent(slot),\n wickHeight: percent(Math.max(0, low - high)),\n wickTop: percent(high),\n x: percent(x),\n };\n}\n\nfunction candleStyle(geometry: CandleGeometry, cursorY: number | undefined): CandleStyle {\n return {\n \"--candle-body-height\": geometry.bodyHeight,\n \"--candle-body-top\": geometry.bodyTop,\n \"--candle-slot\": geometry.slot,\n \"--candle-wick-height\": geometry.wickHeight,\n \"--candle-wick-top\": geometry.wickTop,\n \"--candle-x\": geometry.x,\n ...(cursorY === undefined ? {} : { \"--candle-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\nfunction crosshairStyle(index: number, count: number, cursorY: number | undefined): CrosshairStyle {\n return {\n \"--candle-crosshair-x\": percent(((index + 0.5) / Math.max(count, 1)) * 100),\n ...(cursorY === undefined ? {} : { \"--candle-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\nfunction cursorStyle(cursorY: number | undefined): CursorStyle {\n return cursorY === undefined ? {} : { \"--candle-cursor-y\": `${Math.max(0, cursorY)}px` };\n}\n\nfunction clampAxisPosition(position: number): number {\n return Math.min(100, Math.max(0, position));\n}\n\nfunction axisStyle(axis: \"x\" | \"y\", position: number): AxisStyle {\n const value = percent(clampAxisPosition(position));\n if (axis === \"x\") return { \"--candle-axis-x\": value };\n return { \"--candle-axis-y\": value };\n}\n\nfunction axisLabelsFor(\n overrides: readonly CandleChartAxisLabel[] | undefined,\n fallback: readonly AxisLabel[],\n): readonly AxisLabel[] {\n return overrides ?? fallback;\n}\n\n/** One candle glyph with its optional hit target; shared by the static list and virtual rows. */\nexport function CandleChartCandle({\n as: Tag,\n candle,\n index,\n x,\n slot,\n min,\n max,\n interactive,\n isActive,\n isSelected,\n cursorY,\n onCandleClick,\n onCandlePointerLeave,\n onCandlePointerMove,\n}: CandleChartCandleProps): ReactElement {\n const geometry = geometryFor(candle, x, slot, min, max);\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n onCandleClick?.(index);\n };\n\n return (\n <Tag\n aria-hidden={interactive ? undefined : true}\n data-part=\"candle\"\n data-direction={geometry.direction}\n data-crosshair-active={interactive && isActive ? \"\" : undefined}\n data-time={String(candle.time)}\n style={candleStyle(geometry, isActive ? cursorY : undefined)}\n >\n {interactive ? (\n <button\n data-part=\"candle-hit\"\n type=\"button\"\n aria-label={`Candle ${String(candle.time)}`}\n aria-pressed={isSelected}\n onClick={() => onCandleClick?.(index)}\n onKeyDown={handleKeyDown}\n onPointerLeave={onCandlePointerLeave}\n onPointerMove={(event: PointerEvent<HTMLButtonElement>) =>\n onCandlePointerMove?.({ index, offsetY: event.nativeEvent.offsetY })\n }\n />\n ) : null}\n </Tag>\n );\n}\nCandleChartCandle.displayName = \"CandleChartCandle\";\n\nexport function CandleChart<TAs extends ElementType = \"figure\">(\n props: CandleChartProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n data,\n xAxis,\n yAxis,\n \"aria-label\": ariaLabel,\n activeCandleIndex,\n cursorY,\n interactive = false,\n onCandleClick,\n onCandlePointerLeave,\n onCandlePointerMove,\n selectedCandleIndex,\n candleLayer,\n announceReadout = true,\n slotCount = data.length,\n slotOffset = 0,\n ...consumerProps\n } = props as CandleChartProps<\"figure\"> & CandleChartViewProps;\n const { min, max } = getPriceBounds(data);\n const label = ariaLabel ?? \"Candlestick chart\";\n const monthLabels = axisLabelsFor(xAxis, monthLabelsFor(data));\n const priceLabels = axisLabelsFor(yAxis, priceLabelsFor(min, max));\n const readoutIndex =\n activeCandleIndex ?? selectedCandleIndex ?? (data.length > 0 ? data.length - 1 : undefined);\n const readoutCandle = readoutIndex === undefined ? undefined : data[readoutIndex];\n const crosshairCandle = activeCandleIndex === undefined ? undefined : data[activeCandleIndex];\n const candles = candleLayer ?? (\n <ol data-part=\"candles\" aria-label={`${label} candles`}>\n {data.map((candle, index) => (\n <CandleChartCandle\n key={`${candle.time}-${index}`}\n as=\"li\"\n candle={candle}\n index={index}\n x={(index / data.length) * 100}\n slot={100 / data.length}\n min={min}\n max={max}\n interactive={interactive}\n isActive={activeCandleIndex === index}\n isSelected={selectedCandleIndex === index}\n cursorY={cursorY}\n onCandleClick={onCandleClick}\n onCandlePointerLeave={onCandlePointerLeave}\n onCandlePointerMove={onCandlePointerMove}\n />\n ))}\n </ol>\n );\n\n return useRenderElement({\n as,\n defaultTag: \"figure\",\n props: {\n ...consumerProps,\n \"aria-label\": label,\n \"data-uiify-candle-chart\": \"\",\n \"data-interactive\": interactive ? \"\" : undefined,\n children: (\n <>\n <figcaption>{label}</figcaption>\n {interactive && readoutCandle ? (\n <div data-part=\"readout\" aria-live={announceReadout ? \"polite\" : \"off\"}>\n <span data-part=\"readout-time\">{String(readoutCandle.time)}</span>\n <span>O {readoutCandle.open}</span>\n <span>H {readoutCandle.high}</span>\n <span>L {readoutCandle.low}</span>\n <span>C {readoutCandle.close}</span>\n </div>\n ) : null}\n <div data-part=\"plot\" aria-hidden={interactive ? undefined : true}>\n <div data-part=\"scroll-viewport\">\n <div data-part=\"canvas\">\n <div data-part=\"viewport\">\n {candles}\n {interactive && crosshairCandle && activeCandleIndex !== undefined ? (\n <div\n data-part=\"crosshair\"\n aria-hidden=\"true\"\n style={crosshairStyle(slotOffset + activeCandleIndex, slotCount, cursorY)}\n >\n <span data-part=\"crosshair-marker\">+</span>\n </div>\n ) : null}\n </div>\n <div data-part=\"time-viewport\">\n <ol data-part=\"time-axis\" data-axis=\"time\" aria-label={`${label} months`}>\n {monthLabels.map((axisLabel, index) => (\n <li\n key={`${axisLabel.position}-${index}`}\n style={axisStyle(\"x\", axisLabel.position)}\n >\n {axisLabel.label}\n </li>\n ))}\n {interactive && crosshairCandle && activeCandleIndex !== undefined ? (\n <li\n data-part=\"crosshair-time\"\n style={crosshairStyle(slotOffset + activeCandleIndex, slotCount, undefined)}\n >\n {String(crosshairCandle.time)}\n </li>\n ) : null}\n </ol>\n </div>\n </div>\n </div>\n <ol data-part=\"price-axis\" data-axis=\"price\" aria-label={`${label} prices`}>\n {priceLabels.map((axisLabel, index) => (\n <li\n key={`${axisLabel.position}-${index}`}\n style={axisStyle(\"y\", axisLabel.position)}\n >\n {axisLabel.label}\n </li>\n ))}\n {interactive && crosshairCandle && activeCandleIndex !== undefined ? (\n <li data-part=\"crosshair-price\" style={cursorStyle(cursorY)}>\n {crosshairCandle.close}\n </li>\n ) : null}\n </ol>\n </div>\n <table data-part=\"data\" aria-label={`${label} data`}>\n <thead>\n <tr>\n <th scope=\"col\">Time</th>\n <th scope=\"col\">Open</th>\n <th scope=\"col\">High</th>\n <th scope=\"col\">Low</th>\n <th scope=\"col\">Close</th>\n </tr>\n </thead>\n <tbody>\n {data.map((candle, index) => (\n <tr key={`${candle.time}-${index}`}>\n <th scope=\"row\">{String(candle.time)}</th>\n <td>{candle.open}</td>\n <td>{candle.high}</td>\n <td>{candle.low}</td>\n <td>{candle.close}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </>\n ),\n },\n render,\n state: {},\n });\n}\nCandleChart.displayName = \"CandleChart\";\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/candle-chart/CandleChart.tsx"],"sourcesContent":["import type {\n CSSProperties,\n ElementType,\n KeyboardEvent,\n PointerEvent,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { useRenderElement } from \"@gunkin/uiify/core/render\";\nimport { formatLabel } from \"@gunkin/uiify/core/format-label\";\nimport type {\n CandleChartAxisLabel,\n CandleChartCandleProps,\n CandleChartData,\n CandleChartProps,\n CandleChartViewProps,\n} from \"./types.js\";\n\nconst DEFAULT_CANDLE_CHART_LABELS = {\n chart: \"Candlestick chart\",\n candle: \"Candle {time}\",\n candles: \"candles\",\n months: \"months\",\n prices: \"prices\",\n data: \"data\",\n time: \"Time\",\n open: \"Open\",\n high: \"High\",\n low: \"Low\",\n close: \"Close\",\n} as const;\n\ninterface CandleStyle extends CSSProperties {\n \"--candle-body-height\": string;\n \"--candle-body-top\": string;\n \"--candle-slot\": string;\n \"--candle-wick-height\": string;\n \"--candle-wick-top\": string;\n \"--candle-x\": string;\n \"--candle-cursor-y\"?: string;\n}\n\ninterface CrosshairStyle extends CSSProperties {\n \"--candle-crosshair-x\": string;\n \"--candle-cursor-y\"?: string;\n}\n\ninterface CursorStyle extends CSSProperties {\n \"--candle-cursor-y\"?: string;\n}\n\ninterface AxisStyle extends CSSProperties {\n \"--candle-axis-x\"?: string;\n \"--candle-axis-y\"?: string;\n}\n\ntype CandleDirection = \"down\" | \"flat\" | \"up\";\n\ninterface CandleGeometry {\n readonly bodyHeight: string;\n readonly bodyTop: string;\n readonly direction: CandleDirection;\n readonly slot: string;\n readonly wickHeight: string;\n readonly wickTop: string;\n readonly x: string;\n}\n\nfunction percent(value: number): string {\n const rounded = Math.round(value * 10000) / 10000;\n return `${rounded}%`;\n}\n\nfunction valueToPercent(value: number, min: number, range: number): number {\n if (range === 0) return 50;\n return Math.min(100, Math.max(0, ((min + range - value) / range) * 100));\n}\n\nfunction directionFor(candle: CandleChartData): CandleDirection {\n if (candle.close > candle.open) return \"up\";\n if (candle.close < candle.open) return \"down\";\n return \"flat\";\n}\n\nexport function getPriceBounds(data: readonly CandleChartData[]): { max: number; min: number } {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n for (const candle of data) {\n min = Math.min(min, candle.low);\n max = Math.max(max, candle.high);\n }\n\n if (data.length === 0) return { max: 1, min: 0 };\n return { max, min };\n}\n\ninterface AxisLabel {\n readonly label: ReactNode;\n readonly position: number;\n}\n\nfunction monthKey(time: string | number): string {\n const date = new Date(time);\n if (Number.isNaN(date.getTime())) return String(time);\n return `${date.getUTCFullYear()}-${date.getUTCMonth()}`;\n}\n\nfunction monthLabel(time: string | number, locale: string): string {\n const date = new Date(time);\n if (Number.isNaN(date.getTime())) return String(time);\n return new Intl.DateTimeFormat(locale, {\n month: \"short\",\n timeZone: \"UTC\",\n year: \"2-digit\",\n }).format(date);\n}\n\nfunction monthLabelsFor(data: readonly CandleChartData[], locale: string): AxisLabel[] {\n const labels: AxisLabel[] = [];\n const seen = new Set<string>();\n\n data.forEach((candle, index) => {\n const key = monthKey(candle.time);\n if (seen.has(key)) return;\n seen.add(key);\n labels.push({\n label: monthLabel(candle.time, locale),\n position: (index / Math.max(data.length, 1)) * 100,\n });\n });\n\n return labels;\n}\n\nfunction priceLabelsFor(min: number, max: number, locale: string): AxisLabel[] {\n const tickCount = 6;\n const range = max - min;\n\n return Array.from({ length: tickCount }, (_, index) => {\n const ratio = index / (tickCount - 1);\n const value = max - range * ratio;\n return {\n label: new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(value),\n position: ratio * 100,\n };\n });\n}\n\nfunction geometryFor(\n candle: CandleChartData,\n x: number,\n slot: number,\n min: number,\n max: number,\n): CandleGeometry {\n const range = max - min;\n const open = valueToPercent(candle.open, min, range);\n const close = valueToPercent(candle.close, min, range);\n const high = valueToPercent(candle.high, min, range);\n const low = valueToPercent(candle.low, min, range);\n\n return {\n bodyHeight: percent(Math.abs(close - open)),\n bodyTop: percent(Math.min(open, close)),\n direction: directionFor(candle),\n slot: percent(slot),\n wickHeight: percent(Math.max(0, low - high)),\n wickTop: percent(high),\n x: percent(x),\n };\n}\n\nfunction candleStyle(geometry: CandleGeometry, cursorY: number | undefined): CandleStyle {\n return {\n \"--candle-body-height\": geometry.bodyHeight,\n \"--candle-body-top\": geometry.bodyTop,\n \"--candle-slot\": geometry.slot,\n \"--candle-wick-height\": geometry.wickHeight,\n \"--candle-wick-top\": geometry.wickTop,\n \"--candle-x\": geometry.x,\n ...(cursorY === undefined ? {} : { \"--candle-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\nfunction crosshairStyle(index: number, count: number, cursorY: number | undefined): CrosshairStyle {\n return {\n \"--candle-crosshair-x\": percent(((index + 0.5) / Math.max(count, 1)) * 100),\n ...(cursorY === undefined ? {} : { \"--candle-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\nfunction cursorStyle(cursorY: number | undefined): CursorStyle {\n return cursorY === undefined ? {} : { \"--candle-cursor-y\": `${Math.max(0, cursorY)}px` };\n}\n\nfunction clampAxisPosition(position: number): number {\n return Math.min(100, Math.max(0, position));\n}\n\nfunction axisStyle(axis: \"x\" | \"y\", position: number): AxisStyle {\n const value = percent(clampAxisPosition(position));\n if (axis === \"x\") return { \"--candle-axis-x\": value };\n return { \"--candle-axis-y\": value };\n}\n\nfunction axisLabelsFor(\n overrides: readonly CandleChartAxisLabel[] | undefined,\n fallback: readonly AxisLabel[],\n): readonly AxisLabel[] {\n return overrides ?? fallback;\n}\n\n/** One candle glyph with its optional hit target; shared by the static list and virtual rows. */\nexport function CandleChartCandle({\n as: Tag,\n candle,\n hitLabel,\n index,\n x,\n slot,\n min,\n max,\n interactive,\n isActive,\n isSelected,\n cursorY,\n onCandleClick,\n onCandlePointerLeave,\n onCandlePointerMove,\n}: CandleChartCandleProps): ReactElement {\n const geometry = geometryFor(candle, x, slot, min, max);\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n onCandleClick?.(index);\n };\n\n return (\n <Tag\n aria-hidden={interactive ? undefined : true}\n data-part=\"candle\"\n data-direction={geometry.direction}\n data-crosshair-active={interactive && isActive ? \"\" : undefined}\n data-time={String(candle.time)}\n style={candleStyle(geometry, isActive ? cursorY : undefined)}\n >\n {interactive ? (\n <button\n data-part=\"candle-hit\"\n type=\"button\"\n aria-label={hitLabel}\n aria-pressed={isSelected}\n onClick={() => onCandleClick?.(index)}\n onKeyDown={handleKeyDown}\n onPointerLeave={onCandlePointerLeave}\n onPointerMove={(event: PointerEvent<HTMLButtonElement>) =>\n onCandlePointerMove?.({ index, offsetY: event.nativeEvent.offsetY })\n }\n />\n ) : null}\n </Tag>\n );\n}\nCandleChartCandle.displayName = \"CandleChartCandle\";\n\nexport function CandleChart<TAs extends ElementType = \"figure\">(\n props: CandleChartProps<TAs>,\n): ReactElement | null {\n const {\n as,\n render,\n data,\n xAxis,\n yAxis,\n \"aria-label\": ariaLabel,\n labels,\n activeCandleIndex,\n cursorY,\n interactive = false,\n locale = \"en-US\",\n onCandleClick,\n onCandlePointerLeave,\n onCandlePointerMove,\n selectedCandleIndex,\n candleLayer,\n announceReadout = true,\n slotCount = data.length,\n slotOffset = 0,\n ...consumerProps\n } = props as CandleChartProps<\"figure\"> & CandleChartViewProps;\n const accessibleLabels = { ...DEFAULT_CANDLE_CHART_LABELS, ...labels };\n const { min, max } = getPriceBounds(data);\n const label = ariaLabel ?? accessibleLabels.chart;\n const monthLabels = axisLabelsFor(xAxis, monthLabelsFor(data, locale));\n const priceLabels = axisLabelsFor(yAxis, priceLabelsFor(min, max, locale));\n const readoutIndex =\n activeCandleIndex ?? selectedCandleIndex ?? (data.length > 0 ? data.length - 1 : undefined);\n const readoutCandle = readoutIndex === undefined ? undefined : data[readoutIndex];\n const crosshairCandle = activeCandleIndex === undefined ? undefined : data[activeCandleIndex];\n const candles = candleLayer ?? (\n <ol data-part=\"candles\" aria-label={`${label} ${accessibleLabels.candles}`}>\n {data.map((candle, index) => (\n <CandleChartCandle\n key={`${candle.time}-${index}`}\n as=\"li\"\n candle={candle}\n hitLabel={formatLabel(accessibleLabels.candle, { time: String(candle.time) }, locale)}\n index={index}\n x={(index / data.length) * 100}\n slot={100 / data.length}\n min={min}\n max={max}\n interactive={interactive}\n isActive={activeCandleIndex === index}\n isSelected={selectedCandleIndex === index}\n cursorY={cursorY}\n onCandleClick={onCandleClick}\n onCandlePointerLeave={onCandlePointerLeave}\n onCandlePointerMove={onCandlePointerMove}\n />\n ))}\n </ol>\n );\n\n return useRenderElement({\n as,\n defaultTag: \"figure\",\n props: {\n ...consumerProps,\n \"aria-label\": label,\n \"data-uiify-candle-chart\": \"\",\n \"data-interactive\": interactive ? \"\" : undefined,\n children: (\n <>\n <figcaption>{label}</figcaption>\n {interactive && readoutCandle ? (\n <div data-part=\"readout\" aria-live={announceReadout ? \"polite\" : \"off\"}>\n <span data-part=\"readout-time\">{String(readoutCandle.time)}</span>\n <span>O {readoutCandle.open}</span>\n <span>H {readoutCandle.high}</span>\n <span>L {readoutCandle.low}</span>\n <span>C {readoutCandle.close}</span>\n </div>\n ) : null}\n <div data-part=\"plot\" aria-hidden={interactive ? undefined : true}>\n <div data-part=\"scroll-viewport\">\n <div data-part=\"canvas\">\n <div data-part=\"viewport\">\n {candles}\n {interactive && crosshairCandle && activeCandleIndex !== undefined ? (\n <div\n data-part=\"crosshair\"\n aria-hidden=\"true\"\n style={crosshairStyle(slotOffset + activeCandleIndex, slotCount, cursorY)}\n >\n <span data-part=\"crosshair-marker\">+</span>\n </div>\n ) : null}\n </div>\n <div data-part=\"time-viewport\">\n <ol\n data-part=\"time-axis\"\n data-axis=\"time\"\n aria-label={`${label} ${accessibleLabels.months}`}\n >\n {monthLabels.map((axisLabel, index) => (\n <li\n key={`${axisLabel.position}-${index}`}\n style={axisStyle(\"x\", axisLabel.position)}\n >\n {axisLabel.label}\n </li>\n ))}\n {interactive && crosshairCandle && activeCandleIndex !== undefined ? (\n <li\n data-part=\"crosshair-time\"\n style={crosshairStyle(slotOffset + activeCandleIndex, slotCount, undefined)}\n >\n {String(crosshairCandle.time)}\n </li>\n ) : null}\n </ol>\n </div>\n </div>\n </div>\n <ol\n data-part=\"price-axis\"\n data-axis=\"price\"\n aria-label={`${label} ${accessibleLabels.prices}`}\n >\n {priceLabels.map((axisLabel, index) => (\n <li\n key={`${axisLabel.position}-${index}`}\n style={axisStyle(\"y\", axisLabel.position)}\n >\n {axisLabel.label}\n </li>\n ))}\n {interactive && crosshairCandle && activeCandleIndex !== undefined ? (\n <li data-part=\"crosshair-price\" style={cursorStyle(cursorY)}>\n {crosshairCandle.close}\n </li>\n ) : null}\n </ol>\n </div>\n <table data-part=\"data\" aria-label={`${label} ${accessibleLabels.data}`}>\n <thead>\n <tr>\n <th scope=\"col\">{accessibleLabels.time}</th>\n <th scope=\"col\">{accessibleLabels.open}</th>\n <th scope=\"col\">{accessibleLabels.high}</th>\n <th scope=\"col\">{accessibleLabels.low}</th>\n <th scope=\"col\">{accessibleLabels.close}</th>\n </tr>\n </thead>\n <tbody>\n {data.map((candle, index) => (\n <tr key={`${candle.time}-${index}`}>\n <th scope=\"row\">{String(candle.time)}</th>\n <td>{candle.open}</td>\n <td>{candle.high}</td>\n <td>{candle.low}</td>\n <td>{candle.close}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </>\n ),\n },\n render,\n state: {},\n });\n}\nCandleChart.displayName = \"CandleChart\";\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"CandleChartClient.d.ts","sourceRoot":"","sources":["../../../../src/components/candle-chart/client/CandleChartClient.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,WAAW,EAAE,YAAY,EAAO,MAAM,OAAO,CAAC;AAE3E,OAAO,KAAK,EACV,sBAAsB,EAKvB,MAAM,aAAa,CAAC;AA+BrB,wBAAgB,iBAAiB,CAAC,GAAG,SAAS,WAAW,GAAG,QAAQ,EAClE,KAAK,EAAE,sBAAsB,CAAC,GAAG,CAAC,GACjC,YAAY,GAAG,IAAI,CAkJrB;yBApJe,iBAAiB"}
1
+ {"version":3,"file":"CandleChartClient.d.ts","sourceRoot":"","sources":["../../../../src/components/candle-chart/client/CandleChartClient.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,WAAW,EAAE,YAAY,EAAO,MAAM,OAAO,CAAC;AAG3E,OAAO,KAAK,EACV,sBAAsB,EAKvB,MAAM,aAAa,CAAC;AA+BrB,wBAAgB,iBAAiB,CAAC,GAAG,SAAS,WAAW,GAAG,QAAQ,EAClE,KAAK,EAAE,sBAAsB,CAAC,GAAG,CAAC,GACjC,YAAY,GAAG,IAAI,CAsJrB;yBAxJe,iBAAiB"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { useCallback, useMemo, useState } from "react";
4
+ import { formatLabel } from "@gunkin/uiify/core/format-label";
4
5
  import { CandleChart, CandleChartCandle, getPriceBounds } from "../CandleChart.js";
5
6
  import { VirtualScroll } from "../../virtual-scroll/VirtualScroll.js";
6
7
  import {
@@ -17,6 +18,7 @@ function CandleChartClient(props) {
17
18
  data,
18
19
  visibleCount,
19
20
  xAxis,
21
+ labels,
20
22
  ref: consumerRef,
21
23
  style: consumerStyle,
22
24
  onCandleClick: consumerOnCandleClick,
@@ -76,6 +78,7 @@ function CandleChartClient(props) {
76
78
  ...consumerProps,
77
79
  ...xAxis ? { xAxis } : {},
78
80
  data,
81
+ labels,
79
82
  activeCandleIndex: cursor?.index,
80
83
  cursorY: cursor?.offsetY,
81
84
  interactive: true,
@@ -110,6 +113,7 @@ function CandleChartClient(props) {
110
113
  {
111
114
  as: "div",
112
115
  candle,
116
+ hitLabel: formatLabel(labels?.candle ?? "Candle {time}", { time: String(candle.time) }),
113
117
  index,
114
118
  x: 0,
115
119
  slot: 100,
@@ -135,6 +139,7 @@ function CandleChartClient(props) {
135
139
  const chartProps = {
136
140
  ...consumerProps,
137
141
  data: slice,
142
+ labels,
138
143
  xAxis: xAxis ?? liveTimeAxis(data, sliceStart, sliceEnd, visibleCount),
139
144
  activeCandleIndex: toSliceIndex(cursor?.index),
140
145
  announceReadout: false,