@crewlethq/ui 0.65.0 → 0.66.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 (61) hide show
  1. package/README.md +8 -0
  2. package/dist/AppShell/index.js +1 -1
  3. package/dist/{AppShell-LZQA3XU4.css → AppShell-2IBUS4TH.css} +6 -1
  4. package/dist/ArtifactCard/index.js +3 -3
  5. package/dist/AuthLayout/index.js +2 -2
  6. package/dist/Card/index.js +1 -1
  7. package/dist/ChatThread/ChatThread.d.ts +9 -0
  8. package/dist/ChatThread/index.js +1 -1
  9. package/dist/{ChatThread-FGXVDLI2.css → ChatThread-2KO3FZKQ.css} +12 -9
  10. package/dist/CommentThread/index.js +2 -2
  11. package/dist/DataView/index.js +2 -2
  12. package/dist/DatasetSource/index.js +2 -2
  13. package/dist/DeepWorkCard/index.js +3 -3
  14. package/dist/EditingStatus/index.js +2 -2
  15. package/dist/EntityList/index.js +3 -3
  16. package/dist/FolderTile/index.js +2 -2
  17. package/dist/InlineEditor/index.js +3 -3
  18. package/dist/OpenInAppCard/index.js +3 -3
  19. package/dist/ProposalCard/ProposalCard.d.ts +58 -1
  20. package/dist/ProposalCard/index.d.ts +2 -2
  21. package/dist/ProposalCard/index.js +10 -3
  22. package/dist/{ProposalCard-VTTCDXYK.css → ProposalCard-SF332W4E.css} +22 -0
  23. package/dist/RefusalCard/index.js +3 -3
  24. package/dist/RelatedRow/index.js +2 -2
  25. package/dist/RelativeTime/index.js +1 -1
  26. package/dist/ResultTableCard/index.js +3 -3
  27. package/dist/SetupWizard/index.js +2 -2
  28. package/dist/StatusCard/StatusCard.d.ts +10 -3
  29. package/dist/StatusCard/index.js +2 -2
  30. package/dist/{StatusCard-FCJN7SXJ.css → StatusCard-72STCSWY.css} +6 -6
  31. package/dist/TableCells/index.js +2 -2
  32. package/dist/VersionTimeline/index.js +2 -2
  33. package/dist/WidgetFrame/index.js +2 -2
  34. package/dist/{chunk-4WKOLL7C.js → chunk-2AQMXGWA.js} +64 -7
  35. package/dist/{chunk-N7PXGOZP.js → chunk-3EETQFAM.js} +2 -2
  36. package/dist/{chunk-7XKDPTZ5.js → chunk-4AUTALJA.js} +5 -6
  37. package/dist/{chunk-ZFN4IBVC.js → chunk-5K7GGQNX.js} +1 -1
  38. package/dist/{chunk-ISBKJOLI.js → chunk-7IW3P6FH.js} +1 -1
  39. package/dist/{chunk-RPX3WICJ.js → chunk-7QTJO3PV.js} +1 -1
  40. package/dist/{chunk-OGRMOWMO.js → chunk-CNEHFH2A.js} +1 -1
  41. package/dist/{chunk-F2IYVVA3.js → chunk-D2ZXIQ23.js} +31 -4
  42. package/dist/{chunk-L6NG7CUA.js → chunk-EJNJMHQG.js} +1 -1
  43. package/dist/{chunk-E55DKVY7.js → chunk-GJ7VIQWL.js} +1 -1
  44. package/dist/{chunk-NWTHGZBH.js → chunk-GNDKUSCG.js} +1 -1
  45. package/dist/{chunk-XGBGEI6V.js → chunk-J5BIKMQY.js} +1 -1
  46. package/dist/{chunk-G4234OIG.js → chunk-NTQPJJAN.js} +4 -4
  47. package/dist/{chunk-VVOFJFRT.js → chunk-QBWNGNF7.js} +1 -1
  48. package/dist/{chunk-VRG2ZXNK.js → chunk-R6K62EXV.js} +1 -1
  49. package/dist/{chunk-YBKZJBKM.js → chunk-RQHN4J5P.js} +1 -1
  50. package/dist/{chunk-4EDSEX7U.js → chunk-S5QJZOPL.js} +1 -1
  51. package/dist/{chunk-DKJJ434E.js → chunk-UBJ32EO2.js} +1 -1
  52. package/dist/{chunk-RHL4OMQ3.js → chunk-UWOYDHVW.js} +1 -1
  53. package/dist/{chunk-B76OKJMX.js → chunk-VLGGLLKH.js} +1 -1
  54. package/dist/{chunk-JAFWGVX2.js → chunk-WKKWF277.js} +1 -1
  55. package/dist/{chunk-SRSE7FGL.js → chunk-WPMZKZUH.js} +1 -1
  56. package/dist/{chunk-6MTJWQ3V.js → chunk-WTXCK46H.js} +1 -1
  57. package/dist/generated/index.js +39 -39
  58. package/dist/index.js +39 -39
  59. package/dist/styles.css +50 -20
  60. package/package.json +3 -3
  61. package/dist/{chunk-R2YHKVWN.js → chunk-SBHAKX2T.js} +1 -1
