@augmenting-integrations/ui 0.2.1 → 1.0.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 (165) hide show
  1. package/dist/components/chrome/Logo.cjs +52 -0
  2. package/dist/components/chrome/Logo.cjs.map +1 -0
  3. package/dist/components/chrome/Logo.js +28 -0
  4. package/dist/components/chrome/Logo.js.map +1 -0
  5. package/dist/components/chrome/RoleSwitcher.cjs +98 -0
  6. package/dist/components/chrome/RoleSwitcher.cjs.map +1 -0
  7. package/dist/components/chrome/RoleSwitcher.js +64 -0
  8. package/dist/components/chrome/RoleSwitcher.js.map +1 -0
  9. package/dist/components/chrome/ThemeSwitcher.cjs +129 -0
  10. package/dist/components/chrome/ThemeSwitcher.cjs.map +1 -0
  11. package/dist/components/chrome/ThemeSwitcher.js +100 -0
  12. package/dist/components/chrome/ThemeSwitcher.js.map +1 -0
  13. package/dist/components/shells/AppShell.cjs +128 -0
  14. package/dist/components/shells/AppShell.cjs.map +1 -0
  15. package/dist/components/shells/AppShell.d.ts +1 -7
  16. package/dist/components/shells/AppShell.d.ts.map +1 -1
  17. package/dist/components/shells/AppShell.js +94 -0
  18. package/dist/components/shells/AppShell.js.map +1 -0
  19. package/dist/components/shells/PublicShell.cjs +87 -0
  20. package/dist/components/shells/PublicShell.cjs.map +1 -0
  21. package/dist/components/shells/PublicShell.d.ts +1 -11
  22. package/dist/components/shells/PublicShell.d.ts.map +1 -1
  23. package/dist/components/shells/PublicShell.js +53 -0
  24. package/dist/components/shells/PublicShell.js.map +1 -0
  25. package/dist/components/shells/StudioShell.cjs +49 -0
  26. package/dist/components/shells/StudioShell.cjs.map +1 -0
  27. package/dist/components/shells/StudioShell.js +25 -0
  28. package/dist/components/shells/StudioShell.js.map +1 -0
  29. package/dist/components/ui/avatar.cjs +131 -0
  30. package/dist/components/ui/avatar.cjs.map +1 -0
  31. package/dist/components/ui/avatar.js +102 -0
  32. package/dist/components/ui/avatar.js.map +1 -0
  33. package/dist/components/ui/badge.cjs +69 -0
  34. package/dist/components/ui/badge.cjs.map +1 -0
  35. package/dist/components/ui/badge.js +44 -0
  36. package/dist/components/ui/badge.js.map +1 -0
  37. package/dist/components/ui/button.cjs +82 -0
  38. package/dist/components/ui/button.cjs.map +1 -0
  39. package/dist/components/ui/button.js +57 -0
  40. package/dist/components/ui/button.js.map +1 -0
  41. package/dist/components/ui/card.cjs +114 -0
  42. package/dist/components/ui/card.cjs.map +1 -0
  43. package/dist/components/ui/card.js +84 -0
  44. package/dist/components/ui/card.js.map +1 -0
  45. package/dist/components/ui/checkbox.cjs +57 -0
  46. package/dist/components/ui/checkbox.cjs.map +1 -0
  47. package/dist/components/ui/checkbox.js +33 -0
  48. package/dist/components/ui/checkbox.js.map +1 -0
  49. package/dist/components/ui/dialog.cjs +172 -0
  50. package/dist/components/ui/dialog.cjs.map +1 -0
  51. package/dist/components/ui/dialog.js +139 -0
  52. package/dist/components/ui/dialog.js.map +1 -0
  53. package/dist/components/ui/dropdown-menu.cjs +250 -0
  54. package/dist/components/ui/dropdown-menu.cjs.map +1 -0
  55. package/dist/components/ui/dropdown-menu.js +212 -0
  56. package/dist/components/ui/dropdown-menu.js.map +1 -0
  57. package/dist/components/ui/input.cjs +46 -0
  58. package/dist/components/ui/input.cjs.map +1 -0
  59. package/dist/components/ui/input.js +22 -0
  60. package/dist/components/ui/input.js.map +1 -0
  61. package/dist/components/ui/label.cjs +48 -0
  62. package/dist/components/ui/label.cjs.map +1 -0
  63. package/dist/components/ui/label.js +24 -0
  64. package/dist/components/ui/label.js.map +1 -0
  65. package/dist/components/ui/select.cjs +201 -0
  66. package/dist/components/ui/select.cjs.map +1 -0
  67. package/dist/components/ui/select.js +168 -0
  68. package/dist/components/ui/select.js.map +1 -0
  69. package/dist/components/ui/separator.cjs +52 -0
  70. package/dist/components/ui/separator.cjs.map +1 -0
  71. package/dist/components/ui/separator.js +28 -0
  72. package/dist/components/ui/separator.js.map +1 -0
  73. package/dist/components/ui/sheet.cjs +154 -0
  74. package/dist/components/ui/sheet.cjs.map +1 -0
  75. package/dist/components/ui/sheet.js +123 -0
  76. package/dist/components/ui/sheet.js.map +1 -0
  77. package/dist/components/ui/table.cjs +134 -0
  78. package/dist/components/ui/table.cjs.map +1 -0
  79. package/dist/components/ui/table.js +103 -0
  80. package/dist/components/ui/table.js.map +1 -0
  81. package/dist/components/ui/tabs.cjs +121 -0
  82. package/dist/components/ui/tabs.cjs.map +1 -0
  83. package/dist/components/ui/tabs.js +93 -0
  84. package/dist/components/ui/tabs.js.map +1 -0
  85. package/dist/components/ui/textarea.cjs +43 -0
  86. package/dist/components/ui/textarea.cjs.map +1 -0
  87. package/dist/components/ui/textarea.js +19 -0
  88. package/dist/components/ui/textarea.js.map +1 -0
  89. package/dist/index.cjs +92 -0
  90. package/dist/index.cjs.map +1 -0
  91. package/dist/index.js +25 -16
  92. package/dist/index.js.map +1 -1
  93. package/dist/lib/utils.cjs +33 -0
  94. package/dist/lib/utils.cjs.map +1 -0
  95. package/dist/lib/utils.js +5 -2
  96. package/dist/lib/utils.js.map +1 -1
  97. package/dist/providers/MockProvider.cjs +83 -0
  98. package/dist/providers/MockProvider.cjs.map +1 -0
  99. package/dist/providers/MockProvider.js +49 -0
  100. package/dist/providers/MockProvider.js.map +1 -0
  101. package/dist/providers/QueryProvider.cjs +52 -0
  102. package/dist/providers/QueryProvider.cjs.map +1 -0
  103. package/dist/providers/QueryProvider.js +18 -0
  104. package/dist/providers/QueryProvider.js.map +1 -0
  105. package/dist/providers/SessionProvider.cjs +37 -0
  106. package/dist/providers/SessionProvider.cjs.map +1 -0
  107. package/dist/providers/SessionProvider.js +13 -0
  108. package/dist/providers/SessionProvider.js.map +1 -0
  109. package/dist/providers/ThemeProvider.cjs +92 -0
  110. package/dist/providers/ThemeProvider.cjs.map +1 -0
  111. package/dist/providers/ThemeProvider.js +57 -0
  112. package/dist/providers/ThemeProvider.js.map +1 -0
  113. package/package.json +7 -5
  114. package/dist/components/chrome/Logo.jsx +0 -19
  115. package/dist/components/chrome/Logo.jsx.map +0 -1
  116. package/dist/components/chrome/RoleSwitcher.jsx +0 -32
  117. package/dist/components/chrome/RoleSwitcher.jsx.map +0 -1
  118. package/dist/components/chrome/ThemeSwitcher.jsx +0 -43
  119. package/dist/components/chrome/ThemeSwitcher.jsx.map +0 -1
  120. package/dist/components/shells/AppShell.jsx +0 -67
  121. package/dist/components/shells/AppShell.jsx.map +0 -1
  122. package/dist/components/shells/PublicShell.jsx +0 -42
  123. package/dist/components/shells/PublicShell.jsx.map +0 -1
  124. package/dist/components/shells/StudioShell.jsx +0 -20
  125. package/dist/components/shells/StudioShell.jsx.map +0 -1
  126. package/dist/components/ui/avatar.jsx +0 -24
  127. package/dist/components/ui/avatar.jsx.map +0 -1
  128. package/dist/components/ui/badge.jsx +0 -25
  129. package/dist/components/ui/badge.jsx.map +0 -1
  130. package/dist/components/ui/button.jsx +0 -36
  131. package/dist/components/ui/button.jsx.map +0 -1
  132. package/dist/components/ui/card.jsx +0 -25
  133. package/dist/components/ui/card.jsx.map +0 -1
  134. package/dist/components/ui/checkbox.jsx +0 -14
  135. package/dist/components/ui/checkbox.jsx.map +0 -1
  136. package/dist/components/ui/dialog.jsx +0 -52
  137. package/dist/components/ui/dialog.jsx.map +0 -1
  138. package/dist/components/ui/dropdown-menu.jsx +0 -71
  139. package/dist/components/ui/dropdown-menu.jsx.map +0 -1
  140. package/dist/components/ui/input.jsx +0 -7
  141. package/dist/components/ui/input.jsx.map +0 -1
  142. package/dist/components/ui/label.jsx +0 -9
  143. package/dist/components/ui/label.jsx.map +0 -1
  144. package/dist/components/ui/select.jsx +0 -63
  145. package/dist/components/ui/select.jsx.map +0 -1
  146. package/dist/components/ui/separator.jsx +0 -9
  147. package/dist/components/ui/separator.jsx.map +0 -1
  148. package/dist/components/ui/sheet.jsx +0 -50
  149. package/dist/components/ui/sheet.jsx.map +0 -1
  150. package/dist/components/ui/table.jsx +0 -31
  151. package/dist/components/ui/table.jsx.map +0 -1
  152. package/dist/components/ui/tabs.jsx +0 -30
  153. package/dist/components/ui/tabs.jsx.map +0 -1
  154. package/dist/components/ui/textarea.jsx +0 -7
  155. package/dist/components/ui/textarea.jsx.map +0 -1
  156. package/dist/index.mjs +0 -1562
  157. package/dist/index.mjs.map +0 -1
  158. package/dist/providers/MockProvider.jsx +0 -59
  159. package/dist/providers/MockProvider.jsx.map +0 -1
  160. package/dist/providers/QueryProvider.jsx +0 -12
  161. package/dist/providers/QueryProvider.jsx.map +0 -1
  162. package/dist/providers/SessionProvider.jsx +0 -6
  163. package/dist/providers/SessionProvider.jsx.map +0 -1
  164. package/dist/providers/ThemeProvider.jsx +0 -44
  165. package/dist/providers/ThemeProvider.jsx.map +0 -1
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ function MockProvider({
5
+ children,
6
+ loadWorker,
7
+ serviceWorkerUrl = "/mockServiceWorker.js"
8
+ }) {
9
+ const [ready, setReady] = React.useState(() => process.env.NODE_ENV !== "development");
10
+ const [error, setError] = React.useState(null);
11
+ React.useEffect(() => {
12
+ if (process.env.NODE_ENV !== "development") return;
13
+ let cancelled = false;
14
+ void (async () => {
15
+ try {
16
+ const worker = await loadWorker();
17
+ await worker.start({
18
+ onUnhandledRequest: "bypass",
19
+ serviceWorker: { url: serviceWorkerUrl }
20
+ });
21
+ if (!cancelled) setReady(true);
22
+ } catch (e) {
23
+ console.error("[MockProvider] MSW failed to start:", e);
24
+ if (!cancelled) {
25
+ setError(e instanceof Error ? e.message : String(e));
26
+ setReady(true);
27
+ }
28
+ }
29
+ })();
30
+ return () => {
31
+ cancelled = true;
32
+ };
33
+ }, [loadWorker, serviceWorkerUrl]);
34
+ if (!ready) {
35
+ return /* @__PURE__ */ jsx("div", { className: "flex min-h-svh items-center justify-center bg-background text-muted-foreground", children: /* @__PURE__ */ jsx("p", { className: "text-sm", children: "Initializing mocks\u2026" }) });
36
+ }
37
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
38
+ error ? /* @__PURE__ */ jsxs("div", { className: "border-b border-destructive/40 bg-destructive/10 px-4 py-2 text-xs text-destructive", children: [
39
+ "MSW failed to start (",
40
+ error,
41
+ "). Mock API calls will return real 404s."
42
+ ] }) : null,
43
+ children
44
+ ] });
45
+ }
46
+ export {
47
+ MockProvider
48
+ };
49
+ //# sourceMappingURL=MockProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/MockProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { SetupWorker } from \"msw/browser\";\n\n/**\n * Initializes MSW in the browser in development. **No-op in production.**\n *\n * Production-safety pattern: every gate uses `process.env.NODE_ENV !==\n * \"development\"` directly (not through a `const enabled = ...` indirection).\n * Webpack/Next.js statically replace `process.env.NODE_ENV` with the literal\n * `\"production\"` at build time, the comparisons collapse to constants, and\n * the dynamic `loadWorker()` call becomes dead code that the bundler strips.\n * The mocks chunk is never emitted in a production build.\n *\n * Belt-and-suspenders: each consuming app should ALSO add a\n * `webpack.IgnorePlugin({ resourceRegExp: /[/\\\\\\\\]mocks[/\\\\\\\\]/ })` in its\n * `next.config.ts` for production builds. That excludes the source files\n * even if a future contributor accidentally adds a non-gated import.\n */\nexport function MockProvider({\n children,\n loadWorker,\n serviceWorkerUrl = \"/mockServiceWorker.js\",\n}: {\n children: React.ReactNode;\n loadWorker: () => Promise<SetupWorker>;\n serviceWorkerUrl?: string;\n}) {\n const [ready, setReady] = React.useState(() => process.env.NODE_ENV !== \"development\");\n const [error, setError] = React.useState<string | null>(null);\n\n React.useEffect(() => {\n if (process.env.NODE_ENV !== \"development\") return;\n let cancelled = false;\n void (async () => {\n try {\n const worker = await loadWorker();\n await worker.start({\n onUnhandledRequest: \"bypass\",\n serviceWorker: { url: serviceWorkerUrl },\n });\n if (!cancelled) setReady(true);\n } catch (e) {\n console.error(\"[MockProvider] MSW failed to start:\", e);\n if (!cancelled) {\n setError(e instanceof Error ? e.message : String(e));\n setReady(true);\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [loadWorker, serviceWorkerUrl]);\n\n if (!ready) {\n return (\n <div className=\"flex min-h-svh items-center justify-center bg-background text-muted-foreground\">\n <p className=\"text-sm\">Initializing mocks…</p>\n </div>\n );\n }\n return (\n <>\n {error ? (\n <div className=\"border-b border-destructive/40 bg-destructive/10 px-4 py-2 text-xs text-destructive\">\n MSW failed to start ({error}). Mock API calls will return real 404s.\n </div>\n ) : null}\n {children}\n </>\n );\n}\n"],"mappings":";AA2DQ,SAKJ,UALI,KAOA,YAPA;AAzDR,YAAY,WAAW;AAkBhB,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,mBAAmB;AACrB,GAIG;AACD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,MAAM,QAAQ,IAAI,aAAa,aAAa;AACrF,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAwB,IAAI;AAE5D,QAAM,UAAU,MAAM;AACpB,QAAI,QAAQ,IAAI,aAAa,cAAe;AAC5C,QAAI,YAAY;AAChB,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,SAAS,MAAM,WAAW;AAChC,cAAM,OAAO,MAAM;AAAA,UACjB,oBAAoB;AAAA,UACpB,eAAe,EAAE,KAAK,iBAAiB;AAAA,QACzC,CAAC;AACD,YAAI,CAAC,UAAW,UAAS,IAAI;AAAA,MAC/B,SAAS,GAAG;AACV,gBAAQ,MAAM,uCAAuC,CAAC;AACtD,YAAI,CAAC,WAAW;AACd,mBAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AACnD,mBAAS,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,YAAY,gBAAgB,CAAC;AAEjC,MAAI,CAAC,OAAO;AACV,WACE,oBAAC,SAAI,WAAU,kFACb,8BAAC,OAAE,WAAU,WAAU,sCAAmB,GAC5C;AAAA,EAEJ;AACA,SACE,iCACG;AAAA,YACC,qBAAC,SAAI,WAAU,uFAAsF;AAAA;AAAA,MAC7E;AAAA,MAAM;AAAA,OAC9B,IACE;AAAA,IACH;AAAA,KACH;AAEJ;","names":[]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var QueryProvider_exports = {};
31
+ __export(QueryProvider_exports, {
32
+ QueryProvider: () => QueryProvider
33
+ });
34
+ module.exports = __toCommonJS(QueryProvider_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var React = __toESM(require("react"));
37
+ var import_react_query = require("@tanstack/react-query");
38
+ function QueryProvider({ children }) {
39
+ const [client] = React.useState(
40
+ () => new import_react_query.QueryClient({
41
+ defaultOptions: {
42
+ queries: { staleTime: 3e4, refetchOnWindowFocus: false }
43
+ }
44
+ })
45
+ );
46
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_query.QueryClientProvider, { client, children });
47
+ }
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ QueryProvider
51
+ });
52
+ //# sourceMappingURL=QueryProvider.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/QueryProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n const [client] = React.useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { staleTime: 30_000, refetchOnWindowFocus: false },\n },\n }),\n );\n return <QueryClientProvider client={client}>{children}</QueryClientProvider>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcS;AAZT,YAAuB;AACvB,yBAAiD;AAE1C,SAAS,cAAc,EAAE,SAAS,GAAkC;AACzE,QAAM,CAAC,MAAM,IAAI,MAAM;AAAA,IACrB,MACE,IAAI,+BAAY;AAAA,MACd,gBAAgB;AAAA,QACd,SAAS,EAAE,WAAW,KAAQ,sBAAsB,MAAM;AAAA,MAC5D;AAAA,IACF,CAAC;AAAA,EACL;AACA,SAAO,4CAAC,0CAAoB,QAAiB,UAAS;AACxD;","names":[]}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
5
+ function QueryProvider({ children }) {
6
+ const [client] = React.useState(
7
+ () => new QueryClient({
8
+ defaultOptions: {
9
+ queries: { staleTime: 3e4, refetchOnWindowFocus: false }
10
+ }
11
+ })
12
+ );
13
+ return /* @__PURE__ */ jsx(QueryClientProvider, { client, children });
14
+ }
15
+ export {
16
+ QueryProvider
17
+ };
18
+ //# sourceMappingURL=QueryProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/QueryProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n const [client] = React.useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { staleTime: 30_000, refetchOnWindowFocus: false },\n },\n }),\n );\n return <QueryClientProvider client={client}>{children}</QueryClientProvider>;\n}\n"],"mappings":";AAcS;AAZT,YAAY,WAAW;AACvB,SAAS,aAAa,2BAA2B;AAE1C,SAAS,cAAc,EAAE,SAAS,GAAkC;AACzE,QAAM,CAAC,MAAM,IAAI,MAAM;AAAA,IACrB,MACE,IAAI,YAAY;AAAA,MACd,gBAAgB;AAAA,QACd,SAAS,EAAE,WAAW,KAAQ,sBAAsB,MAAM;AAAA,MAC5D;AAAA,IACF,CAAC;AAAA,EACL;AACA,SAAO,oBAAC,uBAAoB,QAAiB,UAAS;AACxD;","names":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var SessionProvider_exports = {};
21
+ __export(SessionProvider_exports, {
22
+ SessionProvider: () => SessionProvider
23
+ });
24
+ module.exports = __toCommonJS(SessionProvider_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_react = require("next-auth/react");
27
+ function SessionProvider({
28
+ children,
29
+ session
30
+ }) {
31
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.SessionProvider, { session, children });
32
+ }
33
+ // Annotate the CommonJS export names for ESM import in node:
34
+ 0 && (module.exports = {
35
+ SessionProvider
36
+ });
37
+ //# sourceMappingURL=SessionProvider.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/SessionProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Session } from \"next-auth\";\nimport { SessionProvider as NextAuthSessionProvider } from \"next-auth/react\";\n\nexport function SessionProvider({\n children,\n session,\n}: {\n children: React.ReactNode;\n session: Session | null;\n}) {\n return <NextAuthSessionProvider session={session}>{children}</NextAuthSessionProvider>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYS;AATT,mBAA2D;AAEpD,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AACF,GAGG;AACD,SAAO,4CAAC,aAAAA,iBAAA,EAAwB,SAAmB,UAAS;AAC9D;","names":["NextAuthSessionProvider"]}
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { SessionProvider as NextAuthSessionProvider } from "next-auth/react";
4
+ function SessionProvider({
5
+ children,
6
+ session
7
+ }) {
8
+ return /* @__PURE__ */ jsx(NextAuthSessionProvider, { session, children });
9
+ }
10
+ export {
11
+ SessionProvider
12
+ };
13
+ //# sourceMappingURL=SessionProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/SessionProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Session } from \"next-auth\";\nimport { SessionProvider as NextAuthSessionProvider } from \"next-auth/react\";\n\nexport function SessionProvider({\n children,\n session,\n}: {\n children: React.ReactNode;\n session: Session | null;\n}) {\n return <NextAuthSessionProvider session={session}>{children}</NextAuthSessionProvider>;\n}\n"],"mappings":";AAYS;AATT,SAAS,mBAAmB,+BAA+B;AAEpD,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AACF,GAGG;AACD,SAAO,oBAAC,2BAAwB,SAAmB,UAAS;AAC9D;","names":[]}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var ThemeProvider_exports = {};
31
+ __export(ThemeProvider_exports, {
32
+ ThemeProvider: () => ThemeProvider,
33
+ useThemeName: () => useThemeName
34
+ });
35
+ module.exports = __toCommonJS(ThemeProvider_exports);
36
+ var import_jsx_runtime = require("react/jsx-runtime");
37
+ var React = __toESM(require("react"));
38
+ var import_next_themes = require("next-themes");
39
+ var import_themes = require("@augmenting-integrations/themes");
40
+ const ThemeNameContext = React.createContext(null);
41
+ function readCookie() {
42
+ if (typeof document === "undefined") return null;
43
+ const match = document.cookie.split("; ").find((row) => row.startsWith(`${import_themes.THEME_COOKIE_KEY}=`));
44
+ if (!match) return null;
45
+ const value = match.split("=")[1];
46
+ return value && value.length > 0 ? value : null;
47
+ }
48
+ function writeCookie(value) {
49
+ if (typeof document === "undefined") return;
50
+ document.cookie = `${import_themes.THEME_COOKIE_KEY}=${value}; path=/; max-age=${60 * 60 * 24 * 365}; samesite=lax`;
51
+ }
52
+ function ThemeProvider({
53
+ children,
54
+ defaultTheme,
55
+ defaultVariant
56
+ }) {
57
+ const [themeName, setThemeNameState] = React.useState(
58
+ () => readCookie() ?? defaultTheme
59
+ );
60
+ React.useEffect(() => {
61
+ document.documentElement.setAttribute("data-theme", themeName);
62
+ }, [themeName]);
63
+ const setThemeName = React.useCallback((next) => {
64
+ writeCookie(next);
65
+ setThemeNameState(next);
66
+ }, []);
67
+ const value = React.useMemo(
68
+ () => ({ themeName, setThemeName }),
69
+ [themeName, setThemeName]
70
+ );
71
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeNameContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
72
+ import_next_themes.ThemeProvider,
73
+ {
74
+ attribute: "class",
75
+ defaultTheme: defaultVariant,
76
+ enableSystem: false,
77
+ disableTransitionOnChange: true,
78
+ children
79
+ }
80
+ ) });
81
+ }
82
+ function useThemeName() {
83
+ const ctx = React.useContext(ThemeNameContext);
84
+ if (!ctx) throw new Error("useThemeName must be used inside <ThemeProvider />");
85
+ return ctx;
86
+ }
87
+ // Annotate the CommonJS export names for ESM import in node:
88
+ 0 && (module.exports = {
89
+ ThemeProvider,
90
+ useThemeName
91
+ });
92
+ //# sourceMappingURL=ThemeProvider.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/ThemeProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { ThemeProvider as NextThemesProvider } from \"next-themes\";\nimport type { ThemeName, Variant } from \"@augmenting-integrations/brand\";\nimport { THEME_COOKIE_KEY } from \"@augmenting-integrations/themes\";\n\ntype ThemeContextValue = {\n themeName: ThemeName;\n setThemeName: (next: ThemeName) => void;\n};\n\nconst ThemeNameContext = React.createContext<ThemeContextValue | null>(null);\n\nfunction readCookie(): ThemeName | null {\n if (typeof document === \"undefined\") return null;\n const match = document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(`${THEME_COOKIE_KEY}=`));\n if (!match) return null;\n const value = match.split(\"=\")[1];\n return value && value.length > 0 ? value : null;\n}\n\nfunction writeCookie(value: ThemeName) {\n if (typeof document === \"undefined\") return;\n document.cookie = `${THEME_COOKIE_KEY}=${value}; path=/; max-age=${60 * 60 * 24 * 365}; samesite=lax`;\n}\n\nexport function ThemeProvider({\n children,\n defaultTheme,\n defaultVariant,\n}: {\n children: React.ReactNode;\n defaultTheme: ThemeName;\n defaultVariant: Variant;\n}) {\n const [themeName, setThemeNameState] = React.useState<ThemeName>(\n () => readCookie() ?? defaultTheme,\n );\n\n React.useEffect(() => {\n document.documentElement.setAttribute(\"data-theme\", themeName);\n }, [themeName]);\n\n const setThemeName = React.useCallback((next: ThemeName) => {\n writeCookie(next);\n setThemeNameState(next);\n }, []);\n\n const value = React.useMemo(\n () => ({ themeName, setThemeName }),\n [themeName, setThemeName],\n );\n\n return (\n <ThemeNameContext.Provider value={value}>\n <NextThemesProvider\n attribute=\"class\"\n defaultTheme={defaultVariant}\n enableSystem={false}\n disableTransitionOnChange\n >\n {children}\n </NextThemesProvider>\n </ThemeNameContext.Provider>\n );\n}\n\nexport function useThemeName() {\n const ctx = React.useContext(ThemeNameContext);\n if (!ctx) throw new Error(\"useThemeName must be used inside <ThemeProvider />\");\n return ctx;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0DM;AAxDN,YAAuB;AACvB,yBAAoD;AAEpD,oBAAiC;AAOjC,MAAM,mBAAmB,MAAM,cAAwC,IAAI;AAE3E,SAAS,aAA+B;AACtC,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,QAAQ,SAAS,OACpB,MAAM,IAAI,EACV,KAAK,CAAC,QAAQ,IAAI,WAAW,GAAG,8BAAgB,GAAG,CAAC;AACvD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;AAChC,SAAO,SAAS,MAAM,SAAS,IAAI,QAAQ;AAC7C;AAEA,SAAS,YAAY,OAAkB;AACrC,MAAI,OAAO,aAAa,YAAa;AACrC,WAAS,SAAS,GAAG,8BAAgB,IAAI,KAAK,qBAAqB,KAAK,KAAK,KAAK,GAAG;AACvF;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,WAAW,iBAAiB,IAAI,MAAM;AAAA,IAC3C,MAAM,WAAW,KAAK;AAAA,EACxB;AAEA,QAAM,UAAU,MAAM;AACpB,aAAS,gBAAgB,aAAa,cAAc,SAAS;AAAA,EAC/D,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,eAAe,MAAM,YAAY,CAAC,SAAoB;AAC1D,gBAAY,IAAI;AAChB,sBAAkB,IAAI;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO,EAAE,WAAW,aAAa;AAAA,IACjC,CAAC,WAAW,YAAY;AAAA,EAC1B;AAEA,SACE,4CAAC,iBAAiB,UAAjB,EAA0B,OACzB;AAAA,IAAC,mBAAAA;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,cAAc;AAAA,MACd,cAAc;AAAA,MACd,2BAAyB;AAAA,MAExB;AAAA;AAAA,EACH,GACF;AAEJ;AAEO,SAAS,eAAe;AAC7B,QAAM,MAAM,MAAM,WAAW,gBAAgB;AAC7C,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,oDAAoD;AAC9E,SAAO;AACT;","names":["NextThemesProvider"]}
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { ThemeProvider as NextThemesProvider } from "next-themes";
5
+ import { THEME_COOKIE_KEY } from "@augmenting-integrations/themes";
6
+ const ThemeNameContext = React.createContext(null);
7
+ function readCookie() {
8
+ if (typeof document === "undefined") return null;
9
+ const match = document.cookie.split("; ").find((row) => row.startsWith(`${THEME_COOKIE_KEY}=`));
10
+ if (!match) return null;
11
+ const value = match.split("=")[1];
12
+ return value && value.length > 0 ? value : null;
13
+ }
14
+ function writeCookie(value) {
15
+ if (typeof document === "undefined") return;
16
+ document.cookie = `${THEME_COOKIE_KEY}=${value}; path=/; max-age=${60 * 60 * 24 * 365}; samesite=lax`;
17
+ }
18
+ function ThemeProvider({
19
+ children,
20
+ defaultTheme,
21
+ defaultVariant
22
+ }) {
23
+ const [themeName, setThemeNameState] = React.useState(
24
+ () => readCookie() ?? defaultTheme
25
+ );
26
+ React.useEffect(() => {
27
+ document.documentElement.setAttribute("data-theme", themeName);
28
+ }, [themeName]);
29
+ const setThemeName = React.useCallback((next) => {
30
+ writeCookie(next);
31
+ setThemeNameState(next);
32
+ }, []);
33
+ const value = React.useMemo(
34
+ () => ({ themeName, setThemeName }),
35
+ [themeName, setThemeName]
36
+ );
37
+ return /* @__PURE__ */ jsx(ThemeNameContext.Provider, { value, children: /* @__PURE__ */ jsx(
38
+ NextThemesProvider,
39
+ {
40
+ attribute: "class",
41
+ defaultTheme: defaultVariant,
42
+ enableSystem: false,
43
+ disableTransitionOnChange: true,
44
+ children
45
+ }
46
+ ) });
47
+ }
48
+ function useThemeName() {
49
+ const ctx = React.useContext(ThemeNameContext);
50
+ if (!ctx) throw new Error("useThemeName must be used inside <ThemeProvider />");
51
+ return ctx;
52
+ }
53
+ export {
54
+ ThemeProvider,
55
+ useThemeName
56
+ };
57
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/ThemeProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { ThemeProvider as NextThemesProvider } from \"next-themes\";\nimport type { ThemeName, Variant } from \"@augmenting-integrations/brand\";\nimport { THEME_COOKIE_KEY } from \"@augmenting-integrations/themes\";\n\ntype ThemeContextValue = {\n themeName: ThemeName;\n setThemeName: (next: ThemeName) => void;\n};\n\nconst ThemeNameContext = React.createContext<ThemeContextValue | null>(null);\n\nfunction readCookie(): ThemeName | null {\n if (typeof document === \"undefined\") return null;\n const match = document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(`${THEME_COOKIE_KEY}=`));\n if (!match) return null;\n const value = match.split(\"=\")[1];\n return value && value.length > 0 ? value : null;\n}\n\nfunction writeCookie(value: ThemeName) {\n if (typeof document === \"undefined\") return;\n document.cookie = `${THEME_COOKIE_KEY}=${value}; path=/; max-age=${60 * 60 * 24 * 365}; samesite=lax`;\n}\n\nexport function ThemeProvider({\n children,\n defaultTheme,\n defaultVariant,\n}: {\n children: React.ReactNode;\n defaultTheme: ThemeName;\n defaultVariant: Variant;\n}) {\n const [themeName, setThemeNameState] = React.useState<ThemeName>(\n () => readCookie() ?? defaultTheme,\n );\n\n React.useEffect(() => {\n document.documentElement.setAttribute(\"data-theme\", themeName);\n }, [themeName]);\n\n const setThemeName = React.useCallback((next: ThemeName) => {\n writeCookie(next);\n setThemeNameState(next);\n }, []);\n\n const value = React.useMemo(\n () => ({ themeName, setThemeName }),\n [themeName, setThemeName],\n );\n\n return (\n <ThemeNameContext.Provider value={value}>\n <NextThemesProvider\n attribute=\"class\"\n defaultTheme={defaultVariant}\n enableSystem={false}\n disableTransitionOnChange\n >\n {children}\n </NextThemesProvider>\n </ThemeNameContext.Provider>\n );\n}\n\nexport function useThemeName() {\n const ctx = React.useContext(ThemeNameContext);\n if (!ctx) throw new Error(\"useThemeName must be used inside <ThemeProvider />\");\n return ctx;\n}\n"],"mappings":";AA0DM;AAxDN,YAAY,WAAW;AACvB,SAAS,iBAAiB,0BAA0B;AAEpD,SAAS,wBAAwB;AAOjC,MAAM,mBAAmB,MAAM,cAAwC,IAAI;AAE3E,SAAS,aAA+B;AACtC,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,QAAQ,SAAS,OACpB,MAAM,IAAI,EACV,KAAK,CAAC,QAAQ,IAAI,WAAW,GAAG,gBAAgB,GAAG,CAAC;AACvD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;AAChC,SAAO,SAAS,MAAM,SAAS,IAAI,QAAQ;AAC7C;AAEA,SAAS,YAAY,OAAkB;AACrC,MAAI,OAAO,aAAa,YAAa;AACrC,WAAS,SAAS,GAAG,gBAAgB,IAAI,KAAK,qBAAqB,KAAK,KAAK,KAAK,GAAG;AACvF;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,WAAW,iBAAiB,IAAI,MAAM;AAAA,IAC3C,MAAM,WAAW,KAAK;AAAA,EACxB;AAEA,QAAM,UAAU,MAAM;AACpB,aAAS,gBAAgB,aAAa,cAAc,SAAS;AAAA,EAC/D,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,eAAe,MAAM,YAAY,CAAC,SAAoB;AAC1D,gBAAY,IAAI;AAChB,sBAAkB,IAAI;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO,EAAE,WAAW,aAAa;AAAA,IACjC,CAAC,WAAW,YAAY;AAAA,EAC1B;AAEA,SACE,oBAAC,iBAAiB,UAAjB,EAA0B,OACzB;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,cAAc;AAAA,MACd,cAAc;AAAA,MACd,2BAAyB;AAAA,MAExB;AAAA;AAAA,EACH,GACF;AAEJ;AAEO,SAAS,eAAe;AAC7B,QAAM,MAAM,MAAM,WAAW,gBAAgB;AAC7C,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,oDAAoD;AAC9E,SAAO;AACT;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@augmenting-integrations/ui",
3
- "version": "0.2.1",
3
+ "version": "1.0.0",
4
4
  "description": "Shared UI: shadcn components, brand chrome (Logo, ThemeSwitcher, RoleSwitcher), shells (PublicShell, AppShell, StudioShell), and providers (Session, Query, Theme, Mock).",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -31,18 +31,20 @@
