@eifi1/ui-kit 0.6.0 → 0.7.0

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 (271) hide show
  1. package/README.md +69 -33
  2. package/dist/chart.d.ts +1 -0
  3. package/dist/components/account-settings.js +3 -2
  4. package/dist/components/account-settings.js.map +1 -1
  5. package/dist/components/amount-input.d.ts +3 -0
  6. package/dist/components/amount-input.js +6 -4
  7. package/dist/components/amount-input.js.map +1 -1
  8. package/dist/components/autocomplete.d.ts +36 -7
  9. package/dist/components/autocomplete.js +68 -22
  10. package/dist/components/autocomplete.js.map +1 -1
  11. package/dist/components/calculator.d.ts +3 -0
  12. package/dist/components/calculator.js +2 -1
  13. package/dist/components/calculator.js.map +1 -1
  14. package/dist/components/chart-zoom.js +2 -1
  15. package/dist/components/chart-zoom.js.map +1 -1
  16. package/dist/components/chart.d.ts +33 -2
  17. package/dist/components/chart.js +20 -8
  18. package/dist/components/chart.js.map +1 -1
  19. package/dist/components/checkbox.d.ts +9 -0
  20. package/dist/components/checkbox.js +7 -2
  21. package/dist/components/checkbox.js.map +1 -1
  22. package/dist/components/chip.d.ts +34 -14
  23. package/dist/components/chip.js +63 -28
  24. package/dist/components/chip.js.map +1 -1
  25. package/dist/components/choice-card.d.ts +18 -1
  26. package/dist/components/choice-card.js +21 -8
  27. package/dist/components/choice-card.js.map +1 -1
  28. package/dist/components/combobox-core.d.ts +61 -2
  29. package/dist/components/combobox-core.js +68 -17
  30. package/dist/components/combobox-core.js.map +1 -1
  31. package/dist/components/combobox.d.ts +11 -7
  32. package/dist/components/combobox.js +51 -28
  33. package/dist/components/combobox.js.map +1 -1
  34. package/dist/components/currency-select.js +3 -3
  35. package/dist/components/currency-select.js.map +1 -1
  36. package/dist/components/danger-confirm.d.ts +30 -6
  37. package/dist/components/danger-confirm.js +51 -32
  38. package/dist/components/danger-confirm.js.map +1 -1
  39. package/dist/components/data-table-filter-popover.d.ts +1 -1
  40. package/dist/components/data-table-filters.d.ts +1 -1
  41. package/dist/components/data-table-pagination.d.ts +6 -3
  42. package/dist/components/data-table-pagination.js +6 -5
  43. package/dist/components/data-table-pagination.js.map +1 -1
  44. package/dist/components/data-table.d.ts +1 -1
  45. package/dist/components/data-table.js +332 -248
  46. package/dist/components/data-table.js.map +1 -1
  47. package/dist/components/date-picker.js +17 -7
  48. package/dist/components/date-picker.js.map +1 -1
  49. package/dist/components/dialog-frame.d.ts +28 -3
  50. package/dist/components/dialog-frame.js +47 -11
  51. package/dist/components/dialog-frame.js.map +1 -1
  52. package/dist/components/disclosure.d.ts +22 -2
  53. package/dist/components/disclosure.js +41 -8
  54. package/dist/components/disclosure.js.map +1 -1
  55. package/dist/components/dropdown.d.ts +7 -3
  56. package/dist/components/dropdown.js +6 -2
  57. package/dist/components/dropdown.js.map +1 -1
  58. package/dist/components/entity-combobox.d.ts +17 -8
  59. package/dist/components/entity-combobox.js +7 -5
  60. package/dist/components/entity-combobox.js.map +1 -1
  61. package/dist/components/file-button.d.ts +36 -5
  62. package/dist/components/file-button.js +42 -3
  63. package/dist/components/file-button.js.map +1 -1
  64. package/dist/components/file-dropzone.d.ts +9 -5
  65. package/dist/components/file-dropzone.js +14 -19
  66. package/dist/components/file-dropzone.js.map +1 -1
  67. package/dist/components/grouped-picker.js +2 -2
  68. package/dist/components/grouped-picker.js.map +1 -1
  69. package/dist/components/hover-menu.d.ts +8 -3
  70. package/dist/components/hover-menu.js +88 -4
  71. package/dist/components/hover-menu.js.map +1 -1
  72. package/dist/components/icon-picker.d.ts +10 -1
  73. package/dist/components/icon-picker.js +5 -1
  74. package/dist/components/icon-picker.js.map +1 -1
  75. package/dist/components/measured-grid.d.ts +165 -0
  76. package/dist/components/measured-grid.js +559 -0
  77. package/dist/components/measured-grid.js.map +1 -0
  78. package/dist/components/mini-calendar.js +7 -8
  79. package/dist/components/mini-calendar.js.map +1 -1
  80. package/dist/components/month-picker.js +13 -9
  81. package/dist/components/month-picker.js.map +1 -1
  82. package/dist/components/multi-entity-combobox.js +2 -2
  83. package/dist/components/multi-entity-combobox.js.map +1 -1
  84. package/dist/components/multi-select.d.ts +9 -1
  85. package/dist/components/multi-select.js +22 -8
  86. package/dist/components/multi-select.js.map +1 -1
  87. package/dist/components/number-field.d.ts +3 -0
  88. package/dist/components/number-input.d.ts +3 -0
  89. package/dist/components/number-input.js +3 -3
  90. package/dist/components/number-input.js.map +1 -1
  91. package/dist/components/numpad-sheet.d.ts +3 -0
  92. package/dist/components/numpad-sheet.js +3 -3
  93. package/dist/components/numpad-sheet.js.map +1 -1
  94. package/dist/components/picker-sheet.js +1 -1
  95. package/dist/components/picker-sheet.js.map +1 -1
  96. package/dist/components/popover.js +11 -2
  97. package/dist/components/popover.js.map +1 -1
  98. package/dist/components/series-chart-ticks.d.ts +13 -0
  99. package/dist/components/series-chart-ticks.js +29 -0
  100. package/dist/components/series-chart-ticks.js.map +1 -0
  101. package/dist/components/series-chart.js +33 -27
  102. package/dist/components/series-chart.js.map +1 -1
  103. package/dist/components/swatch-picker.d.ts +10 -1
  104. package/dist/components/swatch-picker.js +2 -0
  105. package/dist/components/swatch-picker.js.map +1 -1
  106. package/dist/components/swipeable-row.d.ts +11 -2
  107. package/dist/components/swipeable-row.js +5 -3
  108. package/dist/components/swipeable-row.js.map +1 -1
  109. package/dist/components/switch.d.ts +9 -0
  110. package/dist/components/switch.js +7 -2
  111. package/dist/components/switch.js.map +1 -1
  112. package/dist/components/tile-radio.js +5 -7
  113. package/dist/components/tile-radio.js.map +1 -1
  114. package/dist/components/toggle-group.d.ts +13 -3
  115. package/dist/components/toggle-group.js +21 -1
  116. package/dist/components/toggle-group.js.map +1 -1
  117. package/dist/components/toggle-legend.js +1 -2
  118. package/dist/components/toggle-legend.js.map +1 -1
  119. package/dist/components/treemap.d.ts +6 -1
  120. package/dist/components/treemap.js +16 -6
  121. package/dist/components/treemap.js.map +1 -1
  122. package/dist/components/ui.d.ts +31 -7
  123. package/dist/components/ui.js +26 -18
  124. package/dist/components/ui.js.map +1 -1
  125. package/dist/components/use-anchor-dir.d.ts +15 -0
  126. package/dist/components/use-anchor-dir.js +14 -0
  127. package/dist/components/use-anchor-dir.js.map +1 -0
  128. package/dist/components/use-mobile-reveal.d.ts +8 -1
  129. package/dist/components/use-mobile-reveal.js +3 -2
  130. package/dist/components/use-mobile-reveal.js.map +1 -1
  131. package/dist/components/use-table-state.d.ts +4 -4
  132. package/dist/components/use-table-state.js +12 -5
  133. package/dist/components/use-table-state.js.map +1 -1
  134. package/dist/{data-table-filters-DM1auUfH.d.ts → data-table-filters-noy0Abvi.d.ts} +40 -7
  135. package/dist/data-table.d.ts +1 -1
  136. package/dist/data-table.js.map +1 -1
  137. package/dist/feedback/feedback-attachment.d.ts +22 -3
  138. package/dist/feedback/feedback-attachment.js +15 -7
  139. package/dist/feedback/feedback-attachment.js.map +1 -1
  140. package/dist/feedback/feedback-dialog.d.ts +3 -2
  141. package/dist/feedback/feedback-dialog.js.map +1 -1
  142. package/dist/feedback.d.ts +1 -1
  143. package/dist/hooks/use-windowed-rows.d.ts +29 -0
  144. package/dist/hooks/use-windowed-rows.js +31 -0
  145. package/dist/hooks/use-windowed-rows.js.map +1 -0
  146. package/dist/i18n/defaults.d.ts +3 -0
  147. package/dist/i18n/defaults.js +5 -1
  148. package/dist/i18n/defaults.js.map +1 -1
  149. package/dist/i18n/kit-labels.d.ts +5 -0
  150. package/dist/i18n/kit-labels.js.map +1 -1
  151. package/dist/i18n/locales/de-CH.d.ts +43 -0
  152. package/dist/i18n/locales/de-CH.js +21 -0
  153. package/dist/i18n/locales/de-CH.js.map +1 -0
  154. package/dist/i18n/locales/de.d.ts +43 -0
  155. package/dist/i18n/locales/de.js +344 -0
  156. package/dist/i18n/locales/de.js.map +1 -0
  157. package/dist/i18n/locales/es.d.ts +43 -0
  158. package/dist/i18n/locales/es.js +339 -0
  159. package/dist/i18n/locales/es.js.map +1 -0
  160. package/dist/i18n/locales/fr.d.ts +43 -0
  161. package/dist/i18n/locales/fr.js +344 -0
  162. package/dist/i18n/locales/fr.js.map +1 -0
  163. package/dist/i18n/locales/hu.d.ts +43 -0
  164. package/dist/i18n/locales/hu.js +343 -0
  165. package/dist/i18n/locales/hu.js.map +1 -0
  166. package/dist/i18n/locales/it.d.ts +43 -0
  167. package/dist/i18n/locales/it.js +342 -0
  168. package/dist/i18n/locales/it.js.map +1 -0
  169. package/dist/i18n/locales/zh.d.ts +43 -0
  170. package/dist/i18n/locales/zh.js +338 -0
  171. package/dist/i18n/locales/zh.js.map +1 -0
  172. package/dist/index.d.ts +6 -3
  173. package/dist/index.js +4 -1
  174. package/dist/index.js.map +1 -1
  175. package/dist/lib/direction.d.ts +24 -0
  176. package/dist/lib/direction.js +19 -0
  177. package/dist/lib/direction.js.map +1 -0
  178. package/dist/rhf/form.js.map +1 -1
  179. package/dist/search/command-palette.d.ts +5 -0
  180. package/dist/search/command-palette.js +80 -50
  181. package/dist/search/command-palette.js.map +1 -1
  182. package/dist/shell/app-shell.d.ts +13 -1
  183. package/dist/shell/app-shell.js +133 -84
  184. package/dist/shell/app-shell.js.map +1 -1
  185. package/dist/shell/topbar-action-menu.js +1 -1
  186. package/dist/shell/topbar-action-menu.js.map +1 -1
  187. package/dist/shell/topbar-controls.d.ts +7 -3
  188. package/dist/shell/topbar-controls.js +38 -31
  189. package/dist/shell/topbar-controls.js.map +1 -1
  190. package/dist/theme/chart-palette.d.ts +7 -1
  191. package/dist/theme/chart-palette.js +2 -1
  192. package/dist/theme/chart-palette.js.map +1 -1
  193. package/dist/tour/tour.d.ts +11 -5
  194. package/dist/tour/tour.js +124 -58
  195. package/dist/tour/tour.js.map +1 -1
  196. package/dist/wizard/use-wizard.js +30 -13
  197. package/dist/wizard/use-wizard.js.map +1 -1
  198. package/dist/wizard/wizard-summary.js +1 -1
  199. package/dist/wizard/wizard-summary.js.map +1 -1
  200. package/package.json +12 -2
  201. package/src/components/account-settings.tsx +6 -2
  202. package/src/components/amount-input.tsx +10 -8
  203. package/src/components/autocomplete.tsx +123 -33
  204. package/src/components/calculator.tsx +5 -1
  205. package/src/components/chart-zoom.tsx +8 -1
  206. package/src/components/chart.tsx +68 -7
  207. package/src/components/checkbox.tsx +16 -0
  208. package/src/components/chip.tsx +131 -49
  209. package/src/components/choice-card.tsx +77 -36
  210. package/src/components/combobox-core.tsx +147 -20
  211. package/src/components/combobox.tsx +100 -44
  212. package/src/components/currency-select.tsx +6 -6
  213. package/src/components/danger-confirm.tsx +90 -36
  214. package/src/components/data-table-pagination.tsx +32 -19
  215. package/src/components/data-table.tsx +198 -36
  216. package/src/components/date-picker.tsx +24 -7
  217. package/src/components/dialog-frame.tsx +97 -22
  218. package/src/components/disclosure.tsx +75 -13
  219. package/src/components/dropdown.tsx +17 -5
  220. package/src/components/entity-combobox.tsx +26 -13
  221. package/src/components/file-button.tsx +102 -6
  222. package/src/components/file-dropzone.tsx +44 -35
  223. package/src/components/grouped-picker.tsx +2 -2
  224. package/src/components/hover-menu.tsx +139 -10
  225. package/src/components/icon-picker.tsx +14 -1
  226. package/src/components/measured-grid.tsx +852 -0
  227. package/src/components/mini-calendar.tsx +11 -8
  228. package/src/components/month-picker.tsx +18 -11
  229. package/src/components/multi-entity-combobox.tsx +2 -2
  230. package/src/components/multi-select.tsx +34 -7
  231. package/src/components/number-input.tsx +4 -4
  232. package/src/components/numpad-sheet.tsx +5 -3
  233. package/src/components/picker-sheet.tsx +1 -1
  234. package/src/components/popover.tsx +18 -3
  235. package/src/components/series-chart-ticks.ts +52 -0
  236. package/src/components/series-chart.tsx +39 -31
  237. package/src/components/swatch-picker.tsx +11 -0
  238. package/src/components/swipeable-row.tsx +21 -6
  239. package/src/components/switch.tsx +16 -0
  240. package/src/components/tile-radio.tsx +5 -7
  241. package/src/components/toggle-group.tsx +39 -3
  242. package/src/components/toggle-legend.tsx +5 -2
  243. package/src/components/treemap.tsx +28 -5
  244. package/src/components/ui.tsx +74 -30
  245. package/src/components/use-anchor-dir.ts +20 -0
  246. package/src/components/use-mobile-reveal.ts +10 -2
  247. package/src/components/use-table-state.ts +44 -7
  248. package/src/data-table.ts +1 -0
  249. package/src/feedback/feedback-attachment.tsx +36 -9
  250. package/src/feedback/feedback-dialog.tsx +3 -2
  251. package/src/hooks/use-windowed-rows.ts +69 -0
  252. package/src/i18n/defaults.ts +4 -0
  253. package/src/i18n/kit-labels.tsx +4 -0
  254. package/src/i18n/locales/de-CH.ts +30 -0
  255. package/src/i18n/locales/de.ts +365 -0
  256. package/src/i18n/locales/es.ts +358 -0
  257. package/src/i18n/locales/fr.ts +371 -0
  258. package/src/i18n/locales/hu.ts +359 -0
  259. package/src/i18n/locales/it.ts +360 -0
  260. package/src/i18n/locales/zh.ts +348 -0
  261. package/src/index.ts +10 -1
  262. package/src/lib/direction.ts +37 -0
  263. package/src/rhf/form.tsx +21 -0
  264. package/src/search/command-palette.tsx +77 -19
  265. package/src/shell/app-shell.tsx +200 -129
  266. package/src/shell/topbar-action-menu.tsx +1 -1
  267. package/src/shell/topbar-controls.tsx +19 -8
  268. package/src/theme/chart-palette.ts +9 -2
  269. package/src/tour/tour.tsx +119 -18
  270. package/src/wizard/use-wizard.ts +55 -17
  271. package/src/wizard/wizard-summary.tsx +1 -1