@@ -1,12 +1,14 @@
1
1
  import { RefusalStrip, ReceiptStrip } from './chunk-M25IV5MH.js';
2
- import { StatusCard } from './chunk-G4234OIG.js';
2
+ import { StatusCard } from './chunk-NTQPJJAN.js';
3
3
  import { ChangeList } from './chunk-WQRSZMN4.js';
4
+ import { Checkbox } from './chunk-PBCNINMB.js';
5
+ import { Disclosure } from './chunk-222VILSP.js';
4
6
  import { Button } from './chunk-7QTPJDRF.js';
5
7
  import { Spinner } from './chunk-XSPCITPN.js';
6
8
  import { cx } from './chunk-ODEQTPFM.js';
7
9
  import './VisuallyHidden-AOEXU5EB.css';
8
- import './ProposalCard-VTTCDXYK.css';
9
- import { useId, useRef, useLayoutEffect } from 'react';
10
+ import './ProposalCard-SF332W4E.css';
11
+ import { useId, useRef, useLayoutEffect, useState, useEffect } from 'react';
10
12
  import { RefreshCwGlyph, LockGlyph, BanGlyph, ClockGlyph, CircleAlertGlyph, CircleCheckGlyph } from '@crewlethq/icons/glyphs';
11
13
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
12
14
 
@@ -21,6 +23,7 @@ var PROPOSAL_STATES = [
21
23
  "failed"
22
24
  ];
23
25
  var PROPOSAL_FAILURE_OUTCOMES = ["unchanged", "unknown"];
