@crewlethq/ui 0.75.4 → 0.76.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 (144) hide show
  1. package/README.md +15 -1
  2. package/dist/AgentHandoffPanel/index.js +3 -3
  3. package/dist/ArrangeList/index.js +3 -3
  4. package/dist/ArtifactBar/index.js +4 -4
  5. package/dist/ArtifactCard/index.js +3 -3
  6. package/dist/AttachmentChip/index.js +3 -3
  7. package/dist/AvatarPicker/index.js +5 -5
  8. package/dist/BriefCard/index.js +4 -4
  9. package/dist/ChangeList/index.js +3 -3
  10. package/dist/Checkbox/index.js +2 -2
  11. package/dist/ChoiceCards/ChoiceCards.d.ts +80 -0
  12. package/dist/ChoiceCards/index.d.ts +3 -0
  13. package/dist/ChoiceCards/index.js +3 -0
  14. package/dist/ChoiceCards-HAGJMK6Q.css +318 -0
  15. package/dist/ChoiceList/ChoiceList.d.ts +10 -1
  16. package/dist/ChoiceList/index.js +1 -1
  17. package/dist/{ChoiceList-Q772QLFX.css → ChoiceList-JN4PPNFW.css} +22 -1
  18. package/dist/ColorField/index.js +2 -2
  19. package/dist/Combobox/index.js +2 -2
  20. package/dist/CommandPalette/index.js +2 -2
  21. package/dist/CommentThread/index.js +3 -3
  22. package/dist/Composer/index.js +2 -2
  23. package/dist/ConfirmField/index.js +2 -2
  24. package/dist/ContrastBadge/index.js +3 -3
  25. package/dist/ContrastHelp/index.js +4 -4
  26. package/dist/DataGrid/index.js +3 -3
  27. package/dist/DataTable/index.js +3 -3
  28. package/dist/DataView/index.js +5 -5
  29. package/dist/DatasetSource/index.js +3 -3
  30. package/dist/DeepWorkCard/index.js +5 -5
  31. package/dist/DocTabsEditor/index.js +2 -2
  32. package/dist/EditingStatus/index.js +2 -2
  33. package/dist/{Editor-VW5CRDKY.js → Editor-BXOWAV46.js} +1 -1
  34. package/dist/EntityList/index.js +4 -4
  35. package/dist/HuePicker/index.js +4 -4
  36. package/dist/InlineEditor/index.js +3 -3
  37. package/dist/Input/index.js +1 -1
  38. package/dist/{Input-GEFFMKBS.css → Input-WSMB7JG2.css} +6 -1
  39. package/dist/ListInput/index.js +2 -2
  40. package/dist/LogoSlot/index.js +4 -4
  41. package/dist/MarkdownEditor/index.js +4 -4
  42. package/dist/MergeConflicts/index.js +4 -4
  43. package/dist/OpenInAppCard/index.js +5 -5
  44. package/dist/PricingCard/index.js +3 -3
  45. package/dist/PrincipalPicker/index.js +3 -3
  46. package/dist/ProposalCard/index.js +7 -7
  47. package/dist/RefusalCard/index.js +4 -4
  48. package/dist/ResultTableCard/index.js +4 -4
  49. package/dist/ReviewList/index.js +3 -3
  50. package/dist/RichEditor/index.js +1 -1
  51. package/dist/RunChip/index.js +3 -3
  52. package/dist/SegmentedControl/index.js +3 -3
  53. package/dist/SettingsTable/index.js +2 -2
  54. package/dist/SetupWizard/SetupWizard.d.ts +25 -7
  55. package/dist/SetupWizard/index.js +3 -3
  56. package/dist/{SetupWizard-WDOFFNIM.css → SetupWizard-2SUMQEWU.css} +126 -4
  57. package/dist/ShareDialog/index.js +1 -1
  58. package/dist/SheetColumnEditor/index.js +7 -7
  59. package/dist/SheetGrid/index.js +3 -3
  60. package/dist/StatusCard/index.js +3 -3
  61. package/dist/StatusDot/StatusDot.d.ts +7 -0
  62. package/dist/StatusDot/index.js +1 -1
  63. package/dist/{StatusDot-7OMCQCZF.css → StatusDot-FJND3CZY.css} +9 -2
  64. package/dist/Stepper/index.js +2 -2
  65. package/dist/{Stepper-32INSYF7.css → Stepper-YQBNYCIS.css} +31 -8
  66. package/dist/Switcher/index.js +2 -2
  67. package/dist/TableCells/index.js +3 -3
  68. package/dist/Tabs/index.js +2 -2
  69. package/dist/Tag/index.js +2 -2
  70. package/dist/TagsInput/index.js +3 -3
  71. package/dist/ThemeGallery/index.js +3 -3
  72. package/dist/ThemeSwitcher/index.js +4 -4
  73. package/dist/TimeRangePicker/index.js +5 -5
  74. package/dist/TimeWindowPicker/index.js +2 -2
  75. package/dist/ValueField/index.js +3 -3
  76. package/dist/VersionCompare/index.js +4 -4
  77. package/dist/{chunk-3N36CYTU.js → chunk-2PIH6JHJ.js} +1 -1
  78. package/dist/{chunk-RNXYNXKN.js → chunk-2STOSJT3.js} +2 -2
  79. package/dist/{chunk-P64MIA7C.js → chunk-3JXX5S3Z.js} +2 -2
  80. package/dist/{chunk-H32JW6CZ.js → chunk-45M73G5A.js} +1 -1
  81. package/dist/{chunk-6C6YK75K.js → chunk-57AKYFML.js} +1 -1
  82. package/dist/{chunk-4KSCGXLJ.js → chunk-5BOFC5OP.js} +2 -2
  83. package/dist/{chunk-NXNLAZPK.js → chunk-5CEQ3HLH.js} +1 -1
  84. package/dist/{chunk-VLGGLLKH.js → chunk-624X3RVA.js} +1 -1
  85. package/dist/{chunk-LWFOX3PB.js → chunk-63GBSOLU.js} +1 -1
  86. package/dist/{chunk-ZUBFVK6B.js → chunk-6EWNMSS4.js} +1 -1
  87. package/dist/{chunk-7IW3P6FH.js → chunk-6G6WHTC7.js} +1 -1
  88. package/dist/{chunk-JXJNX7QQ.js → chunk-6LXS3X7A.js} +1 -1
  89. package/dist/{chunk-NQABJAUY.js → chunk-6RW2MUTY.js} +15 -8
  90. package/dist/{chunk-IPUEVTRJ.js → chunk-6THG44LI.js} +1 -1
  91. package/dist/{chunk-KWLH45YC.js → chunk-7PJFUQMY.js} +1 -1
  92. package/dist/{chunk-AB6F5YXX.js → chunk-ADGNISEI.js} +1 -1
  93. package/dist/{chunk-WQRSZMN4.js → chunk-BBD7PTBG.js} +1 -1
  94. package/dist/{chunk-TYIHFDMP.js → chunk-BKXUZCZX.js} +1 -1
  95. package/dist/{chunk-NU5RUT7Y.js → chunk-CFTBESST.js} +1 -1
  96. package/dist/{chunk-WIATRXEJ.js → chunk-CYQBDZ6M.js} +1 -1
  97. package/dist/{chunk-ZKIEOWR6.js → chunk-D7G2QGET.js} +1 -1
  98. package/dist/{chunk-3EY5SEGH.js → chunk-DSMQTED5.js} +3 -3
  99. package/dist/{chunk-5OFRDX66.js → chunk-E35HYQMK.js} +1 -1
  100. package/dist/{chunk-ETSF7SU6.js → chunk-FB3TCNQP.js} +1 -1
  101. package/dist/{chunk-BWAUL5MB.js → chunk-GHQG4VZA.js} +3 -3
  102. package/dist/{chunk-PIAGTZY3.js → chunk-GPFYITOF.js} +1 -1
  103. package/dist/{chunk-R6K62EXV.js → chunk-H22SR76M.js} +1 -1
  104. package/dist/{chunk-IO374IX6.js → chunk-HQOEAUDJ.js} +1 -1
  105. package/dist/{chunk-J5WWMC35.js → chunk-HWPP22XG.js} +2 -2
  106. package/dist/{chunk-BWFJB5JD.js → chunk-HZDI2CCS.js} +1 -1
  107. package/dist/{chunk-3WN5HUAK.js → chunk-I3G5FJ54.js} +1 -1
  108. package/dist/{chunk-TKBFRGUV.js → chunk-IPBSCJIZ.js} +1 -1
  109. package/dist/{chunk-ERFXYGRF.js → chunk-IQMWMT4V.js} +2 -2
  110. package/dist/{chunk-GT2OG2XM.js → chunk-JMTBK55P.js} +2 -2
  111. package/dist/{chunk-FURJVZCT.js → chunk-LCZULGMB.js} +1 -1
  112. package/dist/{chunk-PBCNINMB.js → chunk-LMQG3VPG.js} +1 -1
  113. package/dist/chunk-MKFEVHSR.js +83 -0
  114. package/dist/{chunk-JPQSVECQ.js → chunk-MP7DGKB6.js} +1 -1
  115. package/dist/{chunk-DO4J4TBZ.js → chunk-NKBKQEKS.js} +1 -1
  116. package/dist/{chunk-4MVLED6E.js → chunk-OCGIQGYJ.js} +2 -2
  117. package/dist/{chunk-EOXI3CRG.js → chunk-OOLMTUCO.js} +1 -1
  118. package/dist/{chunk-YUHKRRWO.js → chunk-OWHETZIU.js} +1 -1
  119. package/dist/{chunk-VWMB3CJN.js → chunk-PMBJMNBX.js} +1 -1
  120. package/dist/{chunk-ADSOY7UM.js → chunk-RIAPCEB5.js} +1 -1
  121. package/dist/{chunk-HJBHP66O.js → chunk-RJWO2PC5.js} +2 -2
  122. package/dist/{chunk-NTQPJJAN.js → chunk-RTMNULTL.js} +1 -1
  123. package/dist/{chunk-AQIFKLXY.js → chunk-SK5SLGZH.js} +1 -1
  124. package/dist/{chunk-7LSSYHOT.js → chunk-T24HBEU6.js} +1 -1
  125. package/dist/{chunk-W5AXJWOW.js → chunk-TJIBTHWJ.js} +1 -1
  126. package/dist/{chunk-TWJERLT3.js → chunk-TKUAGWNR.js} +1 -1
  127. package/dist/{chunk-JVII5264.js → chunk-TPIMOGOZ.js} +1 -1
  128. package/dist/{chunk-RQHN4J5P.js → chunk-UYF2B2TH.js} +1 -1
  129. package/dist/{chunk-I5OIKDX2.js → chunk-VERJCAJ4.js} +1 -1
  130. package/dist/{chunk-PKVWCKS2.js → chunk-VG3SIJ3M.js} +1 -1
  131. package/dist/{chunk-HEIOLITO.js → chunk-WK4FQPYW.js} +1 -1
  132. package/dist/{chunk-4RKTZSEW.js → chunk-WL4TC4YZ.js} +1 -1
  133. package/dist/{chunk-SBHAKX2T.js → chunk-X5FKORDM.js} +72 -9
  134. package/dist/{chunk-4DL2BQJE.js → chunk-YL7AR6PR.js} +1 -1
  135. package/dist/{chunk-LQWORB5B.js → chunk-YQDRJZ5J.js} +1 -1
  136. package/dist/{chunk-OOPOQKZZ.js → chunk-ZKLEAK7M.js} +1 -1
  137. package/dist/{chunk-KAA3GFTP.js → chunk-ZMIVQGAB.js} +3 -3
  138. package/dist/{chunk-OXEOC64K.js → chunk-ZW5SRQ5M.js} +1 -1
  139. package/dist/generated/index.d.ts +1 -0
  140. package/dist/generated/index.js +81 -80
  141. package/dist/index.js +81 -80
  142. package/dist/styles.css +520 -21
  143. package/package.json +3 -3
  144. /package/dist/{chunk-TWM6G2I2.js → chunk-PCBPDMNU.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { Table } from './chunk-75NQV4R4.js';
2
2
  import { DownloadButton } from './chunk-EHFQMY3B.js';
3
- import { StatusCard } from './chunk-NTQPJJAN.js';
3
+ import { StatusCard } from './chunk-RTMNULTL.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './ResultTableCard-AP355LQM.css';
6
6
  import { useState } from 'react';
@@ -1,18 +1,20 @@
1
1
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './HitArea-QUOS6ZDJ.css';
4
- import './ChoiceList-Q772QLFX.css';
4
+ import './ChoiceList-JN4PPNFW.css';
5
5
  import { useId } from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7
 
8
8
  function ChoiceList({ options, value, onChange, label, footer, disabled, className }) {
9
9
  const name = useId();
10
10
  return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-choice-list", disabled && "is-disabled", className), children: [
11
- /* @__PURE__ */ jsx("div", { role: "radiogroup", "aria-label": label, className: "crewlet-choice-list__group", children: options.map((option) => {
12
- const id = `${name}-${option.value}`;
11
+ /* @__PURE__ */ jsx("div", { role: "radiogroup", "aria-label": label, className: "crewlet-choice-list__group", children: options.map((option, index) => {
12
+ const id = `${name}-${index}`;
13
13
  const checked = option.value === value;
14
+ const off = disabled || option.disabled;
15
+ const reasonId = option.disabled && option.disabledReason ? `${id}-reason` : void 0;
14
16
  return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-choice-list__item", option.separated && "is-separated"), children: [
15
- /* @__PURE__ */ jsxs("label", { className: cx("crewlet-choice-list__row", HIT_AREA_CLASS, option.media != null && "has-media", checked && "is-checked"), htmlFor: id, children: [
17
+ /* @__PURE__ */ jsxs("label", { className: cx("crewlet-choice-list__row", HIT_AREA_CLASS, option.media != null && "has-media", checked && "is-checked", option.disabled && "is-disabled"), htmlFor: id, children: [
16
18
  /* @__PURE__ */ jsx(
17
19
  "input",
18
20
  {
@@ -21,17 +23,22 @@ function ChoiceList({ options, value, onChange, label, footer, disabled, classNa
21
23
  name,
22
24
  value: option.value,
23
25
  checked,
24
- disabled,
26
+ disabled: off,
27
+ "aria-labelledby": reasonId ? [`${id}-label`, option.detail ? `${id}-detail` : null, option.tag ? `${id}-tag` : null].filter(Boolean).join(" ") : void 0,
28
+ "aria-describedby": reasonId,
25
29
  onChange: () => onChange(option.value),
26
30
  className: "crewlet-choice-list__radio"
27
31
  }
28
32
  ),
29
33
  option.media != null ? /* @__PURE__ */ jsx("span", { className: "crewlet-choice-list__media", "aria-hidden": true, children: option.media }) : null,
30
34
  /* @__PURE__ */ jsxs("span", { className: "crewlet-choice-list__text", children: [
31
- /* @__PURE__ */ jsx("span", { className: "crewlet-choice-list__label", children: option.label }),
32
- option.detail ? /* @__PURE__ */ jsx("span", { className: "crewlet-choice-list__detail", children: option.detail }) : null
35
+ /* @__PURE__ */ jsx("span", { id: `${id}-label`, className: "crewlet-choice-list__label", children: option.label }),
36
+ option.detail || reasonId ? /* @__PURE__ */ jsxs("span", { className: "crewlet-choice-list__detail", children: [
37
+ option.detail ? /* @__PURE__ */ jsx("span", { id: `${id}-detail`, children: option.detail }) : null,
38
+ reasonId ? /* @__PURE__ */ jsx("span", { id: reasonId, className: "crewlet-choice-list__reason", children: option.disabledReason }) : null
39
+ ] }) : null
33
40
  ] }),
34
- option.tag ? /* @__PURE__ */ jsx("span", { className: "crewlet-choice-list__tag", children: option.tag }) : null
41
+ option.tag ? /* @__PURE__ */ jsx("span", { id: `${id}-tag`, className: "crewlet-choice-list__tag", children: option.tag }) : null
35
42
  ] }),
36
43
  checked && option.panel ? /* @__PURE__ */ jsx("div", { className: "crewlet-choice-list__panel", children: option.panel }) : null
37
44
  ] }, option.value);
@@ -1,5 +1,5 @@
1
1
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
2
- import { StatusDot } from './chunk-WIATRXEJ.js';
2
+ import { StatusDot } from './chunk-CYQBDZ6M.js';
3
3
  import { Count } from './chunk-MLDTLZAO.js';
4
4
  import { Menu } from './chunk-OQG4P5KU.js';
5
5
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
@@ -1,5 +1,5 @@
1
1
  import { normalizeHex } from './chunk-7W3LYIOC.js';
2
- import { Tag } from './chunk-I5OIKDX2.js';
2
+ import { Tag } from './chunk-VERJCAJ4.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './ContrastBadge-CBZPGG3G.css';
@@ -1,7 +1,7 @@
1
1
  import { PrincipalAvatar } from './chunk-N2BF272H.js';
2
2
  import { toInstant, RelativeTime, formatExact, toISO } from './chunk-EJNJMHQG.js';
3
3
  import { Document } from './chunk-BXCL6P5Z.js';
4
- import { Composer } from './chunk-5OFRDX66.js';
4
+ import { Composer } from './chunk-E35HYQMK.js';
5
5
  import { Count } from './chunk-MLDTLZAO.js';
6
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
7
7
  import { Button } from './chunk-DGXZ635L.js';
@@ -1,5 +1,5 @@
1
1
  import { DiffList } from './chunk-LR4IWUWQ.js';
2
- import { Tag } from './chunk-I5OIKDX2.js';
2
+ import { Tag } from './chunk-VERJCAJ4.js';
3
3
  import { Disclosure } from './chunk-222VILSP.js';
4
4
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { tabId } from './chunk-IPUEVTRJ.js';
1
+ import { tabId } from './chunk-6THG44LI.js';
2
2
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
3
3
  import { Count } from './chunk-MLDTLZAO.js';
4
4
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
@@ -1,4 +1,4 @@
1
- import { Combobox } from './chunk-ZUBFVK6B.js';
1
+ import { Combobox } from './chunk-6EWNMSS4.js';
2
2
  import { PRINCIPAL_KINDS, PrincipalAvatar } from './chunk-N2BF272H.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './PrincipalPicker-P6UYHDJR.css';
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './StatusDot-7OMCQCZF.css';
2
+ import './StatusDot-FJND3CZY.css';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
5
5
  function StatusDot({ tone = "neutral", pulse = false, children, className }) {
@@ -1,4 +1,4 @@
1
- import { Tag } from './chunk-I5OIKDX2.js';
1
+ import { Tag } from './chunk-VERJCAJ4.js';
2
2
  import './PricingCard-BXMLP7KD.css';
3
3
  import { forwardRef } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -1,7 +1,7 @@
1
1
  import { RefusalStrip, ReceiptStrip } from './chunk-ZWCK4N4L.js';
2
- import { ChangeList } from './chunk-WQRSZMN4.js';
3
- import { StatusCard } from './chunk-NTQPJJAN.js';
4
- import { Checkbox } from './chunk-PBCNINMB.js';
2
+ import { ChangeList } from './chunk-BBD7PTBG.js';
3
+ import { StatusCard } from './chunk-RTMNULTL.js';
4
+ import { Checkbox } from './chunk-LMQG3VPG.js';
5
5
  import { Disclosure } from './chunk-222VILSP.js';
6
6
  import { Button } from './chunk-DGXZ635L.js';
7
7
  import { Spinner } from './chunk-XSPCITPN.js';
@@ -1,5 +1,5 @@
1
1
  import { Kbd } from './chunk-ANTAQAR4.js';
2
- import { Textarea } from './chunk-ETSF7SU6.js';
2
+ import { Textarea } from './chunk-FB3TCNQP.js';
3
3
  import { isComposing } from './chunk-H5XTJ7GJ.js';
4
4
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -6,7 +6,7 @@ import { IconButton } from './chunk-UAUP6XGK.js';
6
6
  import { useFocusModality } from './chunk-NUZHC6MM.js';
7
7
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
9
- import './Input-GEFFMKBS.css';
9
+ import './Input-WSMB7JG2.css';
10
10
  import './VisuallyHidden-AOEXU5EB.css';
11
11
  import { forwardRef, useRef, useState, useImperativeHandle, useEffect, useId } from 'react';
12
12
  import { XGlyph } from '@crewlethq/icons/glyphs';
@@ -1,7 +1,7 @@
1
1
  import { Select } from './chunk-VK45YJLH.js';
2
- import { Combobox } from './chunk-ZUBFVK6B.js';
3
- import { FormField, Textarea, InputAffix } from './chunk-ETSF7SU6.js';
4
- import './Input-GEFFMKBS.css';
2
+ import { Combobox } from './chunk-6EWNMSS4.js';
3
+ import { FormField, Textarea, InputAffix } from './chunk-FB3TCNQP.js';
4
+ import './Input-WSMB7JG2.css';
5
5
  import './VisuallyHidden-AOEXU5EB.css';
6
6
  import './HitArea-QUOS6ZDJ.css';
7
7
  import './Combobox-GBCWXWEB.css';
@@ -1,4 +1,4 @@
1
- import { StepStateMark } from './chunk-HJBHP66O.js';
1
+ import { StepStateMark } from './chunk-RJWO2PC5.js';
2
2
  import { DisclosureAnatomy } from './chunk-IVTQWOXV.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { Tag } from './chunk-I5OIKDX2.js';
1
+ import { Tag } from './chunk-VERJCAJ4.js';
2
2
  import { RelativeTime } from './chunk-EJNJMHQG.js';
3
3
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
4
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
@@ -1,4 +1,4 @@
1
- import { ContrastLevelTag } from './chunk-KWLH45YC.js';
1
+ import { ContrastLevelTag } from './chunk-7PJFUQMY.js';
2
2
  import { Popover } from './chunk-KHJIEPZV.js';
3
3
  import { IconButton } from './chunk-UAUP6XGK.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
1
  import { PageHeader } from './chunk-FPDIHEM4.js';
2
2
  import { FilterPill } from './chunk-K4LZXSKZ.js';
3
- import { DataTable } from './chunk-BWFJB5JD.js';
4
3
  import { DateTimePicker } from './chunk-HPI5J6AR.js';
4
+ import { DataTable } from './chunk-HZDI2CCS.js';
5
5
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
6
6
  import { Toolbar } from './chunk-NR4CPM4T.js';
7
7
  import { Popover } from './chunk-KHJIEPZV.js';
8
8
  import { RelativeTime } from './chunk-EJNJMHQG.js';
9
9
  import { Kbd } from './chunk-ANTAQAR4.js';
10
- import { Input } from './chunk-ETSF7SU6.js';
10
+ import { Input } from './chunk-FB3TCNQP.js';
11
11
  import { Count } from './chunk-MLDTLZAO.js';
12
12
  import { Menu } from './chunk-OQG4P5KU.js';
13
13
  import { Button } from './chunk-DGXZ635L.js';
@@ -2,7 +2,7 @@ import { Modal } from './chunk-C667GCU7.js';
2
2
  import { useClipboard } from './chunk-STJ7QBC3.js';
3
3
  import { EmptyValue } from './chunk-RE3FBGQQ.js';
4
4
  import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
5
- import { Checkbox } from './chunk-PBCNINMB.js';
5
+ import { Checkbox } from './chunk-LMQG3VPG.js';
6
6
  import { Menu } from './chunk-OQG4P5KU.js';
7
7
  import { Button } from './chunk-DGXZ635L.js';
8
8
  import { IconButton } from './chunk-UAUP6XGK.js';
@@ -1,4 +1,4 @@
1
- import { SegmentedControl } from './chunk-TYIHFDMP.js';
1
+ import { SegmentedControl } from './chunk-BKXUZCZX.js';
2
2
  import { Button } from './chunk-DGXZ635L.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './MergeConflicts-HCXPRQVR.css';
@@ -1,5 +1,5 @@
1
1
  import { Tooltip } from './chunk-I33UIUZD.js';
2
- import { SegmentedControl } from './chunk-TYIHFDMP.js';
2
+ import { SegmentedControl } from './chunk-BKXUZCZX.js';
3
3
  import { ArtifactIcon } from './chunk-AVL52EME.js';
4
4
  import { isApplePlatform, Kbd } from './chunk-ANTAQAR4.js';
5
5
  import { Menu } from './chunk-OQG4P5KU.js';
@@ -1,6 +1,6 @@
1
1
  import { Toolbar } from './chunk-NR4CPM4T.js';
2
- import { SegmentedControl } from './chunk-TYIHFDMP.js';
3
- import { tabId } from './chunk-IPUEVTRJ.js';
2
+ import { SegmentedControl } from './chunk-BKXUZCZX.js';
3
+ import { tabId } from './chunk-6THG44LI.js';
4
4
  import { IconButton } from './chunk-UAUP6XGK.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './MarkdownEditor-BLCJRGDC.css';
@@ -1,7 +1,7 @@
1
- import { safeHref } from './chunk-KBZO4B33.js';
2
1
  import { IconTile } from './chunk-3LI4TRUR.js';
2
+ import { safeHref } from './chunk-KBZO4B33.js';
3
3
  import { ReceiptStrip } from './chunk-ZWCK4N4L.js';
4
- import { StatusCard } from './chunk-NTQPJJAN.js';
4
+ import { StatusCard } from './chunk-RTMNULTL.js';
5
5
  import { ButtonLink, Button } from './chunk-DGXZ635L.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './OpenInAppCard-CKHCK7DO.css';
@@ -1,4 +1,4 @@
1
- import { Checkbox } from './chunk-PBCNINMB.js';
1
+ import { Checkbox } from './chunk-LMQG3VPG.js';
2
2
  import { EmptyState } from './chunk-PPUR46MK.js';
3
3
  import { useMediaMatch } from './chunk-RTPQDNW3.js';
4
4
  import { Button } from './chunk-DGXZ635L.js';
@@ -1,4 +1,4 @@
1
- import { FormField } from './chunk-ETSF7SU6.js';
1
+ import { FormField } from './chunk-FB3TCNQP.js';
2
2
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './Checkbox-GAMV2XD7.css';
@@ -0,0 +1,83 @@
1
+ import { StatusDot } from './chunk-CYQBDZ6M.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './ChoiceCards-HAGJMK6Q.css';
4
+ import { useId } from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function ChoiceCards({ label, options, value, onChange, minCardWidth = "md", className }) {
8
+ const name = useId();
9
+ const described = options.some((o) => o.description != null && o.description !== false && o.description !== "");
10
+ const facts = Math.max(0, ...options.map((o) => o.facts?.length ?? 0));
11
+ const inFact = (o) => o.disabledReasonAt !== void 0 && o.disabledReasonAt >= 0 && o.disabledReasonAt < (o.facts?.length ?? 0);
12
+ const reasons = options.some((o) => o.disabled && o.disabledReason && !inFact(o)) ? 1 : 0;
13
+ const rows = { "--crewlet-choice-cards-rows": 1 + (described ? 1 : 0) + facts + reasons };
14
+ return /* @__PURE__ */ jsx(
15
+ "div",
16
+ {
17
+ role: "radiogroup",
18
+ "aria-label": label,
19
+ className: cx("crewlet-choice-cards", `crewlet-choice-cards--${minCardWidth}`, className),
20
+ style: rows,
21
+ children: options.map((option, index) => {
22
+ const id = `${name}-${index}`;
23
+ const checked = option.value === value;
24
+ const part = (what) => `${id}-${what}`;
25
+ const reason = option.disabled && option.disabledReason ? part("reason") : null;
26
+ const reasonAt = reason && inFact(option) ? option.disabledReasonAt : -1;
27
+ const labelledBy = [part("label"), option.tag ? part("tag") : null].filter(Boolean).join(" ");
28
+ const describedBy = [
29
+ option.description ? part("description") : null,
30
+ ...(option.facts ?? []).map((_, at) => at === reasonAt ? reason : part(`fact-${at}`)),
31
+ reasonAt < 0 ? reason : null
32
+ ].filter(Boolean).join(" ");
33
+ return /* @__PURE__ */ jsxs(
34
+ "label",
35
+ {
36
+ htmlFor: id,
37
+ className: cx("crewlet-choice-cards__card", checked && "is-checked", option.disabled && "is-disabled"),
38
+ children: [
39
+ /* @__PURE__ */ jsx(
40
+ "input",
41
+ {
42
+ id,
43
+ type: "radio",
44
+ name,
45
+ value: option.value,
46
+ checked,
47
+ disabled: option.disabled,
48
+ "aria-labelledby": labelledBy,
49
+ "aria-describedby": describedBy || void 0,
50
+ onChange: () => onChange(option.value),
51
+ className: "crewlet-choice-cards__radio"
52
+ }
53
+ ),
54
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-choice-cards__title", children: [
55
+ option.media != null ? /* @__PURE__ */ jsx("span", { className: "crewlet-choice-cards__media", "aria-hidden": true, children: option.media }) : null,
56
+ /* @__PURE__ */ jsx("span", { id: part("label"), className: "crewlet-choice-cards__label", children: option.label }),
57
+ option.tag ? /* @__PURE__ */ jsx("span", { id: part("tag"), className: "crewlet-choice-cards__tag", children: option.tag }) : null
58
+ ] }),
59
+ option.description ? /* @__PURE__ */ jsx("span", { id: part("description"), className: "crewlet-choice-cards__description", children: option.description }) : described ? /* @__PURE__ */ jsx("span", { className: "crewlet-choice-cards__description", "aria-hidden": true }) : null,
60
+ option.facts && option.facts.length > 0 ? /* @__PURE__ */ jsx("span", { className: "crewlet-choice-cards__facts", children: option.facts.map((fact, at) => /* @__PURE__ */ jsxs(
61
+ "span",
62
+ {
63
+ id: at === reasonAt ? reason : part(`fact-${at}`),
64
+ className: cx("crewlet-choice-cards__fact", at === reasonAt && "is-reason"),
65
+ children: [
66
+ /* @__PURE__ */ jsx("span", { className: "crewlet-choice-cards__fact-label", children: fact.label }),
67
+ " ",
68
+ /* @__PURE__ */ jsx("span", { className: "crewlet-choice-cards__fact-value", children: fact.tone ? /* @__PURE__ */ jsx(StatusDot, { tone: fact.tone, children: at === reasonAt ? option.disabledReason : fact.value }) : at === reasonAt ? option.disabledReason : fact.value })
69
+ ]
70
+ },
71
+ at
72
+ )) }) : null,
73
+ reason && reasonAt < 0 ? /* @__PURE__ */ jsx("span", { id: reason, className: "crewlet-choice-cards__reason", children: option.disabledReason }) : null
74
+ ]
75
+ },
76
+ option.value
77
+ );
78
+ })
79
+ }
80
+ );
81
+ }
82
+
83
+ export { ChoiceCards };
@@ -9,7 +9,7 @@ import { jsx } from 'react/jsx-runtime';
9
9
  var engine = null;
10
10
  var loading = null;
11
11
  function loadEngine() {
12
- loading ??= import('./Editor-VW5CRDKY.js').then(
12
+ loading ??= import('./Editor-BXOWAV46.js').then(
13
13
  (module) => {
14
14
  engine = module.Editor;
15
15
  return engine;
@@ -1,5 +1,5 @@
1
1
  import { IconTile } from './chunk-3LI4TRUR.js';
2
- import { Tag } from './chunk-I5OIKDX2.js';
2
+ import { Tag } from './chunk-VERJCAJ4.js';
3
3
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './ReviewList-2IZA67EX.css';
@@ -1,7 +1,7 @@
1
1
  import { Modal } from './chunk-C667GCU7.js';
2
2
  import { Callout } from './chunk-BPCY7ZID.js';
3
- import { SegmentedControl } from './chunk-TYIHFDMP.js';
4
- import { FormField, Input } from './chunk-ETSF7SU6.js';
3
+ import { SegmentedControl } from './chunk-BKXUZCZX.js';
4
+ import { FormField, Input } from './chunk-FB3TCNQP.js';
5
5
  import { Button } from './chunk-DGXZ635L.js';
6
6
  import { useState } from 'react';
7
7
  import { ClockGlyph } from '@crewlethq/icons/glyphs';
@@ -1,5 +1,5 @@
1
1
  import { diffLines, diffStat, collapseDiff, DiffSummary, DiffView } from './chunk-AOFVXE6V.js';
2
- import { SegmentedControl } from './chunk-TYIHFDMP.js';
2
+ import { SegmentedControl } from './chunk-BKXUZCZX.js';
3
3
  import { EmptyState } from './chunk-PPUR46MK.js';
4
4
  import { useHeadingLevel, headingTag, nextHeadingLevel, HeadingLevelProvider } from './chunk-PQADV6P6.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  import { FileDrop, FilePickButton } from './chunk-KQWJWTED.js';
2
- import { contrastRatio } from './chunk-KWLH45YC.js';
2
+ import { contrastRatio } from './chunk-7PJFUQMY.js';
3
3
  import { normalizeHex } from './chunk-7W3LYIOC.js';
4
4
  import { Button } from './chunk-DGXZ635L.js';
5
5
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
@@ -1,5 +1,5 @@
1
1
  import { useThemePreference, useDensityPreference } from './chunk-Z24ZUSTX.js';
2
- import { SegmentedControl } from './chunk-TYIHFDMP.js';
2
+ import { SegmentedControl } from './chunk-BKXUZCZX.js';
3
3
  import { SunGlyph, MonitorGlyph, MoonGlyph } from '@crewlethq/icons/glyphs';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,7 +1,7 @@
1
1
  import { Select } from './chunk-VK45YJLH.js';
2
2
  import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-EE3DJMSQ.js';
3
3
  import { Popover } from './chunk-KHJIEPZV.js';
4
- import { Input } from './chunk-ETSF7SU6.js';
4
+ import { Input } from './chunk-FB3TCNQP.js';
5
5
  import { Button } from './chunk-DGXZ635L.js';
6
6
  import { isComposing } from './chunk-H5XTJ7GJ.js';
7
7
  import { IconButton } from './chunk-UAUP6XGK.js';
@@ -1,8 +1,8 @@
1
- import { StatusDot } from './chunk-WIATRXEJ.js';
1
+ import { StatusDot } from './chunk-CYQBDZ6M.js';
2
2
  import { Spinner } from './chunk-XSPCITPN.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './Stepper-32INSYF7.css';
5
+ import './Stepper-YQBNYCIS.css';
6
6
  import './StepList-A4YVU4JI.css';
7
7
  import { CircleCheckGlyph, CircleAlertGlyph, LockGlyph, CircleStopGlyph, ClockGlyph, CheckGlyph, TriangleAlertGlyph } from '@crewlethq/icons/glyphs';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Tag } from './chunk-I5OIKDX2.js';
1
+ import { Tag } from './chunk-VERJCAJ4.js';
2
2
  import { Card } from './chunk-4AUTALJA.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  import { NODE_HUES, NODE_HUE_NAMES } from './chunk-AYKXMIOR.js';
2
- import { SegmentedControl } from './chunk-TYIHFDMP.js';
2
+ import { SegmentedControl } from './chunk-BKXUZCZX.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { normalizeHex, parseColourInput } from './chunk-7W3LYIOC.js';
2
- import { FormField, Input, InputAffix } from './chunk-ETSF7SU6.js';
2
+ import { FormField, Input, InputAffix } from './chunk-FB3TCNQP.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './ColorField-2OIOWT3Z.css';
5
5
  import { useId, useState } from 'react';
@@ -1,5 +1,5 @@
1
1
  import { useReorder } from './chunk-MPVMB2DV.js';
2
- import { Input } from './chunk-ETSF7SU6.js';
2
+ import { Input } from './chunk-FB3TCNQP.js';
3
3
  import { Menu } from './chunk-OQG4P5KU.js';
4
4
  import { IconButton } from './chunk-UAUP6XGK.js';
5
5
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
@@ -1,6 +1,6 @@
1
1
  import { Switch } from './chunk-3XDT5ZWL.js';
2
2
  import { useReorder } from './chunk-MPVMB2DV.js';
3
- import { Checkbox } from './chunk-PBCNINMB.js';
3
+ import { Checkbox } from './chunk-LMQG3VPG.js';
4
4
  import { IconButton } from './chunk-UAUP6XGK.js';
5
5
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  import { InlineCode } from './chunk-PLL7ZJHY.js';
2
- import { FormField, Input } from './chunk-ETSF7SU6.js';
2
+ import { FormField, Input } from './chunk-FB3TCNQP.js';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
 
5
5
  function confirmMatches(typed, phrase) {
@@ -1,4 +1,4 @@
1
- import { StatusCard } from './chunk-NTQPJJAN.js';
1
+ import { StatusCard } from './chunk-RTMNULTL.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './RefusalCard-UM67F5HB.css';
4
4
  import { LockGlyph } from '@crewlethq/icons/glyphs';
@@ -1,4 +1,4 @@
1
- import { StatusDot } from './chunk-WIATRXEJ.js';
1
+ import { StatusDot } from './chunk-CYQBDZ6M.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './Tag-JTJVZM2D.css';
4
4
  import { XGlyph } from '@crewlethq/icons/glyphs';
@@ -1,5 +1,5 @@
1
1
  import { Link } from './chunk-QF5UNP4T.js';
2
- import { Tag } from './chunk-I5OIKDX2.js';
2
+ import { Tag } from './chunk-VERJCAJ4.js';
3
3
  import { RelativeTime } from './chunk-EJNJMHQG.js';
4
4
  import { EmptyValue } from './chunk-RE3FBGQQ.js';
5
5
  import { Avatar } from './chunk-KTIQSSME.js';
@@ -1,5 +1,5 @@
1
1
  import { useListbox } from './chunk-7KHM2FZH.js';
2
- import { Tag } from './chunk-I5OIKDX2.js';
2
+ import { Tag } from './chunk-VERJCAJ4.js';
3
3
  import { announce } from './chunk-2G355KDJ.js';
4
4
  import { isComposing } from './chunk-H5XTJ7GJ.js';
5
5
  import { IconButton } from './chunk-UAUP6XGK.js';
@@ -1,4 +1,4 @@
1
- import { StatusDot } from './chunk-WIATRXEJ.js';
1
+ import { StatusDot } from './chunk-CYQBDZ6M.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './SettingsTable-6DUFAFXG.css';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';