@crewlethq/ui 0.35.1 → 0.37.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 (176) hide show
  1. package/README.md +90 -1
  2. package/dist/AgentHandoffPanel/AgentHandoffPanel.d.ts +99 -0
  3. package/dist/AgentHandoffPanel/index.d.ts +3 -0
  4. package/dist/AgentHandoffPanel/index.js +16 -0
  5. package/dist/AgentHandoffPanel-JWSW62GU.css +151 -0
  6. package/dist/ArrangeFrame/index.js +1 -1
  7. package/dist/{ArrangeFrame-3PLZAG22.css → ArrangeFrame-QXOQTFAH.css} +22 -5
  8. package/dist/ArrangeList/index.js +4 -3
  9. package/dist/ArtifactAccess/ArtifactAccess.d.ts +40 -0
  10. package/dist/ArtifactAccess/index.d.ts +3 -0
  11. package/dist/ArtifactAccess/index.js +2 -0
  12. package/dist/ArtifactAccess-Y53ZTRFS.css +31 -0
  13. package/dist/ArtifactBar/ArtifactBar.d.ts +2 -1
  14. package/dist/ArtifactBar/index.js +2 -2
  15. package/dist/{ArtifactBar-HV5AT4RG.css → ArtifactBar-FWPBBKQ5.css} +8 -0
  16. package/dist/ArtifactCard/ArtifactCard.d.ts +1 -6
  17. package/dist/ArtifactCard/index.d.ts +2 -1
  18. package/dist/ArtifactCard/index.js +4 -3
  19. package/dist/ArtifactCover/index.js +3 -2
  20. package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +16 -7
  21. package/dist/ArtifactKindIllustration/index.js +1 -1
  22. package/dist/{ArtifactKindIllustration-5FPRJQ3P.css → ArtifactKindIllustration-KLFL7KBG.css} +37 -1
  23. package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +39 -0
  24. package/dist/ArtifactMakeRow/index.d.ts +4 -0
  25. package/dist/ArtifactMakeRow/index.js +4 -0
  26. package/dist/ArtifactMakeRow-XBA2MPSY.css +167 -0
  27. package/dist/ArtifactNameCell/ArtifactNameCell.d.ts +37 -0
  28. package/dist/ArtifactNameCell/index.d.ts +4 -0
  29. package/dist/ArtifactNameCell/index.js +4 -0
  30. package/dist/ArtifactNameCell-RTVP4LO4.css +104 -0
  31. package/dist/ArtifactPanel/ArtifactPanel.d.ts +8 -1
  32. package/dist/ArtifactPanel/index.js +1 -1
  33. package/dist/{ArtifactPanel-HW3SU7CP.css → ArtifactPanel-KKUUIPEU.css} +9 -0
  34. package/dist/AuthLayout/index.js +2 -2
  35. package/dist/AvatarPicker/index.js +2 -2
  36. package/dist/Canvas/index.js +2 -2
  37. package/dist/CanvasBoard/CanvasBoard.d.ts +27 -13
  38. package/dist/CanvasBoard/index.d.ts +1 -1
  39. package/dist/CanvasBoard/index.js +4 -4
  40. package/dist/{CanvasBoard-5NNSKY6A.css → CanvasBoard-TS4P356F.css} +13 -6
  41. package/dist/CanvasToolbar/index.js +3 -3
  42. package/dist/Card/index.js +1 -1
  43. package/dist/{Card-KJOYHDTJ.css → Card-QOVASQNU.css} +17 -12
  44. package/dist/Checkbox/index.js +3 -2
  45. package/dist/ChoiceButtons/index.js +1 -1
  46. package/dist/{ChoiceButtons-DJ5EOGUA.css → ChoiceButtons-FLIFXFFS.css} +10 -0
  47. package/dist/ChoiceList/index.js +1 -1
  48. package/dist/{ChoiceList-RBL7FNQL.css → ChoiceList-EA2W6MOS.css} +36 -5
  49. package/dist/Combobox/index.js +3 -2
  50. package/dist/CommandPalette/index.js +3 -2
  51. package/dist/CommentThread/index.js +6 -5
  52. package/dist/Composer/Composer.d.ts +4 -0
  53. package/dist/Composer/index.js +3 -2
  54. package/dist/{Composer-ABGJIAIR.css → Composer-PXITWNEK.css} +26 -15
  55. package/dist/ConfirmField/index.js +3 -2
  56. package/dist/DataTable/index.js +4 -3
  57. package/dist/DataView/index.js +7 -6
  58. package/dist/DatasetSource/DatasetSource.d.ts +4 -0
  59. package/dist/DatasetSource/index.js +1 -1
  60. package/dist/{DatasetSource-XFPZBRXL.css → DatasetSource-SMGX4PS5.css} +38 -4
  61. package/dist/DateTimePicker/index.js +2 -1
  62. package/dist/{DateTimePicker-HG2KQXQ6.css → DateTimePicker-2IVTKFV2.css} +15 -2
  63. package/dist/DocTabsEditor/index.js +3 -2
  64. package/dist/Document/Document.d.ts +15 -3
  65. package/dist/Document/index.js +2 -1
  66. package/dist/{Document-JUGCSQ4L.css → Document-YFWTWXJP.css} +34 -2
  67. package/dist/{Editor-BVQHBF7L.js → Editor-HORWMUM3.js} +2 -1
  68. package/dist/FilterChip/index.js +1 -1
  69. package/dist/{FilterChip-EZ4QMW4E.css → FilterChip-VL33P3JL.css} +5 -1
  70. package/dist/Input/index.js +2 -1
  71. package/dist/{Input-GBZSFXLU.css → Input-ABGOFENS.css} +46 -10
  72. package/dist/LayersList/index.js +1 -1
  73. package/dist/{LayersList-NQZEIPZB.css → LayersList-TBNF4XGL.css} +16 -3
  74. package/dist/LinkInterstitial/index.js +2 -2
  75. package/dist/ListInput/index.js +3 -2
  76. package/dist/LivePreview/LivePreview.d.ts +120 -28
  77. package/dist/LivePreview/budget.d.ts +64 -20
  78. package/dist/LivePreview/index.d.ts +6 -4
  79. package/dist/LivePreview/index.js +1 -1
  80. package/dist/LivePreview/stills.d.ts +57 -0
  81. package/dist/LivePreview-BROGKR4N.css +113 -0
  82. package/dist/PresenterView/index.js +2 -2
  83. package/dist/PrincipalPicker/index.js +4 -3
  84. package/dist/RichEditor/index.js +1 -1
  85. package/dist/Select/index.js +2 -1
  86. package/dist/{Select-A54YS5EP.css → Select-W3CHTZXP.css} +18 -2
  87. package/dist/ShareDialog/index.js +3 -2
  88. package/dist/SheetColumnEditor/index.js +6 -5
  89. package/dist/SheetGrid/index.js +3 -3
  90. package/dist/SlideCompare/index.js +2 -2
  91. package/dist/SlideFilmstrip/index.js +2 -2
  92. package/dist/{SlideFilmstrip-4ITZLMO4.css → SlideFilmstrip-PAT7P4OG.css} +26 -7
  93. package/dist/SlideGrid/index.js +2 -2
  94. package/dist/{SlideGrid-S4LTJ4UU.css → SlideGrid-FJA33DV4.css} +11 -1
  95. package/dist/SlideStage/index.js +1 -1
  96. package/dist/{SlideStage-S2FISF4C.css → SlideStage-ZTTEQSS2.css} +4 -2
  97. package/dist/SourceEditor/index.js +2 -1
  98. package/dist/{SourceEditor-G2C3STPX.css → SourceEditor-QAYE2JS6.css} +19 -12
  99. package/dist/Switcher/index.js +4 -3
  100. package/dist/TagsInput/index.js +2 -1
  101. package/dist/{TagsInput-XMXTI5Q4.css → TagsInput-7EGBBXHS.css} +7 -1
  102. package/dist/ThemeGallery/index.js +1 -1
  103. package/dist/{ThemeGallery-HSUKBDWY.css → ThemeGallery-X35Y25EX.css} +26 -5
  104. package/dist/TimeWindowPicker/index.js +4 -3
  105. package/dist/{TimeWindowPicker-T763GLXH.css → TimeWindowPicker-DEFDV77Z.css} +15 -2
  106. package/dist/TreeCanvas/index.js +3 -3
  107. package/dist/VersionTimeline/index.js +2 -2
  108. package/dist/{chunk-V43UVX4H.js → chunk-27GD7LVR.js} +1 -1
  109. package/dist/{chunk-6JVRY5DQ.js → chunk-44WJLPQS.js} +2 -2
  110. package/dist/{chunk-ONL54WMH.js → chunk-46RL3E54.js} +1 -1
  111. package/dist/{chunk-UHJQDFKQ.js → chunk-4ZJLOKSS.js} +1 -1
  112. package/dist/{chunk-ACA27MZH.js → chunk-5QXRI35B.js} +1 -1
  113. package/dist/{chunk-LL5AFXU7.js → chunk-5RT5O4JR.js} +1 -1
  114. package/dist/{chunk-GMU6SQ6B.js → chunk-66NGUD5S.js} +2 -2
  115. package/dist/{chunk-3Y56GQPM.js → chunk-7VAUGG6B.js} +1 -1
  116. package/dist/{chunk-2CQLNML5.js → chunk-AOLCZDZ6.js} +3 -1
  117. package/dist/{chunk-NKZCJRKO.js → chunk-APDKUGSH.js} +2 -2
  118. package/dist/chunk-BGLKLXL3.js +29 -0
  119. package/dist/{chunk-Z6VW6CXX.js → chunk-BIQDJOJZ.js} +1 -1
  120. package/dist/{chunk-YSJC7AZC.js → chunk-BWOIUOO3.js} +1 -1
  121. package/dist/{chunk-PI7HKLIT.js → chunk-D7GNNID2.js} +3 -1
  122. package/dist/chunk-EAKC24BW.js +51 -0
  123. package/dist/{chunk-CCLNGVCM.js → chunk-EARDAJQY.js} +1 -1
  124. package/dist/chunk-EOQFPZEE.js +138 -0
  125. package/dist/{chunk-THROPJZC.js → chunk-F23N4MVU.js} +1 -1
  126. package/dist/{chunk-J6YZ4IYV.js → chunk-FG4O64DV.js} +3 -3
  127. package/dist/{chunk-E35CMI5D.js → chunk-FHHYXZSP.js} +31 -13
  128. package/dist/{chunk-AYB6AYNH.js → chunk-GMLAKNFY.js} +1 -1
  129. package/dist/{chunk-ZB5O3ELS.js → chunk-GRYZ5EP3.js} +4 -2
  130. package/dist/{chunk-QFNWMWWY.js → chunk-GS7ZTHPF.js} +4 -4
  131. package/dist/{chunk-ILAEBSLJ.js → chunk-H5NOLRGH.js} +2 -2
  132. package/dist/{chunk-W3UVOZKL.js → chunk-IPAU6FLH.js} +6 -2
  133. package/dist/{chunk-6QFAK2WV.js → chunk-IUYUS2SO.js} +4 -1
  134. package/dist/{chunk-22CQQDFW.js → chunk-JML75PGJ.js} +1 -1
  135. package/dist/{chunk-AXBRWRGV.js → chunk-JQLS3MZB.js} +1 -1
  136. package/dist/{chunk-FGYET26P.js → chunk-KJW2AS57.js} +1 -1
  137. package/dist/{chunk-QIXMNOBD.js → chunk-KYZMN6I6.js} +2 -2
  138. package/dist/{chunk-73A7D5CE.js → chunk-L4WZSVMT.js} +3 -1
  139. package/dist/{chunk-ULPL26BU.js → chunk-N5SKHIAP.js} +1 -1
  140. package/dist/{chunk-LV4APO72.js → chunk-NQGPD6NX.js} +1 -1
  141. package/dist/{chunk-7UYONN6K.js → chunk-OHA6WSAG.js} +6 -11
  142. package/dist/chunk-P5VGSVWG.js +39 -0
  143. package/dist/chunk-P6WFZDKS.js +111 -0
  144. package/dist/{chunk-CPEPST4S.js → chunk-PJIPUEJ3.js} +1 -1
  145. package/dist/{chunk-QS4ZGTEU.js → chunk-PPFX6GRK.js} +1 -1
  146. package/dist/{chunk-7DZDSSJS.js → chunk-RH2NCQBZ.js} +5 -4
  147. package/dist/{chunk-3VD3G3IL.js → chunk-T5RQGI6O.js} +1 -1
  148. package/dist/{chunk-F2KY4RLI.js → chunk-TVRBQMIX.js} +5 -3
  149. package/dist/{chunk-W7QBBKUE.js → chunk-UBZDYOCA.js} +7 -3
  150. package/dist/{chunk-QEFHYUCY.js → chunk-UWGUKMBK.js} +1 -1
  151. package/dist/{chunk-5YLON2PW.js → chunk-UYZZV4DZ.js} +1 -1
  152. package/dist/{chunk-BQ7AKL2N.js → chunk-VKKUGZ3G.js} +3 -1
  153. package/dist/{chunk-DEJHAOC5.js → chunk-WMXAX6VA.js} +1 -1
  154. package/dist/{chunk-VDPJGP4Q.js → chunk-WX2NIG4G.js} +1 -1
  155. package/dist/chunk-WYKWXRJ4.js +456 -0
  156. package/dist/{chunk-ZU3DUXD2.js → chunk-WZGYIVYH.js} +1 -1
  157. package/dist/{chunk-HUVG2FFT.js → chunk-Y5BD4MTE.js} +4 -2
  158. package/dist/chunk-YSGLEHND.js +56 -0
  159. package/dist/generated/index.d.ts +4 -0
  160. package/dist/generated/index.js +105 -100
  161. package/dist/index.js +105 -100
  162. package/dist/styles.css +1036 -163
  163. package/dist/utils/focusModality.d.ts +41 -0
  164. package/dist/utils/index.d.ts +2 -0
  165. package/dist/utils/index.js +2 -1
  166. package/package.json +3 -3
  167. package/dist/LivePreview-SRO7KHO4.css +0 -65
  168. package/dist/chunk-KF6YGL4B.js +0 -160
  169. package/dist/chunk-TYKQ33CL.js +0 -35
  170. package/dist/{chunk-3P4Y5RX6.js → chunk-4BYHAOHH.js} +1 -1
  171. package/dist/{chunk-KD2IRYCT.js → chunk-5WDXPHEW.js} +1 -1
  172. package/dist/{chunk-OSFA5ROT.js → chunk-FEJANUZK.js} +0 -0
  173. package/dist/{chunk-FJJHD73S.js → chunk-GYBDPCRC.js} +1 -1
  174. package/dist/{chunk-VHZ3AXJD.js → chunk-NQCY44B3.js} +1 -1
  175. package/dist/{chunk-3WCNHYXE.js → chunk-PNNYVN52.js} +0 -0
  176. package/dist/{chunk-FF5OZV77.js → chunk-W3HYWD63.js} +2 -2