31
31
  "peerDependencies": {
32
32
  "@tanstack/react-query": "^5.0.0",
33
33
  "msw": "^2.0.0",
34
+ "next": "^16.0.0",
34
35
  "next-auth": "^5.0.0-beta.31",
35
36
  "next-themes": "^0.4.0",
36
37
  "react": "^19.0.0",
37
38
  "react-dom": "^19.0.0",
38
- "@augmenting-integrations/brand": "0.2.1",
39
- "@augmenting-integrations/themes": "0.2.1"
39
+ "@augmenting-integrations/brand": "1.0.0",
40
+ "@augmenting-integrations/themes": "1.0.0"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@tanstack/react-query": "^5.100.9",
43
44
  "@types/react": "^19.0.0",
44
45
  "@types/react-dom": "^19.0.0",
45
46
  "msw": "^2.14.4",
47
+ "next": "^16.0.0",
46
48
  "next-auth": "^5.0.0-beta.31",
47
49
  "next-themes": "^0.4.6",
48
50
  "react": "^19.0.0",
@@ -50,8 +52,8 @@
50
52
  "tsup": "^8.3.5",
51
53
  "typescript": "^5.7.2",
52
54
  "vitest": "^4.1.5",
53
- "@augmenting-integrations/brand": "0.2.1",
54
- "@augmenting-integrations/themes": "0.2.1"
55
+ "@augmenting-integrations/themes": "1.0.0",
56
+ "@augmenting-integrations/brand": "1.0.0"
55
57
  },
