@spacesync/client 0.1.0 → 0.1.2

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 (122) hide show
  1. package/README.md +9 -14
  2. package/dist/analog-clock-picker.d.ts +2 -2
  3. package/dist/analog-clock-picker.js +12 -406
  4. package/dist/analog-clock-picker.js.map +1 -1
  5. package/dist/api.js +7 -87
  6. package/dist/api.js.map +1 -1
  7. package/dist/app-modal.d.ts +7 -8
  8. package/dist/app-modal.js +3 -74
  9. package/dist/app-modal.js.map +1 -1
  10. package/dist/app-shell-mobile-nav.d.ts +1 -2
  11. package/dist/app-shell-mobile-nav.js +2 -66
  12. package/dist/app-shell-mobile-nav.js.map +1 -1
  13. package/dist/app-web-shell.d.ts +2 -2
  14. package/dist/app-web-shell.js +1 -4
  15. package/dist/app-web-shell.js.map +1 -1
  16. package/dist/booking-schedule-calendars.d.ts +12 -12
  17. package/dist/booking-schedule-calendars.js +13 -402
  18. package/dist/booking-schedule-calendars.js.map +1 -1
  19. package/dist/chat-stick-to-bottom.d.ts +1 -2
  20. package/dist/chat-stick-to-bottom.js +12 -48
  21. package/dist/chat-stick-to-bottom.js.map +1 -1
  22. package/dist/chunk-4A6RCBB5.js +4925 -0
  23. package/dist/chunk-4A6RCBB5.js.map +1 -0
  24. package/dist/chunk-4NNK5IXY.js +79 -0
  25. package/dist/chunk-4NNK5IXY.js.map +1 -0
  26. package/dist/chunk-4Y5DBM6Z.js +6 -0
  27. package/dist/chunk-4Y5DBM6Z.js.map +1 -0
  28. package/dist/chunk-7YCAAP43.js +107 -0
  29. package/dist/chunk-7YCAAP43.js.map +1 -0
  30. package/dist/chunk-DMPSQ22Q.js +11 -0
  31. package/dist/chunk-DMPSQ22Q.js.map +1 -0
  32. package/dist/chunk-FCY5FYJB.js +104 -0
  33. package/dist/chunk-FCY5FYJB.js.map +1 -0
  34. package/dist/chunk-H7EX6B6N.js +580 -0
  35. package/dist/chunk-H7EX6B6N.js.map +1 -0
  36. package/dist/chunk-HCHASUB6.js +13 -0
  37. package/dist/chunk-HCHASUB6.js.map +1 -0
  38. package/dist/chunk-L65F4EMK.js +34 -0
  39. package/dist/chunk-L65F4EMK.js.map +1 -0
  40. package/dist/chunk-LUB7QWGU.js +301 -0
  41. package/dist/chunk-LUB7QWGU.js.map +1 -0
  42. package/dist/chunk-OMSJWTSZ.js +120 -0
  43. package/dist/chunk-OMSJWTSZ.js.map +1 -0
  44. package/dist/chunk-OWNUMPUC.js +9 -0
  45. package/dist/chunk-OWNUMPUC.js.map +1 -0
  46. package/dist/chunk-P65TMY3D.js +87 -0
  47. package/dist/chunk-P65TMY3D.js.map +1 -0
  48. package/dist/chunk-PBNBLCC2.js +84 -0
  49. package/dist/chunk-PBNBLCC2.js.map +1 -0
  50. package/dist/chunk-RV5PMZYZ.js +63 -0
  51. package/dist/chunk-RV5PMZYZ.js.map +1 -0
  52. package/dist/chunk-VHINHHZQ.js +48 -0
  53. package/dist/chunk-VHINHHZQ.js.map +1 -0
  54. package/dist/chunk-VVXGQKN7.js +107 -0
  55. package/dist/chunk-VVXGQKN7.js.map +1 -0
  56. package/dist/chunk-XU3EFSQX.js +22 -0
  57. package/dist/chunk-XU3EFSQX.js.map +1 -0
  58. package/dist/chunk-YAVEMXXV.js +381 -0
  59. package/dist/chunk-YAVEMXXV.js.map +1 -0
  60. package/dist/chunk-ZIJQ7BXU.js +27 -0
  61. package/dist/chunk-ZIJQ7BXU.js.map +1 -0
  62. package/dist/detail-page-header.d.ts +3 -3
  63. package/dist/detail-page-header.js +5 -149
  64. package/dist/detail-page-header.js.map +1 -1
  65. package/dist/{dialog-CIdvylPK.d.ts → dialog-CPkbi5N3.d.ts} +10 -11
  66. package/dist/file-picker-field.d.ts +2 -2
  67. package/dist/file-picker-field.js +3 -163
  68. package/dist/file-picker-field.js.map +1 -1
  69. package/dist/file-viewer-dialog.d.ts +2 -2
  70. package/dist/file-viewer-dialog.js +12 -223
  71. package/dist/file-viewer-dialog.js.map +1 -1
  72. package/dist/floor-switcher.d.ts +2 -2
  73. package/dist/floor-switcher.js +13 -323
  74. package/dist/floor-switcher.js.map +1 -1
  75. package/dist/forms.js +1 -23
  76. package/dist/forms.js.map +1 -1
  77. package/dist/image-picker-field.d.ts +7 -4
  78. package/dist/image-picker-field.js +17 -60
  79. package/dist/image-picker-field.js.map +1 -1
  80. package/dist/layout-canvas-view.d.ts +2 -2
  81. package/dist/layout-canvas-view.js +17 -220
  82. package/dist/layout-canvas-view.js.map +1 -1
  83. package/dist/lib/dateDisplay.js +1 -82
  84. package/dist/lib/dateDisplay.js.map +1 -1
  85. package/dist/live-resource-meta.js +1 -25
  86. package/dist/live-resource-meta.js.map +1 -1
  87. package/dist/live-space-pulse-dot.d.ts +2 -2
  88. package/dist/live-space-pulse-dot.js +2 -16
  89. package/dist/live-space-pulse-dot.js.map +1 -1
  90. package/dist/notification-sidebar-preview.d.ts +3 -3
  91. package/dist/notification-sidebar-preview.js +3 -61
  92. package/dist/notification-sidebar-preview.js.map +1 -1
  93. package/dist/page-list-chrome.d.ts +25 -25
  94. package/dist/page-list-chrome.js +6 -968
  95. package/dist/page-list-chrome.js.map +1 -1
  96. package/dist/platform-support-message-composer.d.ts +4 -4
  97. package/dist/platform-support-message-composer.js +15 -218
  98. package/dist/platform-support-message-composer.js.map +1 -1
  99. package/dist/shell-sidebar-nav.js +8 -13
  100. package/dist/shell-sidebar-nav.js.map +1 -1
  101. package/dist/shell-theme.js +1 -7
  102. package/dist/shell-theme.js.map +1 -1
  103. package/dist/shell-top-bar-chrome.js +3 -103
  104. package/dist/shell-top-bar-chrome.js.map +1 -1
  105. package/dist/shell-top-bar.d.ts +3 -3
  106. package/dist/shell-top-bar.js +1 -69
  107. package/dist/shell-top-bar.js.map +1 -1
  108. package/dist/support-presence-status.d.ts +2 -2
  109. package/dist/support-presence-status.js +3 -41
  110. package/dist/support-presence-status.js.map +1 -1
  111. package/dist/theme-appearance-control.d.ts +2 -2
  112. package/dist/theme-appearance-control.js +4 -63
  113. package/dist/theme-appearance-control.js.map +1 -1
  114. package/dist/theme-boot-script.js +1 -2
  115. package/dist/theme-boot-script.js.map +1 -1
  116. package/dist/theme-provider.d.ts +2 -2
  117. package/dist/theme-provider.js +2 -23
  118. package/dist/theme-provider.js.map +1 -1
  119. package/dist/ui.d.ts +261 -262
  120. package/dist/ui.js +11 -5635
  121. package/dist/ui.js.map +1 -1
  122. package/package.json +11 -2