@@ -2,9 +2,10 @@ import { ThemeSwatch } from './chunk-MNFU2RNT.js';
2
2
  import { useHighlightRest } from './chunk-F73MC7EZ.js';
3
3
  import { useRoving, tabStop } from './chunk-RKKO7QHH.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './ThemeGallery-HSUKBDWY.css';
5
+ import './ThemeGallery-X35Y25EX.css';
6
6
  import { useId } from 'react';
7
7
  import { themeGroups, themeRegistry } from '@crewlethq/tokens';
8
+ import { CheckGlyph } from '@crewlethq/icons/glyphs';
8
9
  import { jsx, jsxs } from 'react/jsx-runtime';
9
10
 
10
11
  function ThemeGallery({
@@ -79,7 +80,10 @@ function ThemeGallery({
79
80
  onMouseEnter: () => preview.rest(theme.id),
80
81
  children: [
81
82
  renderPreview ? /* @__PURE__ */ jsx("span", { className: "crewlet-theme-gallery__preview", "aria-hidden": "true", children: renderPreview(theme) }) : theme.swatch ? /* @__PURE__ */ jsx(ThemeSwatch, { swatch: theme.swatch, size: "card" }) : null,
82
- /* @__PURE__ */ jsx("span", { className: "crewlet-theme-gallery__name", children: theme.name })
83
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-theme-gallery__label", children: [
84
+ /* @__PURE__ */ jsx("span", { className: "crewlet-theme-gallery__name", children: theme.name }),
85
+ chosen ? /* @__PURE__ */ jsx(CheckGlyph, { size: "xs", className: "crewlet-theme-gallery__check", "aria-hidden": "true" }) : null
86
+ ] })
83
87
  ]
84
88
  },
