@spacesync/client 0.1.0 → 0.1.1

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 +2 -2
  78. package/dist/image-picker-field.js +3 -48
  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,79 @@
1
+ import { createContext, useState, useEffect, useSyncExternalStore, useContext } from 'react';
2
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
+
4
+ // src/shell/shell-top-bar.tsx
5
+ var EMPTY_TOP_BAR_STATE = {};
6
+ function createShellTopBarStore() {
7
+ let state = EMPTY_TOP_BAR_STATE;
8
+ const listeners = /* @__PURE__ */ new Set();
9
+ return {
10
+ getSnapshot: () => state,
11
+ subscribe: (listener) => {
12
+ listeners.add(listener);
13
+ return () => listeners.delete(listener);
14
+ },
15
+ setState: (next) => {
16
+ state = next;
17
+ listeners.forEach((listener) => listener());
18
+ }
19
+ };
20
+ }
21
+ var SHELL_TOP_BAR_STORE_CONTEXT_KEY = /* @__PURE__ */ Symbol.for("@spacesync/client/shell-top-bar");
22
+ function getShellTopBarStoreContext() {
23
+ const registry = globalThis;
24
+ if (!registry[SHELL_TOP_BAR_STORE_CONTEXT_KEY]) {
25
+ registry[SHELL_TOP_BAR_STORE_CONTEXT_KEY] = createContext(null);
26
+ }
27
+ return registry[SHELL_TOP_BAR_STORE_CONTEXT_KEY];
28
+ }
29
+ var ShellTopBarStoreContext = getShellTopBarStoreContext();
30
+ function ShellTopBarProvider({ children }) {
31
+ const [store] = useState(createShellTopBarStore);
32
+ return /* @__PURE__ */ jsx(ShellTopBarStoreContext.Provider, { value: store, children });
33
+ }
34
+ function useShellTopBarStore() {
35
+ const store = useContext(ShellTopBarStoreContext);
36
+ if (!store) {
37
+ throw new Error("ShellTopBar components must be used within ShellTopBarProvider");
38
+ }
39
+ return store;
40
+ }
41
+ function ShellTopBar({
42
+ title,
43
+ icon,
44
+ actions
45
+ }) {
46
+ const store = useShellTopBarStore();
47
+ useEffect(() => {
48
+ store.setState({ title, icon, actions });
49
+ return () => store.setState(EMPTY_TOP_BAR_STATE);
50
+ }, [title, icon, actions, store]);
51
+ return null;
52
+ }
53
+ function ShellTopBarFrame() {
54
+ const store = useShellTopBarStore();
55
+ const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);
56
+ const { title, icon, actions } = state;
57
+ if (title == null && actions == null) {
58
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-1 items-center" });
59
+ }
60
+ const titleIsPlainText = typeof title === "string";
61
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
62
+ /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 items-center", children: title != null ? /* @__PURE__ */ jsx(
63
+ "div",
64
+ {
65
+ "data-slot": "shell-top-bar-title",
66
+ className: "flex min-w-0 flex-1 items-center gap-2 text-sidebar-foreground",
67
+ children: titleIsPlainText ? /* @__PURE__ */ jsxs(Fragment, { children: [
68
+ icon != null ? /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center text-sidebar-foreground/60", children: icon }) : null,
69
+ /* @__PURE__ */ jsx("h1", { className: "truncate text-sm font-normal", children: title })
70
+ ] }) : title
71
+ }
72
+ ) : null }),
73
+ actions != null ? /* @__PURE__ */ jsx("div", { "data-slot": "shell-top-bar-actions", className: "flex shrink-0 items-center gap-1.5", children: actions }) : null
74
+ ] });
75
+ }
76
+
77
+ export { ShellTopBar, ShellTopBarFrame, ShellTopBarProvider };
78
+ //# sourceMappingURL=chunk-4NNK5IXY.js.map
79
+ //# sourceMappingURL=chunk-4NNK5IXY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shell/shell-top-bar.tsx"],"names":[],"mappings":"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","file":"chunk-4NNK5IXY.js","sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useState,\n useSyncExternalStore,\n type Context,\n type ReactNode,\n} from \"react\";\n\ntype ShellTopBarState = {\n title?: ReactNode;\n icon?: ReactNode;\n actions?: ReactNode;\n};\n\ntype ShellTopBarStore = {\n getSnapshot: () => ShellTopBarState;\n subscribe: (listener: () => void) => () => void;\n setState: (next: ShellTopBarState) => void;\n};\n\nconst EMPTY_TOP_BAR_STATE: ShellTopBarState = {};\n\nfunction createShellTopBarStore(): ShellTopBarStore {\n let state = EMPTY_TOP_BAR_STATE;\n const listeners = new Set<() => void>();\n\n return {\n getSnapshot: () => state,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n setState: (next) => {\n state = next;\n listeners.forEach((listener) => listener());\n },\n };\n}\n\nconst SHELL_TOP_BAR_STORE_CONTEXT_KEY = Symbol.for(\"@spacesync/client/shell-top-bar\");\n\ntype GlobalWithShellTopBarStore = typeof globalThis & {\n [SHELL_TOP_BAR_STORE_CONTEXT_KEY]?: Context<ShellTopBarStore | null>;\n};\n\nfunction getShellTopBarStoreContext(): Context<ShellTopBarStore | null> {\n const registry = globalThis as GlobalWithShellTopBarStore;\n if (!registry[SHELL_TOP_BAR_STORE_CONTEXT_KEY]) {\n registry[SHELL_TOP_BAR_STORE_CONTEXT_KEY] = createContext<ShellTopBarStore | null>(null);\n }\n return registry[SHELL_TOP_BAR_STORE_CONTEXT_KEY];\n}\n\nconst ShellTopBarStoreContext = getShellTopBarStoreContext();\n\nexport function ShellTopBarProvider({ children }: { children: ReactNode }) {\n const [store] = useState(createShellTopBarStore);\n\n return (\n <ShellTopBarStoreContext.Provider value={store}>\n {children}\n </ShellTopBarStoreContext.Provider>\n );\n}\n\nfunction useShellTopBarStore() {\n const store = useContext(ShellTopBarStoreContext);\n if (!store) {\n throw new Error(\"ShellTopBar components must be used within ShellTopBarProvider\");\n }\n return store;\n}\n\n/** Pages render a title and optional actions for the app shell top bar. */\nexport function ShellTopBar({\n title,\n icon,\n actions,\n}: {\n title: ReactNode;\n icon?: ReactNode;\n actions?: ReactNode;\n}) {\n const store = useShellTopBarStore();\n\n useEffect(() => {\n store.setState({ title, icon, actions });\n return () => store.setState(EMPTY_TOP_BAR_STATE);\n }, [title, icon, actions, store]);\n\n return null;\n}\n\n/** Renders registered page title and actions inside AppWebShell topBar. */\nexport function ShellTopBarFrame() {\n const store = useShellTopBarStore();\n const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const { title, icon, actions } = state;\n\n if (title == null && actions == null) {\n return <div className=\"flex flex-1 items-center\" />;\n }\n\n const titleIsPlainText = typeof title === \"string\";\n\n return (\n <>\n <div className=\"flex min-w-0 flex-1 items-center\">\n {title != null ? (\n <div\n data-slot=\"shell-top-bar-title\"\n className=\"flex min-w-0 flex-1 items-center gap-2 text-sidebar-foreground\"\n >\n {titleIsPlainText ? (\n <>\n {icon != null ? (\n <span className=\"flex shrink-0 items-center text-sidebar-foreground/60\">{icon}</span>\n ) : null}\n <h1 className=\"truncate text-sm font-normal\">{title}</h1>\n </>\n ) : (\n title\n )}\n </div>\n ) : null}\n </div>\n {actions != null ? (\n <div data-slot=\"shell-top-bar-actions\" className=\"flex shrink-0 items-center gap-1.5\">\n {actions}\n </div>\n ) : null}\n </>\n );\n}\n"]}
@@ -0,0 +1,6 @@
1
+ // src/theme/constants.ts
2
+ var WEB_THEME_STORAGE_KEY = "coworking.web.theme";
3
+
4
+ export { WEB_THEME_STORAGE_KEY };
5
+ //# sourceMappingURL=chunk-4Y5DBM6Z.js.map
6
+ //# sourceMappingURL=chunk-4Y5DBM6Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/constants.ts"],"names":[],"mappings":";AACO,IAAM,qBAAA,GAAwB","file":"chunk-4Y5DBM6Z.js","sourcesContent":["/** localStorage key used by next-themes and the index.html boot script */\nexport const WEB_THEME_STORAGE_KEY = \"coworking.web.theme\";\n\nexport type WebThemeMode = \"system\" | \"light\" | \"dark\";\n"]}
@@ -0,0 +1,107 @@
1
+ import { cn } from './chunk-DMPSQ22Q.js';
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ import { XIcon } from 'lucide-react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ function Dialog({ ...props }) {
7
+ return /* @__PURE__ */ jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
8
+ }
9
+ function DialogTrigger({ ...props }) {
10
+ return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
11
+ }
12
+ function DialogPortal({ ...props }) {
13
+ return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
14
+ }
15
+ function DialogClose({ ...props }) {
16
+ return /* @__PURE__ */ jsx(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
17
+ }
18
+ function DialogOverlay({
19
+ className,
20
+ ...props
21
+ }) {
22
+ return /* @__PURE__ */ jsx(
23
+ DialogPrimitive.Overlay,
24
+ {
25
+ "data-slot": "dialog-overlay",
26
+ className: cn(
27
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
28
+ className
29
+ ),
30
+ ...props
31
+ }
32
+ );
33
+ }
34
+ function DialogContent({
35
+ className,
36
+ children,
37
+ ...props
38
+ }) {
39
+ return /* @__PURE__ */ jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [
40
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
41
+ /* @__PURE__ */ jsxs(
42
+ DialogPrimitive.Content,
43
+ {
44
+ "data-slot": "dialog-content",
45
+ className: cn(
46
+ "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
47
+ className
48
+ ),
49
+ ...props,
50
+ children: [
51
+ children,
52
+ /* @__PURE__ */ jsxs(DialogPrimitive.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", children: [
53
+ /* @__PURE__ */ jsx(XIcon, {}),
54
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
55
+ ] })
56
+ ]
57
+ }
58
+ )
59
+ ] });
60
+ }
61
+ function DialogHeader({ className, ...props }) {
62
+ return /* @__PURE__ */ jsx(
63
+ "div",
64
+ {
65
+ "data-slot": "dialog-header",
66
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
67
+ ...props
68
+ }
69
+ );
70
+ }
71
+ function DialogFooter({ className, ...props }) {
72
+ return /* @__PURE__ */ jsx(
73
+ "div",
74
+ {
75
+ "data-slot": "dialog-footer",
76
+ className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
77
+ ...props
78
+ }
79
+ );
80
+ }
81
+ function DialogTitle({ className, ...props }) {
82
+ return /* @__PURE__ */ jsx(
83
+ DialogPrimitive.Title,
84
+ {
85
+ "data-slot": "dialog-title",
86
+ className: cn("text-lg leading-none font-semibold", className),
87
+ ...props
88
+ }
89
+ );
90
+ }
91
+ function DialogDescription({
92
+ className,
93
+ ...props
94
+ }) {
95
+ return /* @__PURE__ */ jsx(
96
+ DialogPrimitive.Description,
97
+ {
98
+ "data-slot": "dialog-description",
99
+ className: cn("text-muted-foreground text-sm", className),
100
+ ...props
101
+ }
102
+ );
103
+ }
104
+
105
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
106
+ //# sourceMappingURL=chunk-7YCAAP43.js.map
107
+ //# sourceMappingURL=chunk-7YCAAP43.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/dialog.tsx"],"names":[],"mappings":"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","file":"chunk-7YCAAP43.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"./utils\";\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content>) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\">\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n"]}
@@ -0,0 +1,11 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ // src/ui/utils.ts
5
+ function cn(...inputs) {
6
+ return twMerge(clsx(inputs));
7
+ }
8
+
9
+ export { cn };
10
+ //# sourceMappingURL=chunk-DMPSQ22Q.js.map
11
+ //# sourceMappingURL=chunk-DMPSQ22Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/utils.ts"],"names":[],"mappings":";;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"chunk-DMPSQ22Q.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"]}
@@ -0,0 +1,104 @@
1
+ import { getShellTheme } from './chunk-OWNUMPUC.js';
2
+ import { cn } from './chunk-DMPSQ22Q.js';
3
+
4
+ // src/shell/shell-top-bar-chrome.ts
5
+ var shellTopBarMutedIconClass = "text-sidebar-foreground/60";
6
+ var shellTopBarTitleTextClass = "text-sidebar-foreground";
7
+ var shellTopBarActionSize = cn(
8
+ "inline-flex !h-7 min-h-0 items-center justify-center gap-1 px-2.5 text-xs font-medium",
9
+ "[&_svg:not([class*='size-'])]:size-3.5"
10
+ );
11
+ var shellTopBarRadius = "rounded-md";
12
+ function isDarkShell() {
13
+ return getShellTheme() === "dark";
14
+ }
15
+ var shellTopBarNeutralRest = "border border-sidebar-border bg-sidebar-accent text-sidebar-foreground shadow-none transition-colors";
16
+ var shellTopBarNeutralHover = isDarkShell() ? "hover:!border-sidebar-foreground/25 hover:!bg-sidebar-foreground/12 hover:!text-sidebar-foreground" : "hover:!border-sidebar-foreground/14 hover:!bg-sidebar-foreground/6 hover:!text-sidebar-foreground";
17
+ var shellTopBarNeutralActive = isDarkShell() ? "active:!border-sidebar-foreground/20 active:!bg-sidebar-foreground/8 active:!text-sidebar-foreground" : "active:!border-sidebar-foreground/10 active:!bg-sidebar-foreground/4 active:!text-sidebar-foreground";
18
+ var shellTopBarNeutralActionDataAttr = {
19
+ "data-shell-top-bar-action": ""
20
+ };
21
+ var shellTopBarBackButtonClass = cn(
22
+ "inline-flex !h-6 !w-6 shrink-0 items-center justify-center text-sidebar-foreground/70",
23
+ shellTopBarRadius,
24
+ shellTopBarNeutralRest,
25
+ shellTopBarNeutralHover,
26
+ shellTopBarNeutralActive
27
+ );
28
+ var shellTopBarIconButtonClass = cn(
29
+ "inline-flex !h-7 !w-7 shrink-0 items-center justify-center text-sidebar-foreground/70",
30
+ shellTopBarRadius,
31
+ shellTopBarNeutralRest,
32
+ shellTopBarNeutralHover,
33
+ shellTopBarNeutralActive,
34
+ "[&_svg:not([class*='size-'])]:size-3.5"
35
+ );
36
+ var shellTopBarSecondaryButtonClass = cn(
37
+ shellTopBarActionSize,
38
+ shellTopBarRadius,
39
+ "!border-sidebar-border !bg-sidebar-accent !text-sidebar-foreground shadow-none transition-colors",
40
+ "!py-0",
41
+ shellTopBarNeutralHover,
42
+ shellTopBarNeutralActive,
43
+ "disabled:pointer-events-none disabled:!border-sidebar-border/60 disabled:!bg-sidebar-accent/60 disabled:!text-sidebar-foreground/40"
44
+ );
45
+ var shellTopBarPrimaryButtonClass = cn(
46
+ shellTopBarActionSize,
47
+ shellTopBarRadius,
48
+ "bg-blue-500 text-white transition-colors hover:bg-blue-600",
49
+ "disabled:pointer-events-none disabled:opacity-50"
50
+ );
51
+ var shellTopBarAccentButtonClass = cn(
52
+ shellTopBarActionSize,
53
+ shellTopBarRadius,
54
+ "bg-emerald-600 text-white transition-colors hover:bg-emerald-700"
55
+ );
56
+ var shellTopBarSuccessButtonClass = cn(
57
+ shellTopBarActionSize,
58
+ shellTopBarRadius,
59
+ isDarkShell() ? "border border-emerald-500/35 bg-emerald-500/15 text-emerald-300 transition-colors hover:border-emerald-400/45 hover:bg-emerald-500/25" : "border border-emerald-200 bg-emerald-50 text-emerald-700 transition-colors hover:border-emerald-300 hover:bg-emerald-100"
60
+ );
61
+ var shellTopBarInfoButtonClass = cn(
62
+ shellTopBarActionSize,
63
+ shellTopBarRadius,
64
+ isDarkShell() ? "border border-blue-500/35 bg-blue-500/15 text-blue-300 transition-colors hover:border-blue-400/45 hover:bg-blue-500/25" : "border border-blue-200 bg-blue-50 text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100"
65
+ );
66
+ var shellTopBarOutlineButtonClass = shellTopBarSecondaryButtonClass;
67
+ var shellTopBarSegmentedShellClass = cn(
68
+ "flex items-center gap-0.5 border border-sidebar-border bg-sidebar-accent p-0.5",
69
+ shellTopBarRadius
70
+ );
71
+ function shellTopBarSegmentedItemClass(active) {
72
+ const dark = isDarkShell();
73
+ return cn(
74
+ shellTopBarActionSize,
75
+ "!h-6 px-2",
76
+ "rounded-sm",
77
+ active ? dark ? "bg-sidebar text-sidebar-foreground shadow-sm" : "bg-white text-sidebar-foreground shadow-sm" : dark ? "text-sidebar-foreground/60 hover:bg-sidebar-foreground/10 hover:text-sidebar-foreground" : "text-sidebar-foreground/60 hover:bg-sidebar-foreground/6 hover:text-sidebar-foreground"
78
+ );
79
+ }
80
+ var shellTopBarControlGroupClass = cn(
81
+ "flex h-7 items-center gap-1.5 border border-sidebar-border bg-sidebar-accent pl-2.5 pr-1 text-sidebar-foreground",
82
+ shellTopBarRadius
83
+ );
84
+ var shellTopBarControlLabelClass = "m-0 shrink-0 text-[11px] font-normal text-sidebar-foreground/60";
85
+ var shellTopBarSelectTriggerClass = "h-6 min-w-[140px] flex-1 border-0 bg-transparent px-1 text-xs text-sidebar-foreground shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 [&_svg]:text-sidebar-foreground/60";
86
+ var shellTopBarCompactIconButtonClass = cn(
87
+ "inline-flex !h-6 !w-6 items-center justify-center text-sidebar-foreground/70",
88
+ shellTopBarRadius,
89
+ shellTopBarNeutralRest,
90
+ shellTopBarNeutralHover,
91
+ shellTopBarNeutralActive,
92
+ "[&_svg:not([class*='size-'])]:size-3.5"
93
+ );
94
+ var shellTopBarDateLabelButtonClass = cn(
95
+ shellTopBarActionSize,
96
+ "min-w-[72px]",
97
+ shellTopBarNeutralRest,
98
+ shellTopBarNeutralHover,
99
+ shellTopBarNeutralActive
100
+ );
101
+
102
+ export { shellTopBarAccentButtonClass, shellTopBarBackButtonClass, shellTopBarCompactIconButtonClass, shellTopBarControlGroupClass, shellTopBarControlLabelClass, shellTopBarDateLabelButtonClass, shellTopBarIconButtonClass, shellTopBarInfoButtonClass, shellTopBarMutedIconClass, shellTopBarNeutralActionDataAttr, shellTopBarOutlineButtonClass, shellTopBarPrimaryButtonClass, shellTopBarSecondaryButtonClass, shellTopBarSegmentedItemClass, shellTopBarSegmentedShellClass, shellTopBarSelectTriggerClass, shellTopBarSuccessButtonClass, shellTopBarTitleTextClass };
103
+ //# sourceMappingURL=chunk-FCY5FYJB.js.map
104
+ //# sourceMappingURL=chunk-FCY5FYJB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shell/shell-top-bar-chrome.ts"],"names":[],"mappings":";;;;AAGO,IAAM,yBAAA,GAA4B;AAClC,IAAM,yBAAA,GAA4B;AAGzC,IAAM,qBAAA,GAAwB,EAAA;AAAA,EAC5B,uFAAA;AAAA,EACA;AACF,CAAA;AACA,IAAM,iBAAA,GAAoB,YAAA;AAE1B,SAAS,WAAA,GAAc;AACrB,EAAA,OAAO,eAAc,KAAM,MAAA;AAC7B;AAGA,IAAM,sBAAA,GACJ,sGAAA;AAGF,IAAM,uBAAA,GAA0B,WAAA,EAAY,GACxC,oGAAA,GACA,mGAAA;AAEJ,IAAM,wBAAA,GAA2B,WAAA,EAAY,GACzC,sGAAA,GACA,sGAAA;AAGG,IAAM,gCAAA,GAAmC;AAAA,EAC9C,2BAAA,EAA6B;AAC/B;AAGO,IAAM,0BAAA,GAA6B,EAAA;AAAA,EACxC,uFAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF;AAGO,IAAM,0BAAA,GAA6B,EAAA;AAAA,EACxC,uFAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF;AAMO,IAAM,+BAAA,GAAkC,EAAA;AAAA,EAC7C,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,kGAAA;AAAA,EACA,OAAA;AAAA,EACA,uBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF;AAGO,IAAM,6BAAA,GAAgC,EAAA;AAAA,EAC3C,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,4DAAA;AAAA,EACA;AACF;AAGO,IAAM,4BAAA,GAA+B,EAAA;AAAA,EAC1C,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;AAGO,IAAM,6BAAA,GAAgC,EAAA;AAAA,EAC3C,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA,KACI,uIAAA,GACA;AACN;AAGO,IAAM,0BAAA,GAA6B,EAAA;AAAA,EACxC,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA,KACI,wHAAA,GACA;AACN;AAGO,IAAM,6BAAA,GAAgC;AAGtC,IAAM,8BAAA,GAAiC,EAAA;AAAA,EAC5C,gFAAA;AAAA,EACA;AACF;AAEO,SAAS,8BAA8B,MAAA,EAAiB;AAC7D,EAAA,MAAM,OAAO,WAAA,EAAY;AACzB,EAAA,OAAO,EAAA;AAAA,IACL,qBAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA,GACI,IAAA,GACE,8CAAA,GACA,4CAAA,GACF,OACE,yFAAA,GACA;AAAA,GACR;AACF;AAGO,IAAM,4BAAA,GAA+B,EAAA;AAAA,EAC1C,kHAAA;AAAA,EACA;AACF;AAEO,IAAM,4BAAA,GACX;AAGK,IAAM,6BAAA,GACX;AAGK,IAAM,iCAAA,GAAoC,EAAA;AAAA,EAC/C,8EAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF;AAGO,IAAM,+BAAA,GAAkC,EAAA;AAAA,EAC7C,qBAAA;AAAA,EACA,cAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF","file":"chunk-FCY5FYJB.js","sourcesContent":["import { getShellTheme } from \"../theme/shell-theme\";\nimport { cn } from \"../ui/utils\";\n\nexport const shellTopBarMutedIconClass = \"text-sidebar-foreground/60\";\nexport const shellTopBarTitleTextClass = \"text-sidebar-foreground\";\n\n/** Shared sizing and corner radius for shell top bar actions. */\nconst shellTopBarActionSize = cn(\n \"inline-flex !h-7 min-h-0 items-center justify-center gap-1 px-2.5 text-xs font-medium\",\n \"[&_svg:not([class*='size-'])]:size-3.5\",\n);\nconst shellTopBarRadius = \"rounded-md\";\n\nfunction isDarkShell() {\n return getShellTheme() === \"dark\";\n}\n\n/** Resting surface for neutral shell controls (secondary, outline, icon). */\nconst shellTopBarNeutralRest =\n \"border border-sidebar-border bg-sidebar-accent text-sidebar-foreground shadow-none transition-colors\";\n\n/** Visible hover — lighten fill on dark shell, darken on light shell. */\nconst shellTopBarNeutralHover = isDarkShell()\n ? \"hover:!border-sidebar-foreground/25 hover:!bg-sidebar-foreground/12 hover:!text-sidebar-foreground\"\n : \"hover:!border-sidebar-foreground/14 hover:!bg-sidebar-foreground/6 hover:!text-sidebar-foreground\";\n\nconst shellTopBarNeutralActive = isDarkShell()\n ? \"active:!border-sidebar-foreground/20 active:!bg-sidebar-foreground/8 active:!text-sidebar-foreground\"\n : \"active:!border-sidebar-foreground/10 active:!bg-sidebar-foreground/4 active:!text-sidebar-foreground\";\n\n/** Apply to native shell actions (links, ticket buttons) so they share the same hover treatment as {@link ShellTopBarSecondaryActionButton}. */\nexport const shellTopBarNeutralActionDataAttr = {\n \"data-shell-top-bar-action\": \"\",\n} as const;\n\n/** Compact back control in the shell top bar (detail pages). */\nexport const shellTopBarBackButtonClass = cn(\n \"inline-flex !h-6 !w-6 shrink-0 items-center justify-center text-sidebar-foreground/70\",\n shellTopBarRadius,\n shellTopBarNeutralRest,\n shellTopBarNeutralHover,\n shellTopBarNeutralActive,\n);\n\n/** Icon-only control (e.g. overflow menu) in the shell top bar. */\nexport const shellTopBarIconButtonClass = cn(\n \"inline-flex !h-7 !w-7 shrink-0 items-center justify-center text-sidebar-foreground/70\",\n shellTopBarRadius,\n shellTopBarNeutralRest,\n shellTopBarNeutralHover,\n shellTopBarNeutralActive,\n \"[&_svg:not([class*='size-'])]:size-3.5\",\n);\n\n/**\n * Neutral secondary / outline action in the shell top bar.\n * Uses `!` on hover so shadcn `Button variant=\"outline\"` cannot win.\n */\nexport const shellTopBarSecondaryButtonClass = cn(\n shellTopBarActionSize,\n shellTopBarRadius,\n \"!border-sidebar-border !bg-sidebar-accent !text-sidebar-foreground shadow-none transition-colors\",\n \"!py-0\",\n shellTopBarNeutralHover,\n shellTopBarNeutralActive,\n \"disabled:pointer-events-none disabled:!border-sidebar-border/60 disabled:!bg-sidebar-accent/60 disabled:!text-sidebar-foreground/40\",\n);\n\n/** Primary CTA in the shell top bar (New invoice, Add staff, etc.). */\nexport const shellTopBarPrimaryButtonClass = cn(\n shellTopBarActionSize,\n shellTopBarRadius,\n \"bg-blue-500 text-white transition-colors hover:bg-blue-600\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n);\n\n/** Positive / payment emphasis in the shell top bar (e.g. Mark as paid). */\nexport const shellTopBarAccentButtonClass = cn(\n shellTopBarActionSize,\n shellTopBarRadius,\n \"bg-emerald-600 text-white transition-colors hover:bg-emerald-700\",\n);\n\n/** Positive status action in the shell top bar (e.g. Mark resolved). */\nexport const shellTopBarSuccessButtonClass = cn(\n shellTopBarActionSize,\n shellTopBarRadius,\n isDarkShell()\n ? \"border border-emerald-500/35 bg-emerald-500/15 text-emerald-300 transition-colors hover:border-emerald-400/45 hover:bg-emerald-500/25\"\n : \"border border-emerald-200 bg-emerald-50 text-emerald-700 transition-colors hover:border-emerald-300 hover:bg-emerald-100\",\n);\n\n/** Informative / reopen action in the shell top bar. */\nexport const shellTopBarInfoButtonClass = cn(\n shellTopBarActionSize,\n shellTopBarRadius,\n isDarkShell()\n ? \"border border-blue-500/35 bg-blue-500/15 text-blue-300 transition-colors hover:border-blue-400/45 hover:bg-blue-500/25\"\n : \"border border-blue-200 bg-blue-50 text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100\",\n);\n\n/** Outline-style action — same neutral chrome as {@link shellTopBarSecondaryButtonClass}. */\nexport const shellTopBarOutlineButtonClass = shellTopBarSecondaryButtonClass;\n\n/** Wrapper for segmented toggles (2D / list, etc.) in the shell top bar. */\nexport const shellTopBarSegmentedShellClass = cn(\n \"flex items-center gap-0.5 border border-sidebar-border bg-sidebar-accent p-0.5\",\n shellTopBarRadius,\n);\n\nexport function shellTopBarSegmentedItemClass(active: boolean) {\n const dark = isDarkShell();\n return cn(\n shellTopBarActionSize,\n \"!h-6 px-2\",\n \"rounded-sm\",\n active\n ? dark\n ? \"bg-sidebar text-sidebar-foreground shadow-sm\"\n : \"bg-white text-sidebar-foreground shadow-sm\"\n : dark\n ? \"text-sidebar-foreground/60 hover:bg-sidebar-foreground/10 hover:text-sidebar-foreground\"\n : \"text-sidebar-foreground/60 hover:bg-sidebar-foreground/6 hover:text-sidebar-foreground\",\n );\n}\n\n/** Grouped field shell (month picker, etc.) in the top bar. */\nexport const shellTopBarControlGroupClass = cn(\n \"flex h-7 items-center gap-1.5 border border-sidebar-border bg-sidebar-accent pl-2.5 pr-1 text-sidebar-foreground\",\n shellTopBarRadius,\n);\n\nexport const shellTopBarControlLabelClass =\n \"m-0 shrink-0 text-[11px] font-normal text-sidebar-foreground/60\";\n\n/** Select trigger embedded in {@link shellTopBarControlGroupClass}. */\nexport const shellTopBarSelectTriggerClass =\n \"h-6 min-w-[140px] flex-1 border-0 bg-transparent px-1 text-xs text-sidebar-foreground shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 [&_svg]:text-sidebar-foreground/60\";\n\n/** Square control for date steppers and similar compact actions. */\nexport const shellTopBarCompactIconButtonClass = cn(\n \"inline-flex !h-6 !w-6 items-center justify-center text-sidebar-foreground/70\",\n shellTopBarRadius,\n shellTopBarNeutralRest,\n shellTopBarNeutralHover,\n shellTopBarNeutralActive,\n \"[&_svg:not([class*='size-'])]:size-3.5\",\n);\n\n/** Center label in a date stepper (shows “Today” or a formatted date). */\nexport const shellTopBarDateLabelButtonClass = cn(\n shellTopBarActionSize,\n \"min-w-[72px]\",\n shellTopBarNeutralRest,\n shellTopBarNeutralHover,\n shellTopBarNeutralActive,\n);\n"]}