@camstack/addon-admin-ui 0.1.14 → 0.1.16

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 (50) hide show
  1. package/dist/assets/__mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.mjs-CeLhKMin.js +1 -0
  2. package/dist/assets/__mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.mjs_commonjs-proxy-DXPQtD9p.js +1 -0
  3. package/dist/assets/__mfe_internal__admin_ui_host__loadShare___mf_0_trpc_mf_1_client__loadShare__.mjs-DIkg6-MH.js +6 -0
  4. package/dist/assets/__mfe_internal__admin_ui_host__loadShare___mf_0_trpc_mf_1_client__loadShare__.mjs_commonjs-proxy-WD2WouMQ.js +1 -0
  5. package/dist/assets/__mfe_internal__admin_ui_host__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.mjs-OcRSBqRe.js +1 -0
  6. package/dist/assets/__mfe_internal__admin_ui_host__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.mjs_commonjs-proxy-GvBGLFI2.js +1 -0
  7. package/dist/assets/__mfe_internal__admin_ui_host__loadShare__react__loadShare__.mjs-Dl4u0xYE.js +9 -0
  8. package/dist/assets/__mfe_internal__admin_ui_host__loadShare__react__loadShare__.mjs_commonjs-proxy-CSyOECfO.js +1 -0
  9. package/dist/assets/__mfe_internal__admin_ui_host__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs-C_6K4VBY.js +9 -0
  10. package/dist/assets/__mfe_internal__admin_ui_host__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs_commonjs-proxy-DrLZNXOX.js +1 -0
  11. package/dist/assets/__mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.mjs-CzO_Esxm.js +9 -0
  12. package/dist/assets/__mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.mjs_commonjs-proxy-xw6c6JeS.js +1 -0
  13. package/dist/assets/__mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-DNpf5SLz.js +25 -0
  14. package/dist/assets/__mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs_commonjs-proxy-BEKtiDI3.js +1 -0
  15. package/dist/assets/_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DlquBRmD.js +1 -0
  16. package/dist/assets/auth-records-BEfan3dC.js +1 -0
  17. package/dist/assets/capability-router-map-B3jHfbHt.js +1 -0
  18. package/dist/assets/devices-CVfa8e_5.js +1 -0
  19. package/dist/assets/hostInit-Bq0J4U4L.js +1 -0
  20. package/dist/assets/index-B3BmQjhl.js +1 -0
  21. package/dist/assets/index-BYRl5bfb.js +1 -0
  22. package/dist/assets/index-Bftw8yZ0.js +80 -0
  23. package/dist/assets/index-BqEwAQt-.js +1098 -0
  24. package/dist/assets/index-ByDDdVKJ.css +1 -0
  25. package/dist/assets/index-C5--Sp9A.js +80 -0
  26. package/dist/assets/index-CJH_U_aT.js +1 -0
  27. package/dist/assets/index-CLnkxPD7.js +1 -0
  28. package/dist/assets/index-gZlh9vZc.js +1 -0
  29. package/dist/assets/index-o6URf7uT.js +1 -0
  30. package/dist/assets/index-otlbS_ZJ.js +1 -0
  31. package/dist/assets/preload-helper-BlTxHScW.js +1 -0
  32. package/dist/assets/remoteEntry-qFyESaJr.js +1 -0
  33. package/dist/assets/schemas-XgIEoUz3.js +64 -0
  34. package/dist/assets/virtualExposes-_ivNhQLP.js +1 -0
  35. package/dist/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-cGbq1Btt.js +8 -0
  36. package/dist/index.html +9 -14
  37. package/dist/mf-entry-bootstrap-0.js +17 -0
  38. package/dist/server/addon.js +17 -42
  39. package/dist/server/addon.js.map +1 -1
  40. package/dist/sw.js +1 -1
  41. package/dist/workbox-9c191d2f.js +1 -0
  42. package/package.json +13 -7
  43. package/dist/assets/index-B2uWw-6M.js +0 -603
  44. package/dist/assets/index-QE1phGlM.css +0 -1
  45. package/dist/server/addon.d.ts +0 -11
  46. package/dist/vendor/react-dom-client.mjs +0 -4
  47. package/dist/vendor/react-dom.mjs +0 -7
  48. package/dist/vendor/react-jsx-runtime.mjs +0 -24
  49. package/dist/vendor/react.mjs +0 -16
  50. package/dist/workbox-b20fbdff.js +0 -1