85
89
  theme.id
@@ -1,8 +1,9 @@
1
+ import { useFocusModality } from './chunk-YSGLEHND.js';
1
2
  import { useHeadingLevel, headingTag, HeadingLevelProvider, nextHeadingLevel } from './chunk-PQADV6P6.js';
2
3
  import { IconButton } from './chunk-4FQT6ZAY.js';
3
4
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
4
5
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './Input-GBZSFXLU.css';
6
+ import './Input-ABGOFENS.css';
6
7
  import { forwardRef, useRef, useState, useImperativeHandle, useEffect, useId } from 'react';
7
8
  import { XGlyph } from '@crewlethq/icons/glyphs';
8
9
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -21,6 +22,7 @@ var Input = forwardRef(function Input2({
21
22
  disabled,
22
23
  ...rest
23
24
  }, ref) {
25
+ useFocusModality();
24
26
  const field = useRef(null);
25
27
  const [typed, setTyped] = useState(() => String(rest.defaultValue ?? "") !== "");
26
28
  const controlled = rest.value !== void 0;
@@ -80,6 +82,7 @@ function InputAffix({ text, id, sentence }) {
80
82
  ] });
81
83
  }
82
84
  var Textarea = forwardRef(function Textarea2({ error = false, autoResize = false, trailing, className = "", value, disabled, ...rest }, ref) {
85
+ useFocusModality();
83
86
  const localRef = useRef(null);
84
87
  useImperativeHandle(ref, () => localRef.current);
85
88
  useEffect(() => {
@@ -1,6 +1,6 @@
1
1
  import { useClipboard } from './chunk-STJ7QBC3.js';
2
2
  import { Modal } from './chunk-XEGZHHRH.js';
3
- import { Checkbox } from './chunk-CPEPST4S.js';
3
+ import { Checkbox } from './chunk-PJIPUEJ3.js';
4
4
  import { EmptyValue } from './chunk-EUCC37WY.js';
5
5
  import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
6
6
  import { Menu } from './chunk-BUVCV3WI.js';
@@ -1,4 +1,4 @@
1
- import { Document } from './chunk-TYKQ33CL.js';
1
+ import { Document } from './chunk-P6WFZDKS.js';
2
2
  import { ArtifactKindGlyph } from './chunk-CE2THTQR.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './ArtifactCover-D4MBEJ5H.css';
@@ -1,5 +1,5 @@
1
1
  import { InlineCode } from './chunk-5CLW2CXT.js';
2
- import { FormField, Input } from './chunk-6QFAK2WV.js';
2
+ import { FormField, Input } from './chunk-IUYUS2SO.js';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
 
5
5
  function confirmMatches(typed, phrase) {
@@ -1,10 +1,10 @@
1
- import { SlideStage } from './chunk-LV4APO72.js';
1
+ import { SlideStage } from './chunk-NQGPD6NX.js';
2
2
  import { useReorder } from './chunk-XJ2QEBMM.js';
3
3
  import { Kbd, isApplePlatform } from './chunk-SMBKXWML.js';
4
4
  import { Menu } from './chunk-BUVCV3WI.js';
5
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
- import './SlideFilmstrip-4ITZLMO4.css';
7
+ import './SlideFilmstrip-PAT7P4OG.css';
8
8
  import { useRef, useLayoutEffect, useState } from 'react';
9
9
  import { EyeOffGlyph, GripVerticalGlyph, EllipsisGlyph, CopyGlyph, TrashGlyph } from '@crewlethq/icons/glyphs';
10
10
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,9 +1,10 @@
1
1
  import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
2
2
  import { Popover } from './chunk-K3IJQNB7.js';
3
+ import { useFocusModality } from './chunk-YSGLEHND.js';
3
4
  import { Button } from './chunk-OG6CL3EB.js';
4
5
  import { IconButton } from './chunk-4FQT6ZAY.js';
5
6
  import { cx } from './chunk-ODEQTPFM.js';
6
- import './DateTimePicker-HG2KQXQ6.css';
7
+ import './DateTimePicker-2IVTKFV2.css';
7
8
  import { useMemo, useState, useEffect } from 'react';
8
9
  import { CalendarGlyph, ChevronDownGlyph, ChevronsLeftGlyph, ChevronLeftGlyph, ChevronRightGlyph, ChevronsRightGlyph } from '@crewlethq/icons/glyphs';
9
10
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -94,6 +95,7 @@ function DateTimePicker({
94
95
  size = "md",
95
96
  labels: labelOverrides
96
97
  }) {
98
+ useFocusModality();
97
99
  const labels = useMemo(
98
100
  () => labelOverrides ? { ...DEFAULT_DATE_TIME_PICKER_LABELS, ...labelOverrides } : DEFAULT_DATE_TIME_PICKER_LABELS,
99
101
  [labelOverrides]
@@ -1,6 +1,6 @@
1
1
  import { Modal } from './chunk-XEGZHHRH.js';
2
2
  import { useListbox, useHighlightRest } from './chunk-F73MC7EZ.js';
3
- import { Input } from './chunk-6QFAK2WV.js';
3
+ import { Input } from './chunk-IUYUS2SO.js';
4
4
  import { Kbd } from './chunk-SMBKXWML.js';
5
5
  import { Count } from './chunk-BHHIIK3M.js';
6
6
  import { isComposing } from './chunk-R25RGPUB.js';
@@ -1,6 +1,6 @@
1
1
  import { isComposing } from './chunk-R25RGPUB.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './SlideStage-S2FISF4C.css';
3
+ import './SlideStage-ZTTEQSS2.css';
4
4
  import { useRef, useState, useLayoutEffect, useEffect } from 'react';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
 
@@ -1,26 +1,22 @@
1
1
  import { Skeleton } from './chunk-TEUQWOWZ.js';
2
2
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
3
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
4
- import { ArtifactKindGround } from './chunk-W7QBBKUE.js';
5
- import { Card } from './chunk-ACA27MZH.js';
4
+ import { ArtifactKindGround } from './chunk-UBZDYOCA.js';
5
+ import { Card } from './chunk-5QXRI35B.js';
6
6
  import { AvatarStack } from './chunk-5AQBPHZD.js';
7
+ import { ArtifactAccessGlyph } from './chunk-BGLKLXL3.js';
7
8
  import { ArtifactKindGlyph } from './chunk-CE2THTQR.js';
8
9
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
9
10
  import { cx } from './chunk-ODEQTPFM.js';
10
11
  import './ArtifactKinds-CVD3FCYO.css';
11
12
  import './ArtifactCard-OGTMO2KI.css';
12
13
  import { useId } from 'react';
13
- import { PinGlyph, BuildingComplexGlyph, UsersGlyph, LockGlyph } from '@crewlethq/icons/glyphs';
14
+ import { PinGlyph } from '@crewlethq/icons/glyphs';
14
15
  import { jsx, jsxs } from 'react/jsx-runtime';
15
16
 
16
17
  function ArtifactPreviewGlyph({ kind }) {
17
18
  return /* @__PURE__ */ jsx(ArtifactKindGround, { kind });
18
19
  }
19
- var ACCESS_GLYPHS = {
20
- private: LockGlyph,
21
- shared: UsersGlyph,
22
- company: BuildingComplexGlyph
23
- };
24
20
  var LABELS = {
25
21
  kinds: { html: "HTML", doc: "Doc", slides: "Slides", design: "Design", dashboard: "Dashboard", sheet: "Sheet" },
26
22
  pinned: "Pinned",
@@ -112,7 +108,6 @@ function ArtifactCard({
112
108
  }
113
109
  );
114
110
  }
115
- const Access = access ? ACCESS_GLYPHS[access] : null;
116
111
  return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-artifact-card", "crewlet-artifact-card--card", trashed && "crewlet-artifact-card--trashed", className), children: [
117
112
  /* @__PURE__ */ jsxs("a", { href, className: "crewlet-artifact-card__link", "aria-labelledby": titleId, "aria-describedby": factsId, children: [
118
113
  /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__preview", "aria-hidden": true, children: preview ?? /* @__PURE__ */ jsx(ArtifactPreviewGlyph, { kind }) }),
@@ -128,8 +123,8 @@ function ArtifactCard({
128
123
  pinned ? `, ${text.pinned}` : ""
129
124
  ] }),
130
125
  /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__line crewlet-artifact-card__meta", children: [
131
- Access && access ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__access", title: text.access[access], children: [
132
- /* @__PURE__ */ jsx(Access, { size: "sm" }),
126
+ access ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__access", title: text.access[access], children: [
127
+ /* @__PURE__ */ jsx(ArtifactAccessGlyph, { access }),
133
128
  /* @__PURE__ */ jsx(VisuallyHidden, { children: text.access[access] })
134
129
  ] }) : null,
135
130
  owner ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__owner", children: [
@@ -0,0 +1,39 @@
1
+ import { ArtifactKindGlyph } from './chunk-CE2THTQR.js';
2
+ import { VisuallyHidden } from './chunk-BZFWDIV6.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import './ArtifactKinds-CVD3FCYO.css';
5
+ import './ArtifactNameCell-RTVP4LO4.css';
6
+ import { PinGlyph } from '@crewlethq/icons/glyphs';
7
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
+
9
+ var LABELS = {
10
+ kinds: { html: "HTML", doc: "Doc", slides: "Slides", design: "Design", dashboard: "Dashboard", sheet: "Sheet" },
11
+ pinned: "Pinned"
12
+ };
13
+ function ArtifactNameCell({ kind, title, detail, pinned = false, trashed = false, className, labels }) {
14
+ const text = { ...LABELS, ...labels, kinds: { ...LABELS.kinds, ...labels?.kinds } };
15
+ const kindWord = text.kinds[kind];
16
+ const about = detail?.trim();
17
+ return /* @__PURE__ */ jsxs("span", { className: cx("crewlet-artifact-name", trashed && "crewlet-artifact-name--trashed", className), children: [
18
+ /* @__PURE__ */ jsx("span", { className: cx("crewlet-artifact-name__mark", `crewlet-kind--${kind}`), "aria-hidden": "true", children: /* @__PURE__ */ jsx(ArtifactKindGlyph, { kind, size: "sm" }) }),
19
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-name__words", children: [
20
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-name__title-row", children: [
21
+ /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-name__title", title, children: title }),
22
+ pinned ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-name__pin", title: text.pinned, children: [
23
+ /* @__PURE__ */ jsx(PinGlyph, { size: "xs", "aria-hidden": "true" }),
24
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: text.pinned })
25
+ ] }) : null
26
+ ] }),
27
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-name__detail", title: about ? `${kindWord}, ${about}` : kindWord, children: [
28
+ /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-name__kind", children: kindWord }),
29
+ about ? /* @__PURE__ */ jsxs(Fragment, { children: [
30
+ /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-name__dot", "aria-hidden": "true", children: "\xB7" }),
31
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: ", " }),
32
+ /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-name__about", children: about })
33
+ ] }) : null
34
+ ] })
35
+ ] })
36
+ ] });
37
+ }
38
+
39
+ export { ArtifactNameCell };
@@ -0,0 +1,111 @@
1
+ import { useFocusModality } from './chunk-YSGLEHND.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './Document-YFWTWXJP.css';
4
+ import { forwardRef, useRef, useCallback, useLayoutEffect, useEffect } from 'react';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ function Document({ as: Tag = "div", size = "md", measure = "normal", className, children, ...rest }) {
8
+ return /* @__PURE__ */ jsx(
9
+ Tag,
10
+ {
11
+ ...rest,
12
+ className: cx(
13
+ "crewlet-document",
14
+ `crewlet-document--${size}`,
15
+ measure === "normal" && "crewlet-document--measure",
16
+ className
17
+ ),
18
+ children
19
+ }
20
+ );
21
+ }
22
+ function DocumentTitle({ as: Tag = "h1", className, children, ...rest }) {
23
+ return /* @__PURE__ */ jsx(Tag, { ...rest, className: cx("crewlet-document-title", className), children });
24
+ }
25
+ var LINE_BREAKS = /\r\n|[\r\n\u2028\u2029]/g;
26
+ var DocumentTitleField = forwardRef(function DocumentTitleField2({ error = false, className, onChange, onKeyDown, value, defaultValue, ...rest }, forwarded) {
27
+ useFocusModality();
28
+ const own = useRef(null);
29
+ const ref = useCallback(
30
+ (element) => {
31
+ own.current = element;
32
+ if (typeof forwarded === "function") forwarded(element);
33
+ else if (forwarded) forwarded.current = element;
34
+ },
35
+ [forwarded]
36
+ );
37
+ const fit = useCallback(() => {
38
+ const element = own.current;
39
+ if (!element) return;
40
+ element.style.height = "auto";
41
+ const style = getComputedStyle(element);
42
+ const edges = style.boxSizing === "border-box" ? parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth) : -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
43
+ element.style.height = `${element.scrollHeight + (Number.isFinite(edges) ? edges : 0)}px`;
44
+ }, []);
45
+ useLayoutEffect(fit, [fit, value]);
46
+ useEffect(() => {
47
+ const element = own.current;
48
+ if (!element || typeof ResizeObserver === "undefined") return void 0;
49
+ let width = element.clientWidth;
50
+ const observer = new ResizeObserver(() => {
51
+ if (element.clientWidth === width) return;
52
+ width = element.clientWidth;
53
+ fit();
54
+ });
55
+ observer.observe(element);
56
+ return () => observer.disconnect();
57
+ }, [fit]);
58
+ useEffect(() => {
59
+ const element = own.current;
60
+ if (!element) return void 0;
61
+ const refuse = (event) => {
62
+ if (event.inputType === "insertLineBreak" || event.inputType === "insertParagraph") event.preventDefault();
63
+ };
64
+ element.addEventListener("beforeinput", refuse);
65
+ return () => element.removeEventListener("beforeinput", refuse);
66
+ }, []);
67
+ const change = (event) => {
68
+ const element = event.currentTarget;
69
+ if (LINE_BREAKS.test(element.value)) {
70
+ LINE_BREAKS.lastIndex = 0;
71
+ const caret = element.selectionStart;
72
+ element.value = element.value.replace(LINE_BREAKS, " ");
73
+ element.setSelectionRange(caret, caret);
74
+ }
75
+ LINE_BREAKS.lastIndex = 0;
76
+ onChange?.(event);
77
+ if (value === void 0) fit();
78
+ };
79
+ const keyDown = (event) => {
80
+ onKeyDown?.(event);
81
+ if (event.key !== "Enter" || event.defaultPrevented || event.nativeEvent.isComposing) return;
82
+ const form = event.currentTarget.form;
83
+ if (!form) return;
84
+ const submitter = form.querySelector(
85
+ 'button[type="submit"], button:not([type]), input[type="submit"], input[type="image"]'
86
+ );
87
+ if (submitter) {
88
+ if (!submitter.disabled) form.requestSubmit(submitter);
89
+ return;
90
+ }
91
+ const fields = form.querySelectorAll('input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]), textarea');
92
+ if (fields.length === 1) form.requestSubmit();
93
+ };
94
+ return /* @__PURE__ */ jsx(
95
+ "textarea",
96
+ {
97
+ ...rest,
98
+ ref,
99
+ rows: 1,
100
+ value,
101
+ defaultValue,
102
+ "aria-multiline": "false",
103
+ "aria-invalid": error || void 0,
104
+ className: cx("crewlet-document-title", "crewlet-document-title-field", className),
105
+ onChange: change,
106
+ onKeyDown: keyDown
107
+ }
108
+ );
109
+ });
110
+
111
+ export { Document, DocumentTitle, DocumentTitleField };
@@ -1,4 +1,4 @@
1
- import { FormField } from './chunk-6QFAK2WV.js';
1
+ import { FormField } from './chunk-IUYUS2SO.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './Checkbox-ALWG3WV2.css';
4
4
  import { forwardRef, useId, useRef, useCallback, useEffect } from 'react';
