@lerianstudio/sindarian-ui 2.0.0-beta.2 → 2.0.0-beta.20

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 (211) hide show
  1. package/LICENSE +93 -0
  2. package/README.md +52 -1
  3. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  4. package/dist/components/breadcrumb/index.js +25 -1
  5. package/dist/components/card/account-card/index.js +5 -5
  6. package/dist/components/card/basic-card/index.d.ts.map +1 -1
  7. package/dist/components/card/basic-card/index.js +2 -2
  8. package/dist/components/card/entity-card/index.js +1 -1
  9. package/dist/components/dialog/confirmation-dialog/index.d.ts.map +1 -1
  10. package/dist/components/dialog/confirmation-dialog/index.js +4 -1
  11. package/dist/components/entity-box/index.d.ts +18 -2
  12. package/dist/components/entity-box/index.d.ts.map +1 -1
  13. package/dist/components/entity-box/index.js +32 -4
  14. package/dist/components/form/date-picker-field/index.js +1 -1
  15. package/dist/components/form/date-range-field/index.js +1 -1
  16. package/dist/components/form/date-time-picker-field/index.js +1 -1
  17. package/dist/components/form/password-field/index.d.ts +5 -1
  18. package/dist/components/form/password-field/index.d.ts.map +1 -1
  19. package/dist/components/form/password-field/index.js +2 -2
  20. package/dist/components/form/select-field/index.d.ts +15 -1
  21. package/dist/components/form/select-field/index.d.ts.map +1 -1
  22. package/dist/components/form/select-field/index.js +28 -3
  23. package/dist/components/form/switch-field/index.d.ts.map +1 -1
  24. package/dist/components/form/switch-field/index.js +6 -1
  25. package/dist/components/page/index.d.ts +35 -1
  26. package/dist/components/page/index.d.ts.map +1 -1
  27. package/dist/components/page/index.js +6 -2
  28. package/dist/components/page-header/index.js +1 -1
  29. package/dist/components/table/id-table-cell.d.ts +13 -1
  30. package/dist/components/table/id-table-cell.d.ts.map +1 -1
  31. package/dist/components/table/id-table-cell.js +99 -9
  32. package/dist/components/table/index.d.ts +1 -0
  33. package/dist/components/table/index.d.ts.map +1 -1
  34. package/dist/components/table/index.js +1 -0
  35. package/dist/components/table/locked-table-actions.d.ts +24 -0
  36. package/dist/components/table/locked-table-actions.d.ts.map +1 -1
  37. package/dist/components/table/locked-table-actions.js +31 -1
  38. package/dist/components/table/name-table-cell.d.ts +57 -4
  39. package/dist/components/table/name-table-cell.d.ts.map +1 -1
  40. package/dist/components/table/name-table-cell.js +50 -2
  41. package/dist/components/ui/autocomplete/index.d.ts +24 -0
  42. package/dist/components/ui/autocomplete/index.d.ts.map +1 -1
  43. package/dist/components/ui/autocomplete/index.js +24 -0
  44. package/dist/components/ui/badge/index.d.ts +11 -7
  45. package/dist/components/ui/badge/index.d.ts.map +1 -1
  46. package/dist/components/ui/badge/index.js +20 -8
  47. package/dist/components/ui/button/index.d.ts +3 -3
  48. package/dist/components/ui/copy-field/index.d.ts +25 -1
  49. package/dist/components/ui/copy-field/index.d.ts.map +1 -1
  50. package/dist/components/ui/copy-field/index.js +16 -8
  51. package/dist/components/ui/dialog/index.d.ts +1 -1
  52. package/dist/components/ui/dialog/index.d.ts.map +1 -1
  53. package/dist/components/ui/dialog/index.js +2 -2
  54. package/dist/components/ui/file-upload/index.d.ts +159 -0
  55. package/dist/components/ui/file-upload/index.d.ts.map +1 -1
  56. package/dist/components/ui/file-upload/index.js +308 -6
  57. package/dist/components/ui/icon-button/index.d.ts +1 -1
  58. package/dist/components/ui/icon-button/styles.css +42 -0
  59. package/dist/components/ui/input/styles.css +79 -4
  60. package/dist/components/ui/otp-input/index.js +1 -1
  61. package/dist/components/ui/radio-group/index.js +1 -1
  62. package/dist/components/ui/select/index.d.ts.map +1 -1
  63. package/dist/components/ui/select/index.js +8 -4
  64. package/dist/components/ui/select/styles.css +1 -1
  65. package/dist/components/ui/sheet/index.d.ts +42 -0
  66. package/dist/components/ui/sheet/index.d.ts.map +1 -1
  67. package/dist/components/ui/sheet/index.js +47 -14
  68. package/dist/components/ui/sidebar/index.d.ts +1 -0
  69. package/dist/components/ui/sidebar/index.d.ts.map +1 -1
  70. package/dist/components/ui/sidebar/index.js +1 -0
  71. package/dist/components/ui/sidebar/sidebar-expand-button.d.ts +1 -1
  72. package/dist/components/ui/sidebar/sidebar-expand-button.d.ts.map +1 -1
  73. package/dist/components/ui/sidebar/sidebar-expand-button.js +15 -1
  74. package/dist/components/ui/sidebar/sidebar-item.d.ts +1 -1
  75. package/dist/components/ui/sidebar/sidebar-item.d.ts.map +1 -1
  76. package/dist/components/ui/sidebar/sidebar-item.js +28 -4
  77. package/dist/components/ui/sidebar/sidebar-provider.d.ts +58 -0
  78. package/dist/components/ui/sidebar/sidebar-provider.d.ts.map +1 -1
  79. package/dist/components/ui/sidebar/sidebar-provider.js +146 -4
  80. package/dist/components/ui/sidebar/sidebar-root.d.ts +38 -1
  81. package/dist/components/ui/sidebar/sidebar-root.d.ts.map +1 -1
  82. package/dist/components/ui/sidebar/sidebar-root.js +111 -5
  83. package/dist/components/ui/sidebar/sidebar-trigger.d.ts +45 -0
  84. package/dist/components/ui/sidebar/sidebar-trigger.d.ts.map +1 -0
  85. package/dist/components/ui/sidebar/sidebar-trigger.js +57 -0
  86. package/dist/components/ui/textarea/index.js +1 -1
  87. package/dist/components/ui/toast/toaster.d.ts +5 -1
  88. package/dist/components/ui/toast/toaster.d.ts.map +1 -1
  89. package/dist/components/ui/toast/toaster.js +3 -2
  90. package/dist/enterprise/data-table/index.d.ts +77 -7
  91. package/dist/enterprise/data-table/index.d.ts.map +1 -1
  92. package/dist/enterprise/data-table/index.js +56 -11
  93. package/dist/enterprise/date-range-picker/index.js +4 -4
  94. package/dist/enterprise/number-input/index.d.ts.map +1 -1
  95. package/dist/enterprise/number-input/index.js +1 -1
  96. package/dist/esm/components/breadcrumb/index.d.ts.map +1 -1
  97. package/dist/esm/components/breadcrumb/index.js +25 -1
  98. package/dist/esm/components/card/account-card/index.js +5 -5
  99. package/dist/esm/components/card/basic-card/index.d.ts.map +1 -1
  100. package/dist/esm/components/card/basic-card/index.js +2 -2
  101. package/dist/esm/components/card/entity-card/index.js +1 -1
  102. package/dist/esm/components/dialog/confirmation-dialog/index.d.ts.map +1 -1
  103. package/dist/esm/components/dialog/confirmation-dialog/index.js +4 -1
  104. package/dist/esm/components/entity-box/index.d.ts +18 -2
  105. package/dist/esm/components/entity-box/index.d.ts.map +1 -1
  106. package/dist/esm/components/entity-box/index.js +29 -4
  107. package/dist/esm/components/form/date-picker-field/index.js +1 -1
  108. package/dist/esm/components/form/date-range-field/index.js +1 -1
  109. package/dist/esm/components/form/date-time-picker-field/index.js +1 -1
  110. package/dist/esm/components/form/password-field/index.d.ts +5 -1
  111. package/dist/esm/components/form/password-field/index.d.ts.map +1 -1
  112. package/dist/esm/components/form/password-field/index.js +2 -2
  113. package/dist/esm/components/form/select-field/index.d.ts +15 -1
  114. package/dist/esm/components/form/select-field/index.d.ts.map +1 -1
  115. package/dist/esm/components/form/select-field/index.js +29 -4
  116. package/dist/esm/components/form/switch-field/index.d.ts.map +1 -1
  117. package/dist/esm/components/form/switch-field/index.js +7 -2
  118. package/dist/esm/components/page/index.d.ts +35 -1
  119. package/dist/esm/components/page/index.d.ts.map +1 -1
  120. package/dist/esm/components/page/index.js +6 -2
  121. package/dist/esm/components/page-header/index.js +1 -1
  122. package/dist/esm/components/table/id-table-cell.d.ts +13 -1
  123. package/dist/esm/components/table/id-table-cell.d.ts.map +1 -1
  124. package/dist/esm/components/table/id-table-cell.js +100 -7
  125. package/dist/esm/components/table/index.d.ts +1 -0
  126. package/dist/esm/components/table/index.d.ts.map +1 -1
  127. package/dist/esm/components/table/index.js +1 -0
  128. package/dist/esm/components/table/locked-table-actions.d.ts +24 -0
  129. package/dist/esm/components/table/locked-table-actions.d.ts.map +1 -1
  130. package/dist/esm/components/table/locked-table-actions.js +31 -1
  131. package/dist/esm/components/table/name-table-cell.d.ts +57 -4
  132. package/dist/esm/components/table/name-table-cell.d.ts.map +1 -1
  133. package/dist/esm/components/table/name-table-cell.js +50 -2
  134. package/dist/esm/components/ui/autocomplete/index.d.ts +24 -0
  135. package/dist/esm/components/ui/autocomplete/index.d.ts.map +1 -1
  136. package/dist/esm/components/ui/autocomplete/index.js +24 -0
  137. package/dist/esm/components/ui/badge/index.d.ts +11 -7
  138. package/dist/esm/components/ui/badge/index.d.ts.map +1 -1
  139. package/dist/esm/components/ui/badge/index.js +20 -8
  140. package/dist/esm/components/ui/button/index.d.ts +3 -3
  141. package/dist/esm/components/ui/copy-field/index.d.ts +25 -1
  142. package/dist/esm/components/ui/copy-field/index.d.ts.map +1 -1
  143. package/dist/esm/components/ui/copy-field/index.js +16 -8
  144. package/dist/esm/components/ui/dialog/index.d.ts +1 -1
  145. package/dist/esm/components/ui/dialog/index.d.ts.map +1 -1
  146. package/dist/esm/components/ui/dialog/index.js +3 -3
  147. package/dist/esm/components/ui/file-upload/index.d.ts +159 -0
  148. package/dist/esm/components/ui/file-upload/index.d.ts.map +1 -1
  149. package/dist/esm/components/ui/file-upload/index.js +307 -5
  150. package/dist/esm/components/ui/icon-button/index.d.ts +1 -1
  151. package/dist/esm/components/ui/otp-input/index.js +1 -1
  152. package/dist/esm/components/ui/radio-group/index.js +1 -1
  153. package/dist/esm/components/ui/select/index.d.ts.map +1 -1
  154. package/dist/esm/components/ui/select/index.js +8 -4
  155. package/dist/esm/components/ui/sheet/index.d.ts +42 -0
  156. package/dist/esm/components/ui/sheet/index.d.ts.map +1 -1
  157. package/dist/esm/components/ui/sheet/index.js +48 -15
  158. package/dist/esm/components/ui/sidebar/index.d.ts +1 -0
  159. package/dist/esm/components/ui/sidebar/index.d.ts.map +1 -1
  160. package/dist/esm/components/ui/sidebar/index.js +1 -0
  161. package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts +1 -1
  162. package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts.map +1 -1
  163. package/dist/esm/components/ui/sidebar/sidebar-expand-button.js +15 -1
  164. package/dist/esm/components/ui/sidebar/sidebar-item.d.ts +1 -1
  165. package/dist/esm/components/ui/sidebar/sidebar-item.d.ts.map +1 -1
  166. package/dist/esm/components/ui/sidebar/sidebar-item.js +28 -4
  167. package/dist/esm/components/ui/sidebar/sidebar-provider.d.ts +58 -0
  168. package/dist/esm/components/ui/sidebar/sidebar-provider.d.ts.map +1 -1
  169. package/dist/esm/components/ui/sidebar/sidebar-provider.js +143 -1
  170. package/dist/esm/components/ui/sidebar/sidebar-root.d.ts +38 -1
  171. package/dist/esm/components/ui/sidebar/sidebar-root.d.ts.map +1 -1
  172. package/dist/esm/components/ui/sidebar/sidebar-root.js +113 -7
  173. package/dist/esm/components/ui/sidebar/sidebar-trigger.d.ts +45 -0
  174. package/dist/esm/components/ui/sidebar/sidebar-trigger.d.ts.map +1 -0
  175. package/dist/esm/components/ui/sidebar/sidebar-trigger.js +53 -0
  176. package/dist/esm/components/ui/textarea/index.js +1 -1
  177. package/dist/esm/components/ui/toast/toaster.d.ts +5 -1
  178. package/dist/esm/components/ui/toast/toaster.d.ts.map +1 -1
  179. package/dist/esm/components/ui/toast/toaster.js +3 -2
  180. package/dist/esm/enterprise/data-table/index.d.ts +77 -7
  181. package/dist/esm/enterprise/data-table/index.d.ts.map +1 -1
  182. package/dist/esm/enterprise/data-table/index.js +57 -12
  183. package/dist/esm/enterprise/date-range-picker/index.js +4 -4
  184. package/dist/esm/enterprise/number-input/index.d.ts.map +1 -1
  185. package/dist/esm/enterprise/number-input/index.js +1 -1
  186. package/dist/esm/hooks/use-toast.d.ts +18 -2
  187. package/dist/esm/hooks/use-toast.d.ts.map +1 -1
  188. package/dist/esm/hooks/use-toast.js +60 -16
  189. package/dist/esm/index.d.ts +2 -0
  190. package/dist/esm/index.d.ts.map +1 -1
  191. package/dist/esm/index.js +2 -0
  192. package/dist/esm/lib/utils.d.ts +2 -0
  193. package/dist/esm/lib/utils.d.ts.map +1 -1
  194. package/dist/esm/lib/utils.js +10 -0
  195. package/dist/esm/toast/helpers.d.ts +13 -0
  196. package/dist/esm/toast/helpers.d.ts.map +1 -1
  197. package/dist/esm/toast/helpers.js +8 -1
  198. package/dist/globals.css +81 -31
  199. package/dist/hooks/use-toast.d.ts +18 -2
  200. package/dist/hooks/use-toast.d.ts.map +1 -1
  201. package/dist/hooks/use-toast.js +61 -16
  202. package/dist/index.d.ts +2 -0
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +2 -0
  205. package/dist/lib/utils.d.ts +2 -0
  206. package/dist/lib/utils.d.ts.map +1 -1
  207. package/dist/lib/utils.js +11 -0
  208. package/dist/toast/helpers.d.ts +13 -0
  209. package/dist/toast/helpers.d.ts.map +1 -1
  210. package/dist/toast/helpers.js +8 -1
  211. package/package.json +7 -4