@@ -0,0 +1,381 @@
1
+ import { parseHm, toTimeStr, formatTimeForDisplay } from './chunk-4A6RCBB5.js';
2
+ import { cn } from './chunk-DMPSQ22Q.js';
3
+ import { useRef, useState, useCallback, useMemo } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var SIZE = 248;
7
+ var CX = SIZE / 2;
8
+ var CY = SIZE / 2;
9
+ var FACE_R = 98;
10
+ var HOUR_LABEL_R = 72;
11
+ var MINUTE_TICK_R = 84;
12
+ function pointToAngleDeg(x, y) {
13
+ const dx = x - CX;
14
+ const dy = y - CY;
15
+ let deg = Math.atan2(dy, dx) * 180 / Math.PI + 90;
16
+ if (deg < 0) deg += 360;
17
+ return deg;
18
+ }
19
+ function angleToHour12(deg) {
20
+ const h = Math.round(deg / 30) % 12;
21
+ return h === 0 ? 12 : h;
22
+ }
23
+ function angleToHour24(deg) {
24
+ return Math.round(deg / 15) % 24;
25
+ }
26
+ function angleToMinute(deg) {
27
+ return Math.round(deg / 6) % 60;
28
+ }
29
+ function hour12To24(h12, ap) {
30
+ if (ap === "am") return h12 === 12 ? 0 : h12;
31
+ return h12 === 12 ? 12 : h12 + 12;
32
+ }
33
+ function hour24To12(h24) {
34
+ return { h12: h24 % 12 || 12, ap: h24 >= 12 ? "pm" : "am" };
35
+ }
36
+ function handEnd(deg, length) {
37
+ const rad = (deg - 90) * Math.PI / 180;
38
+ return { x: CX + Math.cos(rad) * length, y: CY + Math.sin(rad) * length };
39
+ }
40
+ function hourCenterDeg(h, timeFormat) {
41
+ if (timeFormat === "24h") return h * 15;
42
+ return h % 12 * 30;
43
+ }
44
+ function sectorPath(centerDeg, spread, radius) {
45
+ const start = handEnd(centerDeg - spread, radius);
46
+ const end = handEnd(centerDeg + spread, radius);
47
+ return `M ${CX} ${CY} L ${start.x} ${start.y} A ${radius} ${radius} 0 0 1 ${end.x} ${end.y} Z`;
48
+ }
49
+ function pointerTarget(clientX, clientY, svg, phase, timeFormat) {
50
+ const rect = svg.getBoundingClientRect();
51
+ const scale = SIZE / rect.width;
52
+ const x = (clientX - rect.left) * scale;
53
+ const y = (clientY - rect.top) * scale;
54
+ const dist = Math.hypot(x - CX, y - CY);
55
+ if (dist < 24 || dist > FACE_R + 8) return null;
56
+ const deg = pointToAngleDeg(x, y);
57
+ if (phase === "hour") {
58
+ return timeFormat === "24h" ? angleToHour24(deg) : angleToHour12(deg);
59
+ }
60
+ return angleToMinute(deg);
61
+ }
62
+ function AnalogClockPicker({
63
+ value,
64
+ onChange,
65
+ timeFormat = "24h",
66
+ className
67
+ }) {
68
+ const svgRef = useRef(null);
69
+ const parsed = parseHm(value);
70
+ const editor = parsed ?? { h: 9, m: 0 };
71
+ const { h12, ap } = hour24To12(editor.h);
72
+ const [phase, setPhase] = useState("hour");
73
+ const [hoverTarget, setHoverTarget] = useState(null);
74
+ const setTime = useCallback(
75
+ (h, m) => {
76
+ onChange(toTimeStr(h, m));
77
+ },
78
+ [onChange]
79
+ );
80
+ const handlePointer = useCallback(
81
+ (clientX, clientY) => {
82
+ const svg = svgRef.current;
83
+ if (!svg) return;
84
+ const rect = svg.getBoundingClientRect();
85
+ const scale = SIZE / rect.width;
86
+ const x = (clientX - rect.left) * scale;
87
+ const y = (clientY - rect.top) * scale;
88
+ const deg = pointToAngleDeg(x, y);
89
+ if (phase === "hour") {
90
+ if (timeFormat === "24h") {
91
+ const h24 = angleToHour24(deg);
92
+ setTime(h24, editor.m);
93
+ } else {
94
+ const h = angleToHour12(deg);
95
+ setTime(hour12To24(h, ap), editor.m);
96
+ }
97
+ setPhase("minute");
98
+ } else {
99
+ const m = angleToMinute(deg);
100
+ setTime(editor.h, m);
101
+ }
102
+ },
103
+ [phase, timeFormat, ap, editor.h, editor.m, setTime]
104
+ );
105
+ const updateHover = useCallback(
106
+ (clientX, clientY) => {
107
+ const svg = svgRef.current;
108
+ if (!svg) return;
109
+ setHoverTarget(pointerTarget(clientX, clientY, svg, phase, timeFormat));
110
+ },
111
+ [phase, timeFormat]
112
+ );
113
+ const previewHour = phase === "hour" && hoverTarget != null ? timeFormat === "24h" ? hoverTarget : hour12To24(hoverTarget, ap) : editor.h;
114
+ const previewMinute = phase === "minute" && hoverTarget != null ? hoverTarget : editor.m;
115
+ const hourHandDeg = previewHour % 12 * 30 + previewMinute * 0.5;
116
+ const minuteHandDeg = previewMinute * 6;
117
+ const hourEnd = handEnd(hourHandDeg, 46);
118
+ const minuteEnd = handEnd(minuteHandDeg, 64);
119
+ const selectedHourKey = timeFormat === "24h" ? editor.h : h12;
120
+ const hoveredHourKey = phase === "hour" ? hoverTarget : null;
121
+ const hourMarkers = useMemo(() => {
122
+ if (timeFormat === "24h") {
123
+ return Array.from({ length: 24 }, (_, h) => {
124
+ const deg = h * 15;
125
+ const rad = (deg - 90) * Math.PI / 180;
126
+ const showLabel = h % 3 === 0;
127
+ const r = showLabel ? HOUR_LABEL_R - 6 : HOUR_LABEL_R + 4;
128
+ return {
129
+ key: h,
130
+ label: showLabel ? String(h).padStart(2, "0") : null,
131
+ x: CX + Math.cos(rad) * r,
132
+ y: CY + Math.sin(rad) * r,
133
+ deg,
134
+ h
135
+ };
136
+ });
137
+ }
138
+ return Array.from({ length: 12 }, (_, i) => {
139
+ const h = i === 0 ? 12 : i;
140
+ const deg = h * 30;
141
+ const rad = (deg - 90) * Math.PI / 180;
142
+ return {
143
+ key: h,
144
+ label: String(h),
145
+ x: CX + Math.cos(rad) * HOUR_LABEL_R,
146
+ y: CY + Math.sin(rad) * HOUR_LABEL_R,
147
+ deg,
148
+ h
149
+ };
150
+ });
151
+ }, [timeFormat]);
152
+ const minuteMarkers = useMemo(
153
+ () => Array.from({ length: 12 }, (_, i) => {
154
+ const m = i * 5;
155
+ const deg = m * 6;
156
+ const rad = (deg - 90) * Math.PI / 180;
157
+ const selected = editor.m === m;
158
+ const hovered = hoverTarget != null && Math.round(hoverTarget / 5) * 5 === m;
159
+ return {
160
+ m,
161
+ x: CX + Math.cos(rad) * MINUTE_TICK_R,
162
+ y: CY + Math.sin(rad) * MINUTE_TICK_R,
163
+ selected,
164
+ hovered
165
+ };
166
+ }),
167
+ [editor.m, hoverTarget]
168
+ );
169
+ const displayTime = formatTimeForDisplay(value || toTimeStr(editor.h, editor.m), timeFormat);
170
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center gap-4", className), children: [
171
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 rounded-2xl border border-border bg-muted/60 px-4 py-2.5", children: [
172
+ /* @__PURE__ */ jsx(
173
+ "button",
174
+ {
175
+ type: "button",
176
+ onClick: () => setPhase("hour"),
177
+ className: cn(
178
+ "rounded-lg px-3 py-1 text-2xl font-semibold tabular-nums transition-colors",
179
+ phase === "hour" ? "bg-blue-500 text-white shadow-sm" : "text-foreground hover:bg-accent"
180
+ ),
181
+ children: timeFormat === "24h" ? String(editor.h).padStart(2, "0") : String(h12).padStart(2, "0")
182
+ }
183
+ ),
184
+ /* @__PURE__ */ jsx("span", { className: "text-2xl font-semibold text-muted-foreground", children: ":" }),
185
+ /* @__PURE__ */ jsx(
186
+ "button",
187
+ {
188
+ type: "button",
189
+ onClick: () => setPhase("minute"),
190
+ className: cn(
191
+ "rounded-lg px-3 py-1 text-2xl font-semibold tabular-nums transition-colors",
192
+ phase === "minute" ? "bg-blue-500 text-white shadow-sm" : "text-foreground hover:bg-accent"
193
+ ),
194
+ children: String(editor.m).padStart(2, "0")
195
+ }
196
+ ),
197
+ timeFormat === "12h" ? /* @__PURE__ */ jsx("div", { className: "ml-2 flex flex-col gap-0.5", children: ["am", "pm"].map((p) => /* @__PURE__ */ jsx(
198
+ "button",
199
+ {
200
+ type: "button",
201
+ onClick: () => setTime(hour12To24(h12, p), editor.m),
202
+ className: cn(
203
+ "rounded-md px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide transition-colors",
204
+ ap === p ? "bg-blue-100 text-blue-700 dark:bg-blue-950/50 dark:text-blue-300" : "text-muted-foreground hover:bg-accent"
205
+ ),
206
+ children: p
207
+ },
208
+ p
209
+ )) }) : null
210
+ ] }),
211
+ /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs(
212
+ "svg",
213
+ {
214
+ ref: svgRef,
215
+ width: SIZE,
216
+ height: SIZE,
217
+ viewBox: `0 0 ${SIZE} ${SIZE}`,
218
+ className: "cursor-pointer touch-none select-none",
219
+ onClick: (e) => handlePointer(e.clientX, e.clientY),
220
+ onPointerMove: (e) => updateHover(e.clientX, e.clientY),
221
+ onPointerLeave: () => setHoverTarget(null),
222
+ onPointerDown: (e) => {
223
+ e.preventDefault();
224
+ handlePointer(e.clientX, e.clientY);
225
+ },
226
+ children: [
227
+ /* @__PURE__ */ jsx("circle", { cx: CX, cy: CY, r: FACE_R, className: "fill-blue-50/80 dark:fill-blue-950/30" }),
228
+ /* @__PURE__ */ jsx(
229
+ "circle",
230
+ {
231
+ cx: CX,
232
+ cy: CY,
233
+ r: FACE_R,
234
+ className: "fill-none stroke-border",
235
+ strokeWidth: 1.5
236
+ }
237
+ ),
238
+ phase === "hour" && hoverTarget != null ? /* @__PURE__ */ jsx(
239
+ "path",
240
+ {
241
+ d: sectorPath(
242
+ hourCenterDeg(hoverTarget, timeFormat),
243
+ timeFormat === "24h" ? 7.5 : 15,
244
+ FACE_R - 2
245
+ ),
246
+ className: "fill-blue-200/70 transition-opacity dark:fill-blue-500/25"
247
+ }
248
+ ) : null,
249
+ phase === "minute" && hoverTarget != null ? /* @__PURE__ */ jsx(
250
+ "path",
251
+ {
252
+ d: sectorPath(hoverTarget * 6, 3, FACE_R - 2),
253
+ className: "fill-blue-200/70 transition-opacity dark:fill-blue-500/25"
254
+ }
255
+ ) : null,
256
+ phase === "hour" ? hourMarkers.map((m) => {
257
+ const isSelected = m.h === selectedHourKey || timeFormat === "12h" && m.h === h12;
258
+ const isHovered = m.h === hoveredHourKey;
259
+ const active = isHovered || isSelected && hoveredHourKey == null;
260
+ return /* @__PURE__ */ jsxs("g", { children: [
261
+ active ? /* @__PURE__ */ jsx(
262
+ "circle",
263
+ {
264
+ cx: m.x,
265
+ cy: m.y,
266
+ r: isHovered ? 18 : 16,
267
+ className: cn(
268
+ "transition-all duration-100",
269
+ isHovered ? "fill-blue-500 shadow-sm" : "fill-blue-400/90"
270
+ )
271
+ }
272
+ ) : null,
273
+ m.label ? /* @__PURE__ */ jsx(
274
+ "text",
275
+ {
276
+ x: m.x,
277
+ y: m.y,
278
+ textAnchor: "middle",
279
+ dominantBaseline: "central",
280
+ className: cn(
281
+ "pointer-events-none text-[11px] font-semibold transition-colors duration-100",
282
+ active ? "fill-white" : "fill-muted-foreground",
283
+ isHovered && "text-[12px] font-bold"
284
+ ),
285
+ children: m.label
286
+ }
287
+ ) : /* @__PURE__ */ jsx(
288
+ "circle",
289
+ {
290
+ cx: m.x,
291
+ cy: m.y,
292
+ r: isHovered ? 5 : 2,
293
+ className: cn(
294
+ "pointer-events-none transition-all duration-100",
295
+ isHovered ? "fill-white" : "fill-muted-foreground/40"
296
+ )
297
+ }
298
+ )
299
+ ] }, m.key);
300
+ }) : minuteMarkers.map((m) => {
301
+ const active = m.selected || m.hovered;
302
+ return /* @__PURE__ */ jsxs("g", { children: [
303
+ /* @__PURE__ */ jsx(
304
+ "circle",
305
+ {
306
+ cx: m.x,
307
+ cy: m.y,
308
+ r: m.hovered ? 16 : m.selected ? 14 : 4,
309
+ className: cn(
310
+ "transition-all duration-100",
311
+ m.hovered ? "fill-blue-400" : m.selected ? "fill-blue-500" : "fill-blue-200/80 dark:fill-blue-800/60"
312
+ )
313
+ }
314
+ ),
315
+ active || m.m % 15 === 0 ? /* @__PURE__ */ jsx(
316
+ "text",
317
+ {
318
+ x: m.x,
319
+ y: m.y,
320
+ textAnchor: "middle",
321
+ dominantBaseline: "central",
322
+ className: cn(
323
+ "pointer-events-none text-[10px] font-semibold transition-colors duration-100",
324
+ active ? "fill-white" : "fill-blue-700 dark:fill-blue-300"
325
+ ),
326
+ children: String(m.m).padStart(2, "0")
327
+ }
328
+ ) : null
329
+ ] }, m.m);
330
+ }),
331
+ /* @__PURE__ */ jsx(
332
+ "line",
333
+ {
334
+ x1: CX,
335
+ y1: CY,
336
+ x2: hourEnd.x,
337
+ y2: hourEnd.y,
338
+ className: cn(
339
+ "stroke-blue-600 transition-all duration-100 dark:stroke-blue-400",
340
+ phase === "hour" && hoverTarget != null && "stroke-blue-500 opacity-90"
341
+ ),
342
+ strokeWidth: 3.5,
343
+ strokeLinecap: "round"
344
+ }
345
+ ),
346
+ /* @__PURE__ */ jsx(
347
+ "line",
348
+ {
349
+ x1: CX,
350
+ y1: CY,
351
+ x2: minuteEnd.x,
352
+ y2: minuteEnd.y,
353
+ className: cn(
354
+ "stroke-blue-500 transition-all duration-100 dark:stroke-blue-300",
355
+ phase === "minute" && hoverTarget != null && "stroke-blue-400 opacity-90"
356
+ ),
357
+ strokeWidth: 2.5,
358
+ strokeLinecap: "round"
359
+ }
360
+ ),
361
+ /* @__PURE__ */ jsx("circle", { cx: CX, cy: CY, r: 5, className: "fill-blue-600 dark:fill-blue-400" }),
362
+ /* @__PURE__ */ jsx("circle", { cx: CX, cy: CY, r: 2.5, className: "fill-white" })
363
+ ]
364
+ }
365
+ ) }),
366
+ /* @__PURE__ */ jsxs("p", { className: "text-center text-[11px] text-muted-foreground", children: [
367
+ phase === "hour" ? "Hover or tap an hour" : "Hover or tap minutes \xB7 ",
368
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: hoverTarget != null && phase === "hour" ? formatTimeForDisplay(
369
+ toTimeStr(
370
+ timeFormat === "24h" ? hoverTarget : hour12To24(hoverTarget, ap),
371
+ editor.m
372
+ ),
373
+ timeFormat
374
+ ) : hoverTarget != null && phase === "minute" ? formatTimeForDisplay(toTimeStr(editor.h, hoverTarget), timeFormat) : displayTime })
375
+ ] })
376
+ ] });
377
+ }
378
+
379
+ export { AnalogClockPicker };
380
+ //# sourceMappingURL=chunk-YAVEMXXV.js.map
381
+ //# sourceMappingURL=chunk-YAVEMXXV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/booking/analog-clock-picker.tsx"],"names":[],"mappings":"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","file":"chunk-YAVEMXXV.js","sourcesContent":["import { useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n formatTimeForDisplay,\n parseHm,\n toTimeStr,\n} from \"../ui/time-field\";\nimport { cn } from \"../ui\";\n\nconst SIZE = 248;\nconst CX = SIZE / 2;\nconst CY = SIZE / 2;\nconst FACE_R = 98;\nconst HOUR_LABEL_R = 72;\nconst MINUTE_TICK_R = 84;\n\ntype ClockPhase = \"hour\" | \"minute\";\n\nfunction pointToAngleDeg(x: number, y: number): number {\n const dx = x - CX;\n const dy = y - CY;\n let deg = (Math.atan2(dy, dx) * 180) / Math.PI + 90;\n if (deg < 0) deg += 360;\n return deg;\n}\n\nfunction angleToHour12(deg: number): number {\n const h = Math.round(deg / 30) % 12;\n return h === 0 ? 12 : h;\n}\n\nfunction angleToHour24(deg: number): number {\n return Math.round(deg / 15) % 24;\n}\n\nfunction angleToMinute(deg: number): number {\n return Math.round(deg / 6) % 60;\n}\n\nfunction hour12To24(h12: number, ap: \"am\" | \"pm\"): number {\n if (ap === \"am\") return h12 === 12 ? 0 : h12;\n return h12 === 12 ? 12 : h12 + 12;\n}\n\nfunction hour24To12(h24: number): { h12: number; ap: \"am\" | \"pm\" } {\n return { h12: h24 % 12 || 12, ap: h24 >= 12 ? \"pm\" : \"am\" };\n}\n\nfunction handEnd(deg: number, length: number): { x: number; y: number } {\n const rad = ((deg - 90) * Math.PI) / 180;\n return { x: CX + Math.cos(rad) * length, y: CY + Math.sin(rad) * length };\n}\n\nfunction hourCenterDeg(h: number, timeFormat: \"12h\" | \"24h\"): number {\n if (timeFormat === \"24h\") return h * 15;\n return (h % 12) * 30;\n}\n\nfunction sectorPath(centerDeg: number, spread: number, radius: number): string {\n const start = handEnd(centerDeg - spread, radius);\n const end = handEnd(centerDeg + spread, radius);\n return `M ${CX} ${CY} L ${start.x} ${start.y} A ${radius} ${radius} 0 0 1 ${end.x} ${end.y} Z`;\n}\n\nfunction pointerTarget(\n clientX: number,\n clientY: number,\n svg: SVGSVGElement,\n phase: ClockPhase,\n timeFormat: \"12h\" | \"24h\",\n): number | null {\n const rect = svg.getBoundingClientRect();\n const scale = SIZE / rect.width;\n const x = (clientX - rect.left) * scale;\n const y = (clientY - rect.top) * scale;\n const dist = Math.hypot(x - CX, y - CY);\n if (dist < 24 || dist > FACE_R + 8) return null;\n\n const deg = pointToAngleDeg(x, y);\n if (phase === \"hour\") {\n return timeFormat === \"24h\" ? angleToHour24(deg) : angleToHour12(deg);\n }\n return angleToMinute(deg);\n}\n\nexport function AnalogClockPicker({\n value,\n onChange,\n timeFormat = \"24h\",\n className,\n}: {\n value: string;\n onChange: (v: string) => void;\n timeFormat?: \"12h\" | \"24h\";\n className?: string;\n}) {\n const svgRef = useRef<SVGSVGElement>(null);\n const parsed = parseHm(value);\n const editor = parsed ?? { h: 9, m: 0 };\n const { h12, ap } = hour24To12(editor.h);\n\n const [phase, setPhase] = useState<ClockPhase>(\"hour\");\n const [hoverTarget, setHoverTarget] = useState<number | null>(null);\n\n const setTime = useCallback(\n (h: number, m: number) => {\n onChange(toTimeStr(h, m));\n },\n [onChange],\n );\n\n const handlePointer = useCallback(\n (clientX: number, clientY: number) => {\n const svg = svgRef.current;\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n const scale = SIZE / rect.width;\n const x = (clientX - rect.left) * scale;\n const y = (clientY - rect.top) * scale;\n const deg = pointToAngleDeg(x, y);\n\n if (phase === \"hour\") {\n if (timeFormat === \"24h\") {\n const h24 = angleToHour24(deg);\n setTime(h24, editor.m);\n } else {\n const h = angleToHour12(deg);\n setTime(hour12To24(h, ap), editor.m);\n }\n setPhase(\"minute\");\n } else {\n const m = angleToMinute(deg);\n setTime(editor.h, m);\n }\n },\n [phase, timeFormat, ap, editor.h, editor.m, setTime],\n );\n\n const updateHover = useCallback(\n (clientX: number, clientY: number) => {\n const svg = svgRef.current;\n if (!svg) return;\n setHoverTarget(pointerTarget(clientX, clientY, svg, phase, timeFormat));\n },\n [phase, timeFormat],\n );\n\n const previewHour =\n phase === \"hour\" && hoverTarget != null\n ? timeFormat === \"24h\"\n ? hoverTarget\n : hour12To24(hoverTarget, ap)\n : editor.h;\n\n const previewMinute = phase === \"minute\" && hoverTarget != null ? hoverTarget : editor.m;\n\n const hourHandDeg = (previewHour % 12) * 30 + previewMinute * 0.5;\n const minuteHandDeg = previewMinute * 6;\n const hourEnd = handEnd(hourHandDeg, 46);\n const minuteEnd = handEnd(minuteHandDeg, 64);\n\n const selectedHourKey =\n timeFormat === \"24h\" ? editor.h : h12;\n const hoveredHourKey = phase === \"hour\" ? hoverTarget : null;\n\n const hourMarkers = useMemo(() => {\n if (timeFormat === \"24h\") {\n return Array.from({ length: 24 }, (_, h) => {\n const deg = h * 15;\n const rad = ((deg - 90) * Math.PI) / 180;\n const showLabel = h % 3 === 0;\n const r = showLabel ? HOUR_LABEL_R - 6 : HOUR_LABEL_R + 4;\n return {\n key: h,\n label: showLabel ? String(h).padStart(2, \"0\") : null,\n x: CX + Math.cos(rad) * r,\n y: CY + Math.sin(rad) * r,\n deg,\n h,\n };\n });\n }\n return Array.from({ length: 12 }, (_, i) => {\n const h = i === 0 ? 12 : i;\n const deg = h * 30;\n const rad = ((deg - 90) * Math.PI) / 180;\n return {\n key: h,\n label: String(h),\n x: CX + Math.cos(rad) * HOUR_LABEL_R,\n y: CY + Math.sin(rad) * HOUR_LABEL_R,\n deg,\n h,\n };\n });\n }, [timeFormat]);\n\n const minuteMarkers = useMemo(\n () =>\n Array.from({ length: 12 }, (_, i) => {\n const m = i * 5;\n const deg = m * 6;\n const rad = ((deg - 90) * Math.PI) / 180;\n const selected = editor.m === m;\n const hovered =\n hoverTarget != null && Math.round(hoverTarget / 5) * 5 === m;\n return {\n m,\n x: CX + Math.cos(rad) * MINUTE_TICK_R,\n y: CY + Math.sin(rad) * MINUTE_TICK_R,\n selected,\n hovered,\n };\n }),\n [editor.m, hoverTarget],\n );\n\n const displayTime = formatTimeForDisplay(value || toTimeStr(editor.h, editor.m), timeFormat);\n\n return (\n <div className={cn(\"flex flex-col items-center gap-4\", className)}>\n <div className=\"flex items-center gap-1 rounded-2xl border border-border bg-muted/60 px-4 py-2.5\">\n <button\n type=\"button\"\n onClick={() => setPhase(\"hour\")}\n className={cn(\n \"rounded-lg px-3 py-1 text-2xl font-semibold tabular-nums transition-colors\",\n phase === \"hour\"\n ? \"bg-blue-500 text-white shadow-sm\"\n : \"text-foreground hover:bg-accent\",\n )}\n >\n {timeFormat === \"24h\"\n ? String(editor.h).padStart(2, \"0\")\n : String(h12).padStart(2, \"0\")}\n </button>\n <span className=\"text-2xl font-semibold text-muted-foreground\">:</span>\n <button\n type=\"button\"\n onClick={() => setPhase(\"minute\")}\n className={cn(\n \"rounded-lg px-3 py-1 text-2xl font-semibold tabular-nums transition-colors\",\n phase === \"minute\"\n ? \"bg-blue-500 text-white shadow-sm\"\n : \"text-foreground hover:bg-accent\",\n )}\n >\n {String(editor.m).padStart(2, \"0\")}\n </button>\n {timeFormat === \"12h\" ? (\n <div className=\"ml-2 flex flex-col gap-0.5\">\n {([\"am\", \"pm\"] as const).map((p) => (\n <button\n key={p}\n type=\"button\"\n onClick={() => setTime(hour12To24(h12, p), editor.m)}\n className={cn(\n \"rounded-md px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide transition-colors\",\n ap === p\n ? \"bg-blue-100 text-blue-700 dark:bg-blue-950/50 dark:text-blue-300\"\n : \"text-muted-foreground hover:bg-accent\",\n )}\n >\n {p}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n\n <div className=\"relative\">\n <svg\n ref={svgRef}\n width={SIZE}\n height={SIZE}\n viewBox={`0 0 ${SIZE} ${SIZE}`}\n className=\"cursor-pointer touch-none select-none\"\n onClick={(e) => handlePointer(e.clientX, e.clientY)}\n onPointerMove={(e) => updateHover(e.clientX, e.clientY)}\n onPointerLeave={() => setHoverTarget(null)}\n onPointerDown={(e) => {\n e.preventDefault();\n handlePointer(e.clientX, e.clientY);\n }}\n >\n <circle cx={CX} cy={CY} r={FACE_R} className=\"fill-blue-50/80 dark:fill-blue-950/30\" />\n <circle\n cx={CX}\n cy={CY}\n r={FACE_R}\n className=\"fill-none stroke-border\"\n strokeWidth={1.5}\n />\n\n {phase === \"hour\" && hoverTarget != null ? (\n <path\n d={sectorPath(\n hourCenterDeg(hoverTarget, timeFormat),\n timeFormat === \"24h\" ? 7.5 : 15,\n FACE_R - 2,\n )}\n className=\"fill-blue-200/70 transition-opacity dark:fill-blue-500/25\"\n />\n ) : null}\n\n {phase === \"minute\" && hoverTarget != null ? (\n <path\n d={sectorPath(hoverTarget * 6, 3, FACE_R - 2)}\n className=\"fill-blue-200/70 transition-opacity dark:fill-blue-500/25\"\n />\n ) : null}\n\n {phase === \"hour\"\n ? hourMarkers.map((m) => {\n const isSelected = m.h === selectedHourKey || (timeFormat === \"12h\" && m.h === h12);\n const isHovered = m.h === hoveredHourKey;\n const active = isHovered || (isSelected && hoveredHourKey == null);\n return (\n <g key={m.key}>\n {active ? (\n <circle\n cx={m.x}\n cy={m.y}\n r={isHovered ? 18 : 16}\n className={cn(\n \"transition-all duration-100\",\n isHovered\n ? \"fill-blue-500 shadow-sm\"\n : \"fill-blue-400/90\",\n )}\n />\n ) : null}\n {m.label ? (\n <text\n x={m.x}\n y={m.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n className={cn(\n \"pointer-events-none text-[11px] font-semibold transition-colors duration-100\",\n active ? \"fill-white\" : \"fill-muted-foreground\",\n isHovered && \"text-[12px] font-bold\",\n )}\n >\n {m.label}\n </text>\n ) : (\n <circle\n cx={m.x}\n cy={m.y}\n r={isHovered ? 5 : 2}\n className={cn(\n \"pointer-events-none transition-all duration-100\",\n isHovered ? \"fill-white\" : \"fill-muted-foreground/40\",\n )}\n />\n )}\n </g>\n );\n })\n : minuteMarkers.map((m) => {\n const active = m.selected || m.hovered;\n return (\n <g key={m.m}>\n <circle\n cx={m.x}\n cy={m.y}\n r={m.hovered ? 16 : m.selected ? 14 : 4}\n className={cn(\n \"transition-all duration-100\",\n m.hovered\n ? \"fill-blue-400\"\n : m.selected\n ? \"fill-blue-500\"\n : \"fill-blue-200/80 dark:fill-blue-800/60\",\n )}\n />\n {active || m.m % 15 === 0 ? (\n <text\n x={m.x}\n y={m.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n className={cn(\n \"pointer-events-none text-[10px] font-semibold transition-colors duration-100\",\n active ? \"fill-white\" : \"fill-blue-700 dark:fill-blue-300\",\n )}\n >\n {String(m.m).padStart(2, \"0\")}\n </text>\n ) : null}\n </g>\n );\n })}\n\n <line\n x1={CX}\n y1={CY}\n x2={hourEnd.x}\n y2={hourEnd.y}\n className={cn(\n \"stroke-blue-600 transition-all duration-100 dark:stroke-blue-400\",\n phase === \"hour\" && hoverTarget != null && \"stroke-blue-500 opacity-90\",\n )}\n strokeWidth={3.5}\n strokeLinecap=\"round\"\n />\n <line\n x1={CX}\n y1={CY}\n x2={minuteEnd.x}\n y2={minuteEnd.y}\n className={cn(\n \"stroke-blue-500 transition-all duration-100 dark:stroke-blue-300\",\n phase === \"minute\" && hoverTarget != null && \"stroke-blue-400 opacity-90\",\n )}\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n />\n <circle cx={CX} cy={CY} r={5} className=\"fill-blue-600 dark:fill-blue-400\" />\n <circle cx={CX} cy={CY} r={2.5} className=\"fill-white\" />\n </svg>\n </div>\n\n <p className=\"text-center text-[11px] text-muted-foreground\">\n {phase === \"hour\" ? \"Hover or tap an hour\" : \"Hover or tap minutes · \"}\n <span className=\"font-medium text-foreground\">\n {hoverTarget != null && phase === \"hour\"\n ? formatTimeForDisplay(\n toTimeStr(\n timeFormat === \"24h\" ? hoverTarget : hour12To24(hoverTarget, ap),\n editor.m,\n ),\n timeFormat,\n )\n : hoverTarget != null && phase === \"minute\"\n ? formatTimeForDisplay(toTimeStr(editor.h, hoverTarget), timeFormat)\n : displayTime}\n </span>\n </p>\n </div>\n );\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { Box, DoorOpen, Armchair } from 'lucide-react';
2
+
3
+ // src/live-space/live-resource-meta.ts
4
+ var LIVE_RESOURCE_TYPE_META = {
5
+ desks: {
6
+ label: "Desk",
7
+ rowAccent: "text-blue-700 bg-blue-50 border-blue-100",
8
+ Icon: Armchair,
9
+ iconTile: "bg-blue-50 text-blue-600 border-blue-100 dark:bg-blue-950/50 dark:text-blue-400 dark:border-blue-900/50"
10
+ },
11
+ rooms: {
12
+ label: "Room",
13
+ rowAccent: "text-orange-700 bg-orange-50 border-orange-100",
14
+ Icon: DoorOpen,
15
+ iconTile: "bg-orange-50 text-orange-600 border-orange-100 dark:bg-orange-950/50 dark:text-orange-400 dark:border-orange-900/50"
16
+ },
17
+ other: {
18
+ label: "Other",
19
+ rowAccent: "text-purple-700 bg-purple-50 border-purple-100",
20
+ Icon: Box,
21
+ iconTile: "bg-purple-50 text-purple-600 border-purple-100 dark:bg-purple-950/50 dark:text-purple-400 dark:border-purple-900/50"
22
+ }
23
+ };
24
+
25
+ export { LIVE_RESOURCE_TYPE_META };
26
+ //# sourceMappingURL=chunk-ZIJQ7BXU.js.map
27
+ //# sourceMappingURL=chunk-ZIJQ7BXU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/live-space/live-resource-meta.ts"],"names":[],"mappings":";;;AAGO,IAAM,uBAAA,GAGT;AAAA,EACF,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW,0CAAA;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW,gDAAA;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,gDAAA;AAAA,IACX,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU;AAAA;AAEd","file":"chunk-ZIJQ7BXU.js","sourcesContent":["import { Armchair, Box, DoorOpen, type LucideIcon } from \"lucide-react\";\n\n/** Live space table category pill (aligned with operator RESOURCE_TYPE_META live row accents). */\nexport const LIVE_RESOURCE_TYPE_META: Record<\n \"desks\" | \"rooms\" | \"other\",\n { label: string; rowAccent: string; Icon: LucideIcon; iconTile: string }\n> = {\n desks: {\n label: \"Desk\",\n rowAccent: \"text-blue-700 bg-blue-50 border-blue-100\",\n Icon: Armchair,\n iconTile: \"bg-blue-50 text-blue-600 border-blue-100 dark:bg-blue-950/50 dark:text-blue-400 dark:border-blue-900/50\",\n },\n rooms: {\n label: \"Room\",\n rowAccent: \"text-orange-700 bg-orange-50 border-orange-100\",\n Icon: DoorOpen,\n iconTile: \"bg-orange-50 text-orange-600 border-orange-100 dark:bg-orange-950/50 dark:text-orange-400 dark:border-orange-900/50\",\n },\n other: {\n label: \"Other\",\n rowAccent: \"text-purple-700 bg-purple-50 border-purple-100\",\n Icon: Box,\n iconTile: \"bg-purple-50 text-purple-600 border-purple-100 dark:bg-purple-950/50 dark:text-purple-400 dark:border-purple-900/50\",\n },\n};\n"]}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
  import { ReactNode } from 'react';