@@ -1,5 +1,5 @@
1
1
  import { useListbox } from './chunk-F73MC7EZ.js';
2
- import { Input } from './chunk-6QFAK2WV.js';
2
+ import { Input } from './chunk-IUYUS2SO.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './Combobox-4FUVYIE7.css';
5
5
  import { forwardRef, useId, useMemo, useRef, useCallback } from 'react';
@@ -1,13 +1,14 @@
1
- import { Textarea } from './chunk-6QFAK2WV.js';
1
+ import { Textarea } from './chunk-IUYUS2SO.js';
2
2
  import { Kbd } from './chunk-SMBKXWML.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
- import './Composer-ABGJIAIR.css';
4
+ import './Composer-PXITWNEK.css';
5
5
  import { forwardRef } from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7
 
8
8
  var COMPOSER_COUNTER_AT = 0.8;
9
9
  var Composer = forwardRef(function Composer2({ value, onChange, onSubmit, label, actions, maxLength, className, rows = 3, onKeyDown, ...rest }, ref) {
10
10
  const near = maxLength !== void 0 && value.length >= maxLength * COMPOSER_COUNTER_AT;
11
+ const hasActions = actions !== void 0 && actions !== null && actions !== false;
11
12
  const keyDown = (event) => {
12
13
  onKeyDown?.(event);
13
14
  if (event.defaultPrevented || !onSubmit) return;
@@ -32,7 +33,7 @@ var Composer = forwardRef(function Composer2({ value, onChange, onSubmit, label,
32
33
  ...rest
33
34
  }
34
35
  ),
35
- /* @__PURE__ */ jsxs("div", { className: "crewlet-composer__footer", children: [
36
+ onSubmit || near || hasActions ? /* @__PURE__ */ jsxs("div", { className: "crewlet-composer__footer", "data-hint-only": !near && !hasActions || void 0, children: [
36
37
  onSubmit ? /* @__PURE__ */ jsxs("span", { className: "crewlet-composer__hint", children: [
37
38
  /* @__PURE__ */ jsx(Kbd, { keys: ["Mod", "Enter"], subtle: true }),
38
39
  " to send"
@@ -40,7 +41,7 @@ var Composer = forwardRef(function Composer2({ value, onChange, onSubmit, label,
40
41
  near ? /* @__PURE__ */ jsx("span", { className: "crewlet-composer__counter", "aria-live": "polite", children: `${value.length.toLocaleString()} / ${maxLength.toLocaleString()}` }) : null,
41
42
  /* @__PURE__ */ jsx("span", { className: "crewlet-composer__spacer" }),
42
43
  actions
43
- ] })
44
+ ] }) : null
44
45
  ] });
45
46
  });
46
47
 
@@ -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-BVQHBF7L.js').then(
12
+ loading ??= import('./Editor-HORWMUM3.js').then(
13
13
  (module) => {
14
14
  engine = module.Editor;
15
15
  return engine;
@@ -1,12 +1,13 @@
1
- import { Select } from './chunk-BQ7AKL2N.js';
1
+ import { Select } from './chunk-VKKUGZ3G.js';
2
2
  import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-GXQ3B46I.js';
3
3
  import { Popover } from './chunk-K3IJQNB7.js';
4
- import { Input } from './chunk-6QFAK2WV.js';
4
+ import { Input } from './chunk-IUYUS2SO.js';
5
+ import { useFocusModality } from './chunk-YSGLEHND.js';
5
6
  import { isComposing } from './chunk-R25RGPUB.js';
6
7
  import { Button } from './chunk-OG6CL3EB.js';
7
8
  import { IconButton } from './chunk-4FQT6ZAY.js';
8
9
  import { cx } from './chunk-ODEQTPFM.js';
9
- import './TimeWindowPicker-T763GLXH.css';
10
+ import './TimeWindowPicker-DEFDV77Z.css';
10
11
  import { useMemo, useState, useRef, useId, useEffect } from 'react';
11
12
  import { ClockGlyph, ChevronDownGlyph, CheckGlyph, ChevronLeftGlyph, ChevronRightGlyph } from '@crewlethq/icons/glyphs';
12
13
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -322,6 +323,7 @@ function TimeWindowPicker({
322
323
  size = "md",
323
324
  labels: labelOverrides
324
325
  }) {
326
+ useFocusModality();
325
327
  const labels = useMemo(() => withLabels(labelOverrides), [labelOverrides]);
326
328
  const isSet = isTimeWindowSet(value);
327
329
  const described = describeTimeWindow(value, { presets, labels });
@@ -1,8 +1,9 @@
1
1
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './ArtifactKinds-CVD3FCYO.css';
4
- import './ArtifactKindIllustration-5FPRJQ3P.css';
4
+ import './ArtifactKindIllustration-KLFL7KBG.css';
5
5
  import { useId } from 'react';
6
+ import { CheckGlyph } from '@crewlethq/icons/glyphs';
6
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
8
 
8
9
  function ArtifactKindIllustration({ kind, className }) {
@@ -100,6 +101,7 @@ function ArtifactKindTile({
100
101
  label,
101
102
  href,
102
103
  onSelect,
104
+ selected,
103
105
  face,
104
106
  detail,
105
107
  badge,
@@ -113,7 +115,8 @@ function ArtifactKindTile({
113
115
  /* @__PURE__ */ jsx("span", { className: "crewlet-kind-tile__frame", children: /* @__PURE__ */ jsx(ArtifactKindGround, { kind, className: "crewlet-kind-tile__ground", children: face }) }),
114
116
  /* @__PURE__ */ jsxs("span", { className: "crewlet-kind-tile__label", children: [
115
117
  /* @__PURE__ */ jsx("span", { className: "crewlet-kind-tile__name", children: label }),
116
- badge ? /* @__PURE__ */ jsx("span", { className: "crewlet-kind-tile__badge", children: badge }) : null
118
+ badge ? /* @__PURE__ */ jsx("span", { className: "crewlet-kind-tile__badge", children: badge }) : null,
119
+ selected && href === void 0 ? /* @__PURE__ */ jsx(CheckGlyph, { size: "xs", className: "crewlet-kind-tile__check", "aria-hidden": "true" }) : null
117
120
  ] }),
118
121
  detail ? /* @__PURE__ */ jsx("span", { id: detailId, className: "crewlet-kind-tile__detail", children: detail }) : null
119
122
  ] });
@@ -144,7 +147,8 @@ function ArtifactKindTile({
144
147
  type: "button",
145
148
  "aria-label": name,
146
149
  "aria-describedby": describedBy,
147
- className: cx("crewlet-kind-tile", "crewlet-kind-tile--button", className),
150
+ "aria-pressed": selected,
151
+ className: cx("crewlet-kind-tile", "crewlet-kind-tile--button", selected && "is-selected", className),
148
152
  onClick: onSelect,
149
153
  children: body
150
154
  }
@@ -1,5 +1,5 @@
1
1
  import { useReorder } from './chunk-XJ2QEBMM.js';
2
- import { Input } from './chunk-6QFAK2WV.js';
2
+ import { Input } from './chunk-IUYUS2SO.js';
3
3
  import { Menu } from './chunk-BUVCV3WI.js';
4
4
  import { IconButton } from './chunk-4FQT6ZAY.js';
5
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
@@ -1,6 +1,6 @@
1
1
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './FilterChip-EZ4QMW4E.css';
3
+ import './FilterChip-VL33P3JL.css';
4
4
  import { createContext, useContext, useRef, useId, useCallback, useLayoutEffect } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -1,7 +1,8 @@
1
1
  import { useListbox, useOptionKeys, useHighlightRest } from './chunk-F73MC7EZ.js';
2
+ import { useFocusModality } from './chunk-YSGLEHND.js';
2
3
  import { useLayerContainer, viewportBounds, anchorGone, placePopup, LAYER_GAP, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
3
4
  import { cx } from './chunk-ODEQTPFM.js';
4
- import './Select-A54YS5EP.css';
5
+ import './Select-W3CHTZXP.css';
5
6
  import { forwardRef, useId, useMemo, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
6
7
  import { createPortal } from 'react-dom';
7
8
  import { ChevronDownGlyph, CheckGlyph, SearchGlyph } from '@crewlethq/icons/glyphs';
@@ -36,6 +37,7 @@ var Select = forwardRef(function Select2({
36
37
  onHighlight,
37
38
  ...native
38
39
  }, ref) {
40
+ useFocusModality();
39
41
  const generatedId = useId();
40
42
  const rootId = id ?? generatedId;
41
43
  const classes = cx(className, width === "auto" && "crewlet-select--auto", appearance === "quiet" && "crewlet-select--quiet");
@@ -1,7 +1,7 @@
1
1
  import { announce } from './chunk-RSAQOKH3.js';
2
2
  import { IconButton } from './chunk-4FQT6ZAY.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
- import './ArrangeFrame-3PLZAG22.css';
4
+ import './ArrangeFrame-QXOQTFAH.css';
5
5
  import { forwardRef, useRef, useCallback, useState, useEffect } from 'react';
6
6
  import { TrashGlyph } from '@crewlethq/icons/glyphs';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
1
  import { BrandLockup } from './chunk-7KBNFFM3.js';
2
- import { Card } from './chunk-ACA27MZH.js';
2
+ import { Card } from './chunk-5QXRI35B.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './AuthLayout-ODHBUPHQ.css';
5
5
  import { useId } from 'react';