@@ -1,12 +1,105 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { TableCell, TableCellAction, TableCellWrapper } from '../../components/ui/table/index.js';
2
+ import { TableCell, TableCellWrapper } from '../../components/ui/table/index.js';
3
3
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../components/ui/tooltip/index.js';
4
- import truncate from 'lodash/truncate.js';
5
4
  import { Copy } from 'lucide-react';
6
- export const IdTableCell = ({ id, onCopy, ...others }) => {
7
- const handleCopyToClipboard = () => {
8
- navigator.clipboard.writeText(id);
9
- onCopy?.(id);
5
+ /**
6
+ * ⛔ TRUNCATE IN THE MIDDLE, NEVER FROM THE START.
7
+ *
8
+ * This cell renders UUIDs, and a ledger hands out long runs of them from a
9
+ * shared prefix — `00000000-0000-0000-0000-00000000000{1,2,3}`. Keeping the
10
+ * first 13 characters, which is what `truncate(id, { length: 16 })` did,
11
+ * rendered every one of those rows as the same string: the only part that told
12
+ * them apart was the part that was dropped, and the reader had to hover each
13
+ * row in turn to find the one they wanted.
14
+ *
15
+ * Both ends carry information — the head says which family the id belongs to,
16
+ * the tail says which member — so both ends stay.
17
+ */
18
+ const DEFAULT_HEAD = 8;
19
+ const DEFAULT_TAIL = 4;
20
+ /**
21
+ * ⛔ A BAD LENGTH CANNOT THROW HERE. This runs in a render path, so refusing a
22
+ * malformed prop would unmount the whole table rather than one cell — a
23
+ * consumer computing `head` from data gets a broken cell, not a broken screen.
24
+ *
25
+ * `String.slice` reads a negative number as an offset from the END, so a
26
+ * negative `head` kept nearly the entire id and put an ellipsis in the middle
27
+ * of it, and `NaN` read as 0 and dropped the head — the exact failure middle
28
+ * truncation exists to prevent, and one character LONGER than the untruncated
29
+ * id. Clamped to a non-negative whole number; anything non-finite falls back
30
+ * to the default, which a caller passing `NaN` has already bypassed.
31
+ */
32
+ function charCount(value, fallback) {
33
+ return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : fallback;
34
+ }
35
+ function truncateMiddle(id, head, tail) {
36
+ const start = charCount(head, DEFAULT_HEAD);
37
+ const end = charCount(tail, DEFAULT_TAIL);
38
+ // No ellipsis unless it actually saves characters: at head + tail + 1 the
39
+ // truncation is the same length as the id and hides a character for nothing.
40
+ return id.length <= start + end + 1
41
+ ? id
42
+ : `${id.slice(0, start)}…${id.slice(id.length - end)}`;
43
+ }
44
+ export const IdTableCell = ({ id, onCopy, head = DEFAULT_HEAD, tail = DEFAULT_TAIL, copyLabel = 'Copy id', ...others }) => {
45
+ /**
46
+ * ⛔ THE COPY ACTION IS A NAMED BUTTON, NEVER A HANDLER ON THE `<td>`.
47
+ *
48
+ * On the cell it had no role, no tab stop and no accessible name: an
49
+ * operator who does not use a pointer could not copy an id from any table
50
+ * built on this kit, and a screen reader announced the cell as plain text.
51
+ * It also made the id column the one cell in a row-activating table that
52
+ * silently swallowed the click that opens the record.
53
+ */
54
+ const handleCopyToClipboard = async (event) => {
55
+ // A row that opens a record on click must not also open it on a copy.
56
+ event.stopPropagation();
57
+ // The same guard `CopyField` uses: an insecure context, and a browser
58
+ // without the API, both leave `navigator.clipboard` undefined, and the
59
+ // only thing this cell would otherwise do about it is throw an unhandled
60
+ // rejection out of a click handler. There is no input here to select as a
61
+ // fallback, so a silent no-op is the whole of what it can honestly offer.
62
+ if (!id || typeof navigator.clipboard?.writeText !== 'function') {
63
+ return;
64
+ }
65
+ try {
66
+ // The WHOLE id, never what is rendered. The cell is the only place most
67
+ // consoles expose it, and a truncated id pasted into a query matches
68
+ // nothing.
69
+ await navigator.clipboard.writeText(id);
70
+ onCopy?.(id);
71
+ }
72
+ catch {
73
+ // The browser refused the write: nothing reached the clipboard, so
74
+ // `onCopy` — which consumers hang their "copied" toast off — must not
75
+ // claim otherwise.
76
+ }
10
77
  };
11
- return (_jsx(TableCell, { onClick: handleCopyToClipboard, ...others, children: _jsxs(TableCellWrapper, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { delayDuration: 300, children: [_jsx(TooltipTrigger, { children: truncate(id, { length: 16 }) }), _jsx(TooltipContent, { children: id })] }) }), _jsx(TableCellAction, { children: _jsx(Copy, { className: "size-3.5" }) })] }) }));
78
+ return (_jsx(TableCell
79
+ // The tooltip is the styled affordance; `title` is the fallback that
80
+ // survives without it — a printed page, a portal that has not mounted,
81
+ // and the cell padding outside the trigger.
82
+ , {
83
+ // The tooltip is the styled affordance; `title` is the fallback that
84
+ // survives without it — a printed page, a portal that has not mounted,
85
+ // and the cell padding outside the trigger.
86
+ title: id, ...others, children: _jsxs(TableCellWrapper, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { delayDuration: 300, children: [_jsx(TooltipTrigger, { children: id ? truncateMiddle(id, head, tail) : id }), _jsx(TooltipContent, { children: id })] }) }), id ? (_jsx("button", { type: "button", "aria-label": copyLabel, onClick: handleCopyToClipboard,
87
+ // ⛔ THREE RULES HERE, AND EVERY ONE IS A WAY THE CONTROL
88
+ // DISAPPEARS RATHER THAN A DECORATION.
89
+ //
90
+ // `focus-visible:opacity-100`: a keyboard stop the operator cannot
91
+ // see is the same dead end the `<td>` handler was.
92
+ //
93
+ // `[@media(hover:none)]:opacity-100`: a phone or a tablet has no
94
+ // pointer to hover with, so `group-hover` never fires and the only
95
+ // control that copies an id stayed fully transparent — invisible
96
+ // AND unexplained on the one device where the id is hardest to
97
+ // read off the screen. Written as an arbitrary variant because the
98
+ // kit's Tailwind theme defines no named one.
99
+ //
100
+ // `size-6` with `-my-0.5`: WCAG 2.5.8 wants 24×24 CSS px, and the
101
+ // glyph alone is 14. The negative margin pulls the button's outer
102
+ // box back to the 20px line box of the cell's `text-sm` text, so
103
+ // the target grows without the row growing under it.
104
+ className: "focus-visible:ring-ring -my-0.5 ml-4 inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-sm opacity-0 transition-opacity group-hover/table-cell:opacity-100 focus-visible:opacity-100 focus-visible:ring-2 focus-visible:outline-none [@media(hover:none)]:opacity-100", children: _jsx(Copy, { className: "size-3.5" }) })) : null] }) }));
12
105
  };