3
3
 
4
4
  type DetailPageHeaderProps = {
@@ -10,7 +10,7 @@ type DetailPageHeaderProps = {
10
10
  mobileTitle?: ReactNode;
11
11
  actions?: ReactNode;
12
12
  };
13
- declare function DetailPageShellHeader(props: DetailPageHeaderProps): react_jsx_runtime.JSX.Element;
14
- declare function DetailPageMobileHeader({ onBack, backAriaLabel, icon, title, mobileTitle, actions, }: DetailPageHeaderProps): react_jsx_runtime.JSX.Element;
13
+ declare function DetailPageShellHeader(props: DetailPageHeaderProps): React.JSX.Element;
14
+ declare function DetailPageMobileHeader({ onBack, backAriaLabel, icon, title, mobileTitle, actions, }: DetailPageHeaderProps): React.JSX.Element;
15
15
 
16
16
  export { type DetailPageHeaderProps, DetailPageMobileHeader, DetailPageShellHeader };
@@ -1,155 +1,11 @@
1
+ import { ShellTopBar } from './chunk-4NNK5IXY.js';
2
+ import { Button } from './chunk-VHINHHZQ.js';
3
+ import { shellTopBarBackButtonClass, shellTopBarMutedIconClass, shellTopBarTitleTextClass } from './chunk-FCY5FYJB.js';
4
+ import './chunk-OWNUMPUC.js';
5
+ import './chunk-DMPSQ22Q.js';
1
6
  import { ChevronLeft } from 'lucide-react';
2
- import * as React from 'react';
3
- import { createContext, useEffect, useContext } from 'react';
4
- import { Slot } from '@radix-ui/react-slot';
5
- import { cva } from 'class-variance-authority';
6
- import { clsx } from 'clsx';
7
- import { twMerge } from 'tailwind-merge';
8
7
  import { jsx, jsxs } from 'react/jsx-runtime';
9
8
 
10
- // src/shell/detail-page-header.tsx
11
- function cn(...inputs) {
12
- return twMerge(clsx(inputs));
13
- }
14
- var buttonVariants = cva(
15
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium cursor-pointer transition-all disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
16
- {
17
- variants: {
18
- variant: {
19
- default: "bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 active:scale-[0.98]",
20
- destructive: "bg-destructive text-white hover:bg-destructive/90 active:bg-destructive/80 active:scale-[0.98] focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 dark:active:bg-destructive/70",
21
- outline: "border bg-background text-foreground hover:bg-accent hover:text-accent-foreground active:bg-accent/80 active:scale-[0.98] dark:bg-input/30 dark:border-input dark:hover:bg-input/50 dark:active:bg-input/60",
22
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70 active:scale-[0.98]",
23
- ghost: "hover:bg-accent hover:text-accent-foreground active:bg-accent/90 active:scale-[0.98] dark:hover:bg-accent/50 dark:active:bg-accent/40",
24
- link: "text-primary underline-offset-4 hover:underline active:text-primary/80"
25
- },
26
- size: {
27
- default: "h-9 px-4 py-2 has-[>svg]:px-3",
28
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
29
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
30
- icon: "size-9 rounded-md"
31
- }
32
- },
33
- defaultVariants: {
34
- variant: "default",
35
- size: "default"
36
- }
37
- }
38
- );
39
- var Button = React.forwardRef(function Button2({ className, variant, size, asChild = false, ...props }, ref) {
40
- const Comp = asChild ? Slot : "button";
41
- return /* @__PURE__ */ jsx(
42
- Comp,
43
- {
44
- ref,
45
- "data-slot": "button",
46
- className: cn(buttonVariants({ variant, size }), className),
47
- ...props
48
- }
49
- );
50
- });
51
- Button.displayName = "Button";
52
- var EMPTY_TOP_BAR_STATE = {};
53
- var ShellTopBarStoreContext = createContext(null);
54
- function useShellTopBarStore() {
55
- const store = useContext(ShellTopBarStoreContext);
56
- if (!store) {
57
- throw new Error("ShellTopBar components must be used within ShellTopBarProvider");
58
- }
59
- return store;
60
- }
61
- function ShellTopBar({
62
- title,
63
- icon,
64
- actions
65
- }) {
66
- const store = useShellTopBarStore();
67
- useEffect(() => {
68
- store.setState({ title, icon, actions });
69
- return () => store.setState(EMPTY_TOP_BAR_STATE);
70
- }, [title, icon, actions, store]);
71
- return null;
72
- }
73
-
74
- // src/shell/shell-top-bar-chrome.ts
75
- var shellTopBarMutedIconClass = "text-sidebar-foreground/60";
76
- var shellTopBarTitleTextClass = "text-sidebar-foreground";
77
- var shellTopBarActionSize = cn(
78
- "inline-flex !h-7 min-h-0 items-center justify-center gap-1 px-2.5 text-xs font-medium",
79
- "[&_svg:not([class*='size-'])]:size-3.5"
80
- );
81
- var shellTopBarRadius = "rounded-md";
82
- var shellTopBarNeutralRest = "border border-sidebar-border bg-sidebar-accent text-sidebar-foreground shadow-none transition-colors";
83
- var shellTopBarNeutralHover = "hover:!border-sidebar-foreground/14 hover:!bg-sidebar-foreground/6 hover:!text-sidebar-foreground";
84
- var shellTopBarNeutralActive = "active:!border-sidebar-foreground/10 active:!bg-sidebar-foreground/4 active:!text-sidebar-foreground";
85
- var shellTopBarBackButtonClass = cn(
86
- "inline-flex !h-6 !w-6 shrink-0 items-center justify-center text-sidebar-foreground/70",
87
- shellTopBarRadius,
88
- shellTopBarNeutralRest,
89
- shellTopBarNeutralHover,
90
- shellTopBarNeutralActive
91
- );
92
- cn(
93
- "inline-flex !h-7 !w-7 shrink-0 items-center justify-center text-sidebar-foreground/70",
94
- shellTopBarRadius,
95
- shellTopBarNeutralRest,
96
- shellTopBarNeutralHover,
97
- shellTopBarNeutralActive,
98
- "[&_svg:not([class*='size-'])]:size-3.5"
99
- );
100
- cn(
101
- shellTopBarActionSize,
102
- shellTopBarRadius,
103
- "!border-sidebar-border !bg-sidebar-accent !text-sidebar-foreground shadow-none transition-colors",
104
- "!py-0",
105
- shellTopBarNeutralHover,
106
- shellTopBarNeutralActive,
107
- "disabled:pointer-events-none disabled:!border-sidebar-border/60 disabled:!bg-sidebar-accent/60 disabled:!text-sidebar-foreground/40"
108
- );
109
- cn(
110
- shellTopBarActionSize,
111
- shellTopBarRadius,
112
- "bg-blue-500 text-white transition-colors hover:bg-blue-600",
113
- "disabled:pointer-events-none disabled:opacity-50"
114
- );
115
- cn(
116
- shellTopBarActionSize,
117
- shellTopBarRadius,
118
- "bg-emerald-600 text-white transition-colors hover:bg-emerald-700"
119
- );
120
- cn(
121
- shellTopBarActionSize,
122
- shellTopBarRadius,
123
- "border border-emerald-200 bg-emerald-50 text-emerald-700 transition-colors hover:border-emerald-300 hover:bg-emerald-100"
124
- );
125
- cn(
126
- shellTopBarActionSize,
127
- shellTopBarRadius,
128
- "border border-blue-200 bg-blue-50 text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100"
129
- );
130
- cn(
131
- "flex items-center gap-0.5 border border-sidebar-border bg-sidebar-accent p-0.5",
132
- shellTopBarRadius
133
- );
134
- cn(
135
- "flex h-7 items-center gap-1.5 border border-sidebar-border bg-sidebar-accent pl-2.5 pr-1 text-sidebar-foreground",
136
- shellTopBarRadius
137
- );
138
- cn(
139
- "inline-flex !h-6 !w-6 items-center justify-center text-sidebar-foreground/70",
140
- shellTopBarRadius,
141
- shellTopBarNeutralRest,
142
- shellTopBarNeutralHover,
143
- shellTopBarNeutralActive,
144
- "[&_svg:not([class*='size-'])]:size-3.5"
145
- );
146
- cn(
147
- shellTopBarActionSize,
148
- "min-w-[72px]",
149
- shellTopBarNeutralRest,
150
- shellTopBarNeutralHover,
151
- shellTopBarNeutralActive
152
- );
153
9
  var mobileBackClass = "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-muted-foreground transition-colors hover:bg-muted/80 hover:text-foreground";
154
10
  function DetailTitleRow({
155
11
  onBack,