@@ -0,0 +1,338 @@
1
+ "use client";
2
+ import { formatFileSize } from "../kit-labels.js";
3
+ function uiKitLabelsZh(numberLocale = "zh-CN") {
4
+ const num = new Intl.NumberFormat(numberLocale);
5
+ const n = (value) => num.format(value);
6
+ return {
7
+ feedbackAttachment: {
8
+ attachmentAdd: "\u9644\u52A0\u56FE\u7247",
9
+ attachmentCapture: "\u622A\u53D6\u5C4F\u5E55",
10
+ attachmentPaste: "\u2026\u2026\u6216\u4ECE\u526A\u8D34\u677F\u7C98\u8D34\u622A\u56FE\u3002",
11
+ attachmentRemove: "\u79FB\u9664\u9644\u4EF6"
12
+ },
13
+ measuredGrid: {
14
+ view: "\u8868\u683C\u89C6\u56FE",
15
+ cellsView: "\u5355\u5143\u683C",
16
+ textView: "\u6587\u672C",
17
+ addRow: "\u6DFB\u52A0\u884C",
18
+ removeRow: (row) => `\u5220\u9664\u7B2C ${row} \u884C`,
19
+ clear: "\u6E05\u7A7A\u8868\u683C",
20
+ pasteHint: "\u53EF\u5C06\u7535\u5B50\u8868\u683C\u4E2D\u7684\u4E00\u5757\u6570\u636E\u7C98\u8D34\u5230\u4EFB\u610F\u5355\u5143\u683C",
21
+ cell: (column, row) => `${column}\uFF0C\u7B2C ${row} \u884C`,
22
+ rowNumber: "\u884C",
23
+ rowActions: "\u884C\u64CD\u4F5C",
24
+ keyboardHint: "\u65B9\u5411\u952E\u5728\u5355\u5143\u683C\u4E4B\u95F4\u79FB\u52A8\u3002\u76F4\u63A5\u8F93\u5165\u66FF\u6362\u5355\u5143\u683C\u5185\u5BB9\uFF0CF2 \u7F16\u8F91\uFF0CEsc \u64A4\u9500\u7F16\u8F91\u3002\u56DE\u8F66\u5411\u4E0B\u79FB\u52A8\uFF0C\u5E76\u5728\u672B\u5C3E\u6DFB\u52A0\u4E00\u884C\u3002",
25
+ lineError: (line) => `\u65E0\u6CD5\u8BFB\u53D6\u7B2C ${line} \u884C`,
26
+ points: (count) => `${count} \u4E2A\u70B9`,
27
+ problems: (count) => `${count} \u4E2A\u5355\u5143\u683C\u4E0D\u662F\u6570\u5B57`
28
+ },
29
+ pageContents: { title: "\u672C\u9875\u76EE\u5F55" },
30
+ common: {
31
+ close: "\u5173\u95ED",
32
+ clear: "\u6E05\u9664",
33
+ search: "\u641C\u7D22",
34
+ done: "\u5B8C\u6210",
35
+ cancel: "\u53D6\u6D88",
36
+ save: "\u4FDD\u5B58",
37
+ back: "\u4E0A\u4E00\u6B65",
38
+ next: "\u4E0B\u4E00\u6B65",
39
+ remove: "\u79FB\u9664",
40
+ loading: "\u52A0\u8F7D\u4E2D\u2026",
41
+ noResults: "\u65E0\u7ED3\u679C",
42
+ // Full-width colon, no space after it.
43
+ fieldValue: (field, value) => `${field}\uFF1A${value}`
44
+ },
45
+ dataTable: {
46
+ columns: "\u5217",
47
+ selectAllRows: "\u5168\u9009\u6240\u6709\u884C",
48
+ sortHint: "\u70B9\u51FB\u6392\u5E8F \xB7 \u6309\u4F4F Shift \u70B9\u51FB\u53EF\u6DFB\u52A0\u6392\u5E8F",
49
+ filter: "\u7B5B\u9009",
50
+ close: "\u5173\u95ED",
51
+ selectRow: "\u9009\u62E9\u884C",
52
+ autoSize: "\u81EA\u52A8\u8C03\u6574\u5217\u5BBD",
53
+ loading: "\u52A0\u8F7D\u4E2D\u2026",
54
+ filters: "\u7B5B\u9009\u6761\u4EF6",
55
+ clearAll: "\u5168\u90E8\u6E05\u9664",
56
+ done: "\u5B8C\u6210",
57
+ pageSize: "\u6BCF\u9875\u884C\u6570",
58
+ pageSizeAll: "\u5168\u90E8",
59
+ prevPage: "\u4E0A\u4E00\u9875",
60
+ nextPage: "\u4E0B\u4E00\u9875",
61
+ clearFilter: "\u6E05\u9664\u7B5B\u9009",
62
+ filterPlaceholder: "\u7B5B\u9009\u2026",
63
+ selectFilter: "\u9009\u62E9",
64
+ selectAll: "\u5168\u90E8",
65
+ selectNone: "\u65E0",
66
+ dateFrom: "\u4ECE",
67
+ dateTo: "\u81F3",
68
+ numberMin: "\u6700\u5C0F\u503C",
69
+ numberMax: "\u6700\u5927\u503C",
70
+ numberAbs: "\u7EDD\u5BF9\u503C",
71
+ presets: {
72
+ today: "\u4ECA\u5929",
73
+ yesterday: "\u6628\u5929",
74
+ this_week: "\u672C\u5468",
75
+ last_week: "\u4E0A\u5468",
76
+ last_7_days: "\u6700\u8FD1 7 \u5929",
77
+ last_30_days: "\u6700\u8FD1 30 \u5929",
78
+ this_month: "\u672C\u6708",
79
+ last_month: "\u4E0A\u6708",
80
+ last_3_months: "\u6700\u8FD1 3 \u4E2A\u6708",
81
+ ytd: "\u4ECA\u5E74\u81F3\u4ECA",
82
+ last_year: "\u53BB\u5E74"
83
+ },
84
+ table: "\u6570\u636E\u8868\u683C",
85
+ filterResults: (shown, total) => `\u663E\u793A ${n(shown)} \u884C\uFF0C\u5171 ${n(total)} \u884C`,
86
+ sortedAscending: (column) => `\u5DF2\u6309\u201C${column}\u201D\u5347\u5E8F\u6392\u5E8F`,
87
+ sortedDescending: (column) => `\u5DF2\u6309\u201C${column}\u201D\u964D\u5E8F\u6392\u5E8F`,
88
+ sortCleared: (column) => `\u5DF2\u53D6\u6D88\u201C${column}\u201D\u7684\u6392\u5E8F`,
89
+ pageChanged: (page, totalPages) => `\u7B2C ${n(page)} \u9875\uFF0C\u5171 ${n(totalPages)} \u9875`,
90
+ pageRange: (from, to, total) => `${n(from)}\u2013${n(to)} / ${n(total)}`,
91
+ rowCount: (total) => n(total),
92
+ columnsCount: (visible, total) => `\u5217\uFF08${n(visible)}/${n(total)}\uFF09`
93
+ },
94
+ miniCalendar: {
95
+ previousMonth: "\u4E0A\u4E2A\u6708",
96
+ nextMonth: "\u4E0B\u4E2A\u6708",
97
+ // Already formatted in the provider's locale ("2026年9月14日星期一").
98
+ day: (date) => date,
99
+ chooseStart: "\u8BF7\u9009\u62E9\u5F00\u59CB\u65E5\u671F",
100
+ chooseEnd: "\u8BF7\u9009\u62E9\u7ED3\u675F\u65E5\u671F",
101
+ startSelected: (date) => `\u5DF2\u9009\u62E9 ${date} \u4E3A\u5F00\u59CB\u65E5\u671F\u3002\u8BF7\u9009\u62E9\u7ED3\u675F\u65E5\u671F\u3002`,
102
+ rangeSelected: (from, to) => `\u5DF2\u9009\u62E9 ${from} \u81F3 ${to}\u3002\u5982\u9700\u91CD\u65B0\u9009\u62E9\uFF0C\u8BF7\u5148\u9009\u62E9\u5F00\u59CB\u65E5\u671F\u3002`
103
+ },
104
+ monthPicker: {
105
+ previousYear: "\u4E0A\u4E00\u5E74",
106
+ nextYear: "\u4E0B\u4E00\u5E74",
107
+ panel: "\u9009\u62E9\u6708\u4EFD",
108
+ month: (monthYear) => monthYear
109
+ },
110
+ datePicker: {
111
+ panel: "\u9009\u62E9\u65E5\u671F",
112
+ rangePanel: "\u9009\u62E9\u65E5\u671F\u8303\u56F4",
113
+ clear: "\u6E05\u9664",
114
+ previousDay: "\u524D\u4E00\u5929",
115
+ nextDay: "\u540E\u4E00\u5929",
116
+ today: "\u4ECA\u5929"
117
+ },
118
+ popover: {
119
+ panel: "\u5F39\u51FA\u6846"
120
+ },
121
+ combobox: {
122
+ search: "\u641C\u7D22",
123
+ noResults: "\u65E0\u7ED3\u679C",
124
+ clear: "\u6E05\u9664",
125
+ loading: "\u52A0\u8F7D\u4E2D\u2026",
126
+ create: (query) => `\u521B\u5EFA\u201C${query}\u201D`,
127
+ selectedCount: (count) => `\u5DF2\u9009 ${n(count)} \u9879`,
128
+ loadError: "\u65E0\u6CD5\u52A0\u8F7D\u7ED3\u679C",
129
+ resultCount: (count) => `${n(count)} \u4E2A\u7ED3\u679C`,
130
+ minChars: (count) => `\u8BF7\u81F3\u5C11\u8F93\u5165 ${n(count)} \u4E2A\u5B57\u7B26`
131
+ },
132
+ multiSelect: {
133
+ search: "\u641C\u7D22",
134
+ selectAll: "\u5168\u9009",
135
+ clear: "\u6E05\u9664",
136
+ all: "\u5168\u90E8",
137
+ // The bare count, as in English: the trigger has always shown just the number.
138
+ selectedCount: (count) => n(count)
139
+ },
140
+ calculator: {
141
+ open: "\u6253\u5F00\u8BA1\u7B97\u5668",
142
+ panel: "\u8BA1\u7B97\u5668",
143
+ calculation: "\u7B97\u5F0F",
144
+ backspace: "\u9000\u683C",
145
+ clear: "\u6E05\u9664",
146
+ equals: "\u7B49\u4E8E",
147
+ done: "\u5B8C\u6210",
148
+ plus: "\u52A0",
149
+ minus: "\u51CF",
150
+ times: "\u4E58",
151
+ divide: "\u9664\u4EE5",
152
+ decimal: "\u5C0F\u6570\u70B9"
153
+ },
154
+ currency: {
155
+ currency: "\u8D27\u5E01",
156
+ search: "\u641C\u7D22\u8D27\u5E01"
157
+ },
158
+ chipInput: {
159
+ added: (value) => `\u5DF2\u6DFB\u52A0\u201C${value}\u201D`,
160
+ removed: (value) => `\u5DF2\u79FB\u9664\u201C${value}\u201D`,
161
+ remove: "\u79FB\u9664",
162
+ atLimit: (max) => `\u5DF2\u8FBE\u4E0A\u9650\uFF08${n(max)} \u9879\uFF09`,
163
+ duplicate: (value) => `\u201C${value}\u201D\u5DF2\u5728\u5217\u8868\u4E2D`
164
+ },
165
+ swatchPicker: {
166
+ none: "\u65E0\u989C\u8272",
167
+ mixed: "\u6DF7\u5408\uFF1A\u6240\u9009\u9879\u76EE\u7684\u989C\u8272\u5404\u4E0D\u76F8\u540C"
168
+ },
169
+ iconPicker: {
170
+ none: "\u65E0\u56FE\u6807",
171
+ mixed: "\u6DF7\u5408\uFF1A\u6240\u9009\u9879\u76EE\u7684\u56FE\u6807\u5404\u4E0D\u76F8\u540C",
172
+ search: "\u641C\u7D22\u56FE\u6807",
173
+ noResults: "\u6CA1\u6709\u5339\u914D\u7684\u56FE\u6807",
174
+ resultCount: (count) => `${n(count)} \u4E2A\u56FE\u6807`
175
+ },
176
+ fieldSync: {
177
+ synced: "\u5DF2\u4FDD\u5B58",
178
+ edited: "\u6709\u672A\u4FDD\u5B58\u7684\u66F4\u6539",
179
+ pending: "\u6B63\u5728\u4FDD\u5B58\u2026",
180
+ error: "\u4FDD\u5B58\u5931\u8D25",
181
+ retry: "\u91CD\u8BD5"
182
+ },
183
+ passwordReveal: {
184
+ show: "\u663E\u793A\u5BC6\u7801",
185
+ hide: "\u9690\u85CF\u5BC6\u7801"
186
+ },
187
+ dangerConfirm: {
188
+ arm: "\u5220\u9664\u2026",
189
+ confirm: "\u5220\u9664",
190
+ cancel: "\u53D6\u6D88",
191
+ prompt: "\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",
192
+ password: "\u5BC6\u7801",
193
+ phrase: (phrase) => `\u8F93\u5165\u201C${phrase}\u201D\u4EE5\u786E\u8BA4`
194
+ },
195
+ tabs: {
196
+ add: "\u6DFB\u52A0\u6807\u7B7E\u9875",
197
+ // Quoted, so the spacing rule holds whether the tab's name is Han or Latin.
198
+ remove: (tab) => `\u79FB\u9664\u201C${tab}\u201D`
199
+ },
200
+ appShell: {
201
+ collapse: "\u6536\u8D77\u4FA7\u8FB9\u680F",
202
+ expand: "\u5C55\u5F00\u4FA7\u8FB9\u680F",
203
+ toggleGroup: (groupLabel) => `${groupLabel}\uFF1A\u9875\u9762`
204
+ },
205
+ topBar: {
206
+ theme: "\u5207\u6362\u4E3B\u9898",
207
+ palette: "\u5916\u89C2\u9884\u8BBE",
208
+ language: "\u8BED\u8A00",
209
+ switchRole: "\u5207\u6362\u89D2\u8272",
210
+ role: (value) => `\u89D2\u8272\uFF1A${value}`
211
+ },
212
+ pickerSheet: {
213
+ close: "\u5173\u95ED"
214
+ },
215
+ dialogFrame: {
216
+ close: "\u5173\u95ED"
217
+ },
218
+ swipeableRow: {
219
+ actions: "\u884C\u64CD\u4F5C"
220
+ },
221
+ file: {
222
+ // The kit's own `Intl` unit formatting, pinned to this locale.
223
+ size: (bytes) => formatFileSize(bytes, numberLocale)
224
+ },
225
+ filePicker: {
226
+ rejectedPick: (count) => count === 1 ? "\u672A\u6DFB\u52A0\u8BE5\u6587\u4EF6" : `${count} \u4E2A\u6587\u4EF6\u5747\u672A\u6DFB\u52A0`,
227
+ rejectedType: (name) => `\u201C${name}\u201D\u7684\u6587\u4EF6\u7C7B\u578B\u4E0D\u53D7\u652F\u6301`,
228
+ rejectedTypeOnly: (accept) => `\u4EC5\u9650 ${accept} \u6587\u4EF6`,
229
+ rejectedSize: (name, maxSize) => `\u201C${name}\u201D\u8D85\u8FC7 ${maxSize}`,
230
+ rejectedCount: (name, maxFiles) => `\u672A\u6DFB\u52A0\u201C${name}\u201D\uFF1A\u6700\u591A ${n(maxFiles)} \u4E2A\u6587\u4EF6`,
231
+ rejectedInvalid: (name) => `\u201C${name}\u201D\u65E0\u6CD5\u5728\u6B64\u4F7F\u7528`,
232
+ rejectedMany: (count) => `${n(count)} \u4E2A\u6587\u4EF6\u672A\u6DFB\u52A0`,
233
+ selected: (count, firstName) => count === 1 ? `\u5DF2\u9009\u62E9\u201C${firstName}\u201D` : `\u5DF2\u9009\u62E9 ${n(count)} \u4E2A\u6587\u4EF6`,
234
+ remove: (name) => `\u79FB\u9664\u201C${name}\u201D`,
235
+ clearAll: "\u79FB\u9664\u6240\u6709\u6587\u4EF6",
236
+ removed: (name) => `\u5DF2\u79FB\u9664\u201C${name}\u201D`,
237
+ cleared: "\u5DF2\u79FB\u9664\u6240\u6709\u6587\u4EF6"
238
+ },
239
+ wizard: {
240
+ cancel: "\u53D6\u6D88",
241
+ back: "\u4E0A\u4E00\u6B65",
242
+ next: "\u4E0B\u4E00\u6B65",
243
+ skip: "\u8DF3\u8FC7",
244
+ finish: "\u5B8C\u6210",
245
+ submitting: "\u6B63\u5728\u521B\u5EFA\u2026",
246
+ steps: "\u6B65\u9AA4",
247
+ step: (current, total) => `\u7B2C ${n(current)} \u6B65\uFF0C\u5171 ${n(total)} \u6B65`,
248
+ cancelTitle: "\u653E\u5F03\u6B64\u8868\u5355\uFF1F",
249
+ confirmCancel: "\u5DF2\u586B\u5199\u7684\u5185\u5BB9\u5C06\u4F1A\u4E22\u5931\u3002",
250
+ cancelConfirmLabel: "\u653E\u5F03",
251
+ cancelDismissLabel: "\u7EE7\u7EED\u7F16\u8F91",
252
+ reviewTitle: "\u786E\u8BA4\u4FE1\u606F",
253
+ edit: "\u7F16\u8F91",
254
+ missingRequired: "\u8BF7\u586B\u5199\u6240\u6709\u5FC5\u586B\u5B57\u6BB5\u3002",
255
+ genericError: "\u53D1\u751F\u9519\u8BEF"
256
+ },
257
+ tour: {
258
+ next: "\u4E0B\u4E00\u6B65",
259
+ back: "\u4E0A\u4E00\u6B65",
260
+ skip: "\u8DF3\u8FC7",
261
+ done: "\u5B8C\u6210",
262
+ awaitClickHint: "\u70B9\u51FB\u9AD8\u4EAE\u7684\u5143\u7D20\u4EE5\u7EE7\u7EED",
263
+ step: (current, total) => `${n(current)} / ${n(total)}`
264
+ },
265
+ commandPalette: {
266
+ placeholder: "\u641C\u7D22\u2026",
267
+ empty: "\u65E0\u7ED3\u679C",
268
+ loading: "\u641C\u7D22\u4E2D\u2026",
269
+ dialog: "\u641C\u7D22",
270
+ error: "\u641C\u7D22\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"
271
+ },
272
+ sparkline: {
273
+ rising: (first, last) => `\u4ECE ${first} \u4E0A\u5347\u5230 ${last}`,
274
+ falling: (first, last) => `\u4ECE ${first} \u4E0B\u964D\u5230 ${last}`,
275
+ flat: (value) => `\u4FDD\u6301\u5728 ${value} \u4E0D\u53D8`,
276
+ single: (value) => `\u4EC5\u4E00\u4E2A\u503C\uFF1A${value}`,
277
+ noData: "\u65E0\u6570\u636E",
278
+ named: (name, summary) => `${name}\uFF1A${summary}`
279
+ },
280
+ statTile: {
281
+ increase: (amount) => `\u4E0A\u5347 ${amount}`,
282
+ decrease: (amount) => `\u4E0B\u964D ${amount}`,
283
+ unchanged: "\u65E0\u53D8\u5316",
284
+ better: (change) => `${change}\uFF08\u5411\u597D\uFF09`,
285
+ worse: (change) => `${change}\uFF08\u53D8\u5DEE\uFF09`,
286
+ noValue: "\u65E0\u6570\u636E",
287
+ loading: "\u52A0\u8F7D\u4E2D\u2026"
288
+ },
289
+ signaturePad: {
290
+ label: "\u7B7E\u540D",
291
+ instructions: "\u8BF7\u4F7F\u7528\u9F20\u6807\u3001\u624B\u6307\u6216\u89E6\u63A7\u7B14\u5728\u6846\u5185\u7B7E\u540D\u3002",
292
+ typedFallbackHint: "\u5982\u679C\u65E0\u6CD5\u624B\u5199\uFF0C\u53EF\u4EE5\u6539\u4E3A\u8F93\u5165\u59D3\u540D\u3002",
293
+ empty: "\u5C1A\u672A\u7B7E\u540D",
294
+ signed: "\u5DF2\u7B7E\u540D",
295
+ undo: "\u64A4\u9500\u4E0A\u4E00\u7B14",
296
+ clear: "\u6E05\u9664",
297
+ save: "\u4FDD\u5B58\u7B7E\u540D",
298
+ useTyped: "\u6539\u4E3A\u8F93\u5165\u59D3\u540D",
299
+ useDrawn: "\u6539\u4E3A\u624B\u5199",
300
+ typedName: "\u59D3\u540D",
301
+ cleared: "\u7B7E\u540D\u5DF2\u6E05\u9664",
302
+ undone: "\u5DF2\u64A4\u9500\u4E0A\u4E00\u7B14",
303
+ viewEmpty: "\u672A\u7B7E\u540D",
304
+ viewDrawn: "\u624B\u5199\u7B7E\u540D",
305
+ // Quoted, so the spacing rule holds whether the name is Han or Latin.
306
+ viewTyped: (name) => `\u4EE5\u8F93\u5165\u7684\u59D3\u540D\u201C${name}\u201D\u7B7E\u540D`
307
+ },
308
+ passwordStrength: {
309
+ tooShort: "\u592A\u77ED",
310
+ weak: "\u5F31",
311
+ fair: "\u4E00\u822C",
312
+ good: "\u826F\u597D",
313
+ strong: "\u5F3A",
314
+ announcement: (level) => `\u5BC6\u7801\u5F3A\u5EA6\uFF1A${level}`,
315
+ // Unformatted, as in the English default.
316
+ ruleLength: (minLength) => `\u81F3\u5C11 ${minLength} \u4E2A\u5B57\u7B26`,
317
+ ruleCase: "\u5305\u542B\u5927\u5199\u548C\u5C0F\u5199\u5B57\u6BCD",
318
+ ruleDigit: "\u5305\u542B\u6570\u5B57",
319
+ ruleSymbol: "\u5305\u542B\u7B26\u53F7",
320
+ optional: (rule) => `${rule}\uFF08\u53EF\u9009\uFF09`,
321
+ met: "\u5DF2\u6EE1\u8DB3\uFF1A",
322
+ notMet: "\u672A\u6EE1\u8DB3\uFF1A",
323
+ tooLong: (maxBytes) => `\u6700\u591A ${maxBytes} \u4E2A\u5B57\u7B26\uFF08\u5E26\u91CD\u97F3\u7684\u5B57\u6BCD\u548C\u8868\u60C5\u7B26\u53F7\u6309\u591A\u4E2A\u5B57\u7B26\u8BA1\u7B97\uFF09\u3002`
324
+ },
325
+ seriesChart: {
326
+ resetZoom: "\u91CD\u7F6E\u7F29\u653E",
327
+ zoomHint: "\u62D6\u52A8\u4EE5\u7F29\u653E\uFF1A\u8FD1\u4F3C\u6B63\u65B9\u5F62\u7684\u9009\u533A\u540C\u65F6\u7F29\u653E\u4E24\u6761\u5750\u6807\u8F74\uFF0C\u7EC6\u957F\u7684\u9009\u533A\u53EA\u7F29\u653E\u5176\u6240\u6CBF\u7684\u90A3\u6761\u8F74\u3002\u53CC\u51FB\u53EF\u91CD\u7F6E\u3002",
328
+ empty: "\u65E0\u6570\u636E",
329
+ legend: "\u6570\u636E\u7CFB\u5217"
330
+ }
331
+ };
332
+ }
333
+ const UI_KIT_LABELS_ZH = uiKitLabelsZh();
334
+ export {
335
+ UI_KIT_LABELS_ZH,
336
+ uiKitLabelsZh
337
+ };
338
+ //# sourceMappingURL=zh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/i18n/locales/zh.ts"],"sourcesContent":["import { formatFileSize } from \"../kit-labels\";\nimport type { UiKitLabels } from \"../kit-labels\";\n\n/**\n * The kit's words in Chinese (Simplified): every namespace of {@link UiKitLabels}, for\n * `<UiKitProvider labels={UI_KIT_LABELS_ZH}>`.\n *\n * Self-contained on purpose — nothing but the kit's own `formatFileSize` — so it works\n * as a starting point to copy and adjust. Counts and sizes are formatted with\n * `zh-CN` digits; {@link uiKitLabelsZh} takes another number locale\n * (e.g. `\"de-CH\"` for 1’234) without touching the words.\n */\nexport function uiKitLabelsZh(numberLocale = \"zh-CN\"): UiKitLabels {\n const num = new Intl.NumberFormat(numberLocale);\n const n = (value: number) => num.format(value);\n\n return {\n feedbackAttachment: {\n attachmentAdd: \"附加图片\",\n attachmentCapture: \"截取屏幕\",\n attachmentPaste: \"……或从剪贴板粘贴截图。\",\n attachmentRemove: \"移除附件\",\n },\n measuredGrid: {\n view: \"表格视图\",\n cellsView: \"单元格\",\n textView: \"文本\",\n addRow: \"添加行\",\n removeRow: (row) => `删除第 ${row} 行`,\n clear: \"清空表格\",\n pasteHint: \"可将电子表格中的一块数据粘贴到任意单元格\",\n cell: (column, row) => `${column},第 ${row} 行`,\n rowNumber: \"行\",\n rowActions: \"行操作\",\n keyboardHint:\n \"方向键在单元格之间移动。直接输入替换单元格内容,F2 编辑,Esc 撤销编辑。回车向下移动,并在末尾添加一行。\",\n lineError: (line) => `无法读取第 ${line} 行`,\n points: (count) => `${count} 个点`,\n problems: (count) => `${count} 个单元格不是数字`,\n },\n pageContents: { title: \"本页目录\" },\n common: {\n close: \"关闭\",\n clear: \"清除\",\n search: \"搜索\",\n done: \"完成\",\n cancel: \"取消\",\n save: \"保存\",\n back: \"上一步\",\n next: \"下一步\",\n remove: \"移除\",\n loading: \"加载中…\",\n noResults: \"无结果\",\n // Full-width colon, no space after it.\n fieldValue: (field, value) => `${field}:${value}`,\n },\n dataTable: {\n columns: \"列\",\n selectAllRows: \"全选所有行\",\n sortHint: \"点击排序 · 按住 Shift 点击可添加排序\",\n filter: \"筛选\",\n close: \"关闭\",\n selectRow: \"选择行\",\n autoSize: \"自动调整列宽\",\n loading: \"加载中…\",\n filters: \"筛选条件\",\n clearAll: \"全部清除\",\n done: \"完成\",\n pageSize: \"每页行数\",\n pageSizeAll: \"全部\",\n prevPage: \"上一页\",\n nextPage: \"下一页\",\n clearFilter: \"清除筛选\",\n filterPlaceholder: \"筛选…\",\n selectFilter: \"选择\",\n selectAll: \"全部\",\n selectNone: \"无\",\n dateFrom: \"从\",\n dateTo: \"至\",\n numberMin: \"最小值\",\n numberMax: \"最大值\",\n numberAbs: \"绝对值\",\n presets: {\n today: \"今天\",\n yesterday: \"昨天\",\n this_week: \"本周\",\n last_week: \"上周\",\n last_7_days: \"最近 7 天\",\n last_30_days: \"最近 30 天\",\n this_month: \"本月\",\n last_month: \"上月\",\n last_3_months: \"最近 3 个月\",\n ytd: \"今年至今\",\n last_year: \"去年\",\n },\n table: \"数据表格\",\n filterResults: (shown, total) => `显示 ${n(shown)} 行,共 ${n(total)} 行`,\n sortedAscending: (column) => `已按“${column}”升序排序`,\n sortedDescending: (column) => `已按“${column}”降序排序`,\n sortCleared: (column) => `已取消“${column}”的排序`,\n pageChanged: (page, totalPages) => `第 ${n(page)} 页,共 ${n(totalPages)} 页`,\n pageRange: (from, to, total) => `${n(from)}–${n(to)} / ${n(total)}`,\n rowCount: (total) => n(total),\n columnsCount: (visible, total) => `列(${n(visible)}/${n(total)})`,\n },\n miniCalendar: {\n previousMonth: \"上个月\",\n nextMonth: \"下个月\",\n // Already formatted in the provider's locale (\"2026年9月14日星期一\").\n day: (date) => date,\n chooseStart: \"请选择开始日期\",\n chooseEnd: \"请选择结束日期\",\n startSelected: (date) => `已选择 ${date} 为开始日期。请选择结束日期。`,\n rangeSelected: (from, to) => `已选择 ${from} 至 ${to}。如需重新选择,请先选择开始日期。`,\n },\n monthPicker: {\n previousYear: \"上一年\",\n nextYear: \"下一年\",\n panel: \"选择月份\",\n month: (monthYear) => monthYear,\n },\n datePicker: {\n panel: \"选择日期\",\n rangePanel: \"选择日期范围\",\n clear: \"清除\",\n previousDay: \"前一天\",\n nextDay: \"后一天\",\n today: \"今天\",\n },\n popover: {\n panel: \"弹出框\",\n },\n combobox: {\n search: \"搜索\",\n noResults: \"无结果\",\n clear: \"清除\",\n loading: \"加载中…\",\n create: (query) => `创建“${query}”`,\n selectedCount: (count) => `已选 ${n(count)} 项`,\n loadError: \"无法加载结果\",\n resultCount: (count) => `${n(count)} 个结果`,\n minChars: (count) => `请至少输入 ${n(count)} 个字符`,\n },\n multiSelect: {\n search: \"搜索\",\n selectAll: \"全选\",\n clear: \"清除\",\n all: \"全部\",\n // The bare count, as in English: the trigger has always shown just the number.\n selectedCount: (count) => n(count),\n },\n calculator: {\n open: \"打开计算器\",\n panel: \"计算器\",\n calculation: \"算式\",\n backspace: \"退格\",\n clear: \"清除\",\n equals: \"等于\",\n done: \"完成\",\n plus: \"加\",\n minus: \"减\",\n times: \"乘\",\n divide: \"除以\",\n decimal: \"小数点\",\n },\n currency: {\n currency: \"货币\",\n search: \"搜索货币\",\n },\n chipInput: {\n added: (value) => `已添加“${value}”`,\n removed: (value) => `已移除“${value}”`,\n remove: \"移除\",\n atLimit: (max) => `已达上限(${n(max)} 项)`,\n duplicate: (value) => `“${value}”已在列表中`,\n },\n swatchPicker: {\n none: \"无颜色\",\n mixed: \"混合:所选项目的颜色各不相同\",\n },\n iconPicker: {\n none: \"无图标\",\n mixed: \"混合:所选项目的图标各不相同\",\n search: \"搜索图标\",\n noResults: \"没有匹配的图标\",\n resultCount: (count) => `${n(count)} 个图标`,\n },\n fieldSync: {\n synced: \"已保存\",\n edited: \"有未保存的更改\",\n pending: \"正在保存…\",\n error: \"保存失败\",\n retry: \"重试\",\n },\n passwordReveal: {\n show: \"显示密码\",\n hide: \"隐藏密码\",\n },\n dangerConfirm: {\n arm: \"删除…\",\n confirm: \"删除\",\n cancel: \"取消\",\n prompt: \"此操作无法撤销。\",\n password: \"密码\",\n phrase: (phrase) => `输入“${phrase}”以确认`,\n },\n tabs: {\n add: \"添加标签页\",\n // Quoted, so the spacing rule holds whether the tab's name is Han or Latin.\n remove: (tab) => `移除“${tab}”`,\n },\n appShell: {\n collapse: \"收起侧边栏\",\n expand: \"展开侧边栏\",\n toggleGroup: (groupLabel) => `${groupLabel}:页面`,\n },\n topBar: {\n theme: \"切换主题\",\n palette: \"外观预设\",\n language: \"语言\",\n switchRole: \"切换角色\",\n role: (value) => `角色:${value}`,\n },\n pickerSheet: {\n close: \"关闭\",\n },\n dialogFrame: {\n close: \"关闭\",\n },\n swipeableRow: {\n actions: \"行操作\",\n },\n file: {\n // The kit's own `Intl` unit formatting, pinned to this locale.\n size: (bytes) => formatFileSize(bytes, numberLocale),\n },\n filePicker: {\n rejectedPick: (count) => (count === 1 ? \"未添加该文件\" : `${count} 个文件均未添加`),\n rejectedType: (name) => `“${name}”的文件类型不受支持`,\n rejectedTypeOnly: (accept) => `仅限 ${accept} 文件`,\n rejectedSize: (name, maxSize) => `“${name}”超过 ${maxSize}`,\n rejectedCount: (name, maxFiles) => `未添加“${name}”:最多 ${n(maxFiles)} 个文件`,\n rejectedInvalid: (name) => `“${name}”无法在此使用`,\n rejectedMany: (count) => `${n(count)} 个文件未添加`,\n selected: (count, firstName) =>\n count === 1 ? `已选择“${firstName}”` : `已选择 ${n(count)} 个文件`,\n remove: (name) => `移除“${name}”`,\n clearAll: \"移除所有文件\",\n removed: (name) => `已移除“${name}”`,\n cleared: \"已移除所有文件\",\n },\n wizard: {\n cancel: \"取消\",\n back: \"上一步\",\n next: \"下一步\",\n skip: \"跳过\",\n finish: \"完成\",\n submitting: \"正在创建…\",\n steps: \"步骤\",\n step: (current, total) => `第 ${n(current)} 步,共 ${n(total)} 步`,\n cancelTitle: \"放弃此表单?\",\n confirmCancel: \"已填写的内容将会丢失。\",\n cancelConfirmLabel: \"放弃\",\n cancelDismissLabel: \"继续编辑\",\n reviewTitle: \"确认信息\",\n edit: \"编辑\",\n missingRequired: \"请填写所有必填字段。\",\n genericError: \"发生错误\",\n },\n tour: {\n next: \"下一步\",\n back: \"上一步\",\n skip: \"跳过\",\n done: \"完成\",\n awaitClickHint: \"点击高亮的元素以继续\",\n step: (current, total) => `${n(current)} / ${n(total)}`,\n },\n commandPalette: {\n placeholder: \"搜索…\",\n empty: \"无结果\",\n loading: \"搜索中…\",\n dialog: \"搜索\",\n error: \"搜索失败,请重试。\",\n },\n sparkline: {\n rising: (first, last) => `从 ${first} 上升到 ${last}`,\n falling: (first, last) => `从 ${first} 下降到 ${last}`,\n flat: (value) => `保持在 ${value} 不变`,\n single: (value) => `仅一个值:${value}`,\n noData: \"无数据\",\n named: (name, summary) => `${name}:${summary}`,\n },\n statTile: {\n increase: (amount) => `上升 ${amount}`,\n decrease: (amount) => `下降 ${amount}`,\n unchanged: \"无变化\",\n better: (change) => `${change}(向好)`,\n worse: (change) => `${change}(变差)`,\n noValue: \"无数据\",\n loading: \"加载中…\",\n },\n signaturePad: {\n label: \"签名\",\n instructions: \"请使用鼠标、手指或触控笔在框内签名。\",\n typedFallbackHint: \"如果无法手写,可以改为输入姓名。\",\n empty: \"尚未签名\",\n signed: \"已签名\",\n undo: \"撤销上一笔\",\n clear: \"清除\",\n save: \"保存签名\",\n useTyped: \"改为输入姓名\",\n useDrawn: \"改为手写\",\n typedName: \"姓名\",\n cleared: \"签名已清除\",\n undone: \"已撤销上一笔\",\n viewEmpty: \"未签名\",\n viewDrawn: \"手写签名\",\n // Quoted, so the spacing rule holds whether the name is Han or Latin.\n viewTyped: (name) => `以输入的姓名“${name}”签名`,\n },\n passwordStrength: {\n tooShort: \"太短\",\n weak: \"弱\",\n fair: \"一般\",\n good: \"良好\",\n strong: \"强\",\n announcement: (level) => `密码强度:${level}`,\n // Unformatted, as in the English default.\n ruleLength: (minLength) => `至少 ${minLength} 个字符`,\n ruleCase: \"包含大写和小写字母\",\n ruleDigit: \"包含数字\",\n ruleSymbol: \"包含符号\",\n optional: (rule) => `${rule}(可选)`,\n met: \"已满足:\",\n notMet: \"未满足:\",\n tooLong: (maxBytes) => `最多 ${maxBytes} 个字符(带重音的字母和表情符号按多个字符计算)。`,\n },\n seriesChart: {\n resetZoom: \"重置缩放\",\n zoomHint:\n \"拖动以缩放:近似正方形的选区同时缩放两条坐标轴,细长的选区只缩放其所沿的那条轴。双击可重置。\",\n empty: \"无数据\",\n legend: \"数据系列\",\n },\n };\n}\n\nexport const UI_KIT_LABELS_ZH: UiKitLabels = uiKitLabelsZh();\n"],"mappings":";AAAA,SAAS,sBAAsB;AAYxB,SAAS,cAAc,eAAe,SAAsB;AACjE,QAAM,MAAM,IAAI,KAAK,aAAa,YAAY;AAC9C,QAAM,IAAI,CAAC,UAAkB,IAAI,OAAO,KAAK;AAE7C,SAAO;AAAA,IACL,oBAAoB;AAAA,MAClB,eAAe;AAAA,MACf,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,IACpB;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,WAAW;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW,CAAC,QAAQ,sBAAO,GAAG;AAAA,MAC9B,OAAO;AAAA,MACP,WAAW;AAAA,MACX,MAAM,CAAC,QAAQ,QAAQ,GAAG,MAAM,gBAAM,GAAG;AAAA,MACzC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,cACE;AAAA,MACF,WAAW,CAAC,SAAS,kCAAS,IAAI;AAAA,MAClC,QAAQ,CAAC,UAAU,GAAG,KAAK;AAAA,MAC3B,UAAU,CAAC,UAAU,GAAG,KAAK;AAAA,IAC/B;AAAA,IACA,cAAc,EAAE,OAAO,2BAAO;AAAA,IAC9B,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA;AAAA,MAEX,YAAY,CAAC,OAAO,UAAU,GAAG,KAAK,SAAI,KAAK;AAAA,IACjD;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,eAAe;AAAA,MACf,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,MACV,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,QACP,OAAO;AAAA,QACP,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,aAAa;AAAA,QACb,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,KAAK;AAAA,QACL,WAAW;AAAA,MACb;AAAA,MACA,OAAO;AAAA,MACP,eAAe,CAAC,OAAO,UAAU,gBAAM,EAAE,KAAK,CAAC,uBAAQ,EAAE,KAAK,CAAC;AAAA,MAC/D,iBAAiB,CAAC,WAAW,qBAAM,MAAM;AAAA,MACzC,kBAAkB,CAAC,WAAW,qBAAM,MAAM;AAAA,MAC1C,aAAa,CAAC,WAAW,2BAAO,MAAM;AAAA,MACtC,aAAa,CAAC,MAAM,eAAe,UAAK,EAAE,IAAI,CAAC,uBAAQ,EAAE,UAAU,CAAC;AAAA,MACpE,WAAW,CAAC,MAAM,IAAI,UAAU,GAAG,EAAE,IAAI,CAAC,SAAI,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;AAAA,MACjE,UAAU,CAAC,UAAU,EAAE,KAAK;AAAA,MAC5B,cAAc,CAAC,SAAS,UAAU,eAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,IAC/D;AAAA,IACA,cAAc;AAAA,MACZ,eAAe;AAAA,MACf,WAAW;AAAA;AAAA,MAEX,KAAK,CAAC,SAAS;AAAA,MACf,aAAa;AAAA,MACb,WAAW;AAAA,MACX,eAAe,CAAC,SAAS,sBAAO,IAAI;AAAA,MACpC,eAAe,CAAC,MAAM,OAAO,sBAAO,IAAI,WAAM,EAAE;AAAA,IAClD;AAAA,IACA,aAAa;AAAA,MACX,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO,CAAC,cAAc;AAAA,IACxB;AAAA,IACA,YAAY;AAAA,MACV,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ,CAAC,UAAU,qBAAM,KAAK;AAAA,MAC9B,eAAe,CAAC,UAAU,gBAAM,EAAE,KAAK,CAAC;AAAA,MACxC,WAAW;AAAA,MACX,aAAa,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC;AAAA,MACnC,UAAU,CAAC,UAAU,kCAAS,EAAE,KAAK,CAAC;AAAA,IACxC;AAAA,IACA,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,OAAO;AAAA,MACP,KAAK;AAAA;AAAA,MAEL,eAAe,CAAC,UAAU,EAAE,KAAK;AAAA,IACnC;AAAA,IACA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,WAAW;AAAA,MACT,OAAO,CAAC,UAAU,2BAAO,KAAK;AAAA,MAC9B,SAAS,CAAC,UAAU,2BAAO,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS,CAAC,QAAQ,iCAAQ,EAAE,GAAG,CAAC;AAAA,MAChC,WAAW,CAAC,UAAU,SAAI,KAAK;AAAA,IACjC;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,aAAa,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC;AAAA,IACrC;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACA,eAAe;AAAA,MACb,KAAK;AAAA,MACL,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ,CAAC,WAAW,qBAAM,MAAM;AAAA,IAClC;AAAA,IACA,MAAM;AAAA,MACJ,KAAK;AAAA;AAAA,MAEL,QAAQ,CAAC,QAAQ,qBAAM,GAAG;AAAA,IAC5B;AAAA,IACA,UAAU;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,aAAa,CAAC,eAAe,GAAG,UAAU;AAAA,IAC5C;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,MAAM,CAAC,UAAU,qBAAM,KAAK;AAAA,IAC9B;AAAA,IACA,aAAa;AAAA,MACX,OAAO;AAAA,IACT;AAAA,IACA,aAAa;AAAA,MACX,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA;AAAA,MAEJ,MAAM,CAAC,UAAU,eAAe,OAAO,YAAY;AAAA,IACrD;AAAA,IACA,YAAY;AAAA,MACV,cAAc,CAAC,UAAW,UAAU,IAAI,yCAAW,GAAG,KAAK;AAAA,MAC3D,cAAc,CAAC,SAAS,SAAI,IAAI;AAAA,MAChC,kBAAkB,CAAC,WAAW,gBAAM,MAAM;AAAA,MAC1C,cAAc,CAAC,MAAM,YAAY,SAAI,IAAI,sBAAO,OAAO;AAAA,MACvD,eAAe,CAAC,MAAM,aAAa,2BAAO,IAAI,4BAAQ,EAAE,QAAQ,CAAC;AAAA,MACjE,iBAAiB,CAAC,SAAS,SAAI,IAAI;AAAA,MACnC,cAAc,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC;AAAA,MACpC,UAAU,CAAC,OAAO,cAChB,UAAU,IAAI,2BAAO,SAAS,WAAM,sBAAO,EAAE,KAAK,CAAC;AAAA,MACrD,QAAQ,CAAC,SAAS,qBAAM,IAAI;AAAA,MAC5B,UAAU;AAAA,MACV,SAAS,CAAC,SAAS,2BAAO,IAAI;AAAA,MAC9B,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,MAAM,CAAC,SAAS,UAAU,UAAK,EAAE,OAAO,CAAC,uBAAQ,EAAE,KAAK,CAAC;AAAA,MACzD,aAAa;AAAA,MACb,eAAe;AAAA,MACf,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,cAAc;AAAA,IAChB;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,MAAM,CAAC,SAAS,UAAU,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;AAAA,IACvD;AAAA,IACA,gBAAgB;AAAA,MACd,aAAa;AAAA,MACb,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,QAAQ,CAAC,OAAO,SAAS,UAAK,KAAK,uBAAQ,IAAI;AAAA,MAC/C,SAAS,CAAC,OAAO,SAAS,UAAK,KAAK,uBAAQ,IAAI;AAAA,MAChD,MAAM,CAAC,UAAU,sBAAO,KAAK;AAAA,MAC7B,QAAQ,CAAC,UAAU,iCAAQ,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,OAAO,CAAC,MAAM,YAAY,GAAG,IAAI,SAAI,OAAO;AAAA,IAC9C;AAAA,IACA,UAAU;AAAA,MACR,UAAU,CAAC,WAAW,gBAAM,MAAM;AAAA,MAClC,UAAU,CAAC,WAAW,gBAAM,MAAM;AAAA,MAClC,WAAW;AAAA,MACX,QAAQ,CAAC,WAAW,GAAG,MAAM;AAAA,MAC7B,OAAO,CAAC,WAAW,GAAG,MAAM;AAAA,MAC5B,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,WAAW;AAAA;AAAA,MAEX,WAAW,CAAC,SAAS,6CAAU,IAAI;AAAA,IACrC;AAAA,IACA,kBAAkB;AAAA,MAChB,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,cAAc,CAAC,UAAU,iCAAQ,KAAK;AAAA;AAAA,MAEtC,YAAY,CAAC,cAAc,gBAAM,SAAS;AAAA,MAC1C,UAAU;AAAA,MACV,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU,CAAC,SAAS,GAAG,IAAI;AAAA,MAC3B,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,CAAC,aAAa,gBAAM,QAAQ;AAAA,IACvC;AAAA,IACA,aAAa;AAAA,MACX,WAAW;AAAA,MACX,UACE;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAEO,MAAM,mBAAgC,cAAc;","names":[]}
package/dist/index.d.ts CHANGED
@@ -54,6 +54,8 @@ export { DEFAULT_SWATCH_PICKER_LABELS, SwatchOption, SwatchPicker, SwatchPickerL
54
54
  export { DEFAULT_ICON_PICKER_LABELS, IconOption, IconPicker, IconPickerLabels, IconPickerProps } from './components/icon-picker.js';
55
55
  export { ChoiceCard, ChoiceCardGroup, ChoiceCardGroupProps, ChoiceCardMultipleProps, ChoiceCardOption, ChoiceCardProps, ChoiceCardSingleProps, ChoiceCardType } from './components/choice-card.js';
56
56
  export { Autocomplete, AutocompleteProps } from './components/autocomplete.js';
57
+ export { DEFAULT_MEASURED_GRID_LABELS, MeasuredGrid, MeasuredGridColumn, MeasuredGridLabels, MeasuredGridProps, MeasuredGridView, MeasuredRows, UseMeasuredRowsOptions, useMeasuredRows } from './components/measured-grid.js';
58
+ export { WindowedRows, useWindowedRows } from './hooks/use-windowed-rows.js';
57
59
  export { DEFAULT_FILE_PICKER_LABELS, FileButton, FileButtonProps, FilePickerLabels, FileRejection, FileRejectionReason, FileScreenOptions, UseFilePickerOptions, UseFilePickerReturn, matchesAccept, useFilePicker } from './components/file-button.js';
58
60
  export { Treemap, TreemapCell, TreemapCellProps, TreemapNode, TreemapProps, fitLabel } from './components/treemap.js';
59
61
  export { AXIS_TICK_WIDTH, AXIS_TITLE_STRIP, SeriesChart, SeriesChartAxis, SeriesChartProps, SeriesChartSeries, SeriesChartSpan, SeriesChartX, SeriesSource, StaticSeriesChart, axisBandWidth, mergeSeries, oneAxis, padBand, paddedDomain, seriesKey, soleSeriesColor } from './components/series-chart.js';
@@ -76,7 +78,7 @@ export { DatePicker, DatePickerProps, DateRangePicker, DateRangePickerPreset, Da
76
78
  export { ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartSeriesConfig, ChartTooltip, ChartTooltipContent, useChart } from './components/chart.js';
77
79
  export { DEFAULT_DATA_TABLE_LABELS, DataTableLabels, missingDataTableLabels, resolveDataTableLabels } from './components/data-table-labels.js';
78
80
  export { SortDir, SortState, decodeSorts, encodeSorts, nextSorts, normalizeSorts } from './components/data-table-sort.js';
79
- export { C as ColumnFilter, D as DataTable, a as DataTableColumn, b as DataTableProps, F as FilterState, c as FilterValue, S as ServerPagination, d as decodeFilterValue, e as decodeFilterValueOfType, f as defaultFilterState, g as encodeFilterValue, i as isFilterActive, r as resolveFilter, h as rowMatches } from './data-table-filters-DM1auUfH.js';
81
+ export { C as ColumnFilter, D as DataTable, a as DataTableColumn, b as DataTableProps, F as FilterState, c as FilterValue, M as MobileSwipeActions, S as ServerPagination, d as decodeFilterValue, e as decodeFilterValueOfType, f as defaultFilterState, g as encodeFilterValue, i as isFilterActive, r as resolveFilter, h as rowMatches } from './data-table-filters-noy0Abvi.js';
80
82
  export { PAGE_SIZE_OPTIONS, Pagination } from './components/data-table-pagination.js';
81
83
  export { FilterPopover } from './components/data-table-filter-popover.js';
82
84
  export { LanguageMenu, LanguageOption, PaletteMenu, TOPBAR_MENU_ITEM_CLASS, TOPBAR_TRIGGER_CLASS, ThemeToggle } from './shell/topbar-controls.js';
@@ -85,7 +87,7 @@ export { AppShell, AppShellNavItem, AppShellProps, AppShellSubItem } from './she
85
87
  export { OptionSwitcherMenu, OptionSwitcherOption } from './shell/option-switcher-menu.js';
86
88
  export { RoleSwitcher, RoleSwitcherProps } from './shell/role-switcher.js';
87
89
  export { TopBarActionMenu, TopBarMenuEntry } from './shell/topbar-action-menu.js';
88
- export { DEFAULT_ATTACHMENT_ACCEPT, DEFAULT_MAX_ATTACHMENT_BYTES, FeedbackAttachmentField, pastedName } from './feedback/feedback-attachment.js';
90
+ export { DEFAULT_ATTACHMENT_ACCEPT, DEFAULT_FEEDBACK_ATTACHMENT_LABELS, DEFAULT_MAX_ATTACHMENT_BYTES, FeedbackAttachmentField, FeedbackAttachmentFieldLabels, pastedName } from './feedback/feedback-attachment.js';
89
91
  export { FeedbackAttachmentLabels, FeedbackCategoryOption, FeedbackDialog, FeedbackDialogLabels, FeedbackSubmission } from './feedback/feedback-dialog.js';
90
92
  export { FEEDBACK_CATEGORY_META, FEEDBACK_CATEGORY_ORDER, FEEDBACK_STATUS_META, FEEDBACK_STATUS_ORDER, FeedbackCategory, FeedbackCategoryBadge, FeedbackDetail, FeedbackDetailSection, FeedbackNoteAttachment, FeedbackNoteEditor, FeedbackProse, FeedbackStatus, FeedbackStatusBadge, FeedbackStatusTransitions, feedbackCategoryRank, nextFeedbackStatus, selectableFeedbackStatuses, visibleFeedbackStatuses } from './feedback/feedback-inbox.js';
91
93
  export { DEFAULT_WIZARD_LABELS, FieldErrors, StepStatus, SummaryItem, SummarySection, UseWizardOptions, UseWizardReturn, ValidateResult, WizardLabels, WizardStepConfig, resolveWizardLabels } from './wizard/types.js';
@@ -99,11 +101,12 @@ export { DEFAULT_TOUR_LABELS, TourLabels, TourPlacement, TourProvider, TourStep,
99
101
  export { CommandItem, CommandPalette, CommandPaletteLabels, DEFAULT_COMMAND_PALETTE_LABELS, useCommandKey } from './search/command-palette.js';
100
102
  export { AppShellLabels, CalculatorLabels, ComboboxLabels, CommonLabels, CurrencyLabels, DEFAULT_APP_SHELL_LABELS, DEFAULT_CALCULATOR_LABELS, DEFAULT_COMBOBOX_LABELS, DEFAULT_COMMON_LABELS, DEFAULT_CURRENCY_LABELS, DEFAULT_DATE_PICKER_LABELS, DEFAULT_FILE_LABELS, DEFAULT_MULTI_SELECT_LABELS, DEFAULT_PICKER_SHEET_LABELS, DEFAULT_SWIPEABLE_ROW_LABELS, DEFAULT_TOP_BAR_LABELS, DatePickerLabels, FileLabels, MultiSelectLabels, PickerSheetLabels, SwipeableRowLabels, TopBarLabels, UiKitLabelOverrides, UiKitLabels, UiKitProvider, UiKitProviderProps, formatFileSize, missingKitLabels, useKitFileLabels, useKitLabelOverrides, useKitLabels, useKitLocale, useKitWeekStart } from './i18n/kit-labels.js';
101
103
  export { DEFAULT_UI_KIT_LABELS } from './i18n/defaults.js';
102
- export { ComboOption } from './components/combobox-core.js';
104
+ export { ComboClearValue, ComboOption } from './components/combobox-core.js';
103
105
  import 'clsx';
104
106
  import 'zustand';
105
107
  import 'react';
106
108
  import 'zustand/middleware';
107
109
  import './components/tile-radio.js';
110
+ import './lib/direction.js';
108
111
  import 'recharts';
109
112
  import 'lucide-react';
package/dist/index.js CHANGED
@@ -55,6 +55,8 @@ export * from "./components/swatch-picker.js";
55
55
  export * from "./components/icon-picker.js";
56
56
  export * from "./components/choice-card.js";
57
57
  export * from "./components/autocomplete.js";
58
+ export * from "./components/measured-grid.js";
59
+ import { useWindowedRows } from "./hooks/use-windowed-rows.js";
58
60
  import { FileButton, useFilePicker, matchesAccept, DEFAULT_FILE_PICKER_LABELS } from "./components/file-button.js";
59
61
  export * from "./components/treemap.js";
60
62
  export * from "./components/series-chart.js";
@@ -125,6 +127,7 @@ export {
125
127
  useOutsideClick,
126
128
  useOverlayHistory,
127
129
  useRowSwipe,
128
- useVisualViewport
130
+ useVisualViewport,
131
+ useWindowedRows
129
132
  };
130
133
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @eifi1/ui-kit — shared design-system barrel.\n//\n// Domain-free UI + theme surface shared across apps (lead app: Keksdose). Consumers import\n// components/theme from \"@eifi1/ui-kit\" and the token stylesheet from \"@eifi1/ui-kit/tokens.css\".\n\n// ── lib ────────────────────────────────────────────────────────────────────\nexport * from \"./lib/calc\";\nexport { cn } from \"./lib/cn\";\nexport { logger, setStoreLog } from \"./lib/logger\";\n// Date helpers are also available via the \"@eifi1/ui-kit/dates\" subpath.\n\n// ── hooks ────────────────────────────────────────────────────────────────────\nexport { useMediaQuery } from \"./hooks/use-media-query\";\nexport { useBodyScrollLock } from \"./hooks/use-body-scroll-lock\";\nexport { useAnchoredRect } from \"./hooks/use-anchored-rect\";\nexport type { AnchorRect } from \"./hooks/use-anchored-rect\";\nexport { useAnchoredPanel, anchoredPanelPlacement, useVisualViewport } from \"./hooks/use-anchored-panel\";\nexport type {\n AnchoredPanel,\n AnchoredPanelOptions,\n ViewportBox,\n} from \"./hooks/use-anchored-panel\";\nexport { useEscapeKey, useOutsideClick } from \"./hooks/use-dismiss\";\n// Focus containment for an overlay, and a live region for a change that moves no focus.\n// Both were extracted from the two components that already did them correctly (Modal and\n// CommandPalette) so the rest of the kit stops being the exception.\nexport { useFocusTrap } from \"./hooks/use-focus-trap\";\nexport type { FocusTrapOptions } from \"./hooks/use-focus-trap\";\nexport { useAnnounce } from \"./hooks/use-announce\";\nexport type { UseAnnounceReturn, UseAnnounceOptions, AnnounceRegionProps } from \"./hooks/use-announce\";\nexport { useOverlayHistory } from \"./hooks/use-overlay-history\";\nexport { useCloseTransition, OVERLAY_EXIT_MS } from \"./hooks/use-close-transition\";\nexport { useRowSwipe } from \"./hooks/use-row-swipe\";\nexport type { SwipeStage, RowSwipeOptions, RowSwipeReturn } from \"./hooks/use-row-swipe\";\n\n// ── theme / palettes ─────────────────────────────────────────────────────────\nexport * from \"./theme/chart-palette\";\n// Colour maths (sRGB ↔ OKLCH, WCAG contrast, CVD simulation) and the palette deriver\n// that builds a whole, contrast-solved palette from one brand colour plus any colours\n// pinned by hand. `auditPalette` / `auditChartRamp` measure a palette rather than\n// trusting a comment about it.\nexport * from \"./theme/color\";\nexport * from \"./theme/palette-derive\";\nexport * from \"./theme/palette-presets\";\nexport * from \"./theme/theme-store\";\nexport * from \"./theme/palette-store\";\n\n// ── components ───────────────────────────────────────────────────────────────\nexport * from \"./components/ui\";\nexport * from \"./components/search-field\";\nexport * from \"./components/dropdown\";\nexport * from \"./components/popover\";\nexport { SwipeableRow } from \"./components/swipeable-row\";\nexport type { SwipeAction, SwipeableRowProps } from \"./components/swipeable-row\";\nexport * from \"./components/calculator\";\nexport * from \"./components/numpad-sheet\";\nexport * from \"./components/number-input\";\nexport * from \"./components/currency-select\";\nexport * from \"./components/amount-input\";\nexport * from \"./components/combobox\";\nexport * from \"./components/picker-sheet\";\nexport * from \"./components/entity-combobox\";\nexport * from \"./components/multi-entity-combobox\";\nexport * from \"./components/multi-select\";\nexport * from \"./components/tooltip\";\nexport * from \"./components/user-avatar\";\nexport * from \"./components/settings-fields\";\n// Sync state for a database-backed field: the engine (`useFieldSync`) and the\n// affordance (`FieldSyncIndicator`), kept separate because the state is useful\n// without the dot — a form can gate its submit on any field being `pending`.\nexport * from \"./components/field-sync\";\nexport * from \"./components/month-picker\";\nexport * from \"./components/checkbox\";\nexport * from \"./components/switch\";\nexport * from \"./components/slider\";\nexport * from \"./components/time-input\";\nexport * from \"./components/number-field\";\nexport * from \"./components/sparkline\";\nexport * from \"./components/stat-tile\";\nexport * from \"./components/signature-pad\";\nexport * from \"./components/password-strength\";\nexport * from \"./components/page-contents\";\nexport * from \"./components/disclosure\";\nexport * from \"./components/dialog-frame\";\nexport * from \"./components/danger-confirm\";\nexport * from \"./components/swatch-picker\";\nexport * from \"./components/icon-picker\";\nexport * from \"./components/choice-card\";\nexport * from \"./components/autocomplete\";\n// Named, not `export *`: file-button.tsx also holds the screening helpers the\n// dropzone shares, which are internal.\nexport { FileButton, useFilePicker, matchesAccept, DEFAULT_FILE_PICKER_LABELS } from \"./components/file-button\";\nexport type {\n FileButtonProps,\n UseFilePickerOptions,\n UseFilePickerReturn,\n FilePickerLabels,\n FileRejection,\n FileRejectionReason,\n FileScreenOptions,\n} from \"./components/file-button\";\nexport * from \"./components/treemap\";\nexport * from \"./components/series-chart\";\nexport * from \"./components/chart-zoom\";\nexport * from \"./components/toggle-legend\";\nexport * from \"./components/facing-pair\";\nexport * from \"./components/series-chart-labels\";\nexport * from \"./components/account-settings\";\nexport * from \"./components/alert-banner\";\nexport * from \"./components/toggle-group\";\n// A pill carrying one VALUE — inert, a link, or a toggle, depending on which prop it is\n// given — and the list field built from it. Distinct from Button on purpose: a row of\n// buttons reads as \"choose an action\", a row of chips as \"here are the things\".\nexport * from \"./components/chip\";\nexport * from \"./components/wizard-stepper\";\nexport * from \"./components/hover-menu\";\nexport * from \"./components/modal\";\nexport * from \"./components/full-bleed-dialog\";\nexport * from \"./components/grouped-picker\";\nexport * from \"./components/file-dropzone\";\nexport * from \"./components/mini-calendar\";\nexport * from \"./components/date-picker\";\nexport * from \"./components/chart\";\n\n// ── data-table suite ─────────────────────────────────────────────────────────\nexport * from \"./components/data-table-labels\";\nexport * from \"./components/data-table-sort\";\nexport * from \"./components/data-table-filters\";\nexport * from \"./components/data-table-pagination\";\nexport { FilterPopover } from \"./components/data-table-filter-popover\";\n// data-table re-exports SortState internally; export the rest explicitly to\n// avoid a duplicate SortState star-export (it comes from data-table-sort).\nexport { DataTable } from \"./components/data-table\";\nexport type { DataTableColumn, DataTableProps, ServerPagination, FilterState } from \"./components/data-table\";\n\n// ── shell (composable app chrome) ────────────────────────────────────────────\nexport * from \"./shell/topbar-controls\";\nexport * from \"./shell/top-bar\";\nexport * from \"./shell/app-shell\";\nexport * from \"./shell/option-switcher-menu\";\nexport * from \"./shell/role-switcher\";\nexport * from \"./shell/topbar-action-menu\";\n\n// ── feedback ─────────────────────────────────────────────────────────────────\n// The form somebody files a report with, and the parts an inbox is built from:\n// the status vocabulary both apps share value for value, the policy about what a\n// row may move to from where it stands, and the look of a status control, a\n// category badge and an opened report. The app still wires its own API, columns\n// and strings — see the note at the top of `feedback-inbox.tsx` for what is\n// deliberately left to it.\nexport * from \"./feedback/feedback-attachment\";\nexport * from \"./feedback/feedback-dialog\";\nexport * from \"./feedback/feedback-inbox\";\n\n// ── multi-step wizard ────────────────────────────────────────────────────────\n// The engine (step machine, validators, collected data), the chrome around it\n// (indicator + nav bar + cancel confirm) and the review step it ends on.\n// `components/wizard-stepper` next door is a different, much smaller thing: a bare\n// step indicator for a two-step import flow, with no engine.\n//\n// Two modules were removed here rather than kept as stock. `wizard-field` held a\n// `WizardField`/`WizardSelectField` pair that had never been rendered in any app —\n// a field group nothing was built from, which this comment used to advertise. And\n// `use-rhf-wizard-step` was the only thing in the package that touched\n// react-hook-form, for a hook neither consumer called: keeping it meant an optional\n// peer, a dev dependency and a type import in every consumer's typecheck, bought\n// for nobody. A design system may carry stock; untested stock nothing has ever\n// rendered is not stock, it is a liability with an export.\nexport * from \"./wizard/types\";\nexport * from \"./wizard/use-wizard\";\nexport * from \"./wizard/wizard-context\";\nexport * from \"./wizard/validation\";\nexport * from \"./wizard/wizard-step\";\nexport * from \"./wizard/wizard-summary\";\nexport * from \"./wizard/stepper-nav\";\n\n// ── guided tours ─────────────────────────────────────────────────────────────\nexport * from \"./tour/tour\";\n\n// ── command palette / global search ──────────────────────────────────────────\nexport * from \"./search/command-palette\";\n\n// ── i18n: one label tree, one optional provider ──────────────────────────────\n// `UiKitLabels` names every string the kit renders; `<UiKitProvider labels locale>`\n// hands a translation to every component below it. Precedence: a component's own\n// prop > the provider > the English default. See src/i18n/kit-labels.tsx.\nexport * from \"./i18n/kit-labels\";\nexport * from \"./i18n/defaults\";\n"],"mappings":";AAMA,cAAc;AACd,SAAS,UAAU;AACnB,SAAS,QAAQ,mBAAmB;AAIpC,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAEhC,SAAS,kBAAkB,wBAAwB,yBAAyB;AAM5E,SAAS,cAAc,uBAAuB;AAI9C,SAAS,oBAAoB;AAE7B,SAAS,mBAAmB;AAE5B,SAAS,yBAAyB;AAClC,SAAS,oBAAoB,uBAAuB;AACpD,SAAS,mBAAmB;AAI5B,cAAc;AAKd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,oBAAoB;AAE7B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAId,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,SAAS,YAAY,eAAe,eAAe,kCAAkC;AAUrF,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAId,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,qBAAqB;AAG9B,SAAS,iBAAiB;AAI1B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AASd,cAAc;AACd,cAAc;AACd,cAAc;AAgBd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AAMd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @eifi1/ui-kit — shared design-system barrel.\n//\n// Domain-free UI + theme surface shared across apps (lead app: Keksdose). Consumers import\n// components/theme from \"@eifi1/ui-kit\" and the token stylesheet from \"@eifi1/ui-kit/tokens.css\".\n\n// ── lib ────────────────────────────────────────────────────────────────────\nexport * from \"./lib/calc\";\nexport { cn } from \"./lib/cn\";\nexport { logger, setStoreLog } from \"./lib/logger\";\n// Date helpers are also available via the \"@eifi1/ui-kit/dates\" subpath.\n\n// ── hooks ────────────────────────────────────────────────────────────────────\nexport { useMediaQuery } from \"./hooks/use-media-query\";\nexport { useBodyScrollLock } from \"./hooks/use-body-scroll-lock\";\nexport { useAnchoredRect } from \"./hooks/use-anchored-rect\";\nexport type { AnchorRect } from \"./hooks/use-anchored-rect\";\nexport { useAnchoredPanel, anchoredPanelPlacement, useVisualViewport } from \"./hooks/use-anchored-panel\";\nexport type {\n AnchoredPanel,\n AnchoredPanelOptions,\n ViewportBox,\n} from \"./hooks/use-anchored-panel\";\nexport { useEscapeKey, useOutsideClick } from \"./hooks/use-dismiss\";\n// Focus containment for an overlay, and a live region for a change that moves no focus.\n// Both were extracted from the two components that already did them correctly (Modal and\n// CommandPalette) so the rest of the kit stops being the exception.\nexport { useFocusTrap } from \"./hooks/use-focus-trap\";\nexport type { FocusTrapOptions } from \"./hooks/use-focus-trap\";\nexport { useAnnounce } from \"./hooks/use-announce\";\nexport type { UseAnnounceReturn, UseAnnounceOptions, AnnounceRegionProps } from \"./hooks/use-announce\";\nexport { useOverlayHistory } from \"./hooks/use-overlay-history\";\nexport { useCloseTransition, OVERLAY_EXIT_MS } from \"./hooks/use-close-transition\";\nexport { useRowSwipe } from \"./hooks/use-row-swipe\";\nexport type { SwipeStage, RowSwipeOptions, RowSwipeReturn } from \"./hooks/use-row-swipe\";\n\n// ── theme / palettes ─────────────────────────────────────────────────────────\nexport * from \"./theme/chart-palette\";\n// Colour maths (sRGB ↔ OKLCH, WCAG contrast, CVD simulation) and the palette deriver\n// that builds a whole, contrast-solved palette from one brand colour plus any colours\n// pinned by hand. `auditPalette` / `auditChartRamp` measure a palette rather than\n// trusting a comment about it.\nexport * from \"./theme/color\";\nexport * from \"./theme/palette-derive\";\nexport * from \"./theme/palette-presets\";\nexport * from \"./theme/theme-store\";\nexport * from \"./theme/palette-store\";\n\n// ── components ───────────────────────────────────────────────────────────────\nexport * from \"./components/ui\";\nexport * from \"./components/search-field\";\nexport * from \"./components/dropdown\";\nexport * from \"./components/popover\";\nexport { SwipeableRow } from \"./components/swipeable-row\";\nexport type { SwipeAction, SwipeableRowProps } from \"./components/swipeable-row\";\nexport * from \"./components/calculator\";\nexport * from \"./components/numpad-sheet\";\nexport * from \"./components/number-input\";\nexport * from \"./components/currency-select\";\nexport * from \"./components/amount-input\";\nexport * from \"./components/combobox\";\nexport * from \"./components/picker-sheet\";\nexport * from \"./components/entity-combobox\";\nexport * from \"./components/multi-entity-combobox\";\nexport * from \"./components/multi-select\";\nexport * from \"./components/tooltip\";\nexport * from \"./components/user-avatar\";\nexport * from \"./components/settings-fields\";\n// Sync state for a database-backed field: the engine (`useFieldSync`) and the\n// affordance (`FieldSyncIndicator`), kept separate because the state is useful\n// without the dot — a form can gate its submit on any field being `pending`.\nexport * from \"./components/field-sync\";\nexport * from \"./components/month-picker\";\nexport * from \"./components/checkbox\";\nexport * from \"./components/switch\";\nexport * from \"./components/slider\";\nexport * from \"./components/time-input\";\nexport * from \"./components/number-field\";\nexport * from \"./components/sparkline\";\nexport * from \"./components/stat-tile\";\nexport * from \"./components/signature-pad\";\nexport * from \"./components/password-strength\";\nexport * from \"./components/page-contents\";\nexport * from \"./components/disclosure\";\nexport * from \"./components/dialog-frame\";\nexport * from \"./components/danger-confirm\";\nexport * from \"./components/swatch-picker\";\nexport * from \"./components/icon-picker\";\nexport * from \"./components/choice-card\";\nexport * from \"./components/autocomplete\";\nexport * from \"./components/measured-grid\";\nexport { useWindowedRows } from \"./hooks/use-windowed-rows\";\nexport type { WindowedRows } from \"./hooks/use-windowed-rows\";\n// Named, not `export *`: file-button.tsx also holds the screening helpers the\n// dropzone shares, which are internal.\nexport { FileButton, useFilePicker, matchesAccept, DEFAULT_FILE_PICKER_LABELS } from \"./components/file-button\";\nexport type {\n FileButtonProps,\n UseFilePickerOptions,\n UseFilePickerReturn,\n FilePickerLabels,\n FileRejection,\n FileRejectionReason,\n FileScreenOptions,\n} from \"./components/file-button\";\nexport * from \"./components/treemap\";\nexport * from \"./components/series-chart\";\nexport * from \"./components/chart-zoom\";\nexport * from \"./components/toggle-legend\";\nexport * from \"./components/facing-pair\";\nexport * from \"./components/series-chart-labels\";\nexport * from \"./components/account-settings\";\nexport * from \"./components/alert-banner\";\nexport * from \"./components/toggle-group\";\n// A pill carrying one VALUE — inert, a link, or a toggle, depending on which prop it is\n// given — and the list field built from it. Distinct from Button on purpose: a row of\n// buttons reads as \"choose an action\", a row of chips as \"here are the things\".\nexport * from \"./components/chip\";\nexport * from \"./components/wizard-stepper\";\nexport * from \"./components/hover-menu\";\nexport * from \"./components/modal\";\nexport * from \"./components/full-bleed-dialog\";\nexport * from \"./components/grouped-picker\";\nexport * from \"./components/file-dropzone\";\nexport * from \"./components/mini-calendar\";\nexport * from \"./components/date-picker\";\nexport * from \"./components/chart\";\n\n// ── data-table suite ─────────────────────────────────────────────────────────\nexport * from \"./components/data-table-labels\";\nexport * from \"./components/data-table-sort\";\nexport * from \"./components/data-table-filters\";\nexport * from \"./components/data-table-pagination\";\nexport { FilterPopover } from \"./components/data-table-filter-popover\";\n// data-table re-exports SortState internally; export the rest explicitly to\n// avoid a duplicate SortState star-export (it comes from data-table-sort).\nexport { DataTable } from \"./components/data-table\";\nexport type {\n DataTableColumn,\n DataTableProps,\n ServerPagination,\n FilterState,\n MobileSwipeActions,\n} from \"./components/data-table\";\n\n// ── shell (composable app chrome) ────────────────────────────────────────────\nexport * from \"./shell/topbar-controls\";\nexport * from \"./shell/top-bar\";\nexport * from \"./shell/app-shell\";\nexport * from \"./shell/option-switcher-menu\";\nexport * from \"./shell/role-switcher\";\nexport * from \"./shell/topbar-action-menu\";\n\n// ── feedback ─────────────────────────────────────────────────────────────────\n// The form somebody files a report with, and the parts an inbox is built from:\n// the status vocabulary both apps share value for value, the policy about what a\n// row may move to from where it stands, and the look of a status control, a\n// category badge and an opened report. The app still wires its own API, columns\n// and strings — see the note at the top of `feedback-inbox.tsx` for what is\n// deliberately left to it.\nexport * from \"./feedback/feedback-attachment\";\nexport * from \"./feedback/feedback-dialog\";\nexport * from \"./feedback/feedback-inbox\";\n\n// ── multi-step wizard ────────────────────────────────────────────────────────\n// The engine (step machine, validators, collected data), the chrome around it\n// (indicator + nav bar + cancel confirm) and the review step it ends on.\n// `components/wizard-stepper` next door is a different, much smaller thing: a bare\n// step indicator for a two-step import flow, with no engine.\n//\n// Two modules were removed here rather than kept as stock. `wizard-field` held a\n// `WizardField`/`WizardSelectField` pair that had never been rendered in any app —\n// a field group nothing was built from, which this comment used to advertise. And\n// `use-rhf-wizard-step` was the only thing in the package that touched\n// react-hook-form, for a hook neither consumer called: keeping it meant an optional\n// peer, a dev dependency and a type import in every consumer's typecheck, bought\n// for nobody. A design system may carry stock; untested stock nothing has ever\n// rendered is not stock, it is a liability with an export.\nexport * from \"./wizard/types\";\nexport * from \"./wizard/use-wizard\";\nexport * from \"./wizard/wizard-context\";\nexport * from \"./wizard/validation\";\nexport * from \"./wizard/wizard-step\";\nexport * from \"./wizard/wizard-summary\";\nexport * from \"./wizard/stepper-nav\";\n\n// ── guided tours ─────────────────────────────────────────────────────────────\nexport * from \"./tour/tour\";\n\n// ── command palette / global search ──────────────────────────────────────────\nexport * from \"./search/command-palette\";\n\n// ── i18n: one label tree, one optional provider ──────────────────────────────\n// `UiKitLabels` names every string the kit renders; `<UiKitProvider labels locale>`\n// hands a translation to every component below it. Precedence: a component's own\n// prop > the provider > the English default. See src/i18n/kit-labels.tsx.\nexport * from \"./i18n/kit-labels\";\nexport * from \"./i18n/defaults\";\n"],"mappings":";AAMA,cAAc;AACd,SAAS,UAAU;AACnB,SAAS,QAAQ,mBAAmB;AAIpC,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAEhC,SAAS,kBAAkB,wBAAwB,yBAAyB;AAM5E,SAAS,cAAc,uBAAuB;AAI9C,SAAS,oBAAoB;AAE7B,SAAS,mBAAmB;AAE5B,SAAS,yBAAyB;AAClC,SAAS,oBAAoB,uBAAuB;AACpD,SAAS,mBAAmB;AAI5B,cAAc;AAKd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,oBAAoB;AAE7B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAId,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,uBAAuB;AAIhC,SAAS,YAAY,eAAe,eAAe,kCAAkC;AAUrF,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAId,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,qBAAqB;AAG9B,SAAS,iBAAiB;AAU1B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AASd,cAAc;AACd,cAAc;AACd,cAAc;AAgBd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AAMd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Reading direction, as the DOM has it — internal, not exported from the barrel.
3
+ *
4
+ * The kit lays itself out with logical classes (`ps-*`, `end-*`, `text-start`), which
5
+ * need no JavaScript. These helpers are for the two things CSS cannot do:
6
+ *
7
+ * - **Arrow keys.** ←/→ mean previous/next in LTR and the reverse in RTL. Resolve the
8
+ * key through {@link horizontalStep} instead of comparing to "ArrowRight".
9
+ * - **Portals.** A panel portalled to `document.body` leaves the subtree whose `dir`
10
+ * it inherited. Read the anchor's direction with {@link dirOf} and put it on the
11
+ * portalled root, and position it from the anchor's START edge, not `rect.left`.
12
+ */
13
+ type Direction = "ltr" | "rtl";
14
+ /** The effective direction at `el`: its nearest `[dir]` ancestor (or itself), else the
15
+ * document's, else LTR. Attribute-based on purpose — jsdom computes no `direction`. */
16
+ declare function dirOf(el: Element | null | undefined): Direction;
17
+ declare function isRtl(el: Element | null | undefined): boolean;
18
+ /**
19
+ * +1 for a key that moves FORWARD along the reading direction, -1 for backward, 0 for
20
+ * any other key. ArrowRight is forward in LTR and backward in RTL.
21
+ */
22
+ declare function horizontalStep(key: string, el: Element | null | undefined): 1 | -1 | 0;
23
+
24
+ export { type Direction, dirOf, horizontalStep, isRtl };
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ function dirOf(el) {
3
+ const source = el?.closest("[dir]") ?? (typeof document !== "undefined" ? document.documentElement : null);
4
+ return source?.getAttribute("dir") === "rtl" ? "rtl" : "ltr";
5
+ }
6
+ function isRtl(el) {
7
+ return dirOf(el) === "rtl";
8
+ }
9
+ function horizontalStep(key, el) {
10
+ if (key !== "ArrowRight" && key !== "ArrowLeft") return 0;
11
+ const forward = key === "ArrowRight" !== isRtl(el);
12
+ return forward ? 1 : -1;
13
+ }
14
+ export {
15
+ dirOf,
16
+ horizontalStep,
17
+ isRtl
18
+ };
19
+ //# sourceMappingURL=direction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/direction.ts"],"sourcesContent":["/**\n * Reading direction, as the DOM has it — internal, not exported from the barrel.\n *\n * The kit lays itself out with logical classes (`ps-*`, `end-*`, `text-start`), which\n * need no JavaScript. These helpers are for the two things CSS cannot do:\n *\n * - **Arrow keys.** ←/→ mean previous/next in LTR and the reverse in RTL. Resolve the\n * key through {@link horizontalStep} instead of comparing to \"ArrowRight\".\n * - **Portals.** A panel portalled to `document.body` leaves the subtree whose `dir`\n * it inherited. Read the anchor's direction with {@link dirOf} and put it on the\n * portalled root, and position it from the anchor's START edge, not `rect.left`.\n */\n\nexport type Direction = \"ltr\" | \"rtl\";\n\n/** The effective direction at `el`: its nearest `[dir]` ancestor (or itself), else the\n * document's, else LTR. Attribute-based on purpose — jsdom computes no `direction`. */\nexport function dirOf(el: Element | null | undefined): Direction {\n const source =\n el?.closest(\"[dir]\") ??\n (typeof document !== \"undefined\" ? document.documentElement : null);\n return source?.getAttribute(\"dir\") === \"rtl\" ? \"rtl\" : \"ltr\";\n}\n\nexport function isRtl(el: Element | null | undefined): boolean {\n return dirOf(el) === \"rtl\";\n}\n\n/**\n * +1 for a key that moves FORWARD along the reading direction, -1 for backward, 0 for\n * any other key. ArrowRight is forward in LTR and backward in RTL.\n */\nexport function horizontalStep(key: string, el: Element | null | undefined): 1 | -1 | 0 {\n if (key !== \"ArrowRight\" && key !== \"ArrowLeft\") return 0;\n const forward = (key === \"ArrowRight\") !== isRtl(el);\n return forward ? 1 : -1;\n}\n"],"mappings":";AAiBO,SAAS,MAAM,IAA2C;AAC/D,QAAM,SACJ,IAAI,QAAQ,OAAO,MAClB,OAAO,aAAa,cAAc,SAAS,kBAAkB;AAChE,SAAO,QAAQ,aAAa,KAAK,MAAM,QAAQ,QAAQ;AACzD;AAEO,SAAS,MAAM,IAAyC;AAC7D,SAAO,MAAM,EAAE,MAAM;AACvB;AAMO,SAAS,eAAe,KAAa,IAA4C;AACtF,MAAI,QAAQ,gBAAgB,QAAQ,YAAa,QAAO;AACxD,QAAM,UAAW,QAAQ,iBAAkB,MAAM,EAAE;AACnD,SAAO,UAAU,IAAI;AACvB;","names":[]}