@@ -1,3 +1,4 @@
1
1
  export * from './id-table-cell.js';
2
+ export * from './locked-table-actions.js';
2
3
  export * from './name-table-cell.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table/index.tsx"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table/index.tsx"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA"}
@@ -1,2 +1,3 @@
1
1
  export * from './id-table-cell.js';
2
+ export * from './locked-table-actions.js';
2
3
  export * from './name-table-cell.js';
@@ -1,7 +1,31 @@
1
1
  import React from 'react';
2
2
  export type LockedTableActionsProps = {
3
+ /** Why this record cannot be changed. It is the control's accessible name as well as the tooltip's text. */
3
4
  message: string;
4
5
  className?: string;
5
6
  };
7
+ /**
8
+ * Where a row's action menu would be, on a record the ledger will not let
9
+ * anyone change — an external account, in double-entry terms.
10
+ *
11
+ * ⛔ THE TRIGGER IS A BUTTON. It used to be a `<div>`, so the ONLY explanation
12
+ * of why the menu is gone lived in a tooltip that a keyboard could not open and
13
+ * a screen reader had nothing to attach to: the row simply had one control
14
+ * fewer, unexplained.
15
+ *
16
+ * `aria-disabled`, not the `disabled` attribute: a truly disabled button takes
17
+ * no focus and fires no pointer events, so it would announce as unavailable and
18
+ * then refuse to open the tooltip that says WHY — the same dead end in a
19
+ * different shape. This one is reachable, announces its reason as its name,
20
+ * opens the tooltip on focus as well as hover, and does nothing when pressed.
21
+ *
22
+ * ⛔ DOING NOTHING TAKES A HANDLER. `aria-disabled` is a promise to the
23
+ * accessibility tree, not to the DOM: the press really does dispatch a click,
24
+ * and a click bubbles. Consumers put this where a row's action menu would be,
25
+ * in rows that open the record — so with no handler of its own the one control
26
+ * that says "you cannot change this" would open the record it refuses to
27
+ * change, from a pointer and, because a button turns Enter and Space into
28
+ * clicks, from a keyboard too.
29
+ */
6
30
  export declare const LockedTableActions: ({ message, className }: LockedTableActionsProps) => React.JSX.Element;
