@camunda/design-system 0.63.0 → 0.65.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 (148) hide show
  1. package/README.md +41 -0
  2. package/dist/carbon-compat/accordion-skeleton.js +1 -1
  3. package/dist/carbon-compat/accordion-skeleton.js.map +1 -1
  4. package/dist/carbon-compat/accordion.js +1 -1
  5. package/dist/carbon-compat/accordion.js.map +1 -1
  6. package/dist/carbon-compat/c3-data-table.js +2 -2
  7. package/dist/carbon-compat/c3-data-table.js.map +1 -1
  8. package/dist/carbon-compat/checkbox.d.ts +2 -2
  9. package/dist/carbon-compat/checkbox.d.ts.map +1 -1
  10. package/dist/carbon-compat/checkbox.js +24 -12
  11. package/dist/carbon-compat/checkbox.js.map +1 -1
  12. package/dist/carbon-compat/combo-box.d.ts.map +1 -1
  13. package/dist/carbon-compat/combo-box.js +8 -7
  14. package/dist/carbon-compat/combo-box.js.map +1 -1
  15. package/dist/carbon-compat/date-picker.d.ts +2 -0
  16. package/dist/carbon-compat/date-picker.d.ts.map +1 -1
  17. package/dist/carbon-compat/date-picker.js +36 -8
  18. package/dist/carbon-compat/date-picker.js.map +1 -1
  19. package/dist/carbon-compat/dropdown.d.ts.map +1 -1
  20. package/dist/carbon-compat/dropdown.js +9 -8
  21. package/dist/carbon-compat/dropdown.js.map +1 -1
  22. package/dist/carbon-compat/field-messages.d.ts +37 -0
  23. package/dist/carbon-compat/field-messages.d.ts.map +1 -0
  24. package/dist/carbon-compat/field-messages.js +47 -0
  25. package/dist/carbon-compat/field-messages.js.map +1 -0
  26. package/dist/carbon-compat/filterable-multi-select.d.ts +3 -1
  27. package/dist/carbon-compat/filterable-multi-select.d.ts.map +1 -1
  28. package/dist/carbon-compat/filterable-multi-select.js +11 -9
  29. package/dist/carbon-compat/filterable-multi-select.js.map +1 -1
  30. package/dist/carbon-compat/form-group.js +1 -1
  31. package/dist/carbon-compat/form-group.js.map +1 -1
  32. package/dist/carbon-compat/link.js +1 -1
  33. package/dist/carbon-compat/link.js.map +1 -1
  34. package/dist/carbon-compat/modal.d.ts.map +1 -1
  35. package/dist/carbon-compat/modal.js +22 -4
  36. package/dist/carbon-compat/modal.js.map +1 -1
  37. package/dist/carbon-compat/multi-select.d.ts +3 -1
  38. package/dist/carbon-compat/multi-select.d.ts.map +1 -1
  39. package/dist/carbon-compat/multi-select.js +11 -9
  40. package/dist/carbon-compat/multi-select.js.map +1 -1
  41. package/dist/carbon-compat/radio-button.d.ts.map +1 -1
  42. package/dist/carbon-compat/radio-button.js +11 -11
  43. package/dist/carbon-compat/radio-button.js.map +1 -1
  44. package/dist/carbon-compat/radio-tile.js +1 -1
  45. package/dist/carbon-compat/radio-tile.js.map +1 -1
  46. package/dist/carbon-compat/select.d.ts.map +1 -1
  47. package/dist/carbon-compat/select.js +8 -7
  48. package/dist/carbon-compat/select.js.map +1 -1
  49. package/dist/carbon-compat/stories/field-message-expect.d.ts +7 -0
  50. package/dist/carbon-compat/stories/field-message-expect.d.ts.map +1 -0
  51. package/dist/carbon-compat/stories/field-message-expect.js +20 -0
  52. package/dist/carbon-compat/stories/field-message-expect.js.map +1 -0
  53. package/dist/carbon-compat/table-batch-actions.d.ts.map +1 -1
  54. package/dist/carbon-compat/table-batch-actions.js +2 -2
  55. package/dist/carbon-compat/table-batch-actions.js.map +1 -1
  56. package/dist/carbon-compat/text-area.d.ts.map +1 -1
  57. package/dist/carbon-compat/text-area.js +8 -21
  58. package/dist/carbon-compat/text-area.js.map +1 -1
  59. package/dist/carbon-compat/text-input.d.ts.map +1 -1
  60. package/dist/carbon-compat/text-input.js +6 -24
  61. package/dist/carbon-compat/text-input.js.map +1 -1
  62. package/dist/carbon-compat/tile.js +2 -2
  63. package/dist/carbon-compat/tile.js.map +1 -1
  64. package/dist/carbon-compat/time-picker.d.ts.map +1 -1
  65. package/dist/carbon-compat/time-picker.js +8 -15
  66. package/dist/carbon-compat/time-picker.js.map +1 -1
  67. package/dist/src/components/ui/alert-dialog.d.ts +8 -1
  68. package/dist/src/components/ui/alert-dialog.d.ts.map +1 -1
  69. package/dist/src/components/ui/alert-dialog.js +21 -2
  70. package/dist/src/components/ui/alert-dialog.js.map +1 -1
  71. package/dist/src/components/ui/checkbox.d.ts +11 -1
  72. package/dist/src/components/ui/checkbox.d.ts.map +1 -1
  73. package/dist/src/components/ui/checkbox.js +13 -2
  74. package/dist/src/components/ui/checkbox.js.map +1 -1
  75. package/dist/src/components/ui/code-block.d.ts +2 -0
  76. package/dist/src/components/ui/code-block.d.ts.map +1 -1
  77. package/dist/src/components/ui/code-block.js +27 -12
  78. package/dist/src/components/ui/code-block.js.map +1 -1
  79. package/dist/src/components/ui/combobox.d.ts.map +1 -1
  80. package/dist/src/components/ui/combobox.js +5 -3
  81. package/dist/src/components/ui/combobox.js.map +1 -1
  82. package/dist/src/components/ui/command.d.ts +9 -1
  83. package/dist/src/components/ui/command.d.ts.map +1 -1
  84. package/dist/src/components/ui/command.js +9 -2
  85. package/dist/src/components/ui/command.js.map +1 -1
  86. package/dist/src/components/ui/data-table.d.ts +34 -2
  87. package/dist/src/components/ui/data-table.d.ts.map +1 -1
  88. package/dist/src/components/ui/data-table.js +28 -11
  89. package/dist/src/components/ui/data-table.js.map +1 -1
  90. package/dist/src/components/ui/date-picker.d.ts +3 -0
  91. package/dist/src/components/ui/date-picker.d.ts.map +1 -1
  92. package/dist/src/components/ui/date-picker.js +2 -2
  93. package/dist/src/components/ui/date-picker.js.map +1 -1
  94. package/dist/src/components/ui/date-range-picker.d.ts +3 -0
  95. package/dist/src/components/ui/date-range-picker.d.ts.map +1 -1
  96. package/dist/src/components/ui/date-range-picker.js +2 -2
  97. package/dist/src/components/ui/date-range-picker.js.map +1 -1
  98. package/dist/src/components/ui/dropdown.js +4 -4
  99. package/dist/src/components/ui/dropdown.js.map +1 -1
  100. package/dist/src/components/ui/empty-state.d.ts +1 -0
  101. package/dist/src/components/ui/empty-state.d.ts.map +1 -1
  102. package/dist/src/components/ui/empty-state.js +7 -2
  103. package/dist/src/components/ui/empty-state.js.map +1 -1
  104. package/dist/src/components/ui/file-uploader.d.ts.map +1 -1
  105. package/dist/src/components/ui/file-uploader.js +10 -10
  106. package/dist/src/components/ui/file-uploader.js.map +1 -1
  107. package/dist/src/components/ui/input.d.ts.map +1 -1
  108. package/dist/src/components/ui/input.js +7 -4
  109. package/dist/src/components/ui/input.js.map +1 -1
  110. package/dist/src/components/ui/multi-select.d.ts +4 -1
  111. package/dist/src/components/ui/multi-select.d.ts.map +1 -1
  112. package/dist/src/components/ui/multi-select.js +6 -6
  113. package/dist/src/components/ui/multi-select.js.map +1 -1
  114. package/dist/src/components/ui/page-layout.js +1 -1
  115. package/dist/src/components/ui/page-layout.js.map +1 -1
  116. package/dist/src/components/ui/select.d.ts.map +1 -1
  117. package/dist/src/components/ui/select.js +12 -9
  118. package/dist/src/components/ui/select.js.map +1 -1
  119. package/dist/src/components/ui/split-button.js +1 -1
  120. package/dist/src/components/ui/split-button.js.map +1 -1
  121. package/dist/src/components/ui/switch.js +1 -1
  122. package/dist/src/components/ui/switch.js.map +1 -1
  123. package/dist/src/components/ui/textarea.d.ts.map +1 -1
  124. package/dist/src/components/ui/textarea.js +8 -5
  125. package/dist/src/components/ui/textarea.js.map +1 -1
  126. package/dist/src/examples/shared/DashboardSection.d.ts.map +1 -1
  127. package/dist/src/examples/shared/DashboardSection.js +1 -1
  128. package/dist/src/examples/shared/DashboardSection.js.map +1 -1
  129. package/dist/styles.css +47 -21
  130. package/eslint-plugin/index.d.ts +18 -0
  131. package/eslint-plugin/index.js +102 -0
  132. package/eslint-rules/button-has-type.js +56 -0
  133. package/eslint-rules/class-literal.js +20 -0
  134. package/eslint-rules/ds-imports.js +131 -0
  135. package/eslint-rules/icon-button-needs-label.js +110 -0
  136. package/eslint-rules/index.js +31 -0
  137. package/eslint-rules/navigation.js +295 -0
  138. package/eslint-rules/no-adhoc-typography.js +77 -0
  139. package/eslint-rules/no-deep-import.js +59 -0
  140. package/eslint-rules/no-direct-lucide-import.js +67 -0
  141. package/eslint-rules/no-hardcoded-i18n-prop.js +78 -0
  142. package/eslint-rules/no-hardcoded-user-facing-string.js +82 -0
  143. package/eslint-rules/no-primitive-tailwind-colors.js +36 -0
  144. package/eslint-rules/no-raw-color-in-classname.js +34 -0
  145. package/eslint-rules/prefer-link-props.js +107 -0
  146. package/eslint-rules/require-browsable-link.js +236 -0
  147. package/eslint-rules/require-shared-sidebar-provider.js +165 -0
  148. package/package.json +18 -3