56
58
  "scripts": {
57
59
  "build": "tsup",
@@ -1,19 +0,0 @@
1
- "use client";
2
- import { useBrand } from "@augmenting-integrations/brand";
3
- import { cn } from "../../lib/utils.js";
4
- export function Logo({ className, showWordmark = true, }) {
5
- const brand = useBrand();
6
- return (<div className={cn("inline-flex items-center gap-2 text-primary", className)}>
7
- <span className="inline-flex h-8 w-8 shrink-0 items-center justify-center text-current">
8
- <svg viewBox="0 0 32 32" className="h-full w-full" aria-hidden="true">
9
- <rect x="2" y="2" width="28" height="28" rx="6" fill="currentColor"/>
10
- <path d="M10 22V10h2.6l3.4 6.4L19.4 10H22v12h-2.4v-7.4l-2.8 5.2h-1.6L12.4 14.6V22H10z" fill="var(--primary-foreground)"/>
11
- </svg>
12
- </span>
13
- {showWordmark ? (<span className="text-base font-semibold tracking-tight text-foreground">
14
- {brand.shortName}
15
- </span>) : null}
16
- <span className="sr-only">{brand.name}</span>
17
- </div>);
18
- }
19
- //# sourceMappingURL=Logo.jsx.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Logo.jsx","sourceRoot":"","sources":["../../../src/components/chrome/Logo.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,UAAU,IAAI,CAAC,EACnB,SAAS,EACT,YAAY,GAAG,IAAI,GAIpB;IACC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,CAAC,CAC3E;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,uEAAuE,CACrF;QAAA,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CACnE;UAAA,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EACnE;UAAA,CAAC,IAAI,CACH,CAAC,CAAC,8EAA8E,CAChF,IAAI,CAAC,2BAA2B,EAEpC;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,YAAY,CAAC,CAAC,CAAC,CACd,CAAC,IAAI,CAAC,SAAS,CAAC,wDAAwD,CACtE;UAAA,CAAC,KAAK,CAAC,SAAS,CAClB;QAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAC9C;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
@@ -1,32 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
- import { signIn, useSession } from "next-auth/react";
4
- import { UserCog } from "lucide-react";
5
- import { cn } from "../../lib/utils.js";
6
- const ROLES = ["visitor", "sales", "agent", "admin"];
7
- export function RoleSwitcher({ className }) {
8
- const { data: session, update } = useSession();
9
- const [open, setOpen] = React.useState(false);
10
- const current = session?.user?.role ?? "visitor";
11
- return (<div className={cn("relative", className)}>
12
- <button type="button" onClick={() => setOpen((o) => !o)} aria-haspopup="menu" aria-expanded={open} className="inline-flex h-9 items-center gap-2 rounded-md border border-border bg-background px-3 text-sm text-foreground transition hover:bg-muted">
13
- <UserCog className="h-4 w-4"/>
14
- <span className="font-medium capitalize">{current}</span>
15
- </button>
16
-
17
- {open ? (<div role="menu" className="absolute right-0 top-full z-50 mt-2 w-56 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg" onMouseLeave={() => setOpen(false)}>
18
- <div className="px-2 py-1 text-xs uppercase tracking-wide text-muted-foreground">
19
- Switch role (dev)
20
- </div>
21
- {ROLES.map((r) => (<button key={r} type="button" role="menuitem" onClick={async () => {
22
- await signIn("credentials", { role: r, redirect: false });
23
- await update();
24
- setOpen(false);
25
- }} className={cn("flex w-full items-center justify-between rounded-sm px-2 py-1.5 text-sm capitalize transition hover:bg-muted", current === r && "bg-muted")}>
26
- <span>{r}</span>
27
- {current === r ? (<span className="text-xs text-muted-foreground">active</span>) : null}
28
- </button>))}
29
- </div>) : null}
30
- </div>);
31
- }
32
- //# sourceMappingURL=RoleSwitcher.jsx.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RoleSwitcher.jsx","sourceRoot":"","sources":["../../../src/components/chrome/RoleSwitcher.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAA0B;IAChE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAI,OAAO,EAAE,IAAsC,EAAE,IAAI,IAAI,SAAS,CAAC;IAEpF,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CACxC;MAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAClC,aAAa,CAAC,MAAM,CACpB,aAAa,CAAC,CAAC,IAAI,CAAC,CACpB,SAAS,CAAC,yIAAyI,CAEnJ;QAAA,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAC5B;QAAA,CAAC,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAC1D;MAAA,EAAE,MAAM,CAER;;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,CACN,CAAC,GAAG,CACF,IAAI,CAAC,MAAM,CACX,SAAS,CAAC,2HAA2H,CACrI,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAEnC;UAAA,CAAC,GAAG,CAAC,SAAS,CAAC,iEAAiE,CAC9E;;UACF,EAAE,GAAG,CACL;UAAA,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,CAAC,MAAM,CACL,GAAG,CAAC,CAAC,CAAC,CAAC,CACP,IAAI,CAAC,QAAQ,CACb,IAAI,CAAC,UAAU,CACf,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE;oBAClB,MAAM,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC1D,MAAM,MAAM,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC,CAAC,CACF,SAAS,CAAC,CAAC,EAAE,CACX,8GAA8G,EAC9G,OAAO,KAAK,CAAC,IAAI,UAAU,CAC5B,CAAC,CAEF;cAAA,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CACf;cAAA,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CACf,CAAC,IAAI,CAAC,SAAS,CAAC,+BAA+B,CAAC,MAAM,EAAE,IAAI,CAAC,CAC9D,CAAC,CAAC,CAAC,IAAI,CACV;YAAA,EAAE,MAAM,CAAC,CACV,CAAC,CACJ;QAAA,EAAE,GAAG,CAAC,CACP,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
@@ -1,43 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
- import { useTheme } from "next-themes";
4
- import { Moon, Sun, Palette } from "lucide-react";
5
- import { BASE_THEMES } from "@augmenting-integrations/themes";
6
- import { useThemeName } from "../../providers/ThemeProvider.js";
7
- import { cn } from "../../lib/utils.js";
8
- import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "../ui/dropdown-menu.js";
9
- export function ThemeSwitcher({ className }) {
10
- const { themeName, setThemeName } = useThemeName();
11
- const { resolvedTheme, setTheme } = useTheme();
12
- const mounted = React.useSyncExternalStore(() => () => { }, () => true, () => false);
13
- if (!mounted) {
14
- return (<div className={cn("h-9 w-[120px] rounded-md border border-border bg-background", className)}/>);
15
- }
16
- const isDark = resolvedTheme === "dark";
17
- const activeLabel = BASE_THEMES.find((t) => t.id === themeName)?.label ?? "Theme";
18
- return (<div className={cn("flex items-center gap-2", className)}>
19
- <button type="button" onClick={() => setTheme(isDark ? "light" : "dark")} aria-label={isDark ? "Switch to light mode" : "Switch to dark mode"} className="inline-flex h-9 w-9 items-center justify-center rounded-md border border-border bg-background text-foreground transition hover:bg-muted">
20
- {isDark ? <Sun className="h-4 w-4"/> : <Moon className="h-4 w-4"/>}
21
- </button>
22
-
23
- <DropdownMenu>
24
- <DropdownMenuTrigger className="inline-flex h-9 items-center gap-2 rounded-md border border-border bg-background px-3 text-sm text-foreground transition hover:bg-muted" aria-label="Switch theme palette">
25
- <Palette className="h-4 w-4"/>
26
- <span className="font-medium">{activeLabel}</span>
27
- </DropdownMenuTrigger>
28
- <DropdownMenuContent align="end" sideOffset={6} className="w-72 p-1">
29
- {BASE_THEMES.map((t) => (<DropdownMenuItem key={t.id} onClick={() => setThemeName(t.id)} className={cn("items-start gap-3 px-2 py-2", themeName === t.id && "bg-muted")}>
30
- <span aria-hidden className="mt-0.5 inline-flex h-6 w-6 shrink-0 overflow-hidden rounded-full ring-1 ring-border">
31
- <span className="h-full w-1/2" style={{ background: t.swatch.primary }}/>
32
- <span className="h-full w-1/2" style={{ background: t.swatch.primaryDark }}/>
33
- </span>
34
- <span className="flex flex-col">
35
- <span className="text-sm font-medium">{t.label}</span>
36
- <span className="text-xs text-muted-foreground">{t.description}</span>
37
- </span>
38
- </DropdownMenuItem>))}
39
- </DropdownMenuContent>
40
- </DropdownMenu>
41
- </div>);
42
- }
43
- //# sourceMappingURL=ThemeSwitcher.jsx.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeSwitcher.jsx","sourceRoot":"","sources":["../../../src/components/chrome/ThemeSwitcher.tsx"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
- import { Menu, X } from "lucide-react";
4
- import { Logo } from "../chrome/Logo.js";
5
- import { ThemeSwitcher } from "../chrome/ThemeSwitcher.js";
6
- import { RoleSwitcher } from "../chrome/RoleSwitcher.js";
7
- import { cn } from "../../lib/utils.js";
8
- function NavGroup({ group, pathname, Link, }) {
9
- if (group.items.length === 0)
10
- return null;
11
- return (<div className="space-y-1">
12
- <p className="px-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground">
13
- {group.label}
14
- </p>
15
- <ul className="space-y-0.5">
16
- {group.items.map((item) => {
17
- const active = pathname === item.href || pathname.startsWith(`${item.href}/`);
18
- return (<li key={item.href}>
19
- <Link href={item.href} className={cn("flex items-center gap-3 rounded-md px-3 py-2 text-sm transition", active
20
- ? "bg-sidebar-accent text-sidebar-accent-foreground"
21
- : "text-sidebar-foreground hover:bg-sidebar-accent/60")}>
22
- <item.icon className="h-4 w-4 shrink-0"/>
23
- <span>{item.label}</span>
24
- </Link>
25
- </li>);
26
- })}
27
- </ul>
28
- </div>);
29
- }
30
- export function AppShell({ children, pathname, navGroups, Link, homeHref = "/", showRoleSwitcher = true, }) {
31
- const [mobileOpen, setMobileOpen] = React.useState(false);
32
- const sidebarContent = (<div className="flex h-full flex-col gap-6 px-3 py-4">
33
- <Link href={homeHref} className="px-2" aria-label="Home">
34
- <Logo />
35
- </Link>
36
- {navGroups.map((g) => (<NavGroup key={g.label} group={g} pathname={pathname} Link={Link}/>))}
37
- </div>);
38
- return (<div className="flex min-h-svh bg-background text-foreground">
39
- <aside className="hidden w-64 shrink-0 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:block">
40
- {sidebarContent}
41
- </aside>
42
-
43
- {mobileOpen ? (<div className="fixed inset-0 z-50 flex md:hidden">
44
- <div className="flex-1 bg-foreground/40 backdrop-blur-sm" onClick={() => setMobileOpen(false)} aria-hidden/>
45
- <aside className="relative w-72 border-l border-sidebar-border bg-sidebar text-sidebar-foreground">
46
- <button type="button" onClick={() => setMobileOpen(false)} aria-label="Close menu" className="absolute right-2 top-2 inline-flex h-9 w-9 items-center justify-center rounded-md hover:bg-sidebar-accent">
47
- <X className="h-4 w-4"/>
48
- </button>
49
- {sidebarContent}
50
- </aside>
51
- </div>) : null}
52
-
53
- <div className="flex min-w-0 flex-1 flex-col">
54
- <header className="flex h-14 items-center justify-between gap-3 border-b border-border bg-background/80 px-4 backdrop-blur md:px-6">
55
- <button type="button" onClick={() => setMobileOpen(true)} aria-label="Open menu" className="inline-flex h-9 w-9 items-center justify-center rounded-md border border-border md:hidden">
56
- <Menu className="h-4 w-4"/>
57
- </button>
58
- <div className="flex items-center gap-3 md:ml-auto">
59
- {showRoleSwitcher ? <RoleSwitcher /> : null}
60
- <ThemeSwitcher />
61
- </div>
62
- </header>
63
- <main className="min-w-0 flex-1 px-4 py-6 md:px-8 md:py-8">{children}</main>
64
- </div>
65
- </div>);
66
- }
67
- //# sourceMappingURL=AppShell.jsx.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AppShell.jsx","sourceRoot":"","sources":["../../../src/components/shells/AppShell.tsx"],"names":[],"mappings":"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"}