7
31
  //# sourceMappingURL=locked-table-actions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locked-table-actions.d.ts","sourceRoot":"","sources":["../../../../src/components/table/locked-table-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,wBAGhC,uBAAuB,sBAkBzB,CAAA"}
1
+ {"version":3,"file":"locked-table-actions.d.ts","sourceRoot":"","sources":["../../../../src/components/table/locked-table-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,MAAM,MAAM,uBAAuB,GAAG;IACpC,4GAA4G;IAC5G,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,kBAAkB,GAAI,wBAGhC,uBAAuB,sBA6BzB,CAAA"}
@@ -2,6 +2,36 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { LockIcon } from 'lucide-react';
3
3
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../components/ui/tooltip/index.js';
4
4
  import { cn } from '../../lib/utils.js';
5
+ /**
6
+ * Where a row's action menu would be, on a record the ledger will not let
7
+ * anyone change — an external account, in double-entry terms.
8
+ *
9
+ * ⛔ THE TRIGGER IS A BUTTON. It used to be a `<div>`, so the ONLY explanation
10
+ * of why the menu is gone lived in a tooltip that a keyboard could not open and
11
+ * a screen reader had nothing to attach to: the row simply had one control
12
+ * fewer, unexplained.
13
+ *
14
+ * `aria-disabled`, not the `disabled` attribute: a truly disabled button takes
15
+ * no focus and fires no pointer events, so it would announce as unavailable and
16
+ * then refuse to open the tooltip that says WHY — the same dead end in a
17
+ * different shape. This one is reachable, announces its reason as its name,
18
+ * opens the tooltip on focus as well as hover, and does nothing when pressed.
19
+ *
20
+ * ⛔ DOING NOTHING TAKES A HANDLER. `aria-disabled` is a promise to the
21
+ * accessibility tree, not to the DOM: the press really does dispatch a click,
22
+ * and a click bubbles. Consumers put this where a row's action menu would be,
23
+ * in rows that open the record — so with no handler of its own the one control
24
+ * that says "you cannot change this" would open the record it refuses to
25
+ * change, from a pointer and, because a button turns Enter and Space into
26
+ * clicks, from a keyboard too.
27
+ */
5
28
  export const LockedTableActions = ({ message, className }) => {
6
- return (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("div", { className: cn('border-border bg-muted flex size-9 items-center justify-center rounded-md border', className), children: _jsx(LockIcon, { size: 14, className: "text-muted-foreground" }) }) }), _jsx(TooltipContent, { side: "left", children: message })] }) }));
29
+ return (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-disabled": "true", "aria-label": message, onClick: (event) => {
30
+ event.preventDefault();
31
+ event.stopPropagation();
32
+ }, className: cn('border-border bg-muted flex size-9 items-center justify-center rounded-md border',
33
+ // Reachable is half the fix: a `border` over a `bg-muted` can
34
+ // swallow the browser's default outline entirely, and the other
35
+ // two cells in this table carry the same ring.
36
+ 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none', className), children: _jsx(LockIcon, { size: 14, className: "text-muted-foreground" }) }) }), _jsx(TooltipContent, { side: "left", children: message })] }) }));
7
37
  };