@@ -0,0 +1,20 @@
1
+ import { expect } from "storybook/test";
2
+ /**
3
+ * Asserts that `message` is wired to `control` the way carbon-compat's
4
+ * `fieldMessages` promises: a real, non-`undefined` id listed in
5
+ * `aria-describedby`, plus `aria-invalid`/`aria-errormessage` only for errors.
6
+ */
7
+ export async function expectMessageWiring(control, message, kind) {
8
+ await expect(message.id).toBeTruthy();
9
+ await expect(message.id).not.toContain("undefined");
10
+ await expect((control.getAttribute("aria-describedby") ?? "").split(" ")).toContain(message.id);
11
+ if (kind === "error") {
12
+ await expect(control).toHaveAttribute("aria-invalid", "true");
13
+ await expect(control).toHaveAttribute("aria-errormessage", message.id);
14
+ }
15
+ else {
16
+ await expect(control).not.toHaveAttribute("aria-invalid");
17
+ await expect(control).not.toHaveAttribute("aria-errormessage");
18
+ }
19
+ }
20
+ //# sourceMappingURL=field-message-expect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-message-expect.js","sourceRoot":"","sources":["../../../carbon-compat/stories/field-message-expect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAoB,EACpB,OAAoB,EACpB,IAAiC;IAEjC,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACtC,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,MAAM,CACV,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAC5D,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC1D,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-batch-actions.d.ts","sourceRoot":"","sources":["../../carbon-compat/table-batch-actions.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACtD,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oMAAoM;IACpM,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mIAAmI;IACnI,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,WAAW,GACZ,EAAE,sBAAsB,4BAgCxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IAC1F,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,SAAS,EACT,UAAU,EAAE,WAAW,EACvB,eAAe,EAAE,gBAAgB,EACjC,GAAG,IAAI,EACR,EAAE,qBAAqB,qBAcvB"}
1
+ {"version":3,"file":"table-batch-actions.d.ts","sourceRoot":"","sources":["../../carbon-compat/table-batch-actions.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACtD,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oMAAoM;IACpM,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mIAAmI;IACnI,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,WAAW,GACZ,EAAE,sBAAsB,4BAgCxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IAC1F,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,SAAS,EACT,UAAU,EAAE,WAAW,EACvB,eAAe,EAAE,gBAAgB,EACjC,GAAG,IAAI,EACR,EAAE,qBAAqB,qBAWvB"}
@@ -13,12 +13,12 @@ export function TableBatchActions({ children, className, shouldShowBatchActions,
13
13
  const { t } = useC4Dictionary();
14
14
  if (!shouldShowBatchActions)
15
15
  return null;
16
- return (_jsxs("div", { className: cn("bg-primary-action-default text-primary-action-foreground mb-2 flex items-center gap-2 rounded-md px-3 py-2 text-sm", className), children: [totalSelected !== undefined && (_jsx("span", { className: "mr-2 font-medium", children: selectedCountLabel ??
16
+ return (_jsxs("div", { className: cn("mb-2 flex items-center gap-3 rounded-md border border-border bg-neutral-background-subtle px-4 py-2 text-sm text-neutral-foreground-strong", className), children: [totalSelected !== undefined && (_jsx("span", { className: "mr-2 font-medium", children: selectedCountLabel ??
17
17
  t("carbonCompat.tableBatchActions.selectedCount", {
18
18
  count: totalSelected,
19
19
  }) })), children, onCancel && (_jsx(Button, { variant: "ghost", size: "sm", className: "ml-auto", onClick: onCancel, children: cancelLabel ?? t("carbonCompat.tableBatchActions.cancel") }))] }));
20
20
  }
21
21
  export function TableBatchAction({ children, className, renderIcon: _renderIcon, iconDescription: _iconDescription, ...rest }) {
22
- return (_jsx(Button, { variant: "ghost", size: "sm", className: cn("text-primary-action-foreground hover:bg-primary-action-hover hover:text-primary-action-foreground", className), ...rest, children: children }));
22
+ return (_jsx(Button, { variant: "secondary", size: "sm", className: className, ...rest, children: children }));
23
23
  }
24
24
  //# sourceMappingURL=table-batch-actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-batch-actions.js","sourceRoot":"","sources":["../../carbon-compat/table-batch-actions.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAgBtC,MAAM,UAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,WAAW,GACY;IACvB,MAAM,EAAE,CAAC,EAAE,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,sBAAsB;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,oHAAoH,EACpH,SAAS,CACV,aAEA,aAAa,KAAK,SAAS,IAAI,CAC9B,eAAM,SAAS,EAAC,kBAAkB,YAC/B,kBAAkB;oBACjB,CAAC,CAAC,8CAA8C,EAAE;wBAChD,KAAK,EAAE,aAAa;qBACrB,CAAC,GACC,CACR,EACA,QAAQ,EACR,QAAQ,IAAI,CACX,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,QAAQ,YAEhB,WAAW,IAAI,CAAC,CAAC,uCAAuC,CAAC,GACnD,CACV,IACG,CACP,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,EACR,SAAS,EACT,UAAU,EAAE,WAAW,EACvB,eAAe,EAAE,gBAAgB,EACjC,GAAG,IAAI,EACe;IACtB,OAAO,CACL,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,EAAE,CACX,mGAAmG,EACnG,SAAS,CACV,KACI,IAAsD,YAE1D,QAAQ,GACF,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"table-batch-actions.js","sourceRoot":"","sources":["../../carbon-compat/table-batch-actions.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAgBtC,MAAM,UAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,WAAW,GACY;IACvB,MAAM,EAAE,CAAC,EAAE,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,sBAAsB;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,4IAA4I,EAC5I,SAAS,CACV,aAEA,aAAa,KAAK,SAAS,IAAI,CAC9B,eAAM,SAAS,EAAC,kBAAkB,YAC/B,kBAAkB;oBACjB,CAAC,CAAC,8CAA8C,EAAE;wBAChD,KAAK,EAAE,aAAa;qBACrB,CAAC,GACC,CACR,EACA,QAAQ,EACR,QAAQ,IAAI,CACX,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,QAAQ,YAEhB,WAAW,IAAI,CAAC,CAAC,uCAAuC,CAAC,GACnD,CACV,IACG,CACP,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,EACR,SAAS,EACT,UAAU,EAAE,WAAW,EACvB,eAAe,EAAE,gBAAgB,EACjC,GAAG,IAAI,EACe;IACtB,OAAO,CACL,KAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,SAAS,KACf,IAAsD,YAE1D,QAAQ,GACF,CACV,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"text-area.d.ts","sourceRoot":"","sources":["../../carbon-compat/text-area.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAEhD,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,qBAmKrC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"text-area.d.ts","sourceRoot":"","sources":["../../carbon-compat/text-area.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAEhD,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,qBA+IrC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -3,26 +3,16 @@ import * as React from "react";
3
3
  import { CharacterCount } from "../src/components/ui/character-count.js";
4
4
  import { Textarea } from "../src/components/ui/textarea.js";
5
5
  import { cn, warnDroppedProps } from "../src/lib/utils.js";
6
+ import { fieldMessages } from "./field-messages.js";
6
7
  function TextArea(props) {
7
8
  const { id, labelText, helperText, invalid, invalidText, warn, warnText, enableCounter, maxCount, counterMode, hideLabel, light, className, disabled, placeholder, value, defaultValue, onChange, onBlur, onFocus, rows, cols, readOnly, "aria-describedby": ariaDescribedBy, "aria-errormessage": ariaErrorMessage, ...rest } = props;
8
9
  warnDroppedProps("TextArea", {
9
- warn,
10
- warnText,
11
10
  hideLabel,
12
11
  light,
13
12
  });
14
13
  const generatedId = React.useId();
15
14
  const inputId = id ?? generatedId;
16
15
  const showCounter = enableCounter && maxCount !== undefined;
17
- const showInvalidText = invalid && invalidText !== undefined;
18
- const showHelperText = !invalid && helperText !== undefined;
19
- const errorId = showInvalidText ? `${inputId}-error-msg` : undefined;
20
- const helperId = showHelperText ? `${inputId}-helper-text` : undefined;
21
- // A consumer-supplied `aria-errormessage` wins outright rather than being
22
- // merged: axe's own aria-errormessage rule rejects more than one id token
23
- // there (unlike aria-describedby, which supports multiple).
24
- const errorMessageId = ariaErrorMessage ?? errorId;
25
- const message = showInvalidText ? (_jsx("span", { id: errorId, className: "text-xs text-danger-foreground-subtle", children: invalidText })) : showHelperText ? (_jsx("span", { id: helperId, className: "text-xs text-neutral-foreground-subtle", children: helperText })) : null;
26
16
  const isControlled = value !== undefined;
27
17
  const [uncontrolledValue, setUncontrolledValue] = React.useState(() => String(defaultValue ?? ""));
28
18
  const liveValue = isControlled ? String(value) : uncontrolledValue;
@@ -31,20 +21,17 @@ function TextArea(props) {
31
21
  setUncontrolledValue(event.target.value);
32
22
  onChange?.(event);
33
23
  };
34
- const wrapped = labelText !== undefined || showCounter || message !== null;
35
24
  const counterId = showCounter ? `${inputId}-counter` : undefined;
36
25
  // Carbon auto-caps character-mode counters via native `maxLength`; word mode
37
26
  // has no native equivalent and is left uncapped, matching Carbon's own behavior.
38
27
  const nativeMaxLength = showCounter && counterMode !== "word" ? maxCount : undefined;
39
- // Mirror the error/helper id into aria-describedby alongside aria-errormessage:
40
- // most screen readers don't support aria-errormessage, so the id is
41
- // duplicated there as the WAI-ARIA APG-recommended fallback technique
42
- // (also required for axe's aria-errormessage check to pass). errorId and
43
- // helperId are already mutually exclusive by construction (gated on
44
- // invalid/!invalid above); counter is independent of both.
45
- const describedBy = [errorId, helperId, counterId, ariaDescribedBy].filter(Boolean).join(" ") ||
46
- undefined;
47
- const textarea = (_jsx(Textarea, { id: inputId, className: wrapped ? undefined : className, disabled: disabled, placeholder: placeholder, value: value, defaultValue: defaultValue, onChange: handleChange, onBlur: onBlur, onFocus: onFocus, rows: rows, cols: cols, readOnly: readOnly, maxLength: nativeMaxLength, "aria-invalid": invalid || undefined, "aria-errormessage": errorMessageId, "aria-describedby": describedBy, ...rest }));
28
+ // The counter is described alongside the message, ahead of consumer ids.
29
+ const { ariaProps, message } = fieldMessages(inputId, { invalid, invalidText, warn, warnText, helperText }, {
30
+ "aria-describedby": [counterId, ariaDescribedBy].filter(Boolean).join(" ") || undefined,
31
+ "aria-errormessage": ariaErrorMessage,
32
+ });
33
+ const wrapped = labelText !== undefined || showCounter || message !== null;
34
+ const textarea = (_jsx(Textarea, { id: inputId, className: wrapped ? undefined : className, disabled: disabled, placeholder: placeholder, value: value, defaultValue: defaultValue, onChange: handleChange, onBlur: onBlur, onFocus: onFocus, rows: rows, cols: cols, readOnly: readOnly, maxLength: nativeMaxLength, ...ariaProps, ...rest }));
48
35
  const counter = showCounter ? (_jsx(CharacterCount, { id: counterId, value: liveValue, max: maxCount, mode: counterMode === "word" ? "word" : "character", className: "self-end" })) : null;
49
36
  if (labelText !== undefined) {
50
37
  return (_jsxs("div", { className: cn("flex flex-col gap-2", className), children: [_jsxs("label", { htmlFor: inputId, className: "flex flex-col gap-2 text-sm", children: [_jsx("span", { children: labelText }), textarea] }), message, counter] }));
@@ -1 +1 @@
1
- {"version":3,"file":"text-area.js","sourceRoot":"","sources":["../../carbon-compat/text-area.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text-area.js","sourceRoot":"","sources":["../../carbon-compat/text-area.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"text-input.d.ts","sourceRoot":"","sources":["../../carbon-compat/text-input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAElD,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,qBAuGvC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"text-input.d.ts","sourceRoot":"","sources":["../../carbon-compat/text-input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAElD,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,qBA2EvC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { Input } from "../src/components/ui/input.js";
4
4
  import { cn, warnDroppedProps } from "../src/lib/utils.js";
5
+ import { fieldMessages } from "./field-messages.js";
5
6
  function TextInput(props) {
6
7
  const { className, decorator, defaultValue, disabled, enableCounter, helperText, hideLabel, id, inline, invalid, invalidText, labelText, light, maxCount, onChange, onClick, placeholder, readOnly, size, slug, type, value, warn, warnText, "aria-describedby": ariaDescribedBy, "aria-errormessage": ariaErrorMessage, ...rest } = props;
7
8
  warnDroppedProps("TextInput", {
@@ -12,33 +13,14 @@ function TextInput(props) {
12
13
  maxCount,
13
14
  size,
14
15
  slug,
15
- warn,
16
- warnText,
17
16
  });
18
17
  const generatedId = React.useId();
19
18
  const resolvedId = id ?? generatedId;
20
- const showInvalidText = invalid && invalidText !== undefined;
21
- // Matches Carbon's `hasHelperText` (@carbon/react/lib/internal/hasHelperText.js):
22
- // an empty string is treated the same as `undefined`/`null` — no helper-text
23
- // row is rendered. `labelText` intentionally keeps the looser `!== undefined`
24
- // check below since Carbon does not apply this guard to labels.
25
- const showHelperText = !invalid &&
26
- helperText !== undefined &&
27
- helperText !== null &&
28
- helperText !== "";
29
- const errorId = showInvalidText ? `${resolvedId}-error-msg` : undefined;
30
- const helperId = showHelperText ? `${resolvedId}-helper-text` : undefined;
31
- // A consumer-supplied `aria-errormessage` wins outright rather than being
32
- // merged: axe's own aria-errormessage rule rejects more than one id token
33
- // there (unlike aria-describedby, which supports multiple).
34
- const errorMessageId = ariaErrorMessage ?? errorId;
35
- // `aria-errormessage` alone is unreliable — most screen readers don't
36
- // support it. Also mirroring the id into `aria-describedby` is the
37
- // WAI-ARIA APG-recommended fallback technique (Carbon's own TimePicker
38
- // does the same). Without it axe's aria-errormessage check flags the
39
- // reference as using no supported announcement technique.
40
- const describedBy = [errorId, helperId, ariaDescribedBy].filter(Boolean).join(" ") || undefined;
41
- return (_jsxs("div", { className: cn("flex flex-col gap-1", className), children: [labelText !== undefined ? (_jsx("label", { htmlFor: resolvedId, className: cn("text-sm font-medium", hideLabel && "sr-only"), children: labelText })) : null, _jsx(Input, { id: resolvedId, type: type, value: value, defaultValue: defaultValue, disabled: disabled, readOnly: readOnly, placeholder: placeholder, onChange: onChange, onClick: onClick, "aria-invalid": invalid || undefined, "aria-errormessage": errorMessageId, "aria-describedby": describedBy, ...rest }), showInvalidText ? (_jsx("span", { id: errorId, className: "text-xs text-danger-foreground-subtle", children: invalidText })) : null, showHelperText ? (_jsx("span", { id: helperId, className: "text-xs text-neutral-foreground-subtle", children: helperText })) : null] }));
19
+ const { ariaProps, message } = fieldMessages(resolvedId, { invalid, invalidText, warn, warnText, helperText }, {
20
+ "aria-describedby": ariaDescribedBy,
21
+ "aria-errormessage": ariaErrorMessage,
22
+ });
23
+ return (_jsxs("div", { className: cn("flex flex-col gap-1", className), children: [labelText !== undefined ? (_jsx("label", { htmlFor: resolvedId, className: cn("text-sm font-medium", hideLabel && "sr-only"), children: labelText })) : null, _jsx(Input, { id: resolvedId, type: type, value: value, defaultValue: defaultValue, disabled: disabled, readOnly: readOnly, placeholder: placeholder, onChange: onChange, onClick: onClick, ...ariaProps, ...rest }), message] }));
42
24
  }
43
25
  export { TextInput };
44
26
  //# sourceMappingURL=text-input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-input.js","sourceRoot":"","sources":["../../carbon-compat/text-input.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text-input.js","sourceRoot":"","sources":["../../carbon-compat/text-input.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,SAAS,SAAS,CAAC,KAAqB;IACtC,MAAM,EACJ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,SAAS,EACT,EAAE,EACF,MAAM,EACN,OAAO,EACP,WAAW,EACX,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,kBAAkB,EAAE,eAAe,EACnC,mBAAmB,EAAE,gBAAgB,EACrC,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IACV,gBAAgB,CAAC,WAAW,EAAE;QAC5B,SAAS;QACT,aAAa;QACb,MAAM;QACN,KAAK;QACL,QAAQ;QACR,IAAI;QACJ,IAAI;KACL,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,EAAE,IAAI,WAAW,CAAC;IACrC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,aAAa,CAC1C,UAAU,EACV,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EACpD;QACE,kBAAkB,EAAE,eAAe;QACnC,mBAAmB,EAAE,gBAAgB;KACtC,CACF,CAAC;IACF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aACjD,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CACzB,gBACE,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,IAAI,SAAS,CAAC,YAE3D,SAAS,GACJ,CACT,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,KAAK,IACJ,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,KACZ,SAAS,KACR,IAA2C,GAChD,EACD,OAAO,IACJ,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -18,9 +18,9 @@ function ClickableTile({ href, disabled, onClick, onKeyDown, decorator, light, c
18
18
  }
19
19
  onKeyDown?.(e);
20
20
  };
21
- return (_jsx("a", { "data-slot": "carbon-compat-clickable-tile", href: disabled ? undefined : href, role: href ? undefined : "button", tabIndex: disabled ? -1 : 0, "aria-disabled": disabled || undefined, onClick: disabled ? undefined : onClick, onKeyDown: handleKeyDown, className: cn("block rounded-md border bg-neutral-background-subtle px-6 py-4 text-card-foreground transition-colors", disabled
21
+ return (_jsx("a", { "data-slot": "carbon-compat-clickable-tile", href: disabled ? undefined : href, role: href ? undefined : "button", tabIndex: disabled ? -1 : 0, "aria-disabled": disabled || undefined, onClick: disabled ? undefined : onClick, onKeyDown: handleKeyDown, className: cn("block rounded-md border bg-neutral-background-subtle px-6 py-4 text-neutral-foreground-strong transition-colors", disabled
22
22
  ? "cursor-not-allowed opacity-50"
23
- : "cursor-pointer hover:bg-neutral-background-strong", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", className), ...rest, children: children }));
23
+ : "cursor-pointer hover:bg-neutral-background-medium", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", className), ...rest, children: children }));
24
24
  }
25
25
  export { Tile, ClickableTile };
26
26
  //# sourceMappingURL=tile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tile.js","sourceRoot":"","sources":["../../carbon-compat/tile.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKxD,SAAS,IAAI,CAAC,KAAgB;IAC5B,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,KAAK,EACL,IAAI,EACJ,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IACV,gBAAgB,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,KAC3B,IAA0C,YAE9C,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,SAAS,EACT,KAAK,EACL,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACY;IACnB,gBAAgB,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,CAAC,CAAyC,EAAE,EAAE;QAClE,IAAI,QAAQ;YAAE,OAAO;QACrB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC,CAAmD,CAAC,CAAC;QACjE,CAAC;QACD,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,CACL,yBACY,8BAA8B,EACxC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EACjC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EACjC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBACZ,QAAQ,IAAI,SAAS,EACpC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EACvC,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,EAAE,CACX,uGAAuG,EACvG,QAAQ;YACN,CAAC,CAAC,+BAA+B;YACjC,CAAC,CAAC,mDAAmD,EACvD,yEAAyE,EACzE,SAAS,CACV,KACG,IAAI,YAEP,QAAQ,GACP,CACL,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"tile.js","sourceRoot":"","sources":["../../carbon-compat/tile.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKxD,SAAS,IAAI,CAAC,KAAgB;IAC5B,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,KAAK,EACL,IAAI,EACJ,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IACV,gBAAgB,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,KAC3B,IAA0C,YAE9C,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,SAAS,EACT,KAAK,EACL,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACY;IACnB,gBAAgB,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,CAAC,CAAyC,EAAE,EAAE;QAClE,IAAI,QAAQ;YAAE,OAAO;QACrB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC,CAAmD,CAAC,CAAC;QACjE,CAAC;QACD,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,CACL,yBACY,8BAA8B,EACxC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EACjC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EACjC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBACZ,QAAQ,IAAI,SAAS,EACpC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EACvC,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,EAAE,CACX,iHAAiH,EACjH,QAAQ;YACN,CAAC,CAAC,+BAA+B;YACjC,CAAC,CAAC,mDAAmD,EACvD,yEAAyE,EACzE,SAAS,CACV,KACG,IAAI,YAEP,QAAQ,GACP,CACL,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"time-picker.d.ts","sourceRoot":"","sources":["../../carbon-compat/time-picker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EACV,eAAe,IAAI,qBAAqB,EACxC,qBAAqB,IAAI,2BAA2B,EACrD,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,eAAe,GAAG,qBAAqB,CAAC;AACpD,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAEhE,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,qBA4FzC;AAED,iBAAS,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,qBA4BrD;AAED,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"time-picker.d.ts","sourceRoot":"","sources":["../../carbon-compat/time-picker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EACV,eAAe,IAAI,qBAAqB,EACxC,qBAAqB,IAAI,2BAA2B,EACrD,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,eAAe,GAAG,qBAAqB,CAAC;AACpD,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAEhE,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,qBAiFzC;AAED,iBAAS,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,qBA4BrD;AAED,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { Input } from "../src/components/ui/input.js";
4
4
  import { cn, warnDroppedProps } from "../src/lib/utils.js";
5
+ import { fieldMessages } from "./field-messages.js";
5
6
  function TimePicker(props) {
6
7
  const { id, value, onChange, onBlur, onClick, disabled, readOnly, placeholder, labelText, hideLabel, invalid, invalidText, warning, warningText, type = "time", className, inputClassName, pickerClassName, children, light, maxLength, pattern, size, "aria-describedby": ariaDescribedBy, "aria-errormessage": ariaErrorMessage, ...rest } = props;
7
8
  warnDroppedProps("TimePicker", {
@@ -11,27 +12,19 @@ function TimePicker(props) {
11
12
  size,
12
13
  inputClassName,
13
14
  pickerClassName,
14
- warning,
15
- warningText,
16
15
  });
17
16
  const generatedId = React.useId();
18
17
  const inputId = id ?? generatedId;
19
- const showInvalidText = invalid && invalidText !== undefined;
20
- const errorId = showInvalidText ? `${inputId}-error-msg` : undefined;
21
- // A consumer-supplied `aria-errormessage` wins outright rather than being
22
- // merged: axe's own aria-errormessage rule rejects more than one id token
23
- // there (unlike aria-describedby, which supports multiple).
24
- const errorMessageId = ariaErrorMessage ?? errorId;
25
- // Mirror the error id into aria-describedby alongside aria-errormessage:
26
- // most screen readers don't support aria-errormessage, so the id is
27
- // duplicated there as the WAI-ARIA APG-recommended fallback technique
28
- // (also required for axe's aria-errormessage check to pass).
29
- const describedBy = [errorId, ariaDescribedBy].filter(Boolean).join(" ") || undefined;
30
- return (_jsxs("div", { className: cn("flex flex-col gap-1", className), children: [labelText !== undefined ? (_jsx("label", { htmlFor: inputId, className: cn("text-sm font-medium", hideLabel && "sr-only"), children: labelText })) : null, _jsxs("div", { className: cn("flex gap-1", pickerClassName), children: [_jsx(Input, { id: inputId, type: type, value: value, disabled: disabled, readOnly: readOnly, placeholder: placeholder, onChange: onChange, onBlur: onBlur, onClick: onClick, "aria-invalid": invalid || undefined, "aria-errormessage": errorMessageId, "aria-describedby": describedBy, className: inputClassName, ...rest }), children] }), showInvalidText ? (_jsx("span", { id: errorId, className: "text-xs text-destructive", children: invalidText })) : null] }));
18
+ // Carbon's TimePicker names its warn pair `warning` / `warningText`.
19
+ const { ariaProps, message } = fieldMessages(inputId, { invalid, invalidText, warn: warning, warnText: warningText }, {
20
+ "aria-describedby": ariaDescribedBy,
21
+ "aria-errormessage": ariaErrorMessage,
22
+ });
23
+ return (_jsxs("div", { className: cn("flex flex-col gap-1", className), children: [labelText !== undefined ? (_jsx("label", { htmlFor: inputId, className: cn("text-sm font-medium", hideLabel && "sr-only"), children: labelText })) : null, _jsxs("div", { className: cn("flex gap-1", pickerClassName), children: [_jsx(Input, { id: inputId, type: type, value: value, disabled: disabled, readOnly: readOnly, placeholder: placeholder, onChange: onChange, onBlur: onBlur, onClick: onClick, ...ariaProps, className: inputClassName, ...rest }), children] }), message] }));
31
24
  }
32
25
  function TimePickerSelect(props) {
33
26
  const { id, value, defaultValue, onChange, disabled, children, className, ...rest } = props;
34
- return (_jsx("select", { id: id, value: value, defaultValue: defaultValue, onChange: onChange, disabled: disabled, className: cn("h-9 rounded-lg border border-input bg-input-background px-2.5 py-1 text-sm text-foreground outline-none transition-colors focus-visible:border-primary-border-strong dark:focus-visible:border-primary-border-subtle focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50", className), ...rest, children: children }));
27
+ return (_jsx("select", { id: id, value: value, defaultValue: defaultValue, onChange: onChange, disabled: disabled, className: cn("h-9 rounded-lg border border-input bg-input-background px-2.5 py-1 text-sm text-foreground outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/20 dark:focus-visible:ring-ring/40 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50", className), ...rest, children: children }));
35
28
  }
36
29
  export { TimePicker, TimePickerSelect };
37
30
  //# sourceMappingURL=time-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"time-picker.js","sourceRoot":"","sources":["../../carbon-compat/time-picker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time-picker.js","sourceRoot":"","sources":["../../carbon-compat/time-picker.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD,SAAS,UAAU,CAAC,KAAsB;IACxC,MAAM,EACJ,EAAE,EACF,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,EACX,IAAI,GAAG,MAAM,EACb,SAAS,EACT,cAAc,EACd,eAAe,EACf,QAAQ,EACR,KAAK,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,kBAAkB,EAAE,eAAe,EACnC,mBAAmB,EAAE,gBAAgB,EACrC,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,gBAAgB,CAAC,YAAY,EAAE;QAC7B,KAAK;QACL,SAAS;QACT,OAAO;QACP,IAAI;QACJ,cAAc;QACd,eAAe;KAChB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAC;IAClC,qEAAqE;IACrE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,aAAa,CAC1C,OAAO,EACP,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAC9D;QACE,kBAAkB,EAAE,eAAe;QACnC,mBAAmB,EAAE,gBAAgB;KACtC,CACF,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aACjD,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CACzB,gBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,IAAI,SAAS,CAAC,YAE3D,SAAS,GACJ,CACT,CAAC,CAAC,CAAC,IAAI,EACR,eAAK,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,aAC/C,KAAC,KAAK,IACJ,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,KACZ,SAAS,EACb,SAAS,EAAE,cAAc,KACpB,IAA2C,GAChD,EACD,QAAQ,IACL,EACL,OAAO,IACJ,CACP,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA4B;IACpD,MAAM,EACJ,EAAE,EACF,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,iBACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAA2B,EAClC,YAAY,EAAE,YAAkC,EAChD,QAAQ,EAAE,QAAuD,EACjE,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CACX,kTAAkT,EAClT,SAAS,CACV,KACI,IAAsD,YAE1D,QAAQ,GACF,CACV,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
@@ -4,7 +4,14 @@ declare function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDial
4
4
  declare const AlertDialogTrigger: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
5
5
  declare function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>): React.JSX.Element;
6
6
  declare function AlertDialogOverlay({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>): React.JSX.Element;
7
- declare function AlertDialogContent({ className, onOpenAutoFocus, onCloseAutoFocus, initialFocusRef, restoreFocusRef, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {
7
+ declare function AlertDialogContent({ className, size, onOpenAutoFocus, onCloseAutoFocus, initialFocusRef, restoreFocusRef, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {
8
+ /**
9
+ * Width tier from the shared cross-overlay size scale (see
10
+ * docs/specs/shadcn/components-overlays.md): `sm` 400px (default), `md`
11
+ * 600px, `lg` 800px, `full` 90vw. Rendered as a `sm:max-w-*` class, so a
12
+ * consumer `className` override still wins via tailwind-merge dedup.
13
+ */
14
+ size?: "sm" | "md" | "lg" | "full";
8
15
  /**
9
16
  * Element to focus when the alert opens, instead of the default — the
10
17
  * `AlertDialogCancel` button, so a stray Enter on open can never fire the
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAc/D,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,qBAExD;AAUD,QAAA,MAAM,kBAAkB,8KAGC,CAAC;AAE1B,iBAAS,iBAAiB,CAAC,EACzB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAI1D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,qBAW3D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,GAAG;IAC7D;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACtD;;;;;OAKG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACvD,qBA+BA;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ7B;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,KAAK,CAAC,qBAUzD;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,WAAW,CAAC,qBAQ/D;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAO1D;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAO1D;AAED,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,CAAC"}
1
+ {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAc/D,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,qBAExD;AAUD,QAAA,MAAM,kBAAkB,8KAGC,CAAC;AAE1B,iBAAS,iBAAiB,CAAC,EACzB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAI1D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,qBAW3D;AAwBD,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,IAAI,EACJ,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,GAAG;IAC7D;;;;;OAKG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACnC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACtD;;;;;OAKG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACvD,qBA4BA;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ7B;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,KAAK,CAAC,qBAUzD;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,WAAW,CAAC,qBAQ/D;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAO1D;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAO1D;AAED,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
+ import { cva } from "class-variance-authority";
4
5
  import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
5
6
  import { cn } from "../../lib/utils.js";
6
7
  import { withRef } from "../../lib/with-ref.js";
@@ -21,7 +22,25 @@ function AlertDialogPortal({ ...props }) {
21
22
  function AlertDialogOverlay({ className, ...props }) {
22
23
  return (_jsx(AlertDialogPrimitive.Overlay, { "data-slot": "alert-dialog-overlay", className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0", className), ...props }));
23
24
  }
24
- function AlertDialogContent({ className, onOpenAutoFocus, onCloseAutoFocus, initialFocusRef, restoreFocusRef, ...props }) {
25
+ // Same width shape as `dialogContentVariants` (#444, #237/#267 parity): the
26
+ // mobile inset is a `w-*`, so the `size` variant's `sm:max-w-*` — or a
27
+ // consumer `className` override — is the only `max-w-*` in the DOM,
28
+ // cascade-safe regardless of stylesheet load order. Tiers follow the shared
29
+ // cross-overlay scale in docs/specs/shadcn/components-overlays.md.
30
+ const alertDialogContentVariants = cva("fixed top-1/2 left-1/2 z-50 grid w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-border shadow-xl duration-100 outline-none sm:w-full data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", {
31
+ variants: {
32
+ size: {
33
+ sm: "sm:max-w-[400px]",
34
+ md: "sm:max-w-[600px]",
35
+ lg: "sm:max-w-[800px]",
36
+ full: "sm:max-w-[90vw]",
37
+ },
38
+ },
39
+ defaultVariants: {
40
+ size: "sm",
41
+ },
42
+ });
43
+ function AlertDialogContent({ className, size, onOpenAutoFocus, onCloseAutoFocus, initialFocusRef, restoreFocusRef, ...props }) {
25
44
  const dialogFocusReturn = useDialogFocusReturn(restoreFocusRef);
26
45
  return (_jsx(AlertDialogPortal, { children: _jsxs(C4Provider, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { "data-slot": "alert-dialog-content",
27
46
  // #26413 — restore focus to the real launcher on close, even for
@@ -31,7 +50,7 @@ function AlertDialogContent({ className, onOpenAutoFocus, onCloseAutoFocus, init
31
50
  onOpenAutoFocus: composeOpenAutoFocus(composeInitialFocus(onOpenAutoFocus, initialFocusRef), dialogFocusReturn.onOpenAutoFocus),
32
51
  // #259 — make the trigger's restored focus ring visible on a mouse
33
52
  // close (see focus-visible-on-close).
34
- onCloseAutoFocus: composeCloseAutoFocus(onCloseAutoFocus, dialogFocusReturn.onCloseAutoFocus), className: cn("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-border shadow-xl duration-100 outline-none sm:max-w-sm data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", className), ...props })] }) }));
53
+ onCloseAutoFocus: composeCloseAutoFocus(onCloseAutoFocus, dialogFocusReturn.onCloseAutoFocus), className: cn(alertDialogContentVariants({ size }), className), ...props })] }) }));
35
54
  }
36
55
  function AlertDialogHeader({ className, ...props }) {
37
56
  return (_jsx("div", { "data-slot": "alert-dialog-header", className: cn("flex flex-col gap-2", className), ...props }));
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.js","sourceRoot":"","sources":["../../../../src/components/ui/alert-dialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alert-dialog.js","sourceRoot":"","sources":["../../../../src/components/ui/alert-dialog.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,15 @@
1
1
  import * as React from "react";
2
2
  import { Checkbox as CheckboxPrimitive } from "radix-ui";
3
3
  declare function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>): React.JSX.Element;
4
- export { Checkbox };
4
+ /**
5
+ * Non-interactive, decorative rendering of the Checkbox glyph. For rows that
6
+ * already own selection (e.g. a `role="option"`), where a real checkbox would
7
+ * nest one interactive element inside another. Hidden from assistive tech —
8
+ * the owning row must expose the selection state itself.
9
+ */
10
+ declare function CheckboxVisual({ checked, className, }: {
11
+ checked: boolean;
12
+ className?: string;
13
+ }): React.JSX.Element;
14
+ export { Checkbox, CheckboxVisual };
5
15
  //# sourceMappingURL=checkbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAKzD,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,qBAkBrD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAWzD,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,qBAmBrD;AAED;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,EACtB,OAAO,EACP,SAAS,GACV,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,qBAeA;AAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
@@ -3,8 +3,19 @@ import * as React from "react";
3
3
  import { Checkbox as CheckboxPrimitive } from "radix-ui";
4
4
  import { cn } from "../../lib/utils.js";
5
5
  import { CheckIcon } from "../../icons/lucide.js";
6
+ const checkboxBoxClassName = "relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input bg-input-background transition-colors data-checked:border-accent-action-default data-checked:bg-accent-action-default data-checked:text-accent-action-foreground dark:data-checked:bg-accent-action-default";
7
+ const checkboxIndicatorClassName = "grid place-content-center text-current transition-none [&>svg]:size-3.5";
6
8
  function Checkbox({ className, ...props }) {
7
- return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input bg-input-background transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-foreground-subtle aria-invalid:ring-3 aria-invalid:ring-danger-foreground-subtle/20 aria-invalid:aria-checked:border-accent-action-default dark:aria-invalid:ring-danger-foreground-subtle/40 data-checked:border-accent-action-default data-checked:bg-accent-action-default data-checked:text-accent-action-foreground dark:data-checked:bg-accent-action-default", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "grid place-content-center text-current transition-none [&>svg]:size-3.5", children: _jsx(CheckIcon, { className: "text-current" }) }) }));
9
+ return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn("peer outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-foreground-subtle aria-invalid:ring-3 aria-invalid:ring-danger-foreground-subtle/20 aria-invalid:aria-checked:border-accent-action-default dark:aria-invalid:ring-danger-foreground-subtle/40", checkboxBoxClassName, className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: checkboxIndicatorClassName, children: _jsx(CheckIcon, { className: "text-current" }) }) }));
8
10
  }
9
- export { Checkbox };
11
+ /**
12
+ * Non-interactive, decorative rendering of the Checkbox glyph. For rows that
13
+ * already own selection (e.g. a `role="option"`), where a real checkbox would
14
+ * nest one interactive element inside another. Hidden from assistive tech —
15
+ * the owning row must expose the selection state itself.
16
+ */
17
+ function CheckboxVisual({ checked, className, }) {
18
+ return (_jsx("span", { "aria-hidden": "true", "data-slot": "checkbox-visual", "data-state": checked ? "checked" : "unchecked", className: cn(checkboxBoxClassName, className), children: checked && (_jsx("span", { className: checkboxIndicatorClassName, children: _jsx(CheckIcon, { className: "text-current" }) })) }));
19
+ }
20
+ export { Checkbox, CheckboxVisual };
10
21
  //# sourceMappingURL=checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../../../src/components/ui/checkbox.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,SAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EAC4C;IACpD,OAAO,CACL,KAAC,iBAAiB,CAAC,IAAI,iBACX,UAAU,EACpB,SAAS,EAAE,EAAE,CACX,ssBAAssB,EACtsB,SAAS,CACV,KACG,KAAK,YAET,KAAC,iBAAiB,CAAC,SAAS,iBAChB,oBAAoB,EAC9B,SAAS,EAAC,yEAAyE,YAEnF,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,GACV,GACP,CAC1B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../../../src/components/ui/checkbox.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,oBAAoB,GACxB,ySAAyS,CAAC;AAE5S,MAAM,0BAA0B,GAC9B,yEAAyE,CAAC;AAE5E,SAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EAC4C;IACpD,OAAO,CACL,KAAC,iBAAiB,CAAC,IAAI,iBACX,UAAU,EACpB,SAAS,EAAE,EAAE,CACX,8ZAA8Z,EAC9Z,oBAAoB,EACpB,SAAS,CACV,KACG,KAAK,YAET,KAAC,iBAAiB,CAAC,SAAS,iBAChB,oBAAoB,EAC9B,SAAS,EAAE,0BAA0B,YAErC,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,GACV,GACP,CAC1B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,EACtB,OAAO,EACP,SAAS,GAIV;IACC,OAAO,CACL,8BACc,MAAM,eACR,iBAAiB,gBACf,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAC7C,SAAS,EAAE,EAAE,CAAC,oBAAoB,EAAE,SAAS,CAAC,YAE7C,OAAO,IAAI,CACV,eAAM,SAAS,EAAE,0BAA0B,YACzC,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,GACjC,CACR,GACI,CACR,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
@@ -18,6 +18,8 @@ type CodeBlockProps = Omit<React.ComponentProps<"pre">, "onCopy"> & VariantProps
18
18
  * no real error to report.
19
19
  */
20
20
  onCopy?: (text: string, success: boolean, error?: unknown) => void;
21
+ /** Resolves the text to copy instead of the rendered `textContent`, so a truncated preview can copy its full value (fetched lazily on click). A rejection surfaces via `onCopy("", false, error)` and shows the failed state. */
22
+ onCopyRequest?: () => string | Promise<string>;
21
23
  collapsedRows?: number;
22
24
  /** Label for the button that expands a collapsed block. Sourced from the i18n dictionary at key `"codeBlock.showMore"` when omitted. */
23
25
  showMoreLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/code-block.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,QAAA,MAAM,iBAAiB;;8EAatB,CAAC;AAUF,KAAK,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,GAC/D,YAAY,CAAC,OAAO,iBAAiB,CAAC,GAAG;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sIAAsI;IACtI,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oJAAoJ;IACpJ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oJAAoJ;IACpJ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wIAAwI;IACxI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6IAA6I;IAC7I,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AA4PJ,QAAA,MAAM,SAAS,oGAAyD,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/code-block.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,QAAA,MAAM,iBAAiB;;8EAatB,CAAC;AAUF,KAAK,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,GAC/D,YAAY,CAAC,OAAO,iBAAiB,CAAC,GAAG;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sIAAsI;IACtI,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oJAAoJ;IACpJ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oJAAoJ;IACpJ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,iOAAiO;IACjO,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wIAAwI;IACxI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6IAA6I;IAC7I,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AA0QJ,QAAA,MAAM,SAAS,oGAAyD,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,CAAC"}
@@ -24,7 +24,7 @@ const COPIED_RESET_MS = 2000;
24
24
  // error in the measured line-height must not tip that into a dead show-more
25
25
  // control for content that doesn't actually overflow.
26
26
  const OVERFLOW_EPSILON_PX = 1;
27
- function CodeBlockImpl({ ref, className, variant = "single", children, copyable = true, copyLabel, copiedLabel, copyFailedLabel, onCopy, collapsedRows, showMoreLabel, showLessLabel, ...props }) {
27
+ function CodeBlockImpl({ ref, className, variant = "single", children, copyable = true, copyLabel, copiedLabel, copyFailedLabel, onCopy, onCopyRequest, collapsedRows, showMoreLabel, showLessLabel, ...props }) {
28
28
  const { t } = useC4Dictionary();
29
29
  const resolvedCopyLabel = copyLabel ?? t("codeBlock.copy");
30
30
  const resolvedCopiedLabel = copiedLabel ?? t("codeBlock.copied");
@@ -45,6 +45,8 @@ function CodeBlockImpl({ ref, className, variant = "single", children, copyable
45
45
  const codeRef = React.useRef(null);
46
46
  const preRef = React.useRef(null);
47
47
  const [status, setStatus] = React.useState("idle");
48
+ // True while an async `onCopyRequest` resolves, to show the spinner.
49
+ const [isCopying, setIsCopying] = React.useState(false);
48
50
  const [announcement, setAnnouncement] = React.useState("");
49
51
  const resetTimerRef = React.useRef(undefined);
50
52
  const announceFrameRef = React.useRef(undefined);
@@ -93,17 +95,28 @@ function CodeBlockImpl({ ref, className, variant = "single", children, copyable
93
95
  }
94
96
  }, []);
95
97
  const handleCopy = async () => {
96
- const text = codeRef.current?.textContent ?? "";
97
- if (!text) {
98
- // Copying nothing would clear the user's clipboard and report success for it.
99
- onCopy?.("", false);
100
- return;
101
- }
102
- // `writeText` rejects on an insecure origin or denied permission — await it
103
- // rather than firing-and-forgetting, so `success` reflects what actually
104
- // happened instead of assuming the write worked.
98
+ // Await the resolver and `writeText` in one try so a rejection from either
99
+ // reaches the catch. `text` seeds to "" so the catch can still report it.
100
+ let text = "";
105
101
  let success;
106
102
  try {
103
+ if (onCopyRequest) {
104
+ setIsCopying(true);
105
+ try {
106
+ text = await onCopyRequest();
107
+ }
108
+ finally {
109
+ setIsCopying(false);
110
+ }
111
+ }
112
+ else {
113
+ text = codeRef.current?.textContent ?? "";
114
+ }
115
+ if (!text) {
116
+ // Copying nothing would wipe the clipboard and report success.
117
+ onCopy?.("", false);
118
+ return;
119
+ }
107
120
  await navigator.clipboard.writeText(text);
108
121
  success = true;
109
122
  onCopy?.(text, true);
@@ -148,11 +161,13 @@ function CodeBlockImpl({ ref, className, variant = "single", children, copyable
148
161
  // computed line-height, so it can't be expressed as a fixed utility class.
149
162
  style: isCollapsedVisual && capPx !== null ? { maxHeight: capPx } : undefined, children: _jsx("pre", { ref: preRefCallback, className: cn(variant === "single"
150
163
  ? "whitespace-pre"
151
- : "whitespace-pre-wrap break-words", className), ...props, children: _jsx("code", { ref: codeRef, children: children }) }) }), showToggle && (_jsxs(Button, { type: "button", variant: "ghost", size: "xs", onClick: () => setExpanded((prev) => !prev), "aria-expanded": expanded, className: "mt-2", children: [expanded ? resolvedShowLessLabel : resolvedShowMoreLabel, _jsx(ChevronDown, { "aria-hidden": "true", className: cn("transition-transform", expanded && "rotate-180") })] })), copyable && (_jsxs(_Fragment, { children: [_jsx(Button, { type: "button", variant: "ghost", size: "icon-xs", onClick: handleCopy, "aria-label": status === "copied"
164
+ : "whitespace-pre-wrap break-words", className), ...props, children: _jsx("code", { ref: codeRef, children: children }) }) }), showToggle && (_jsxs(Button, { type: "button", variant: "ghost", size: "xs", onClick: () => setExpanded((prev) => !prev), "aria-expanded": expanded, className: "mt-2", children: [expanded ? resolvedShowLessLabel : resolvedShowMoreLabel, _jsx(ChevronDown, { "aria-hidden": "true", className: cn("transition-transform", expanded && "rotate-180") })] })), copyable && (_jsxs(_Fragment, { children: [_jsx(Button, { type: "button", variant: "ghost", size: "icon-xs", loading: isCopying, onClick: handleCopy, "aria-label": status === "copied"
152
165
  ? resolvedCopiedLabel
153
166
  : status === "failed"
154
167
  ? resolvedCopyFailedLabel
155
- : resolvedCopyLabel, className: "absolute top-1.5 right-1.5", children: status === "copied" ? (_jsx(Check, { className: "text-success-foreground-subtle", "aria-hidden": "true" })) : status === "failed" ? (_jsx(CircleAlert, { className: "text-danger-foreground-subtle", "aria-hidden": "true" })) : (_jsx(Copy, { "aria-hidden": "true" })) }), _jsx("span", { role: "status", "aria-live": "polite", className: "sr-only", children: announcement })] }))] }));
168
+ : resolvedCopyLabel,
169
+ // `aria-disabled` here means copy-in-flight, not disabled: keep full opacity.
170
+ className: "absolute top-1.5 right-1.5 aria-disabled:opacity-100", children: status === "copied" ? (_jsx(Check, { className: "text-success-foreground-subtle", "aria-hidden": "true" })) : status === "failed" ? (_jsx(CircleAlert, { className: "text-danger-foreground-subtle", "aria-hidden": "true" })) : (_jsx(Copy, { "aria-hidden": "true" })) }), _jsx("span", { role: "status", "aria-live": "polite", className: "sr-only", children: announcement })] }))] }));
156
171
  }
157
172
  const CodeBlock = withRef(CodeBlockImpl);
158
173
  export { CodeBlock, codeBlockVariants };