26
+ var PROPOSAL_TONES = ["default", "danger"];
24
27
  var PROPOSAL_CARD_LABELS = {
25
28
  needsApproval: "Needs your approval",
26
29
  needsSignIn: "Needs sign-in",
@@ -48,9 +51,12 @@ var PROPOSAL_CARD_LABELS = {
48
51
  staleNotice: "What this would change moved after it was prepared, so it was not applied. Nothing changed.",
49
52
  nothingChanged: "Nothing changed.",
50
53
  unknownNotice: "Could not confirm whether this was applied. It may have landed.",
51
- busy: "The approved change is being carried out"
54
+ busy: "The approved change is being carried out",
55
+ confirmationNeeded: "Check the confirmation above first",
56
+ details: "Technical details"
52
57
  };
53
58
  var SETTLED = /* @__PURE__ */ new Set(["applied", "declined", "expired", "stale", "failed"]);
59
+ var ARMING_MS = 500;
54
60
  function statusOf(state, scope, outcome, labels) {
55
61
  switch (state) {
56
62
  case "pending":
@@ -90,6 +96,9 @@ function ProposalCard({
90
96
  changes,
91
97
  changesHeading,
92
98
  note,
99
+ details,
100
+ tone = "default",
101
+ confirmation,
93
102
  approveLabel,
94
103
  onApprove,
95
104
  onDecline,
@@ -132,6 +141,23 @@ function ProposalCard({
132
141
  const deciding = state === "pending" || state === "stepup";
133
142
  const blocked = deciding && approveBlocked ? approveBlocked : void 0;
134
143
  const refusal = deciding ? decisionRefusal : void 0;
144
+ const danger = tone === "danger" && !settled;
145
+ const identity = `${title}\0${approveLabel}`;
146
+ const [tickedFor, setTickedFor] = useState(void 0);
147
+ if (settled && tickedFor !== void 0) setTickedFor(void 0);
148
+ const unconfirmed = deciding && confirmation !== void 0 && tickedFor !== identity ? labels.confirmationNeeded : void 0;
149
+ const armKey = deciding ? `${state}\0${identity}` : void 0;
150
+ const [arm, setArm] = useState({ key: armKey, armed: false });
151
+ if (arm.key !== armKey) setArm({ key: armKey, armed: false });
152
+ useEffect(() => {
153
+ if (armKey === void 0) return;
154
+ const timer = setTimeout(
155
+ () => setArm((current) => current.key === armKey ? { key: armKey, armed: true } : current),
156
+ ARMING_MS
157
+ );
158
+ return () => clearTimeout(timer);
159
+ }, [armKey]);
160
+ const arming = armKey !== void 0 && !(arm.key === armKey && arm.armed);
135
161
  const decision = deciding || state === "applying" ? /* @__PURE__ */ jsxs(Fragment, { children: [
136
162
  /* @__PURE__ */ jsx(
137
163
  "div",
@@ -142,6 +168,18 @@ function ProposalCard({
142
168
  }
143
169
  ),
144
170
  blocked === void 0 ? null : /* @__PURE__ */ jsx("p", { className: "crewlet-proposal-card__blocked", "aria-hidden": "true", children: blocked }),
171
+ confirmation === void 0 ? null : /* @__PURE__ */ jsx(
172
+ Checkbox,
173
+ {
174
+ className: "crewlet-proposal-card__confirmation",
175
+ size: "sm",
176
+ tone: danger ? "danger" : "default",
177
+ label: confirmation.label,
178
+ checked: tickedFor === identity,
179
+ disabled: state === "applying",
180
+ onCheckedChange: (checked) => setTickedFor(checked ? identity : void 0)
181
+ }
182
+ ),
145
183
  /* @__PURE__ */ jsx(
146
184
  Button,
147
185
  {
@@ -151,7 +189,18 @@ function ProposalCard({
151
189
  children: labels.decline
152
190
  }
153
191
  ),
154
- /* @__PURE__ */ jsx(Button, { variant: "primary", loading: state === "applying", disabledReason: blocked, onClick: onApprove, children: state === "stepup" ? labels.confirmIdentity : approveLabel })
192
+ /* @__PURE__ */ jsx(
193
+ Button,
194
+ {
195
+ variant: danger ? "danger" : "primary",
196
+ className: "crewlet-proposal-card__approve",
197
+ loading: state === "applying",
198
+ disabledReason: blocked ?? unconfirmed,
199
+ "data-arming": arming || void 0,
200
+ onClick: onApprove,
201
+ children: state === "stepup" ? labels.confirmIdentity : approveLabel
202
+ }
203
+ )
155
204
  ] }) : void 0;
156
205
  const again = (state === "expired" || state === "stale") && onPrepareAgain ? /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "small", leadingIcon: /* @__PURE__ */ jsx(RefreshCwGlyph, {}), onClick: onPrepareAgain, children: labels.prepareAgain }) : void 0;
157
206
  const strip = state === "stepup" ? /* @__PURE__ */ jsx(ReceiptStrip, { tone: "neutral", icon: /* @__PURE__ */ jsx(LockGlyph, { size: "md" }), children: notice ?? labels.stepUpNotice }) : state === "applied" && receipt !== void 0 ? /* @__PURE__ */ jsx(ReceiptStrip, { ...landing, tone: "success", children: receipt }) : state === "declined" ? /* @__PURE__ */ jsx(ReceiptStrip, { ...landing, tone: "neutral", icon: /* @__PURE__ */ jsx(BanGlyph, { size: "md" }), children: notice ?? labels.declinedNotice }) : state === "expired" ? /* @__PURE__ */ jsx(ReceiptStrip, { ...landing, tone: "neutral", icon: /* @__PURE__ */ jsx(ClockGlyph, { size: "md" }), children: notice ?? labels.expiredNotice }) : state === "stale" ? /* @__PURE__ */ jsx(ReceiptStrip, { ...landing, tone: "neutral", icon: /* @__PURE__ */ jsx(ClockGlyph, { size: "md" }), children: notice ?? labels.staleNotice }) : state === "failed" ? /* @__PURE__ */ jsx(
@@ -182,8 +231,15 @@ function ProposalCard({
182
231
  strip,
183
232
  actions: decision ?? again,
184
233
  actionsAlign: decision ? "end" : "start",
185
- className: cx("crewlet-proposal-card", `crewlet-proposal-card--${state}`, className),
234
+ rail: danger ? "danger" : void 0,
235
+ className: cx(
236
+ "crewlet-proposal-card",
237
+ `crewlet-proposal-card--${state}`,
238
+ danger && "crewlet-proposal-card--danger",
239
+ className
240
+ ),
186
241
  "data-state": state,
242
+ "data-tone": danger ? "danger" : void 0,
187
243
  "data-outcome": state === "failed" ? failureOutcome : void 0,
188
244
  children: [
189
245
  summary === void 0 || summary === null ? null : /* @__PURE__ */ jsx("p", { className: "crewlet-proposal-card__summary", children: summary }),
@@ -197,10 +253,11 @@ function ProposalCard({
197
253
  diffLabels
198
254
  }
199
255
  ),
256
+ details === void 0 || details === null ? null : /* @__PURE__ */ jsx(Disclosure, { className: "crewlet-proposal-card__details", title: labels.details, size: "compact", lazy: true, children: details }),
200
257
  note === void 0 || note === null ? null : /* @__PURE__ */ jsx("p", { className: "crewlet-proposal-card__note", children: note })
201
258
  ]
202
259
  }
203
260
  );
204
261
  }
205
262
 
206
- export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, ProposalCard };
263
+ export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, PROPOSAL_TONES, ProposalCard };
@@ -1,7 +1,7 @@
1
1
  import { Skeleton } from './chunk-BRLZXYPA.js';
2
2
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
- import { RelativeTime } from './chunk-L6NG7CUA.js';
4
- import { Card } from './chunk-7XKDPTZ5.js';
3
+ import { RelativeTime } from './chunk-EJNJMHQG.js';
4
+ import { Card } from './chunk-4AUTALJA.js';
5
5
  import { AvatarStack } from './chunk-BKP6XCAJ.js';
6
6
  import { ArtifactKindGround } from './chunk-NHLNHH4J.js';
7
7
  import { Checkbox } from './chunk-PBCNINMB.js';
@@ -121,12 +121,11 @@ var CardRoot = ({
121
121
  }),
122
122
  [slots.header, chromeNode, claimChrome, releaseChrome]
123
123
  );
124
- const context = {
125
- titleLevel: level,
126
- titleId,
127
- registerTitle: () => setHasTitle(true),
128
- hostChrome
129
- };
124
+ const registerTitle = useCallback(() => setHasTitle(true), []);
125
+ const context = useMemo(
126
+ () => ({ titleLevel: level, titleId, registerTitle, hostChrome }),
127
+ [level, titleId, registerTitle, hostChrome]
128
+ );
130
129
  const body = /* @__PURE__ */ jsx(CardContext.Provider, { value: context, children: /* @__PURE__ */ jsx(CardHeaderSlotContext.Provider, { value: headerSlot, children: /* @__PURE__ */ jsx(HeadingLevelProvider, { level: nextHeadingLevel(level), children: content }) }) });
131
130
  if (asChild) {
132
131
  const child = Children.only(children);
@@ -1,7 +1,7 @@
1
1
  import { safeHref } from './chunk-BAKPMH3S.js';
2
2
  import { IconTile } from './chunk-3LI4TRUR.js';
3
3
  import { ReceiptStrip } from './chunk-M25IV5MH.js';
4
- import { StatusCard } from './chunk-G4234OIG.js';
4
+ import { StatusCard } from './chunk-NTQPJJAN.js';
5
5
  import { ButtonLink, Button } from './chunk-7QTPJDRF.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './OpenInAppCard-CKHCK7DO.css';
@@ -1,4 +1,4 @@
1
- import { StatusCard } from './chunk-G4234OIG.js';
1
+ import { StatusCard } from './chunk-NTQPJJAN.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './EntityList-DT3BQLUW.css';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  import { Table } from './chunk-5DJMFRSZ.js';
2
2
  import { DownloadButton } from './chunk-NSCYGUDG.js';
3
- import { StatusCard } from './chunk-G4234OIG.js';
3
+ import { StatusCard } from './chunk-NTQPJJAN.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './ResultTableCard-AP355LQM.css';
6
6
  import { useState } from 'react';
@@ -1,6 +1,6 @@
1
1
  import { Text } from './chunk-QP2P6GDQ.js';
2
2
  import { Inline, Stack, Spacer } from './chunk-ZAC7SKUN.js';
3
- import { Card } from './chunk-7XKDPTZ5.js';
3
+ import { Card } from './chunk-4AUTALJA.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './RelatedRow-IZ22XCLP.css';
6
6
  import { ChevronRightGlyph } from '@crewlethq/icons/glyphs';
@@ -2,8 +2,8 @@ import { useMediaMatch } from './chunk-RTPQDNW3.js';
2
2
  import { Button } from './chunk-7QTPJDRF.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './ChatThread-FGXVDLI2.css';
6
- import { forwardRef, useRef, Children, useState, useCallback, useLayoutEffect, useEffect, useImperativeHandle } from 'react';
5
+ import './ChatThread-2KO3FZKQ.css';
6
+ import { forwardRef, useRef, Children, useState, useCallback, useEffect, useLayoutEffect, useImperativeHandle } from 'react';
7
7
  import { ArrowDownGlyph } from '@crewlethq/icons/glyphs';
8
8
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
9
9
 
@@ -19,6 +19,7 @@ var ChatThread = forwardRef(function ChatThread2({ label, busy = false, follow =
19
19
  const reduced = useMediaMatch("(prefers-reduced-motion: reduce)");
20
20
  const count = Children.toArray(children).length;
21
21
  const atEnd = useRef(true);
22
+ const jumping = useRef(false);
22
23
  const [detachedAt, setDetachedAt] = useState(null);
23
24
  const countRef = useRef(count);
24
25
  countRef.current = count;
@@ -27,8 +28,13 @@ var ChatThread = forwardRef(function ChatThread2({ label, busy = false, follow =
27
28
  const el = scroller.current;
28
29
  if (!el) return;
29
30
  const top = el.scrollHeight - el.clientHeight;
30
- if (smooth && !reduced && typeof el.scrollTo === "function") el.scrollTo({ top, behavior: "smooth" });
31
- else el.scrollTop = top;
31
+ if (smooth && !reduced && typeof el.scrollTo === "function") {
32
+ jumping.current = true;
33
+ el.scrollTo({ top, behavior: "smooth" });
34
+ } else {
35
+ jumping.current = false;
36
+ el.scrollTop = top;
37
+ }
32
38
  atEnd.current = true;
33
39
  setDetachedAt(null);
34
40
  },
@@ -38,9 +44,30 @@ var ChatThread = forwardRef(function ChatThread2({ label, busy = false, follow =
38
44
  const el = scroller.current;
39
45
  if (!el) return;
40
46
  const end = el.scrollHeight - el.scrollTop - el.clientHeight <= CHAT_THREAD_FOLLOW_WITHIN;
47
+ if (jumping.current) {
48
+ if (end) jumping.current = false;
49
+ return;
50
+ }
41
51
  atEnd.current = end;
42
52
  setDetachedAt((prior) => end ? null : prior ?? countRef.current);
43
53
  }, []);
54
+ useEffect(() => {
55
+ const el = scroller.current;
56
+ if (!el) return;
57
+ const interrupt = () => {
58
+ jumping.current = false;
59
+ };
60
+ const settled = () => {
61
+ if (jumping.current) toEnd(false);
62
+ };
63
+ const intents = ["wheel", "touchstart", "keydown"];
64
+ el.addEventListener("scrollend", settled);
65
+ for (const intent of intents) el.addEventListener(intent, interrupt, { passive: true });
66
+ return () => {
67
+ el.removeEventListener("scrollend", settled);
68
+ for (const intent of intents) el.removeEventListener(intent, interrupt);
69
+ };
70
+ }, [toEnd]);
44
71
  useLayoutEffect(() => {
45
72
  if (follow && atEnd.current) toEnd(false);
46
73
  }, [children, follow, toEnd]);
@@ -74,8 +74,8 @@ function formatRelative(value, now2) {
74
74
  const at = toInstant(value);
75
75
  if (at === null) return null;
76
76
  const seconds = Math.round((now2 - at) / SECOND);
77
+ if (Math.abs(seconds) < 5) return "just now";
77
78
  if (seconds < 0) return formatUntil(value, now2);
78
- if (seconds < 5) return "just now";
79
79
  if (seconds < MINUTE) return `${seconds}s ago`;
80
80
  const minutes = Math.floor(seconds / MINUTE);
81
81
  if (minutes < MINUTE) return `${minutes}m ago`;
@@ -8,7 +8,7 @@ import { returnFocus } from './chunk-NUZHC6MM.js';
8
8
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
10
  import './HitArea-QUOS6ZDJ.css';
11
- import './AppShell-LZQA3XU4.css';
11
+ import './AppShell-2IBUS4TH.css';
12
12
  import './ResizeHandle-2UNSZ4ZQ.css';
13
13
  import { createContext, forwardRef, useContext, useSyncExternalStore, useCallback, useId, useState, useRef, useEffect, useLayoutEffect } from 'react';
14
14
  import { breakpoint } from '@crewlethq/tokens';
@@ -1,6 +1,6 @@
1
1
  import { Link } from './chunk-QF5UNP4T.js';
2
2
  import { Tag } from './chunk-I5OIKDX2.js';
3
- import { RelativeTime } from './chunk-L6NG7CUA.js';
3
+ import { RelativeTime } from './chunk-EJNJMHQG.js';
4
4
  import { EmptyValue } from './chunk-RE3FBGQQ.js';
5
5
  import { Avatar } from './chunk-PZKHBB7D.js';
6
6
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
@@ -4,7 +4,7 @@ import { DateTimePicker } from './chunk-PX54PALQ.js';
4
4
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
5
5
  import { Toolbar } from './chunk-NR4CPM4T.js';
6
6
  import { Popover } from './chunk-KHJIEPZV.js';
7
- import { RelativeTime } from './chunk-L6NG7CUA.js';
7
+ import { RelativeTime } from './chunk-EJNJMHQG.js';
8
8
  import { Kbd } from './chunk-ANTAQAR4.js';
9
9
  import { Input } from './chunk-ETSF7SU6.js';
10
10
  import { Count } from './chunk-MLDTLZAO.js';
@@ -1,8 +1,8 @@
1
1
  import { Tag } from './chunk-I5OIKDX2.js';
2
- import { Card } from './chunk-7XKDPTZ5.js';
2
+ import { Card } from './chunk-4AUTALJA.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './StatusCard-FCJN7SXJ.css';
5
+ import './StatusCard-72STCSWY.css';
6
6
  import { useId, useState } from 'react';
7
7
  import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -41,7 +41,7 @@ function StatusCard({
41
41
  const hasActions = !(actions === void 0 || actions === null || actions === false);
42
42
  const hasSummary = !(summary === void 0 || summary === null || summary === false || summary === "");
43
43
  const tag = status ? /* @__PURE__ */ jsx(Tag, { id: statusId, size: "sm", variant: status.tone, leadingIcon: status.icon, children: status.label }) : null;
44
- const headActions = folded && hasActions ? /* @__PURE__ */ jsxs(Fragment, { children: [
44
+ const headActions = collapsible && hasActions ? /* @__PURE__ */ jsxs(Fragment, { children: [
45
45
  tag,
46
46
  /* @__PURE__ */ jsx("span", { className: "crewlet-status-card__head-actions", children: actions })
47
47
  ] }) : tag ?? void 0;
@@ -109,7 +109,7 @@ function StatusCard({
109
109
  }
110
110
  ) : null,
111
111
  folded || strip === void 0 || strip === null || strip === false ? null : /* @__PURE__ */ jsx(Card.Footer, { padding: "none", className: "crewlet-status-card__strip", children: strip }),
112
- folded || !hasActions ? null : /* @__PURE__ */ jsx(Card.Footer, { className: cx("crewlet-status-card__actions", `crewlet-status-card__actions--${actionsAlign}`), children: actions })
112
+ collapsible || !hasActions ? null : /* @__PURE__ */ jsx(Card.Footer, { className: cx("crewlet-status-card__actions", `crewlet-status-card__actions--${actionsAlign}`), children: actions })
113
113
  ]
114
114
  }
115
115
  );
@@ -1,4 +1,4 @@
1
- import { EditingStatus } from './chunk-B76OKJMX.js';
1
+ import { EditingStatus } from './chunk-VLGGLLKH.js';
2
2
  import { Kbd } from './chunk-ANTAQAR4.js';
3
3
  import { Button } from './chunk-7QTPJDRF.js';
4
4
  import { isComposing } from './chunk-H5XTJ7GJ.js';
@@ -1,5 +1,5 @@
1
1
  import { Tag } from './chunk-I5OIKDX2.js';
2
- import { RelativeTime } from './chunk-L6NG7CUA.js';
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';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { StatusCard } from './chunk-G4234OIG.js';
1
+ import { StatusCard } from './chunk-NTQPJJAN.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './RefusalCard-UM67F5HB.css';
4
4
  import { LockGlyph } from '@crewlethq/icons/glyphs';
@@ -1,5 +1,5 @@
1
1
  import { Skeleton } from './chunk-BRLZXYPA.js';
2
- import { RelativeTime } from './chunk-L6NG7CUA.js';
2
+ import { RelativeTime } from './chunk-EJNJMHQG.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './WidgetFrame-WXYFYAAH.css';
@@ -1,5 +1,5 @@
1
1
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
2
- import { toInstant, RelativeTime, formatExact, toISO } from './chunk-L6NG7CUA.js';
2
+ import { toInstant, RelativeTime, formatExact, toISO } from './chunk-EJNJMHQG.js';
3
3
  import { Document } from './chunk-BXCL6P5Z.js';
4
4
  import { Composer } from './chunk-5OFRDX66.js';
5
5
  import { Count } from './chunk-MLDTLZAO.js';
@@ -1,7 +1,7 @@
1
1
  import { StepList } from './chunk-HJBHP66O.js';
2
2
  import { Meter } from './chunk-RQFRRPV6.js';
3
3
  import { ReceiptStrip } from './chunk-M25IV5MH.js';
4
- import { StatusCard } from './chunk-G4234OIG.js';
4
+ import { StatusCard } from './chunk-NTQPJJAN.js';
5
5
  import { Disclosure } from './chunk-222VILSP.js';
6
6
  import { Spinner } from './chunk-XSPCITPN.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  import { StatusDot } from './chunk-WIATRXEJ.js';
2
- import { toISO, useNow, formatRelative } from './chunk-L6NG7CUA.js';
2
+ import { toISO, useNow, formatRelative } from './chunk-EJNJMHQG.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './EditingStatus-TMGT265J.css';
5
5
  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-7XKDPTZ5.js';
2
+ import { Card } from './chunk-4AUTALJA.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './AuthLayout-ODHBUPHQ.css';
5
5
  import { useId } from 'react';
@@ -1,5 +1,5 @@
1
1
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
2
- import { RelativeTime } from './chunk-L6NG7CUA.js';
2
+ import { RelativeTime } from './chunk-EJNJMHQG.js';
3
3
  import { Timeline } from './chunk-4MJN2KN6.js';
4
4
  import { Button } from './chunk-7QTPJDRF.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { Card } from './chunk-7XKDPTZ5.js';
1
+ import { Card } from './chunk-4AUTALJA.js';
2
2
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './FolderTile-NM7CRTVH.css';