@@ -1,6 +1,59 @@
1
1
  import { TableCell } from '../ui/table/index.js';
2
- export type NameTableCellProps = React.ComponentProps<typeof TableCell> & {
3
- name?: string | React.ReactNode;
4
- };
5
- export declare const NameTableCell: ({ name, ...props }: NameTableCellProps) => import("react").JSX.Element;
2
+ /** Opens the record. Lands on a real button, never on the `<td>`. */
3
+ type OpenRecord = React.MouseEventHandler<HTMLButtonElement>;
4
+ export type NameTableCellProps = Omit<React.ComponentProps<typeof TableCell>, 'onClick'> &
5
+ /**
6
+ * Three shapes, and the only one missing is an interactive cell that can
7
+ * carry no accessible name.
8
+ *
9
+ * 1. A text `name` IS the button's accessible name, so the handler is free
10
+ * and `buttonLabel` merely overrides what the button announces.
11
+ * 2. Anything else rendered inside the button — a badge, an icon, an italic
12
+ * placeholder — may carry no text at all, so it has to name its button.
13
+ * 3. No handler, no control: text in a table has nothing to name.
14
+ */
15
+ ({
16
+ name: string;
17
+ onClick?: OpenRecord;
18
+ buttonLabel?: string;
19
+ } | {
20
+ name?: React.ReactNode;
21
+ onClick: OpenRecord;
22
+ buttonLabel: string;
23
+ } | {
24
+ name?: React.ReactNode;
25
+ onClick?: never;
26
+ buttonLabel?: never;
27
+ });
28
+ /**
29
+ * The name column, which is how an operator opens a record from a list.
30
+ *
31
+ * ⛔ THE CLICK IS A BUTTON, NEVER THE `<td>`. The cell had no click prop at
32
+ * all, so a consumer wanting a clickable name put `onClick` on the `<td>`
33
+ * through the spread props: a pointer user saw an affordance under a
34
+ * `<p class="cursor-pointer">`, and a keyboard or screen-reader user got a
35
+ * table cell with no control in it — the row's only route to the record was
36
+ * unreachable. `onClick` is now `Omit`ed from the inherited cell props, so the
37
+ * `<td>` handler is unrepresentable and the compiler says so at the call site.
38
+ *
39
+ * And with no handler there is no pointer cursor: text that says it is
40
+ * clickable and is not is worse than plain text.
41
+ *
42
+ * ⛔ AN INTERACTIVE CELL CANNOT BE ANONYMOUS. `name` renders INSIDE the button,
43
+ * so whatever it renders is the button's accessible name — and a `ReactNode` is
44
+ * free to render no text at all, which announces as a bare "button" and leaves
45
+ * the row's only route to its record as unreachable as the `<td>` handler
46
+ * above. The props are a union rather than a comment: a text `name` names the
47
+ * button by itself, anything else has to pass `buttonLabel`, and a cell with no
48
+ * handler is exempt because it holds no control.
49
+ *
50
+ * `buttonLabel` and not an inherited `aria-label`, which the spread puts on the
51
+ * `<td>` — naming the CELL, never the control inside it.
52
+ *
53
+ * ⛔ AND THE UNION STILL LETS THE EMPTY STRING THROUGH, because every string
54
+ * type does. `name=""` satisfies the text arm and `buttonLabel=" "` satisfies
55
+ * the labelled one, so the last word is the component's, below.
56
+ */
57
+ export declare const NameTableCell: ({ name, onClick, buttonLabel, ...props }: NameTableCellProps) => import("react").JSX.Element;
58
+ export {};
6
59
  //# sourceMappingURL=name-table-cell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"name-table-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/table/name-table-cell.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAqC,MAAM,aAAa,CAAA;AAE1E,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,GAAG;IACxE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,oBAAoB,kBAAkB,gCAWnE,CAAA"}