@@ -0,0 +1,17 @@
1
+
2
+ const __mfCacheGlobalKey = "__mf_module_cache__";
3
+ globalThis[__mfCacheGlobalKey] ||= { share: {}, remote: {} };
4
+ globalThis[__mfCacheGlobalKey].share ||= {};
5
+ globalThis[__mfCacheGlobalKey].remote ||= {};
6
+ const __mfModuleCache = globalThis[__mfCacheGlobalKey];
7
+
8
+ const __mfImport = (src) =>
9
+ globalThis.System && typeof globalThis.System.import === 'function'
10
+ ? globalThis.System.import(src)
11
+ : import(src);
12
+ (async () => {
13
+ const { initHost } = await __mfImport("/assets/hostInit-Bq0J4U4L.js");
14
+ const runtime = await initHost();
15
+ const __mfRemotePreloads = [];
16
+ await Promise.all(__mfRemotePreloads);
17
+ })().then(() => __mfImport("/assets/index-BqEwAQt-.js"));
@@ -1,50 +1,25 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
- // src/server/addon.ts
5
- import path from "path";
6
- import { fileURLToPath } from "url";
7
- var __dirname = path.dirname(fileURLToPath(import.meta.url));
1
+ import path from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { BaseAddon, adminUiCapability } from "@camstack/types";
4
+ const __dirname$1 = path.dirname(fileURLToPath(import.meta.url));
8
5
  function resolveAdminUiDistDir() {
9
- return path.resolve(__dirname, "..");
6
+ return path.resolve(__dirname$1, "..");
10
7
  }
11
- __name(resolveAdminUiDistDir, "resolveAdminUiDistDir");
12
- var AdminUIAddon = class {
13
- static {
14
- __name(this, "AdminUIAddon");
15
- }
8
+ class AdminUIAddon extends BaseAddon {
16
9
  id = "admin-ui";
17
- manifest = {
18
- id: "admin-ui",
19
- name: "CamStack Admin UI",
20
- version: "0.1.0",
21
- packageName: "@camstack/addon-admin-ui",
22
- description: "Web-based administration interface for CamStack",
23
- capabilities: [
24
- {
25
- name: "admin-ui",
26
- mode: "singleton"
27
- }
28
- ]
29
- };
30
- async initialize(_ctx) {
31
- }
32
- async shutdown() {
10
+ constructor() {
11
+ super({});
33
12
  }
34
- getCapabilityProvider(name) {
35
- if (name === "admin-ui") {
36
- const provider = {
37
- getStaticDir: /* @__PURE__ */ __name(() => resolveAdminUiDistDir(), "getStaticDir"),
38
- getVersion: /* @__PURE__ */ __name(() => this.manifest.version, "getVersion")
39
- };
40
- return provider;
41
- }
42
- return null;
13
+ async onInitialize() {
14
+ const provider = {
15
+ getStaticDir: () => resolveAdminUiDistDir(),
16
+ getVersion: () => "0.1.0"
17
+ };
18
+ return [{ capability: adminUiCapability, provider }];
43
19
  }
44
- };
45
- var addon_default = AdminUIAddon;
20
+ }
46
21
  export {
47
22
  AdminUIAddon,
48
- addon_default as default
23
+ AdminUIAddon as default
49
24
  };
50
- //# sourceMappingURL=addon.js.map
25
+ //# sourceMappingURL=addon.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/addon.ts"],"sourcesContent":["import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport type {\n ICamstackAddon,\n AddonManifest,\n AddonContext,\n IAdminUI,\n CapabilityProviderMap,\n} from '@camstack/types'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\n/**\n * AdminUIAddon — standalone addon that serves the Vite-built frontend.\n * The dist/ directory containing the built React app sits alongside this\n * compiled file in the package output.\n */\n\nfunction resolveAdminUiDistDir(): string {\n // This addon file lives at <package-root>/dist/server/addon.js.\n // Vite assets (index.html, assets/) are at <package-root>/dist/.\n return path.resolve(__dirname, '..')\n}\n\nexport class AdminUIAddon implements ICamstackAddon {\n readonly id = 'admin-ui'\n\n readonly manifest: AddonManifest = {\n id: 'admin-ui',\n name: 'CamStack Admin UI',\n version: '0.1.0',\n packageName: '@camstack/addon-admin-ui',\n description: 'Web-based administration interface for CamStack',\n capabilities: [{ name: 'admin-ui', mode: 'singleton' }],\n }\n\n async initialize(_ctx: AddonContext): Promise<void> {}\n async shutdown(): Promise<void> {}\n\n getCapabilityProvider<K extends keyof CapabilityProviderMap>(\n name: K,\n ): CapabilityProviderMap[K] | null {\n if (name === 'admin-ui') {\n const provider: IAdminUI = {\n getStaticDir: () => resolveAdminUiDistDir(),\n getVersion: () => this.manifest.version,\n }\n return provider as CapabilityProviderMap[K]\n }\n return null\n }\n}\n\nexport default AdminUIAddon\n"],"mappings":";;;;AAAA,OAAOA,UAAU;AACjB,SAASC,qBAAqB;AAS9B,IAAMC,YAAYC,KAAKC,QAAQC,cAAc,YAAYC,GAAG,CAAA;AAQ5D,SAASC,wBAAAA;AAGP,SAAOJ,KAAKK,QAAQN,WAAW,IAAA;AACjC;AAJSK;AAMF,IAAME,eAAN,MAAMA;EAxBb,OAwBaA;;;EACFC,KAAK;EAELC,WAA0B;IACjCD,IAAI;IACJE,MAAM;IACNC,SAAS;IACTC,aAAa;IACbC,aAAa;IACbC,cAAc;MAAC;QAAEJ,MAAM;QAAYK,MAAM;MAAY;;EACvD;EAEA,MAAMC,WAAWC,MAAmC;EAAC;EACrD,MAAMC,WAA0B;EAAC;EAEjCC,sBACET,MACiC;AACjC,QAAIA,SAAS,YAAY;AACvB,YAAMU,WAAqB;QACzBC,cAAc,6BAAMhB,sBAAAA,GAAN;QACdiB,YAAY,6BAAM,KAAKb,SAASE,SAApB;MACd;AACA,aAAOS;IACT;AACA,WAAO;EACT;AACF;AAEA,IAAA,gBAAeb;","names":["path","fileURLToPath","__dirname","path","dirname","fileURLToPath","url","resolveAdminUiDistDir","resolve","AdminUIAddon","id","manifest","name","version","packageName","description","capabilities","mode","initialize","_ctx","shutdown","getCapabilityProvider","provider","getStaticDir","getVersion"]}
1
+ {"version":3,"file":"addon.js","sources":["../../src/server/addon.ts"],"sourcesContent":["import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport type { IAdminUI, ProviderRegistration } from '@camstack/types'\nimport { BaseAddon, adminUiCapability } from '@camstack/types'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\nfunction resolveAdminUiDistDir(): string {\n return path.resolve(__dirname, '..')\n}\n\n/**\n * AdminUIAddon serves the Vite-built frontend.\n */\nexport class AdminUIAddon extends BaseAddon {\n readonly id = 'admin-ui'\n\n constructor() { super({}) }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n const provider: IAdminUI = {\n getStaticDir: () => resolveAdminUiDistDir(),\n getVersion: () => '0.1.0',\n }\n return [{ capability: adminUiCapability, provider }]\n }\n}\n\nexport default AdminUIAddon\n"],"names":["__dirname"],"mappings":";;;AAKA,MAAMA,cAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAE7D,SAAS,wBAAgC;AACvC,SAAO,KAAK,QAAQA,aAAW,IAAI;AACrC;AAKO,MAAM,qBAAqB,UAAU;AAAA,EACjC,KAAK;AAAA,EAEd,cAAc;AAAE,UAAM,CAAA,CAAE;AAAA,EAAE;AAAA,EAE1B,MAAgB,eAAgD;AAC9D,UAAM,WAAqB;AAAA,MACzB,cAAc,MAAM,sBAAA;AAAA,MACpB,YAAY,MAAM;AAAA,IAAA;AAEpB,WAAO,CAAC,EAAE,YAAY,mBAAmB,UAAU;AAAA,EACrD;AACF;"}
package/dist/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let e,i={};const d=(d,r)=>(d=new URL(d+".js",r).href,i[d]||new Promise(i=>{if("document"in self){const e=document.createElement("script");e.src=d,e.onload=i,document.head.appendChild(e)}else e=d,importScripts(d),i()}).then(()=>{let e=i[d];if(!e)throw new Error(`Module ${d} didn’t register its module`);return e}));self.define=(r,n)=>{const o=e||("document"in self?document.currentScript.src:"")||location.href;if(i[o])return;let s={};const c=e=>d(e,o),l={module:{uri:o},exports:s,require:c};i[o]=Promise.all(r.map(e=>l[e]||c(e))).then(e=>(n(...e),s))}}define(["./workbox-b20fbdff"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"c714ded37941bf17696cd37d2628425d"},{url:"favicon.svg",revision:"e28b845cc4cd4ebbe254e7d9d424f0c8"},{url:"icons/icon-512.png",revision:"f714f744e5e29a9a7c5481122ed1840d"},{url:"icons/icon-192.png",revision:"d61bc87dfde2cd635f8920b7445da4f0"},{url:"icons/apple-touch-icon.png",revision:"f8b42413aad2df56c29ec7375db56778"},{url:"brand/logo-wide-light.svg",revision:"77a5c7896c8ddf23f3ab5831462e8a9c"},{url:"brand/logo-wide-dark.svg",revision:"7600383a290ae26ae0b4683152205e57"},{url:"brand/logo-light.svg",revision:"0886d0a8fadd10a2ba36de70dd2c8c91"},{url:"brand/logo-horizontal-light.svg",revision:"cf6e7160b02e96a03e1e23b7e895a58d"},{url:"brand/logo-horizontal-dark.svg",revision:"5d90e24eb8a0ebacc692045ef2cca447"},{url:"brand/logo-dark.svg",revision:"fce2740bf6d9bbe8f1762d3aa36ef416"},{url:"assets/index-QE1phGlM.css",revision:null},{url:"assets/index-B2uWw-6M.js",revision:null}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/trpc/,/^\/api/,/^\/addon/]}))});
1
+ if(!self.define){let _,s={};const e=(e,r)=>(e=new URL(e+".js",r).href,s[e]||new Promise(s=>{if("document"in self){const _=document.createElement("script");_.src=e,_.onload=s,document.head.appendChild(_)}else _=e,importScripts(e),s()}).then(()=>{let _=s[e];if(!_)throw new Error(`Module ${e} didn’t register its module`);return _}));self.define=(r,i)=>{const l=_||("document"in self?document.currentScript.src:"")||location.href;if(s[l])return;let n={};const a=_=>e(_,l),o={module:{uri:l},exports:n,require:a};s[l]=Promise.all(r.map(_=>o[_]||a(_))).then(_=>(i(..._),n))}}define(["./workbox-9c191d2f"],function(_){"use strict";self.skipWaiting(),_.clientsClaim(),_.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"mf-entry-bootstrap-0.js",revision:"58f769d291fa9e1a05eab91df482dcf6"},{url:"index.html",revision:"be2868dbea61d1c3923c1111263992e7"},{url:"favicon.svg",revision:"e28b845cc4cd4ebbe254e7d9d424f0c8"},{url:"icons/icon-512.png",revision:"f714f744e5e29a9a7c5481122ed1840d"},{url:"icons/icon-192.png",revision:"d61bc87dfde2cd635f8920b7445da4f0"},{url:"icons/apple-touch-icon.png",revision:"f8b42413aad2df56c29ec7375db56778"},{url:"brand/logo-wide-light.svg",revision:"77a5c7896c8ddf23f3ab5831462e8a9c"},{url:"brand/logo-wide-dark.svg",revision:"7600383a290ae26ae0b4683152205e57"},{url:"brand/logo-light.svg",revision:"0886d0a8fadd10a2ba36de70dd2c8c91"},{url:"brand/logo-horizontal-light.svg",revision:"cf6e7160b02e96a03e1e23b7e895a58d"},{url:"brand/logo-horizontal-dark.svg",revision:"5d90e24eb8a0ebacc692045ef2cca447"},{url:"brand/logo-dark.svg",revision:"fce2740bf6d9bbe8f1762d3aa36ef416"},{url:"assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-cGbq1Btt.js",revision:null},{url:"assets/virtualExposes-_ivNhQLP.js",revision:null},{url:"assets/schemas-XgIEoUz3.js",revision:null},{url:"assets/remoteEntry-qFyESaJr.js",revision:null},{url:"assets/preload-helper-BlTxHScW.js",revision:null},{url:"assets/index-otlbS_ZJ.js",revision:null},{url:"assets/index-o6URf7uT.js",revision:null},{url:"assets/index-gZlh9vZc.js",revision:null},{url:"assets/index-CLnkxPD7.js",revision:null},{url:"assets/index-CJH_U_aT.js",revision:null},{url:"assets/index-C5--Sp9A.js",revision:null},{url:"assets/index-ByDDdVKJ.css",revision:null},{url:"assets/index-BqEwAQt-.js",revision:null},{url:"assets/index-Bftw8yZ0.js",revision:null},{url:"assets/index-BYRl5bfb.js",revision:null},{url:"assets/index-B3BmQjhl.js",revision:null},{url:"assets/hostInit-Bq0J4U4L.js",revision:null},{url:"assets/devices-CVfa8e_5.js",revision:null},{url:"assets/capability-router-map-B3jHfbHt.js",revision:null},{url:"assets/auth-records-BEfan3dC.js",revision:null},{url:"assets/_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DlquBRmD.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs_commonjs-proxy-BEKtiDI3.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-DNpf5SLz.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.mjs_commonjs-proxy-xw6c6JeS.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare__react_mf_2_dom__loadShare__.mjs-CzO_Esxm.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs_commonjs-proxy-DrLZNXOX.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs-C_6K4VBY.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare__react__loadShare__.mjs_commonjs-proxy-CSyOECfO.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare__react__loadShare__.mjs-Dl4u0xYE.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.mjs_commonjs-proxy-GvBGLFI2.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.mjs-OcRSBqRe.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare___mf_0_trpc_mf_1_client__loadShare__.mjs_commonjs-proxy-WD2WouMQ.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare___mf_0_trpc_mf_1_client__loadShare__.mjs-DIkg6-MH.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.mjs_commonjs-proxy-DXPQtD9p.js",revision:null},{url:"assets/__mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.mjs-CeLhKMin.js",revision:null}],{}),_.cleanupOutdatedCaches(),_.registerRoute(new _.NavigationRoute(_.createHandlerBoundToURL("/index.html"),{denylist:[/^\/trpc/,/^\/api/,/^\/addon/]}))});
@@ -0,0 +1 @@
1
+ define(["exports"],function(t){"use strict";try{self["workbox:core:7.4.0"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:7.4.0"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class o{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let c;const a=()=>(c||(c=new o,c.addFetchListener(),c.addCacheListener()),c);function h(t,e,n){let o;if("string"==typeof t){const s=new URL(t,location.href);o=new i(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)o=new r(t,e,n);else if("function"==typeof t)o=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});o=t}return a().registerRoute(o),o}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter(t=>t&&t.length>0).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:7.4.0"]&&_()}catch(t){}function p(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class y{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class g{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let R;async function m(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=function(){if(void 0===R){const t=new Response("");if("body"in t)try{new Response(t.body),R=!0}catch(t){R=!1}R=!1}return R}()?i.body:await i.blob();return new Response(o,r)}function v(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class q{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const U=new Set;try{self["workbox:strategies:7.4.0"]&&_()}catch(t){}function L(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new q,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=L(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=L(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=L(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=v(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===v(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of U)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=L(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){for(;this.R.length;){const t=this.R.splice(0),e=(await Promise.allSettled(t)).find(t=>"rejected"===t.status);if(e)throw e.reason}}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class C{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class E extends C{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(E.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.P(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.P();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}P(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==E.copyRedirectedCacheableResponsesPlugin&&(n===E.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(E.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}E.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},E.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await m(t):t};class O{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.j=new Map,this.k=new Map,this.K=new Map,this.l=new E({cacheName:f(t),plugins:[...e,new g({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.T||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.T=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=p(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.j.has(i)&&this.j.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.j.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.K.has(t)&&this.K.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.K.set(t,n.integrity)}if(this.j.set(i,t),this.k.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return d(t,async()=>{const e=new y;this.strategy.plugins.push(e);for(const[e,s]of this.j){const n=this.K.get(s),i=this.k.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return d(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.j.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.j}getCachedURLs(){return[...this.j.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.j.get(e.href)}getIntegrityForCacheKey(t){return this.K.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let x;const N=()=>(x||(x=new O),x);class P extends i{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}t.NavigationRoute=class extends i{constructor(t,{allowlist:e=[/./],denylist:s=[]}={}){super(t=>this.W(t),t),this.M=e,this.S=s}W({url:t,request:e}){if(e&&"navigate"!==e.mode)return!1;const s=t.pathname+t.search;for(const t of this.S)if(t.test(s))return!1;return!!this.M.some(t=>t.test(s))}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",t=>{const e=f();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter(s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t);return await Promise.all(s.map(t=>self.caches.delete(t))),s})(e).then(t=>{}))})},t.clientsClaim=function(){self.addEventListener("activate",()=>self.clients.claim())},t.createHandlerBoundToURL=function(t){return N().createHandlerBoundToURL(t)},t.precacheAndRoute=function(t,e){!function(t){N().precache(t)}(t),function(t){const e=N();h(new P(e,t))}(e)},t.registerRoute=h});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-admin-ui",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "CamStack Admin UI — Vite frontend build and server-side addon",
@@ -20,20 +20,22 @@
20
20
  "addons": [
21
21
  {
22
22
  "id": "admin-ui",
23
+ "name": "CamStack Admin UI",
24
+ "version": "0.1.0",
25
+ "description": "Web-based administration interface for CamStack",
23
26
  "entry": "./dist/server/addon.js",
24
- "slot": null,
25
27
  "capabilities": [
26
28
  {
27
- "name": "admin-ui",
28
- "mode": "singleton"
29
+ "name": "admin-ui"
29
30
  }
30
- ]
31
+ ],
32
+ "protected": true
31
33
  }
32
34
  ]
33
35
  },
34
36
  "scripts": {
35
37
  "dev": "vite --port 3001",
36
- "build": "tsc --noEmit && vite build && tsup",
38
+ "build": "tsc --noEmit && vite build && vite build -c vite.lib.config.ts",
37
39
  "build:addon": "tsup",
38
40
  "preview": "vite preview",
39
41
  "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.server.json",
@@ -42,7 +44,11 @@
42
44
  "dependencies": {
43
45
  "@camstack/sdk": "*",
44
46
  "@camstack/ui-library": "*",
47
+ "@module-federation/runtime": "^2.4.0",
45
48
  "@tanstack/react-query": "^5.90.0",
49
+ "@trpc/client": "^11.16.0",
50
+ "@trpc/react-query": "^11.16.0",
51
+ "@xyflow/react": "^12.10.2",
46
52
  "clsx": "^2.1.1",
47
53
  "i18next": "^25.10.3",
48
54
  "konva": "^10.2.3",
@@ -60,11 +66,11 @@
60
66
  },
61
67
  "devDependencies": {
62
68
  "@camstack/types": "*",
69
+ "@module-federation/vite": "^1.15.2",
63
70
  "@tailwindcss/vite": "^4.2.0",
64
71
  "@types/node": "^22",
65
72
  "@types/react": "^19.1.0",
66
73
  "@types/react-dom": "^19.1.0",
67
- "@types/react-grid-layout": "^1.3.6",
68
74
  "@vitejs/plugin-react": "^4.5.0",
69
75
  "tailwindcss": "^4.2.0",
70
76
  "tsup": "^8.0.0",