1
+ {"version":3,"file":"name-table-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/table/name-table-cell.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAqC,MAAM,aAAa,CAAA;AAE1E,qEAAqE;AACrE,KAAK,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;AAE5D,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,EACtC,SAAS,CACV;AACC;;;;;;;;;GASG;AACH,CACI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CACnE,CAAA;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,aAAa,GAAI,0CAK3B,kBAAkB,gCAgDpB,CAAA"}
@@ -1,6 +1,54 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Search } from 'lucide-react';
3
3
  import { TableCell, TableCellWrapper, TableCellAction } from '../ui/table/index.js';
4
- export const NameTableCell = ({ name, ...props }) => {
5
- return (_jsx(TableCell, { ...props, children: _jsxs(TableCellWrapper, { children: [_jsx("p", { className: "cursor-pointer", children: name }), _jsx(TableCellAction, { children: _jsx(Search, { className: "size-3.5" }) })] }) }));
4
+ /**
5
+ * The name column, which is how an operator opens a record from a list.
6
+ *
7
+ * ⛔ THE CLICK IS A BUTTON, NEVER THE `<td>`. The cell had no click prop at
8
+ * all, so a consumer wanting a clickable name put `onClick` on the `<td>`
9
+ * through the spread props: a pointer user saw an affordance under a
10
+ * `<p class="cursor-pointer">`, and a keyboard or screen-reader user got a
11
+ * table cell with no control in it — the row's only route to the record was
12
+ * unreachable. `onClick` is now `Omit`ed from the inherited cell props, so the
13
+ * `<td>` handler is unrepresentable and the compiler says so at the call site.
14
+ *
15
+ * And with no handler there is no pointer cursor: text that says it is
16
+ * clickable and is not is worse than plain text.
17
+ *
18
+ * ⛔ AN INTERACTIVE CELL CANNOT BE ANONYMOUS. `name` renders INSIDE the button,
19
+ * so whatever it renders is the button's accessible name — and a `ReactNode` is
20
+ * free to render no text at all, which announces as a bare "button" and leaves
21
+ * the row's only route to its record as unreachable as the `<td>` handler
22
+ * above. The props are a union rather than a comment: a text `name` names the
23
+ * button by itself, anything else has to pass `buttonLabel`, and a cell with no
24
+ * handler is exempt because it holds no control.
25
+ *
26
+ * `buttonLabel` and not an inherited `aria-label`, which the spread puts on the
27
+ * `<td>` — naming the CELL, never the control inside it.
28
+ *
29
+ * ⛔ AND THE UNION STILL LETS THE EMPTY STRING THROUGH, because every string
30
+ * type does. `name=""` satisfies the text arm and `buttonLabel=" "` satisfies
31
+ * the labelled one, so the last word is the component's, below.
32
+ */
33
+ export const NameTableCell = ({ name, onClick, buttonLabel, ...props }) => {
34
+ // Whitespace names nothing. An `aria-label` of " " is worse than none: it
35
+ // OVERRIDES the text inside the button, so a perfectly good name is replaced
36
+ // by silence. Drop it and the text content names the control again.
37
+ const label = buttonLabel?.trim() ? buttonLabel : undefined;
38
+ // Only a text `name` can name the button by itself. Any other node is opaque
39
+ // here — which is why the type demands a label for it in the first place.
40
+ const textName = typeof name === 'string' ? name.trim() : '';
41
+ const named = Boolean(label) || textName !== '';
42
+ // ⛔ AN UNNAMED BUTTON LOSES ITS HANDLER, IT DOES NOT SHIP. The two failures
43
+ // are not symmetric: a button announcing "" is invisible to the developer who
44
+ // wrote it and fatal to the operator who cannot use a mouse, while a name
45
+ // that does not open its record shows itself on the very first render. So the
46
+ // cell degrades to the plain text it can still display correctly, and says so
47
+ // where a developer will see it. Never throws: one nameless row must not take
48
+ // the whole table down.
49
+ if (process.env.NODE_ENV !== 'production' && onClick && !named) {
50
+ console.error(`NameTableCell has no accessible name: \`${typeof name === 'string' ? 'name' : 'buttonLabel'}\` is empty, so its click handler was dropped rather than render a button announcing "".`);
51
+ }
52
+ const opensRecord = onClick && named;
53
+ return (_jsx(TableCell, { ...props, children: _jsxs(TableCellWrapper, { children: [opensRecord ? (_jsx("button", { type: "button", onClick: onClick, "aria-label": label, className: "focus-visible:ring-ring cursor-pointer rounded-sm text-left focus-visible:ring-2 focus-visible:outline-none", children: name })) : (_jsx("p", { children: name })), _jsx(TableCellAction, { children: _jsx(Search, { className: "size-3.5" }) })] }) }));
6
54
  };
@@ -25,14 +25,29 @@ export type AutocompleteTriggerProps = React.ComponentProps<'div'> & {
25
25
  clearLabel?: string;
26
26
  };
27
27
  export declare function AutocompleteTrigger({ ref, className, onClear, clearLabel, children }: AutocompleteTriggerProps): React.JSX.Element;
28
+ export declare namespace AutocompleteTrigger {
29
+ var displayName: string;
30
+ }
28
31
  export declare function AutocompleteValue({ ref, className, value: valueProp, onValueChange, onBlur, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>): React.JSX.Element;
32
+ export declare namespace AutocompleteValue {
33
+ var displayName: string;
34
+ }
29
35
  export type AutocompleteMultipleValueProps = React.ComponentProps<typeof CommandPrimitive.Input> & {
30
36
  /** Accessible label for each chip's remove button, prefixed to its value. */
31
37
  clearLabel?: string;
32
38
  };
33
39
  export declare function AutocompleteMultipleValue({ ref, className, clearLabel, ...props }: AutocompleteMultipleValueProps): React.JSX.Element;
40
+ export declare namespace AutocompleteMultipleValue {
41
+ var displayName: string;
42
+ }
34
43
  export declare function AutocompleteEmpty({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>): React.JSX.Element | null;
44
+ export declare namespace AutocompleteEmpty {
45
+ var displayName: string;
46
+ }
35
47
  export declare function AutocompleteLoading({ className, ref, ...props }: React.ComponentProps<typeof CommandPrimitive.Loading>): React.JSX.Element;
48
+ export declare namespace AutocompleteLoading {
49
+ var displayName: string;
50
+ }
36
51
  export declare const SIDE_OPTIONS: string[];
37
52
  type Side = (typeof SIDE_OPTIONS)[number];
38
53
  export type AutocompleteContentProps = React.ComponentProps<typeof CommandPrimitive.List> & {
@@ -41,7 +56,13 @@ export type AutocompleteContentProps = React.ComponentProps<typeof CommandPrimit
41
56
  onPointerDownOutside?: (event: MouseEvent | TouchEvent) => void;
42
57
  };
43
58
  export declare function AutocompleteContent({ className, position, side, ref, children, onMouseEnter, onMouseLeave, onPointerDownOutside, ...props }: AutocompleteContentProps): React.JSX.Element;
59
+ export declare namespace AutocompleteContent {
60
+ var displayName: string;
61
+ }
44
62
  export declare function AutocompleteGroup({ className, ...props }: React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>): React.JSX.Element;
63
+ export declare namespace AutocompleteGroup {
64
+ var displayName: string;
65
+ }
45
66
  export type AutocompleteItemProps = React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item> & {
46
67
  /** Text this option reads as wherever it is rendered outside the list (the
47
68
  * input, a chip and its remove button). Required only when the children are
@@ -78,5 +99,8 @@ export type AutocompleteProps = Omit<React.ComponentProps<typeof CommandPrimitiv
78
99
  multiple?: boolean;
79
100
  };
80
101
  export declare function Autocomplete({ ref, value, defaultValue, onValueChange, onClear, className, open: openProp, onOpenChange, showValue, readOnly, disabled, multiple, onKeyDown, children, ...props }: AutocompleteProps): React.JSX.Element;
102
+ export declare namespace Autocomplete {
103
+ var displayName: string;
104
+ }
81
105
  export {};
82
106
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/autocomplete/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/autocomplete/index.tsx"],"names":[],"mappings":"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"}
@@ -366,3 +366,27 @@ export function Autocomplete({ ref, value, defaultValue, onValueChange, onClear,
366
366
  onKeyDown?.(e);
367
367
  }, children: children }) }));
368
368
  }
369
+ /**
370
+ * ⛔ THE REST OF THE SET, FOR THE SAME REASON AS `AutocompleteItem` ABOVE.
371
+ *
372
+ * A function component's `name` is whatever the bundler left it — one letter in
373
+ * a production build — so any lookup written against `child.type` needs an
374
+ * explicit string to compare. `AutocompleteItem` is the only part the walk
375
+ * reads TODAY, and it is the part that shipped an empty option registry to
376
+ * every consumer while it was anonymous. Naming the whole set costs a line each
377
+ * and removes the next instance of that defect before it is written; it also
378
+ * makes these parts legible in a React tree, which `MultipleSelect` next door
379
+ * has always done.
380
+ *
381
+ * `__tests__`-style enumeration lives in `autocomplete.test.tsx`: it reads the
382
+ * module's exports rather than a list, so a new part added without a name fails
383
+ * without anyone remembering to extend anything.
384
+ */
385
+ Autocomplete.displayName = 'Autocomplete';
386
+ AutocompleteTrigger.displayName = 'AutocompleteTrigger';
387
+ AutocompleteValue.displayName = 'AutocompleteValue';
388
+ AutocompleteMultipleValue.displayName = 'AutocompleteMultipleValue';
389
+ AutocompleteContent.displayName = 'AutocompleteContent';
390
+ AutocompleteGroup.displayName = 'AutocompleteGroup';
391
+ AutocompleteEmpty.displayName = 'AutocompleteEmpty';
392
+ AutocompleteLoading.displayName = 'AutocompleteLoading';
@@ -1,12 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
- /**
4
- * `credit` is the accounting reading of a credit amount, NOT an alias of
5
- * `destructive` (an error/alarm). The credit role is a tint-and-ink pair:
6
- * `--credit-foreground` mirrors `--credit` by contract, so the red carries the
7
- * role as text over a tinted surface. Do not "fix" this into a solid
8
- * `bg-credit` fill — that renders red-on-red and is invisible.
9
- */
10
3
  /**
11
4
  * `gap-1` is load-bearing, not decoration: a badge holding a label AND an
12
5
  * element child (`ID<code>ctx-123</code>`) has nothing between them otherwise —
@@ -14,6 +7,17 @@ import { type VariantProps } from 'class-variance-authority';
14
7
  * anonymous flex item — so the screen reads `IDctx-123`. Consumers were pasting
15
8
  * `className="gap-1"` per call site; `cn` runs tailwind-merge, so an explicit
16
9
  * `gap-2` still wins. Single-child badges are unaffected: gap needs two items.
10
+ *
11
+ * `whitespace-nowrap` keeps the pill a pill. `rounded-full` draws the ends as
12
+ * semicircles sized to ONE line box, so a label that wraps stretches those caps
13
+ * over two lines and the shape reads as a rounded blob, not a token. It bit a
14
+ * consumer table whose column was sized to its content: `min-content` on
15
+ * wrappable text resolves to the WIDEST WORD, so a three-word group name landed
16
+ * at 112px wide and 46px tall against the 26px of a single-line badge. Nowrap
17
+ * also pins `min-content` to the full label, which is what lets a caller cap the
18
+ * box with `max-w-*` plus a truncating child and get an ellipsis. A caller that
19
+ * genuinely wants a wrapping badge passes `whitespace-normal`; tailwind-merge
20
+ * lets it win.
17
21
  */
18
22
  declare const badgeVariants: (props?: ({
19
23
  variant?: "default" | "secondary" | "outline" | "destructive" | "alert" | "success" | "active" | "inactive" | "credit" | "error" | "info" | "purple" | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/badge/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE;;;;;;GAMG;AACH;;;;;;;GAOG;AACH,QAAA,MAAM,aAAa;;;8EA6ClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GACnD,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE5D,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,qBAsBzE;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/badge/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,aAAa;;;8EAqDlB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GACnD,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE5D,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,qBAsBzE;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
@@ -2,13 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cva } from 'class-variance-authority';
3
3
  import { cn } from '../../../lib/utils.js';
4
4
  import { Slot } from '@radix-ui/react-slot';
5
- /**
6
- * `credit` is the accounting reading of a credit amount, NOT an alias of
7
- * `destructive` (an error/alarm). The credit role is a tint-and-ink pair:
8
- * `--credit-foreground` mirrors `--credit` by contract, so the red carries the
9
- * role as text over a tinted surface. Do not "fix" this into a solid
10
- * `bg-credit` fill — that renders red-on-red and is invisible.
11
- */
12
5
  /**
13
6
  * `gap-1` is load-bearing, not decoration: a badge holding a label AND an
14
7
  * element child (`ID<code>ctx-123</code>`) has nothing between them otherwise —
@@ -16,8 +9,19 @@ import { Slot } from '@radix-ui/react-slot';
16
9
  * anonymous flex item — so the screen reads `IDctx-123`. Consumers were pasting
17
10
  * `className="gap-1"` per call site; `cn` runs tailwind-merge, so an explicit
18
11
  * `gap-2` still wins. Single-child badges are unaffected: gap needs two items.
12
+ *
13
+ * `whitespace-nowrap` keeps the pill a pill. `rounded-full` draws the ends as
14
+ * semicircles sized to ONE line box, so a label that wraps stretches those caps
15
+ * over two lines and the shape reads as a rounded blob, not a token. It bit a
16
+ * consumer table whose column was sized to its content: `min-content` on
17
+ * wrappable text resolves to the WIDEST WORD, so a three-word group name landed
18
+ * at 112px wide and 46px tall against the 26px of a single-line badge. Nowrap
19
+ * also pins `min-content` to the full label, which is what lets a caller cap the
20
+ * box with `max-w-*` plus a truncating child and get an ellipsis. A caller that
21
+ * genuinely wants a wrapping badge passes `whitespace-normal`; tailwind-merge
22
+ * lets it win.
19
23
  */
20
- const badgeVariants = cva('inline-flex items-center gap-1 rounded-full border border-border px-2.5 py-0.5 text-sm font-medium transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2', {
24
+ const badgeVariants = cva('inline-flex items-center gap-1 whitespace-nowrap rounded-full border border-border px-2.5 py-0.5 text-sm font-medium transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2', {
21
25
  variants: {
22
26
  variant: {
23
27
  default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',
@@ -25,6 +29,14 @@ const badgeVariants = cva('inline-flex items-center gap-1 rounded-full border bo
25
29
  inactive: 'bg-muted text-foreground border-muted-foreground/40 py-[2px] px-3',
26
30
  secondary: 'border-transparent bg-muted-foreground text-white dark:text-black',
27
31
  destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
32
+ /**
33
+ * The accounting reading of a credit amount, NOT an alias of
34
+ * `destructive` (an error/alarm). The credit role is a tint-and-ink
35
+ * pair: `--credit-foreground` mirrors `--credit` by contract, so the
36
+ * red carries the role as text over a tinted surface. Do not "fix"
37
+ * this into a solid `bg-credit` fill — that renders red-on-red and is
38
+ * invisible.
39
+ */
28
40
  credit: 'border-credit/30 bg-credit/10 text-credit-foreground px-[10px] py-1',
29
41
  error: 'border-system-error-border bg-system-error-surface text-system-error-text px-[10px] py-1',
30
42
  success: 'border-system-success-border bg-system-success-surface text-system-success-text px-[10px] py-1',
@@ -1,13 +1,13 @@
1
1
  import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "plain" | "hoverLink" | "default" | "primary" | "secondary" | "tertiary" | "outline" | "link" | "destructive" | null | undefined;
4
+ variant?: "link" | "plain" | "hoverLink" | "default" | "primary" | "secondary" | "tertiary" | "outline" | "destructive" | null | undefined;
5
5
  fullWidth?: boolean | null | undefined;
6
- size?: "default" | "small" | null | undefined;
6
+ size?: "small" | "default" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  declare const iconVariants: (props?: ({
9
9
  position?: "end" | "start" | "far-end" | null | undefined;
10
- size?: "default" | "small" | null | undefined;
10
+ size?: "small" | "default" | null | undefined;
11
11
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
12
  export type ButtonProps = React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
13
13
  asChild?: boolean;
@@ -39,6 +39,30 @@ export type CopyFieldProps = {
39
39
  * @defaultValue 'Value to copy'
40
40
  */
41
41
  valueLabel?: string;
42
+ /**
43
+ * Accessible name for the copy button. Override for localization. Defaults to
44
+ * English, derived from `label` when there is one.
45
+ * @defaultValue `Copy ${label}`, or 'Copy value' without a label
46
+ */
47
+ copyLabel?: string;
48
+ /**
49
+ * Toast text on the fallback path, when the clipboard API is unavailable or
50
+ * refuses the write and the value is selected for a manual Ctrl/Cmd+C
51
+ * instead. Override for localization. Defaults to English.
52
+ * @defaultValue 'Copy not available — text selected, press Ctrl/Cmd+C'
53
+ */
54
+ fallbackLabel?: string;
55
+ /**
56
+ * Renders the value in the monospace face. For identifiers, tokens and
57
+ * recovery codes, where character shapes must be told apart.
58
+ * @defaultValue false
59
+ */
60
+ mono?: boolean;
61
+ /**
62
+ * One-line hint rendered under the field and announced with the input via
63
+ * `aria-describedby`. Omit for no element and no attribute.
64
+ */
65
+ description?: React.ReactNode;
42
66
  /**
43
67
  * Milliseconds after a *successful* copy before the clipboard is wiped, for
44
68
  * sensitive values that shouldn't linger there (TOTP secrets, recovery
@@ -52,5 +76,5 @@ export type CopyFieldProps = {
52
76
  */
53
77
  clearClipboardAfter?: number;
54
78
  };
55
- export declare function CopyField({ value, label, masked, onCopyLabel, revealLabel, hideLabel, valueLabel, clearClipboardAfter }: CopyFieldProps): React.JSX.Element;
79
+ export declare function CopyField({ value, label, masked, onCopyLabel, revealLabel, hideLabel, valueLabel, copyLabel, fallbackLabel, mono, description, clearClipboardAfter }: CopyFieldProps): React.JSX.Element;
56
80
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/copy-field/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAmCD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,MAAc,EACd,WAAW,EACX,WAA0B,EAC1B,SAAwB,EACxB,UAA4B,EAC5B,mBAAmB,EACpB,EAAE,cAAc,qBA6JhB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/copy-field/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAmCD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,MAAc,EACd,WAAW,EACX,WAA0B,EAC1B,SAAwB,EACxB,UAA4B,EAC5B,SAAS,EACT,aAAa,EACb,IAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,EAAE,cAAc,qBAwLhB"}