@datatechsolutions/ui 3.3.0 → 3.5.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 (212) hide show
  1. package/dist/astrlabe/index.js +113 -113
  2. package/dist/astrlabe/index.mjs +6 -6
  3. package/dist/astrlabe/workflow-canvas.js +6 -6
  4. package/dist/astrlabe/workflow-canvas.mjs +5 -5
  5. package/dist/brand/index.js +0 -14
  6. package/dist/brand/index.js.map +1 -1
  7. package/dist/brand/index.mjs +0 -14
  8. package/dist/brand/index.mjs.map +1 -1
  9. package/dist/{chunk-2WXRRQM3.mjs → chunk-2MJAHST4.mjs} +554 -516
  10. package/dist/chunk-2MJAHST4.mjs.map +1 -0
  11. package/dist/{chunk-FAGDZEKM.js → chunk-2OZZH2IO.js} +2 -2
  12. package/dist/chunk-2OZZH2IO.js.map +1 -0
  13. package/dist/{chunk-SYNVNTLJ.mjs → chunk-3AY5HIQ6.mjs} +2 -2
  14. package/dist/chunk-3AY5HIQ6.mjs.map +1 -0
  15. package/dist/{chunk-O6M3KDGT.mjs → chunk-3OLYSMI5.mjs} +41 -7
  16. package/dist/chunk-3OLYSMI5.mjs.map +1 -0
  17. package/dist/{chunk-GIQXB3BG.mjs → chunk-4PFU6A2B.mjs} +3 -3
  18. package/dist/{chunk-GIQXB3BG.mjs.map → chunk-4PFU6A2B.mjs.map} +1 -1
  19. package/dist/{chunk-3ZUMJTDT.mjs → chunk-5BEVTOZV.mjs} +4 -5
  20. package/dist/{chunk-3JJWPOK6.js.map → chunk-5BEVTOZV.mjs.map} +1 -1
  21. package/dist/{chunk-3JJWPOK6.js → chunk-5I7F7KZ6.js} +10 -11
  22. package/dist/chunk-5I7F7KZ6.js.map +1 -0
  23. package/dist/{chunk-BR2GAZKG.mjs → chunk-6V3DUBOZ.mjs} +7 -7
  24. package/dist/{chunk-BR2GAZKG.mjs.map → chunk-6V3DUBOZ.mjs.map} +1 -1
  25. package/dist/{chunk-5GDKCFM5.mjs → chunk-6W7VTZG6.mjs} +3 -3
  26. package/dist/{chunk-5GDKCFM5.mjs.map → chunk-6W7VTZG6.mjs.map} +1 -1
  27. package/dist/{chunk-IJAKZHXX.js → chunk-74MHWEDC.js} +684 -645
  28. package/dist/chunk-74MHWEDC.js.map +1 -0
  29. package/dist/{chunk-IRPS5UCS.mjs → chunk-7CEZB3ZD.mjs} +3 -3
  30. package/dist/{chunk-IRPS5UCS.mjs.map → chunk-7CEZB3ZD.mjs.map} +1 -1
  31. package/dist/{chunk-UDDZTTLO.mjs → chunk-7UHV6A4C.mjs} +6 -7
  32. package/dist/chunk-7UHV6A4C.mjs.map +1 -0
  33. package/dist/{chunk-ZM5MVWIT.js → chunk-A7FI4K7Z.js} +5 -6
  34. package/dist/chunk-A7FI4K7Z.js.map +1 -0
  35. package/dist/{chunk-MWPTSBAI.js → chunk-AVM53A3Y.js} +63 -29
  36. package/dist/chunk-AVM53A3Y.js.map +1 -0
  37. package/dist/{chunk-I2NZGVBG.js → chunk-AWDH6WNA.js} +1214 -5396
  38. package/dist/chunk-AWDH6WNA.js.map +1 -0
  39. package/dist/{chunk-ZJPNP2YW.mjs → chunk-BUDZNAKL.mjs} +2 -2
  40. package/dist/chunk-BUDZNAKL.mjs.map +1 -0
  41. package/dist/{chunk-OCELRSLO.js → chunk-BVXATTTA.js} +4 -4
  42. package/dist/{chunk-OCELRSLO.js.map → chunk-BVXATTTA.js.map} +1 -1
  43. package/dist/{chunk-W5OEBO6E.js → chunk-C4NRF2G2.js} +13 -14
  44. package/dist/chunk-C4NRF2G2.js.map +1 -0
  45. package/dist/{chunk-JSNRCYSO.js → chunk-CY2MBKVG.js} +4 -4
  46. package/dist/{chunk-JSNRCYSO.js.map → chunk-CY2MBKVG.js.map} +1 -1
  47. package/dist/{chunk-ZL6C2ZAF.js → chunk-FK3WDELF.js} +67 -67
  48. package/dist/{chunk-ZL6C2ZAF.js.map → chunk-FK3WDELF.js.map} +1 -1
  49. package/dist/{chunk-MVBIAXVN.mjs → chunk-IOEQ2GET.mjs} +14 -11
  50. package/dist/chunk-IOEQ2GET.mjs.map +1 -0
  51. package/dist/{chunk-AOUUZ52N.js → chunk-NCDBNGIB.js} +85 -86
  52. package/dist/chunk-NCDBNGIB.js.map +1 -0
  53. package/dist/{chunk-B67DP7MI.mjs → chunk-NJ5RVWLA.mjs} +4 -4
  54. package/dist/{chunk-B67DP7MI.mjs.map → chunk-NJ5RVWLA.mjs.map} +1 -1
  55. package/dist/{chunk-HDCUWUNH.js → chunk-NKXQYFS7.js} +28 -27
  56. package/dist/chunk-NKXQYFS7.js.map +1 -0
  57. package/dist/{chunk-JN6IL6OH.mjs → chunk-NOHHZ6FM.mjs} +1171 -5316
  58. package/dist/chunk-NOHHZ6FM.mjs.map +1 -0
  59. package/dist/{chunk-PCYL4MII.mjs → chunk-OASC7NYV.mjs} +156 -314
  60. package/dist/chunk-OASC7NYV.mjs.map +1 -0
  61. package/dist/{chunk-RXZNACMI.js → chunk-P43PX75J.js} +33 -33
  62. package/dist/{chunk-RXZNACMI.js.map → chunk-P43PX75J.js.map} +1 -1
  63. package/dist/{chunk-OL73LBX5.mjs → chunk-QLFSJ6HK.mjs} +3 -4
  64. package/dist/chunk-QLFSJ6HK.mjs.map +1 -0
  65. package/dist/{chunk-LEKZUS6N.mjs → chunk-QPSHM2JQ.mjs} +4 -5
  66. package/dist/chunk-QPSHM2JQ.mjs.map +1 -0
  67. package/dist/{chunk-NJFRJ6YD.js → chunk-QSMPKL27.js} +225 -384
  68. package/dist/chunk-QSMPKL27.js.map +1 -0
  69. package/dist/{chunk-ZV5EZXXO.mjs → chunk-RHRJXK5R.mjs} +3 -3
  70. package/dist/{chunk-ZV5EZXXO.mjs.map → chunk-RHRJXK5R.mjs.map} +1 -1
  71. package/dist/{chunk-F54Q2YJY.js → chunk-SY4MUT5V.js} +7 -7
  72. package/dist/{chunk-F54Q2YJY.js.map → chunk-SY4MUT5V.js.map} +1 -1
  73. package/dist/{chunk-5RM6NGZ6.mjs → chunk-UHMAKUON.mjs} +3 -3
  74. package/dist/{chunk-5RM6NGZ6.mjs.map → chunk-UHMAKUON.mjs.map} +1 -1
  75. package/dist/{chunk-TIJJHW2Z.js → chunk-V5VBYOF5.js} +36 -36
  76. package/dist/{chunk-TIJJHW2Z.js.map → chunk-V5VBYOF5.js.map} +1 -1
  77. package/dist/{chunk-KR2X2WHJ.js → chunk-VMGNQFRO.js} +53 -53
  78. package/dist/{chunk-KR2X2WHJ.js.map → chunk-VMGNQFRO.js.map} +1 -1
  79. package/dist/{chunk-HZ4LOVHM.js → chunk-VY52Y5GC.js} +2 -2
  80. package/dist/chunk-VY52Y5GC.js.map +1 -0
  81. package/dist/{chunk-TVMLV675.js → chunk-Z7VY5M4T.js} +98 -95
  82. package/dist/chunk-Z7VY5M4T.js.map +1 -0
  83. package/dist/{chunk-R4TQWXNG.mjs → chunk-ZM2Q2SMC.mjs} +6 -5
  84. package/dist/chunk-ZM2Q2SMC.mjs.map +1 -0
  85. package/dist/index.js +744 -904
  86. package/dist/index.mjs +4 -4
  87. package/dist/platform/admin/index.js +13 -13
  88. package/dist/platform/admin/index.mjs +7 -7
  89. package/dist/platform/agents-workspace.js +9 -9
  90. package/dist/platform/agents-workspace.mjs +8 -8
  91. package/dist/platform/app-shell.js +6 -6
  92. package/dist/platform/app-shell.mjs +5 -5
  93. package/dist/platform/auth/index.js +30 -30
  94. package/dist/platform/auth/index.mjs +7 -7
  95. package/dist/platform/billing/index.js +6 -6
  96. package/dist/platform/billing/index.mjs +5 -5
  97. package/dist/platform/impersonation/index.js +6 -6
  98. package/dist/platform/impersonation/index.mjs +5 -5
  99. package/dist/platform/index.js +102 -4812
  100. package/dist/platform/index.js.map +1 -1
  101. package/dist/platform/index.mjs +24 -4729
  102. package/dist/platform/index.mjs.map +1 -1
  103. package/dist/platform/pages/index.js +320 -204
  104. package/dist/platform/pages/index.js.map +1 -1
  105. package/dist/platform/pages/index.mjs +146 -30
  106. package/dist/platform/pages/index.mjs.map +1 -1
  107. package/dist/platform/rbac.js +2 -2
  108. package/dist/platform/rbac.mjs +1 -1
  109. package/dist/platform/settings/index.js +10 -10
  110. package/dist/platform/settings/index.mjs +9 -9
  111. package/dist/platform/utils/index.js +3 -3
  112. package/dist/platform/utils/index.js.map +1 -1
  113. package/dist/platform/utils/index.mjs +1 -1
  114. package/dist/platform/utils/index.mjs.map +1 -1
  115. package/dist/platform/workflow-api-client.js +62 -62
  116. package/dist/platform/workflow-api-client.mjs +2 -2
  117. package/dist/platform/workflow-canvas-shell.js +7 -7
  118. package/dist/platform/workflow-canvas-shell.mjs +6 -6
  119. package/package.json +15 -5
  120. package/src/styles/liquid-glass.css +283 -2
  121. package/dist/astrlabe/contracts.d.mts +0 -517
  122. package/dist/astrlabe/contracts.d.ts +0 -517
  123. package/dist/astrlabe/graph-node.d.mts +0 -28
  124. package/dist/astrlabe/graph-node.d.ts +0 -28
  125. package/dist/astrlabe/index.d.mts +0 -751
  126. package/dist/astrlabe/index.d.ts +0 -751
  127. package/dist/astrlabe/utils.d.mts +0 -60
  128. package/dist/astrlabe/utils.d.ts +0 -60
  129. package/dist/astrlabe/workflow-canvas.d.mts +0 -69
  130. package/dist/astrlabe/workflow-canvas.d.ts +0 -69
  131. package/dist/astrlabe/workflow-preview-canvas.d.mts +0 -10
  132. package/dist/astrlabe/workflow-preview-canvas.d.ts +0 -10
  133. package/dist/billing-panel-DsHhhJqG.d.mts +0 -18
  134. package/dist/billing-panel-DsHhhJqG.d.ts +0 -18
  135. package/dist/brand/index.d.mts +0 -85
  136. package/dist/brand/index.d.ts +0 -85
  137. package/dist/chunk-2WXRRQM3.mjs.map +0 -1
  138. package/dist/chunk-3ZUMJTDT.mjs.map +0 -1
  139. package/dist/chunk-AOUUZ52N.js.map +0 -1
  140. package/dist/chunk-FAGDZEKM.js.map +0 -1
  141. package/dist/chunk-HDCUWUNH.js.map +0 -1
  142. package/dist/chunk-HZ4LOVHM.js.map +0 -1
  143. package/dist/chunk-I2NZGVBG.js.map +0 -1
  144. package/dist/chunk-IJAKZHXX.js.map +0 -1
  145. package/dist/chunk-JN6IL6OH.mjs.map +0 -1
  146. package/dist/chunk-LEKZUS6N.mjs.map +0 -1
  147. package/dist/chunk-MVBIAXVN.mjs.map +0 -1
  148. package/dist/chunk-MWPTSBAI.js.map +0 -1
  149. package/dist/chunk-NJFRJ6YD.js.map +0 -1
  150. package/dist/chunk-O6M3KDGT.mjs.map +0 -1
  151. package/dist/chunk-OL73LBX5.mjs.map +0 -1
  152. package/dist/chunk-PCYL4MII.mjs.map +0 -1
  153. package/dist/chunk-R4TQWXNG.mjs.map +0 -1
  154. package/dist/chunk-SYNVNTLJ.mjs.map +0 -1
  155. package/dist/chunk-TVMLV675.js.map +0 -1
  156. package/dist/chunk-UDDZTTLO.mjs.map +0 -1
  157. package/dist/chunk-W5OEBO6E.js.map +0 -1
  158. package/dist/chunk-ZJPNP2YW.mjs.map +0 -1
  159. package/dist/chunk-ZM5MVWIT.js.map +0 -1
  160. package/dist/dynamic-island-confirm-BKsZkAEP.d.mts +0 -17
  161. package/dist/dynamic-island-confirm-BKsZkAEP.d.ts +0 -17
  162. package/dist/index-CoB18TbG.d.ts +0 -215
  163. package/dist/index-VI9gyJXl.d.mts +0 -215
  164. package/dist/index.d.mts +0 -5412
  165. package/dist/index.d.ts +0 -5412
  166. package/dist/layout-engine-YZcVr20M.d.mts +0 -19
  167. package/dist/layout-engine-YZcVr20M.d.ts +0 -19
  168. package/dist/lib/i18n-context.d.mts +0 -36
  169. package/dist/lib/i18n-context.d.ts +0 -36
  170. package/dist/lib/router-context.d.mts +0 -35
  171. package/dist/lib/router-context.d.ts +0 -35
  172. package/dist/navigation-BiWVffAN.d.mts +0 -49
  173. package/dist/navigation-BiWVffAN.d.ts +0 -49
  174. package/dist/platform/admin/index.d.mts +0 -17
  175. package/dist/platform/admin/index.d.ts +0 -17
  176. package/dist/platform/agents-workspace.d.mts +0 -19
  177. package/dist/platform/agents-workspace.d.ts +0 -19
  178. package/dist/platform/app-shell.d.mts +0 -58
  179. package/dist/platform/app-shell.d.ts +0 -58
  180. package/dist/platform/auth/index.d.mts +0 -73
  181. package/dist/platform/auth/index.d.ts +0 -73
  182. package/dist/platform/billing/index.d.mts +0 -29
  183. package/dist/platform/billing/index.d.ts +0 -29
  184. package/dist/platform/impersonation/index.d.mts +0 -19
  185. package/dist/platform/impersonation/index.d.ts +0 -19
  186. package/dist/platform/index.d.mts +0 -224
  187. package/dist/platform/index.d.ts +0 -224
  188. package/dist/platform/pages/index.d.mts +0 -432
  189. package/dist/platform/pages/index.d.ts +0 -432
  190. package/dist/platform/rbac.d.mts +0 -41
  191. package/dist/platform/rbac.d.ts +0 -41
  192. package/dist/platform/settings/index.d.mts +0 -31
  193. package/dist/platform/settings/index.d.ts +0 -31
  194. package/dist/platform/telemetry/index.d.mts +0 -51
  195. package/dist/platform/telemetry/index.d.ts +0 -51
  196. package/dist/platform/utils/index.d.mts +0 -32
  197. package/dist/platform/utils/index.d.ts +0 -32
  198. package/dist/platform/windsock-admin-client.d.mts +0 -57
  199. package/dist/platform/windsock-admin-client.d.ts +0 -57
  200. package/dist/platform/workflow-api-client.d.mts +0 -6
  201. package/dist/platform/workflow-api-client.d.ts +0 -6
  202. package/dist/platform/workflow-canvas-shell.d.mts +0 -18
  203. package/dist/platform/workflow-canvas-shell.d.ts +0 -18
  204. package/dist/rule-form-BYJzyork.d.mts +0 -128
  205. package/dist/rule-form-BYJzyork.d.ts +0 -128
  206. package/dist/workflow-api-client-BKD8OfP_.d.ts +0 -468
  207. package/dist/workflow-api-client-DoYj7nHz.d.mts +0 -468
  208. package/dist/workflow-store-o17I6L6A.d.ts +0 -79
  209. package/dist/workflow-store-ppVHdMZi.d.mts +0 -79
  210. package/src/brand/logos/kori-icon.svg +0 -45
  211. package/src/brand/logos/kori-logo-dark.svg +0 -40
  212. package/src/brand/logos/kori-logo.svg +0 -43
@@ -19,5 +19,5 @@ function buildLambdaApiUrl(path) {
19
19
 
20
20
  exports.buildLambdaApiUrl = buildLambdaApiUrl;
21
21
  exports.getLambdaApiBase = getLambdaApiBase;
22
- //# sourceMappingURL=chunk-FAGDZEKM.js.map
23
- //# sourceMappingURL=chunk-FAGDZEKM.js.map
22
+ //# sourceMappingURL=chunk-2OZZH2IO.js.map
23
+ //# sourceMappingURL=chunk-2OZZH2IO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/utils/lambda-endpoint.ts"],"names":[],"mappings":";;;AAEA,IAAM,oBAAoB,CAAC,KAAA,KAA0B,KAAA,CAAM,OAAA,CAAQ,OAAO,EAAE,CAAA;AAErE,SAAS,gBAAA,GAA2B;AACzC,EAAA,MAAM,UAAA,GAAa,SAAY,CAAI,uBAAA;AACnC,EAAA,IAAI,UAAA,IAAc,WAAW,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG,OAAO,kBAAkB,UAAU,CAAA;AAEnF,EAAA,MAAM,WAAA,GAAc,SAAY,CAAI,oBAAA;AACpC,EAAA,IAAI,WAAA,IAAe,YAAY,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG,OAAO,kBAAkB,WAAW,CAAA;AAEtF,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAEO,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,MAAM,iBAAiB,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AAC7D,EAAA,OAAO,CAAA,EAAG,gBAAA,EAAkB,CAAA,EAAG,cAAc,CAAA,CAAA;AAC/C","file":"chunk-2OZZH2IO.js","sourcesContent":["// `import.meta.env` is augmented in src/svg.d.ts.\n\nconst trimTrailingSlash = (value: string): string => value.replace(/\\/$/, '')\n\nexport function getLambdaApiBase(): string {\n const directBase = import.meta.env.VITE_LAMBDA_CLIENT_BASE\n if (directBase && directBase.trim().length > 0) return trimTrailingSlash(directBase)\n\n const gatewayBase = import.meta.env.VITE_API_GATEWAY_URL\n if (gatewayBase && gatewayBase.trim().length > 0) return trimTrailingSlash(gatewayBase)\n\n throw new Error(\n 'Missing workflow API base URL. Set VITE_LAMBDA_CLIENT_BASE or VITE_API_GATEWAY_URL.'\n )\n}\n\nexport function buildLambdaApiUrl(path: string): string {\n const normalizedPath = path.startsWith('/') ? path : `/${path}`\n return `${getLambdaApiBase()}${normalizedPath}`\n}\n"]}
@@ -16,5 +16,5 @@ function buildLambdaApiUrl(path) {
16
16
  }
17
17
 
18
18
  export { buildLambdaApiUrl, getLambdaApiBase };
19
- //# sourceMappingURL=chunk-SYNVNTLJ.mjs.map
20
- //# sourceMappingURL=chunk-SYNVNTLJ.mjs.map
19
+ //# sourceMappingURL=chunk-3AY5HIQ6.mjs.map
20
+ //# sourceMappingURL=chunk-3AY5HIQ6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/utils/lambda-endpoint.ts"],"names":[],"mappings":";AAEA,IAAM,oBAAoB,CAAC,KAAA,KAA0B,KAAA,CAAM,OAAA,CAAQ,OAAO,EAAE,CAAA;AAErE,SAAS,gBAAA,GAA2B;AACzC,EAAA,MAAM,UAAA,GAAa,YAAY,GAAA,CAAI,uBAAA;AACnC,EAAA,IAAI,UAAA,IAAc,WAAW,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG,OAAO,kBAAkB,UAAU,CAAA;AAEnF,EAAA,MAAM,WAAA,GAAc,YAAY,GAAA,CAAI,oBAAA;AACpC,EAAA,IAAI,WAAA,IAAe,YAAY,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG,OAAO,kBAAkB,WAAW,CAAA;AAEtF,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;AAEO,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,MAAM,iBAAiB,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AAC7D,EAAA,OAAO,CAAA,EAAG,gBAAA,EAAkB,CAAA,EAAG,cAAc,CAAA,CAAA;AAC/C","file":"chunk-3AY5HIQ6.mjs","sourcesContent":["// `import.meta.env` is augmented in src/svg.d.ts.\n\nconst trimTrailingSlash = (value: string): string => value.replace(/\\/$/, '')\n\nexport function getLambdaApiBase(): string {\n const directBase = import.meta.env.VITE_LAMBDA_CLIENT_BASE\n if (directBase && directBase.trim().length > 0) return trimTrailingSlash(directBase)\n\n const gatewayBase = import.meta.env.VITE_API_GATEWAY_URL\n if (gatewayBase && gatewayBase.trim().length > 0) return trimTrailingSlash(gatewayBase)\n\n throw new Error(\n 'Missing workflow API base URL. Set VITE_LAMBDA_CLIENT_BASE or VITE_API_GATEWAY_URL.'\n )\n}\n\nexport function buildLambdaApiUrl(path: string): string {\n const normalizedPath = path.startsWith('/') ? path : `/${path}`\n return `${getLambdaApiBase()}${normalizedPath}`\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { Workspace } from './chunk-PCYL4MII.mjs';
3
- import { HeroSection, CreateActionButton, EntityCard, InlineForm, FormSelect, Button, GlassModal, FormGrid, FormInput } from './chunk-JN6IL6OH.mjs';
2
+ import { Workspace } from './chunk-OASC7NYV.mjs';
3
+ import { HeroSection, CreateActionButton, SearchBar, EntityCard, InlineForm, FormSelect, Button, GlassModal, FormGrid, FormInput } from './chunk-NOHHZ6FM.mjs';
4
4
  import { useLocale } from './chunk-7VJ7CMMT.mjs';
5
5
  import { useState } from 'react';
6
6
  import { UserGroupIcon, ShieldCheckIcon } from '@heroicons/react/24/outline';
@@ -14,6 +14,14 @@ var ROLE_OPTIONS = [
14
14
  ];
15
15
  function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
16
16
  const [createOpen, setCreateOpen] = useState(false);
17
+ const [searchTerm, setSearchTerm] = useState("");
18
+ const allUsers = users;
19
+ const term = searchTerm.trim().toLowerCase();
20
+ const filteredUsers = term ? allUsers.filter(
21
+ (user) => user.name.toLowerCase().includes(term) || user.email.toLowerCase().includes(term)
22
+ ) : allUsers;
23
+ const isEmpty = allUsers.length === 0;
24
+ const labelsAny = labels;
17
25
  return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
18
26
  /* @__PURE__ */ jsx(
19
27
  HeroSection,
@@ -43,9 +51,17 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
43
51
  accent: "violet"
44
52
  }
45
53
  ),
54
+ !isEmpty && /* @__PURE__ */ jsx(
55
+ SearchBar,
56
+ {
57
+ searchTerm,
58
+ onSearchChange: setSearchTerm,
59
+ placeholder: labelsAny.searchPlaceholder ?? labels.title
60
+ }
61
+ ),
46
62
  /* @__PURE__ */ jsxs("section", { className: "space-y-3", children: [
47
63
  /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.list }),
48
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: users.map((user) => /* @__PURE__ */ jsx(
64
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredUsers.map((user) => /* @__PURE__ */ jsx(
49
65
  EntityCard,
50
66
  {
51
67
  accentGradient: "from-violet-500 to-indigo-700",
@@ -114,6 +130,16 @@ function RolesPageView({
114
130
  roleOptions
115
131
  }) {
116
132
  const [assignOpen, setAssignOpen] = useState(false);
133
+ const [searchTerm, setSearchTerm] = useState("");
134
+ const allRoleDefinitions = Object.values(roleDefinitions);
135
+ const allUsers = users;
136
+ const term = searchTerm.trim().toLowerCase();
137
+ const filteredRoleDefinitions = term ? allRoleDefinitions.filter((role) => role.label.toLowerCase().includes(term)) : allRoleDefinitions;
138
+ const filteredUsers = term ? allUsers.filter(
139
+ (user) => user.name.toLowerCase().includes(term) || user.email.toLowerCase().includes(term)
140
+ ) : allUsers;
141
+ const isEmpty = allRoleDefinitions.length === 0 && allUsers.length === 0;
142
+ const labelsAny = labels;
117
143
  return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
118
144
  /* @__PURE__ */ jsx(
119
145
  HeroSection,
@@ -143,9 +169,17 @@ function RolesPageView({
143
169
  accent: "emerald"
144
170
  }
145
171
  ),
172
+ !isEmpty && /* @__PURE__ */ jsx(
173
+ SearchBar,
174
+ {
175
+ searchTerm,
176
+ onSearchChange: setSearchTerm,
177
+ placeholder: labelsAny.searchPlaceholder ?? labels.title
178
+ }
179
+ ),
146
180
  /* @__PURE__ */ jsxs("section", { className: "space-y-3", children: [
147
181
  /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.definitions }),
148
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: Object.values(roleDefinitions).map((role) => /* @__PURE__ */ jsxs(
182
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: filteredRoleDefinitions.map((role) => /* @__PURE__ */ jsxs(
149
183
  EntityCard,
150
184
  {
151
185
  accentGradient: "from-emerald-500 to-teal-700",
@@ -162,7 +196,7 @@ function RolesPageView({
162
196
  ] }),
163
197
  /* @__PURE__ */ jsxs("section", { className: "space-y-3", children: [
164
198
  /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.current }),
165
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: users.map((user) => /* @__PURE__ */ jsx(
199
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredUsers.map((user) => /* @__PURE__ */ jsx(
166
200
  EntityCard,
167
201
  {
168
202
  accentGradient: "from-violet-500 to-indigo-700",
@@ -206,5 +240,5 @@ function WorkflowWorkspace({ graph }) {
206
240
  }
207
241
 
208
242
  export { RolesPageView, UsersPageView, WorkflowWorkspace };
209
- //# sourceMappingURL=chunk-O6M3KDGT.mjs.map
210
- //# sourceMappingURL=chunk-O6M3KDGT.mjs.map
243
+ //# sourceMappingURL=chunk-3OLYSMI5.mjs.map
244
+ //# sourceMappingURL=chunk-3OLYSMI5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/pages/users-page-view.tsx","../src/platform/pages/roles-page-view.tsx","../src/platform/workflow-workspace.tsx"],"names":["useState","jsxs","jsx"],"mappings":"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","file":"chunk-3OLYSMI5.mjs","sourcesContent":["import { useState, type FormEvent } from 'react'\nimport { UserGroupIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\n InlineForm,\n SearchBar,\n} from '@ui/index'\nimport type { UserRole, ManagedUser, UsersPageViewProps } from '@datatechsolutions/shared-domain/common'\n\nconst ROLE_OPTIONS: Array<{ value: UserRole; label: string }> = [\n { value: 'admin', label: 'Admin' },\n { value: 'manager', label: 'Manager' },\n { value: 'analyst', label: 'Analyst' },\n { value: 'viewer', label: 'Viewer' },\n]\n\nexport function UsersPageView({ labels, users, onCreateUser, onUpdateRole }: UsersPageViewProps) {\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allUsers = users\n const term = searchTerm.trim().toLowerCase()\n const filteredUsers = term\n ? allUsers.filter((user) =>\n user.name.toLowerCase().includes(term) || user.email.toLowerCase().includes(term),\n )\n : allUsers\n const isEmpty = allUsers.length === 0\n const labelsAny = labels as Record<string, string>\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<UserGroupIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labelsAny.searchPlaceholder ?? labels.title}\n />\n )}\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.list}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredUsers.map((user: ManagedUser) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <UserGroupIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <span\n className={`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${\n user.active\n ? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300'\n : 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300'\n }`}\n >\n {user.active ? labels.statusActive : labels.statusInactive}\n </span>\n )}\n footer={(\n <form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n onUpdateRole({ email: user.email, role })\n }}\n >\n <InlineForm>\n <FormSelect name=\"role\" options={ROLE_OPTIONS} defaultValue={user.role} />\n <Button type=\"submit\" outline size=\"sm\">{labels.save}</Button>\n </InlineForm>\n </form>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.create}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.list}\n submitLabel={labels.add}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!name || !email) return\n onCreateUser({ name, email, role })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.userNamePlaceholder} required />\n <FormInput name=\"email\" label={labels.email} placeholder={labels.userEmailPlaceholder} required type=\"email\" />\n <FormSelect name=\"role\" label={labels.role} options={ROLE_OPTIONS} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import { useState, type FormEvent } from 'react'\nimport { ShieldCheckIcon } from '@heroicons/react/24/outline'\nimport {\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\n SearchBar,\n} from '@ui/index'\nimport type { UserRole, RolesPageViewProps } from '@datatechsolutions/shared-domain/common'\nimport type { PlatformRoleDefinition } from '../rbac'\n\nexport type RolesPageViewExtraProps = {\n /**\n * App-defined role definitions, e.g. `{ admin: { id, label, description }, ... }`.\n * Each app passes the output of its own `createPlatformRbac()` call.\n */\n roleDefinitions: Record<string, PlatformRoleDefinition<string>>\n /**\n * Display options surfaced in the role-assignment modal select. Each\n * entry is `{ value: roleId, label: localizedLabel }`.\n */\n roleOptions: Array<{ value: string; label: string }>\n}\n\nexport function RolesPageView({\n labels,\n users,\n onAssignRole,\n roleDefinitions,\n roleOptions,\n}: RolesPageViewProps & RolesPageViewExtraProps) {\n const [assignOpen, setAssignOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allRoleDefinitions = Object.values(roleDefinitions)\n const allUsers = users\n const term = searchTerm.trim().toLowerCase()\n const filteredRoleDefinitions = term\n ? allRoleDefinitions.filter((role) => role.label.toLowerCase().includes(term))\n : allRoleDefinitions\n const filteredUsers = term\n ? allUsers.filter((user) =>\n user.name.toLowerCase().includes(term) || user.email.toLowerCase().includes(term),\n )\n : allUsers\n const isEmpty = allRoleDefinitions.length === 0 && allUsers.length === 0\n const labelsAny = labels as Record<string, string>\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<ShieldCheckIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-emerald-500 to-teal-600\"\n toolbar={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.assign}\n onClick={() => setAssignOpen(true)}\n accent=\"emerald\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.assign}\n onClick={() => setAssignOpen(true)}\n accent=\"emerald\"\n />\n\n {!isEmpty && (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labelsAny.searchPlaceholder ?? labels.title}\n />\n )}\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.definitions}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {filteredRoleDefinitions.map((role) => (\n <EntityCard\n key={role.id}\n accentGradient=\"from-emerald-500 to-teal-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400\">\n <ShieldCheckIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={role.label}\n subtitle={role.id}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{role.description}</p>\n <p className=\"mt-2 text-xs font-medium text-slate-600 dark:text-slate-300\">\n {labels.permissionsEnabled}\n </p>\n </EntityCard>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.current}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredUsers.map((user) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <ShieldCheckIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <span className=\"shrink-0 rounded-full bg-violet-100 px-2 py-0.5 text-[10px] font-semibold text-violet-700 dark:bg-violet-900/30 dark:text-violet-300\">\n {user.role}\n </span>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={assignOpen}\n onClose={() => setAssignOpen(false)}\n title={labels.assign}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.current}\n submitLabel={labels.apply}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!email) return\n onAssignRole({ email, role })\n setAssignOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"email\" label={labels.userEmail} placeholder=\"user@company.com\" required />\n <FormSelect name=\"role\" label={labels.role} options={roleOptions} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe/contracts'\nimport type { WorkflowWorkspaceProps } from '@datatechsolutions/shared-domain/common'\nimport { useLocale } from '@ui/lib/i18n-context'\n\n/**\n * Thin wrapper that forwards a workflow graph into the visual canvas while\n * threading the active locale from the i18n context. The graph type from\n * `shared-domain` is structurally identical to ui's contract type — the\n * cast keeps callers from having to import both.\n */\nexport function WorkflowWorkspace({ graph }: WorkflowWorkspaceProps) {\n const locale = useLocale()\n return <Workspace initialGraph={graph as unknown as UiWorkflowGraph} locale={locale} />\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Workspace } from './chunk-PCYL4MII.mjs';
2
+ import { Workspace } from './chunk-OASC7NYV.mjs';
3
3
  import { useLocale } from './chunk-7VJ7CMMT.mjs';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -16,5 +16,5 @@ function WorkflowCanvasShell({ graph, messages }) {
16
16
  }
17
17
 
18
18
  export { WorkflowCanvasShell };
19
- //# sourceMappingURL=chunk-GIQXB3BG.mjs.map
20
- //# sourceMappingURL=chunk-GIQXB3BG.mjs.map
19
+ //# sourceMappingURL=chunk-4PFU6A2B.mjs.map
20
+ //# sourceMappingURL=chunk-4PFU6A2B.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/platform/workflow-canvas-shell.tsx"],"names":[],"mappings":";;;;AAkBO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AAC9D,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAc,KAAA;AAAA,MACd,MAAA;AAAA,MACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC;AAAA,GAClC;AAEJ","file":"chunk-GIQXB3BG.mjs","sourcesContent":["import { useLocale } from '@ui/lib/i18n-context'\nimport { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe'\nimport type { WorkflowCanvasShellProps } from '@datatechsolutions/shared-domain/common'\n\n/**\n * Workflow canvas shell with optional message bundle override.\n *\n * Most apps wrap their tree in `<I18nProvider>` and let the canvas read\n * messages from context — in that case `messages` can be omitted. Apps\n * that need to inject a precomputed bundle (e.g. for tests or app-specific\n * overrides not shipped with shared-domain) can pass it explicitly.\n */\ntype Props = WorkflowCanvasShellProps & {\n /** Optional override for the messages catalog passed into the canvas. */\n messages?: Record<string, unknown>\n}\n\nexport function WorkflowCanvasShell({ graph, messages }: Props) {\n const locale = useLocale()\n return (\n <Workspace\n initialGraph={graph as unknown as UiWorkflowGraph}\n locale={locale}\n {...(messages ? { messages } : {})}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/platform/workflow-canvas-shell.tsx"],"names":[],"mappings":";;;;AAkBO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AAC9D,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAc,KAAA;AAAA,MACd,MAAA;AAAA,MACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC;AAAA,GAClC;AAEJ","file":"chunk-4PFU6A2B.mjs","sourcesContent":["import { useLocale } from '@ui/lib/i18n-context'\nimport { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe'\nimport type { WorkflowCanvasShellProps } from '@datatechsolutions/shared-domain/common'\n\n/**\n * Workflow canvas shell with optional message bundle override.\n *\n * Most apps wrap their tree in `<I18nProvider>` and let the canvas read\n * messages from context — in that case `messages` can be omitted. Apps\n * that need to inject a precomputed bundle (e.g. for tests or app-specific\n * overrides not shipped with shared-domain) can pass it explicitly.\n */\ntype Props = WorkflowCanvasShellProps & {\n /** Optional override for the messages catalog passed into the canvas. */\n messages?: Record<string, unknown>\n}\n\nexport function WorkflowCanvasShell({ graph, messages }: Props) {\n const locale = useLocale()\n return (\n <Workspace\n initialGraph={graph as unknown as UiWorkflowGraph}\n locale={locale}\n {...(messages ? { messages } : {})}\n />\n )\n}\n"]}
@@ -1,10 +1,9 @@
1
1
  "use client";
2
- import { useNotifications, PlatformShell, LOCALE_FLAGS } from './chunk-JN6IL6OH.mjs';
3
- import { useTranslations, useLocale } from './chunk-7VJ7CMMT.mjs';
2
+ import { useAuth, usePlatformPreferences, useNotifications, PlatformShell, LOCALE_FLAGS } from './chunk-NOHHZ6FM.mjs';
4
3
  import { usePathname, useRouter } from './chunk-QWG2FMUN.mjs';
4
+ import { useTranslations, useLocale } from './chunk-7VJ7CMMT.mjs';
5
5
  import { createContext, useMemo, useContext, useCallback } from 'react';
6
6
  import { HomeIcon, RectangleStackIcon } from '@heroicons/react/24/outline';
7
- import { useAuth, usePlatformPreferences } from '@datatechsolutions/windsock/client';
8
7
  import { LANGUAGE_META } from '@datatechsolutions/shared-domain/i18n';
9
8
  import { jsx } from 'react/jsx-runtime';
10
9
 
@@ -124,5 +123,5 @@ function PlatformAppShell({
124
123
  }
125
124
 
126
125
  export { PlatformAppShell, PlatformStateProvider, usePlatformState };
127
- //# sourceMappingURL=chunk-3ZUMJTDT.mjs.map
128
- //# sourceMappingURL=chunk-3ZUMJTDT.mjs.map
126
+ //# sourceMappingURL=chunk-5BEVTOZV.mjs.map
127
+ //# sourceMappingURL=chunk-5BEVTOZV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/platform/platform-state-provider.tsx","../src/platform/app-shell.tsx"],"names":["createContext","useAuth","useMemo","useContext","LOCALE_FLAGS","useTranslations","usePlatformPreferences","usePathname","useRouter","useNotifications","useLocale","LANGUAGE_META","useCallback","jsx","PlatformShell","RectangleStackIcon","HomeIcon"],"mappings":"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","file":"chunk-3JJWPOK6.js","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useAuth, type AuthUser } from '@datatechsolutions/windsock/client'\n\ntype PlatformState = {\n currentOrganizationId: string\n actor: AuthUser | null\n}\n\nconst PlatformStateContext = createContext<PlatformState | null>(null)\n\nexport type PlatformStateProviderProps = {\n children: ReactNode\n /**\n * Function that converts a JWT role claim to the app's canonical role\n * union (the same `normalizePlatformRole` produced by\n * `createPlatformRbac()` in this app). Lifted out as a prop because\n * each consuming app uses its own role enum.\n */\n normalizeRole: (input: unknown) => string\n}\n\nexport function PlatformStateProvider({ children, normalizeRole }: PlatformStateProviderProps) {\n const { user } = useAuth()\n\n const state = useMemo<PlatformState>(() => {\n const organizationId = user?.organizationId ?? ''\n\n const actor: AuthUser | null = user\n ? {\n ...user,\n role: normalizeRole(user.role),\n organizationId,\n }\n : null\n\n return {\n currentOrganizationId: organizationId,\n actor,\n }\n }, [user, normalizeRole])\n\n return (\n <PlatformStateContext.Provider value={state}>\n {children}\n </PlatformStateContext.Provider>\n )\n}\n\nexport function usePlatformState() {\n const context = useContext(PlatformStateContext)\n if (!context) throw new Error('usePlatformState must be used inside PlatformStateProvider')\n return context\n}\n","import { useCallback, useMemo, type ComponentType, type ReactNode } from 'react'\nimport { RectangleStackIcon, HomeIcon } from '@heroicons/react/24/outline'\nimport { useAuth, usePlatformPreferences } from '@datatechsolutions/windsock/client'\nimport { LANGUAGE_META } from '@datatechsolutions/shared-domain/i18n'\nimport {\n PlatformShell,\n type NavigationItem,\n} from '@ui/index'\nimport { useNotifications } from '@ui/components/notifications'\nimport { useLocale, useTranslations } from '@ui/lib/i18n-context'\nimport { usePathname, useRouter } from '@ui/lib/router-context'\nimport { LOCALE_FLAGS } from '@ui/lib/locale-flags'\nimport { usePlatformState } from './platform-state-provider'\n\nfunction resolveFlag(locale: string): string | undefined {\n const code = locale === 'pt-BR' ? 'br' : locale\n return LOCALE_FLAGS?.[code as keyof typeof LOCALE_FLAGS]\n}\n\nexport type PlatformAppShellProps = {\n /** App display name (e.g. \"Astrlabe\"). */\n appName: string\n /** Tailwind gradient classes for the shell branding (e.g. \"from-sky-500 to-indigo-600\"). */\n appGradient: string\n /** Branded logo node rendered inside the flyout trigger. */\n appLogo: ReactNode\n /**\n * Optional app icon for the branded loader (defaults to the platform's\n * RectangleStackIcon if omitted).\n */\n appIcon?: ReactNode\n /**\n * Optional override for the dock dashboard icon (defaults to HomeIcon).\n */\n dashboardIcon?: ComponentType<{ className?: string }>\n\n /** App-specific navigation items already pre-translated. */\n navigationItems: NavigationItem[]\n /** Custom ordering of launchpad page tiles. */\n pageOrder: string[]\n /**\n * Map of navigation/module ID → required permission name. The shell\n * filters `navigationItems` so that any item whose ID has an entry here\n * is hidden unless `hasPermission` returns true for the listed permission.\n */\n modulePermissions: Record<string, string>\n /**\n * Permission predicate, typically `(p) => can(actor, p)` from each app's\n * `createPlatformRbac()` factory.\n */\n hasPermission: (permission: string) => boolean\n\n /**\n * Optional settings/profile drawer content (e.g. an app-specific\n * `<SettingsModal>`). Receives the open state + close handler the shell\n * manages internally so the drawer renders inside the shell chrome.\n */\n settingsModal?: (props: { open: boolean; onClose: () => void }) => ReactNode\n\n children: ReactNode\n}\n\n/**\n * Cross-app platform shell — wires `<PlatformShell>` from ui to windsock's\n * auth + preferences hooks and to ui's i18n/router contexts. Each app\n * passes its own logo, gradient, navigation, and permission predicate; the\n * rest of the chrome (header, dock, flyout, sign-out confirm modal) is\n * shared.\n */\nexport function PlatformAppShell({\n appName,\n appGradient,\n appLogo,\n appIcon,\n dashboardIcon,\n navigationItems,\n pageOrder,\n modulePermissions,\n hasPermission,\n settingsModal,\n children,\n}: PlatformAppShellProps) {\n const tCommon = useTranslations('common')\n const { user, status, logout } = useAuth()\n // Validate the platform-state provider is mounted above this shell;\n // the actor itself isn't read here, but the same provider feeds children.\n usePlatformState()\n const { resolvedTheme, setTheme, dockPosition, dockAutoHide, dockEnabled } = usePlatformPreferences()\n const pathname = usePathname()\n const router = useRouter()\n const { history, openHistory } = useNotifications()\n const currentLocale = useLocale()\n const localeMeta = LANGUAGE_META[currentLocale as keyof typeof LANGUAGE_META]\n\n const items = useMemo(() => navigationItems.filter((item) => {\n const permission = modulePermissions[item.id]\n if (!permission) return true\n return hasPermission(permission)\n }), [navigationItems, modulePermissions, hasPermission])\n\n const handleSignOut = useCallback(() => { void logout('/login') }, [logout])\n const handleToggleTheme = useCallback(\n () => { setTheme(resolvedTheme === 'dark' ? 'light' : 'dark') },\n [resolvedTheme, setTheme],\n )\n const handleNavigate = useCallback((href: string) => router.push(href), [router])\n const handlePrefetch = useCallback((href: string) => router.prefetch(href), [router])\n\n const shellUser = user\n ? {\n name: user.name ?? null,\n email: user.email ?? null,\n image: user.image ?? null,\n role: user.role ?? null,\n permissions: user.permissions as string[] | undefined,\n organizationId: user.organizationId ?? null,\n }\n : null\n\n return (\n <PlatformShell\n items={items}\n launchpadPageOrder={pageOrder}\n user={shellUser}\n authStatus={status}\n onSignOut={handleSignOut}\n dockPosition={dockPosition}\n dockAutoHide={dockAutoHide}\n dockEnabled={dockEnabled}\n resolvedTheme={resolvedTheme}\n onToggleTheme={handleToggleTheme}\n pathname={pathname}\n onNavigate={handleNavigate}\n onPrefetch={handlePrefetch}\n appName={appName}\n appIcon={appIcon ?? <RectangleStackIcon className=\"h-full w-full\" />}\n appLogo={appLogo}\n appGradient={appGradient}\n dashboardIcon={dashboardIcon ?? HomeIcon}\n notificationCount={history.length}\n onNotifications={openHistory}\n labels={{\n home: tCommon('home'),\n profile: tCommon('profile'),\n signOut: tCommon('signOut'),\n signOutConfirmTitle: tCommon('signOutConfirmTitle'),\n cancel: tCommon('cancel'),\n notifications: tCommon('notifications'),\n theme: tCommon('theme'),\n currentTheme: resolvedTheme === 'dark' ? tCommon('darkMode') : tCommon('lightMode'),\n language: tCommon('language'),\n currentLocale: localeMeta?.nativeName ?? currentLocale,\n localeFlag: resolveFlag(currentLocale),\n actions: tCommon('actions'),\n }}\n {...(settingsModal ? { profileDrawer: settingsModal } : {})}\n >\n {children}\n </PlatformShell>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/platform/platform-state-provider.tsx","../src/platform/app-shell.tsx"],"names":["useMemo","jsx"],"mappings":"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","file":"chunk-5BEVTOZV.mjs","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useAuth, type AuthUser } from '../_auth'\n\ntype PlatformState = {\n currentOrganizationId: string\n actor: AuthUser | null\n}\n\nconst PlatformStateContext = createContext<PlatformState | null>(null)\n\nexport type PlatformStateProviderProps = {\n children: ReactNode\n /**\n * Function that converts a JWT role claim to the app's canonical role\n * union (the same `normalizePlatformRole` produced by\n * `createPlatformRbac()` in this app). Lifted out as a prop because\n * each consuming app uses its own role enum.\n */\n normalizeRole: (input: unknown) => string\n}\n\nexport function PlatformStateProvider({ children, normalizeRole }: PlatformStateProviderProps) {\n const { user } = useAuth()\n\n const state = useMemo<PlatformState>(() => {\n const organizationId = user?.organizationId ?? ''\n\n const actor: AuthUser | null = user\n ? {\n ...user,\n role: normalizeRole(user.role),\n organizationId,\n }\n : null\n\n return {\n currentOrganizationId: organizationId,\n actor,\n }\n }, [user, normalizeRole])\n\n return (\n <PlatformStateContext.Provider value={state}>\n {children}\n </PlatformStateContext.Provider>\n )\n}\n\nexport function usePlatformState() {\n const context = useContext(PlatformStateContext)\n if (!context) throw new Error('usePlatformState must be used inside PlatformStateProvider')\n return context\n}\n","import { useCallback, useMemo, type ComponentType, type ReactNode } from 'react'\nimport { RectangleStackIcon, HomeIcon } from '@heroicons/react/24/outline'\nimport { useAuth, usePlatformPreferences } from '../_auth'\nimport { LANGUAGE_META } from '@datatechsolutions/shared-domain/i18n'\nimport {\n PlatformShell,\n type NavigationItem,\n} from '@ui/index'\nimport { useNotifications } from '@ui/components/notifications'\nimport { useLocale, useTranslations } from '@ui/lib/i18n-context'\nimport { usePathname, useRouter } from '@ui/lib/router-context'\nimport { LOCALE_FLAGS } from '@ui/lib/locale-flags'\nimport { usePlatformState } from './platform-state-provider'\n\nfunction resolveFlag(locale: string): string | undefined {\n const code = locale === 'pt-BR' ? 'br' : locale\n return LOCALE_FLAGS?.[code as keyof typeof LOCALE_FLAGS]\n}\n\nexport type PlatformAppShellProps = {\n /** App display name (e.g. \"Astrlabe\"). */\n appName: string\n /** Tailwind gradient classes for the shell branding (e.g. \"from-sky-500 to-indigo-600\"). */\n appGradient: string\n /** Branded logo node rendered inside the flyout trigger. */\n appLogo: ReactNode\n /**\n * Optional app icon for the branded loader (defaults to the platform's\n * RectangleStackIcon if omitted).\n */\n appIcon?: ReactNode\n /**\n * Optional override for the dock dashboard icon (defaults to HomeIcon).\n */\n dashboardIcon?: ComponentType<{ className?: string }>\n\n /** App-specific navigation items already pre-translated. */\n navigationItems: NavigationItem[]\n /** Custom ordering of launchpad page tiles. */\n pageOrder: string[]\n /**\n * Map of navigation/module ID → required permission name. The shell\n * filters `navigationItems` so that any item whose ID has an entry here\n * is hidden unless `hasPermission` returns true for the listed permission.\n */\n modulePermissions: Record<string, string>\n /**\n * Permission predicate, typically `(p) => can(actor, p)` from each app's\n * `createPlatformRbac()` factory.\n */\n hasPermission: (permission: string) => boolean\n\n /**\n * Optional settings/profile drawer content (e.g. an app-specific\n * `<SettingsModal>`). Receives the open state + close handler the shell\n * manages internally so the drawer renders inside the shell chrome.\n */\n settingsModal?: (props: { open: boolean; onClose: () => void }) => ReactNode\n\n children: ReactNode\n}\n\n/**\n * Cross-app platform shell — wires `<PlatformShell>` from ui to windsock's\n * auth + preferences hooks and to ui's i18n/router contexts. Each app\n * passes its own logo, gradient, navigation, and permission predicate; the\n * rest of the chrome (header, dock, flyout, sign-out confirm modal) is\n * shared.\n */\nexport function PlatformAppShell({\n appName,\n appGradient,\n appLogo,\n appIcon,\n dashboardIcon,\n navigationItems,\n pageOrder,\n modulePermissions,\n hasPermission,\n settingsModal,\n children,\n}: PlatformAppShellProps) {\n const tCommon = useTranslations('common')\n const { user, status, logout } = useAuth()\n // Validate the platform-state provider is mounted above this shell;\n // the actor itself isn't read here, but the same provider feeds children.\n usePlatformState()\n const { resolvedTheme, setTheme, dockPosition, dockAutoHide, dockEnabled } = usePlatformPreferences()\n const pathname = usePathname()\n const router = useRouter()\n const { history, openHistory } = useNotifications()\n const currentLocale = useLocale()\n const localeMeta = LANGUAGE_META[currentLocale as keyof typeof LANGUAGE_META]\n\n const items = useMemo(() => navigationItems.filter((item) => {\n const permission = modulePermissions[item.id]\n if (!permission) return true\n return hasPermission(permission)\n }), [navigationItems, modulePermissions, hasPermission])\n\n const handleSignOut = useCallback(() => { void logout('/login') }, [logout])\n const handleToggleTheme = useCallback(\n () => { setTheme(resolvedTheme === 'dark' ? 'light' : 'dark') },\n [resolvedTheme, setTheme],\n )\n const handleNavigate = useCallback((href: string) => router.push(href), [router])\n const handlePrefetch = useCallback((href: string) => router.prefetch(href), [router])\n\n const shellUser = user\n ? {\n name: user.name ?? null,\n email: user.email ?? null,\n image: user.image ?? null,\n role: user.role ?? null,\n permissions: user.permissions as string[] | undefined,\n organizationId: user.organizationId ?? null,\n }\n : null\n\n return (\n <PlatformShell\n items={items}\n launchpadPageOrder={pageOrder}\n user={shellUser}\n authStatus={status}\n onSignOut={handleSignOut}\n dockPosition={dockPosition}\n dockAutoHide={dockAutoHide}\n dockEnabled={dockEnabled}\n resolvedTheme={resolvedTheme}\n onToggleTheme={handleToggleTheme}\n pathname={pathname}\n onNavigate={handleNavigate}\n onPrefetch={handlePrefetch}\n appName={appName}\n appIcon={appIcon ?? <RectangleStackIcon className=\"h-full w-full\" />}\n appLogo={appLogo}\n appGradient={appGradient}\n dashboardIcon={dashboardIcon ?? HomeIcon}\n notificationCount={history.length}\n onNotifications={openHistory}\n labels={{\n home: tCommon('home'),\n profile: tCommon('profile'),\n signOut: tCommon('signOut'),\n signOutConfirmTitle: tCommon('signOutConfirmTitle'),\n cancel: tCommon('cancel'),\n notifications: tCommon('notifications'),\n theme: tCommon('theme'),\n currentTheme: resolvedTheme === 'dark' ? tCommon('darkMode') : tCommon('lightMode'),\n language: tCommon('language'),\n currentLocale: localeMeta?.nativeName ?? currentLocale,\n localeFlag: resolveFlag(currentLocale),\n actions: tCommon('actions'),\n }}\n {...(settingsModal ? { profileDrawer: settingsModal } : {})}\n >\n {children}\n </PlatformShell>\n )\n}\n"]}
@@ -1,18 +1,17 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkI2NZGVBG_js = require('./chunk-I2NZGVBG.js');
5
- var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
4
+ var chunkAWDH6WNA_js = require('./chunk-AWDH6WNA.js');
6
5
  var chunkS7KHTUHA_js = require('./chunk-S7KHTUHA.js');
6
+ var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
7
7
  var react = require('react');
8
8
  var outline = require('@heroicons/react/24/outline');
9
- var client = require('@datatechsolutions/windsock/client');
10
9
  var i18n = require('@datatechsolutions/shared-domain/i18n');
11
10
  var jsxRuntime = require('react/jsx-runtime');
12
11
 
13
12
  var PlatformStateContext = react.createContext(null);
14
13
  function PlatformStateProvider({ children, normalizeRole }) {
15
- const { user } = client.useAuth();
14
+ const { user } = chunkAWDH6WNA_js.useAuth();
16
15
  const state = react.useMemo(() => {
17
16
  const organizationId = user?.organizationId ?? "";
18
17
  const actor = user ? {
@@ -34,7 +33,7 @@ function usePlatformState() {
34
33
  }
35
34
  function resolveFlag(locale) {
36
35
  const code = locale === "pt-BR" ? "br" : locale;
37
- return chunkI2NZGVBG_js.LOCALE_FLAGS?.[code];
36
+ return chunkAWDH6WNA_js.LOCALE_FLAGS?.[code];
38
37
  }
39
38
  function PlatformAppShell({
40
39
  appName,
@@ -50,12 +49,12 @@ function PlatformAppShell({
50
49
  children
51
50
  }) {
52
51
  const tCommon = chunkYXN2K77G_js.useTranslations("common");
53
- const { user, status, logout } = client.useAuth();
52
+ const { user, status, logout } = chunkAWDH6WNA_js.useAuth();
54
53
  usePlatformState();
55
- const { resolvedTheme, setTheme, dockPosition, dockAutoHide, dockEnabled } = client.usePlatformPreferences();
54
+ const { resolvedTheme, setTheme, dockPosition, dockAutoHide, dockEnabled } = chunkAWDH6WNA_js.usePlatformPreferences();
56
55
  const pathname = chunkS7KHTUHA_js.usePathname();
57
56
  const router = chunkS7KHTUHA_js.useRouter();
58
- const { history, openHistory } = chunkI2NZGVBG_js.useNotifications();
57
+ const { history, openHistory } = chunkAWDH6WNA_js.useNotifications();
59
58
  const currentLocale = chunkYXN2K77G_js.useLocale();
60
59
  const localeMeta = i18n.LANGUAGE_META[currentLocale];
61
60
  const items = react.useMemo(() => navigationItems.filter((item) => {
@@ -83,7 +82,7 @@ function PlatformAppShell({
83
82
  organizationId: user.organizationId ?? null
84
83
  } : null;
85
84
  return /* @__PURE__ */ jsxRuntime.jsx(
86
- chunkI2NZGVBG_js.PlatformShell,
85
+ chunkAWDH6WNA_js.PlatformShell,
87
86
  {
88
87
  items,
89
88
  launchpadPageOrder: pageOrder,
@@ -128,5 +127,5 @@ function PlatformAppShell({
128
127
  exports.PlatformAppShell = PlatformAppShell;
129
128
  exports.PlatformStateProvider = PlatformStateProvider;
130
129
  exports.usePlatformState = usePlatformState;
131
- //# sourceMappingURL=chunk-3JJWPOK6.js.map
132
- //# sourceMappingURL=chunk-3JJWPOK6.js.map
130
+ //# sourceMappingURL=chunk-5I7F7KZ6.js.map
131
+ //# sourceMappingURL=chunk-5I7F7KZ6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/platform-state-provider.tsx","../src/platform/app-shell.tsx"],"names":["createContext","useAuth","useMemo","useContext","LOCALE_FLAGS","useTranslations","usePlatformPreferences","usePathname","useRouter","useNotifications","useLocale","LANGUAGE_META","useCallback","jsx","PlatformShell","RectangleStackIcon","HomeIcon"],"mappings":"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","file":"chunk-5I7F7KZ6.js","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useAuth, type AuthUser } from '../_auth'\n\ntype PlatformState = {\n currentOrganizationId: string\n actor: AuthUser | null\n}\n\nconst PlatformStateContext = createContext<PlatformState | null>(null)\n\nexport type PlatformStateProviderProps = {\n children: ReactNode\n /**\n * Function that converts a JWT role claim to the app's canonical role\n * union (the same `normalizePlatformRole` produced by\n * `createPlatformRbac()` in this app). Lifted out as a prop because\n * each consuming app uses its own role enum.\n */\n normalizeRole: (input: unknown) => string\n}\n\nexport function PlatformStateProvider({ children, normalizeRole }: PlatformStateProviderProps) {\n const { user } = useAuth()\n\n const state = useMemo<PlatformState>(() => {\n const organizationId = user?.organizationId ?? ''\n\n const actor: AuthUser | null = user\n ? {\n ...user,\n role: normalizeRole(user.role),\n organizationId,\n }\n : null\n\n return {\n currentOrganizationId: organizationId,\n actor,\n }\n }, [user, normalizeRole])\n\n return (\n <PlatformStateContext.Provider value={state}>\n {children}\n </PlatformStateContext.Provider>\n )\n}\n\nexport function usePlatformState() {\n const context = useContext(PlatformStateContext)\n if (!context) throw new Error('usePlatformState must be used inside PlatformStateProvider')\n return context\n}\n","import { useCallback, useMemo, type ComponentType, type ReactNode } from 'react'\nimport { RectangleStackIcon, HomeIcon } from '@heroicons/react/24/outline'\nimport { useAuth, usePlatformPreferences } from '../_auth'\nimport { LANGUAGE_META } from '@datatechsolutions/shared-domain/i18n'\nimport {\n PlatformShell,\n type NavigationItem,\n} from '@ui/index'\nimport { useNotifications } from '@ui/components/notifications'\nimport { useLocale, useTranslations } from '@ui/lib/i18n-context'\nimport { usePathname, useRouter } from '@ui/lib/router-context'\nimport { LOCALE_FLAGS } from '@ui/lib/locale-flags'\nimport { usePlatformState } from './platform-state-provider'\n\nfunction resolveFlag(locale: string): string | undefined {\n const code = locale === 'pt-BR' ? 'br' : locale\n return LOCALE_FLAGS?.[code as keyof typeof LOCALE_FLAGS]\n}\n\nexport type PlatformAppShellProps = {\n /** App display name (e.g. \"Astrlabe\"). */\n appName: string\n /** Tailwind gradient classes for the shell branding (e.g. \"from-sky-500 to-indigo-600\"). */\n appGradient: string\n /** Branded logo node rendered inside the flyout trigger. */\n appLogo: ReactNode\n /**\n * Optional app icon for the branded loader (defaults to the platform's\n * RectangleStackIcon if omitted).\n */\n appIcon?: ReactNode\n /**\n * Optional override for the dock dashboard icon (defaults to HomeIcon).\n */\n dashboardIcon?: ComponentType<{ className?: string }>\n\n /** App-specific navigation items already pre-translated. */\n navigationItems: NavigationItem[]\n /** Custom ordering of launchpad page tiles. */\n pageOrder: string[]\n /**\n * Map of navigation/module ID → required permission name. The shell\n * filters `navigationItems` so that any item whose ID has an entry here\n * is hidden unless `hasPermission` returns true for the listed permission.\n */\n modulePermissions: Record<string, string>\n /**\n * Permission predicate, typically `(p) => can(actor, p)` from each app's\n * `createPlatformRbac()` factory.\n */\n hasPermission: (permission: string) => boolean\n\n /**\n * Optional settings/profile drawer content (e.g. an app-specific\n * `<SettingsModal>`). Receives the open state + close handler the shell\n * manages internally so the drawer renders inside the shell chrome.\n */\n settingsModal?: (props: { open: boolean; onClose: () => void }) => ReactNode\n\n children: ReactNode\n}\n\n/**\n * Cross-app platform shell — wires `<PlatformShell>` from ui to windsock's\n * auth + preferences hooks and to ui's i18n/router contexts. Each app\n * passes its own logo, gradient, navigation, and permission predicate; the\n * rest of the chrome (header, dock, flyout, sign-out confirm modal) is\n * shared.\n */\nexport function PlatformAppShell({\n appName,\n appGradient,\n appLogo,\n appIcon,\n dashboardIcon,\n navigationItems,\n pageOrder,\n modulePermissions,\n hasPermission,\n settingsModal,\n children,\n}: PlatformAppShellProps) {\n const tCommon = useTranslations('common')\n const { user, status, logout } = useAuth()\n // Validate the platform-state provider is mounted above this shell;\n // the actor itself isn't read here, but the same provider feeds children.\n usePlatformState()\n const { resolvedTheme, setTheme, dockPosition, dockAutoHide, dockEnabled } = usePlatformPreferences()\n const pathname = usePathname()\n const router = useRouter()\n const { history, openHistory } = useNotifications()\n const currentLocale = useLocale()\n const localeMeta = LANGUAGE_META[currentLocale as keyof typeof LANGUAGE_META]\n\n const items = useMemo(() => navigationItems.filter((item) => {\n const permission = modulePermissions[item.id]\n if (!permission) return true\n return hasPermission(permission)\n }), [navigationItems, modulePermissions, hasPermission])\n\n const handleSignOut = useCallback(() => { void logout('/login') }, [logout])\n const handleToggleTheme = useCallback(\n () => { setTheme(resolvedTheme === 'dark' ? 'light' : 'dark') },\n [resolvedTheme, setTheme],\n )\n const handleNavigate = useCallback((href: string) => router.push(href), [router])\n const handlePrefetch = useCallback((href: string) => router.prefetch(href), [router])\n\n const shellUser = user\n ? {\n name: user.name ?? null,\n email: user.email ?? null,\n image: user.image ?? null,\n role: user.role ?? null,\n permissions: user.permissions as string[] | undefined,\n organizationId: user.organizationId ?? null,\n }\n : null\n\n return (\n <PlatformShell\n items={items}\n launchpadPageOrder={pageOrder}\n user={shellUser}\n authStatus={status}\n onSignOut={handleSignOut}\n dockPosition={dockPosition}\n dockAutoHide={dockAutoHide}\n dockEnabled={dockEnabled}\n resolvedTheme={resolvedTheme}\n onToggleTheme={handleToggleTheme}\n pathname={pathname}\n onNavigate={handleNavigate}\n onPrefetch={handlePrefetch}\n appName={appName}\n appIcon={appIcon ?? <RectangleStackIcon className=\"h-full w-full\" />}\n appLogo={appLogo}\n appGradient={appGradient}\n dashboardIcon={dashboardIcon ?? HomeIcon}\n notificationCount={history.length}\n onNotifications={openHistory}\n labels={{\n home: tCommon('home'),\n profile: tCommon('profile'),\n signOut: tCommon('signOut'),\n signOutConfirmTitle: tCommon('signOutConfirmTitle'),\n cancel: tCommon('cancel'),\n notifications: tCommon('notifications'),\n theme: tCommon('theme'),\n currentTheme: resolvedTheme === 'dark' ? tCommon('darkMode') : tCommon('lightMode'),\n language: tCommon('language'),\n currentLocale: localeMeta?.nativeName ?? currentLocale,\n localeFlag: resolveFlag(currentLocale),\n actions: tCommon('actions'),\n }}\n {...(settingsModal ? { profileDrawer: settingsModal } : {})}\n >\n {children}\n </PlatformShell>\n )\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import { DatasourceFormModal } from './chunk-5RM6NGZ6.mjs';
3
- import { useSubworkflowStore, SaveStatusBadge, WorkflowListBar, NodePalette, AutoSaveWorkspace, AgentModal, PipelineSettingsModal, SubworkflowModal, RunPanel, RunInputDialog, PreviewPanel } from './chunk-2WXRRQM3.mjs';
2
+ import { DatasourceFormModal } from './chunk-UHMAKUON.mjs';
3
+ import { useSubworkflowStore, SaveStatusBadge, WorkflowListBar, NodePalette, AutoSaveWorkspace, AgentModal, PipelineSettingsModal, SubworkflowModal, RunPanel, RunInputDialog, PreviewPanel } from './chunk-2MJAHST4.mjs';
4
4
  import { validateWorkflowGraph } from './chunk-LEXBTVGM.mjs';
5
- import { useWorkflowStore, useModalStore, WorkflowBuilderProvider } from './chunk-PCYL4MII.mjs';
6
- import { useNotifications, PageErrorState, PageEmptyState, CopyableId, Button, DynamicIslandConfirm } from './chunk-JN6IL6OH.mjs';
5
+ import { useWorkflowStore, useModalStore, WorkflowBuilderProvider } from './chunk-OASC7NYV.mjs';
6
+ import { useNotifications, PageErrorState, PageEmptyState, CopyableId, Button, DynamicIslandConfirm } from './chunk-NOHHZ6FM.mjs';
7
+ import { executeWorkflow, getWorkflowById, getAgentConfigsWithPrompts, getAgentModels, getAgentToolDefinitions, getAgentRules, getDatasources, listModelProviderConnections, getAgentTools, getWorkflows, saveWorkflowDraft, publishWorkflow, createWorkflow, deleteWorkflow, updateAgentTool, updateAgentRule, createDatasource, getDatasourceSchema, getDatasourceTables, updateAgentConfig, createAgentConfig, updateWorkflowSettings, getWorkflowRuns, buildAuthenticatedApiUrl } from './chunk-RHRJXK5R.mjs';
7
8
  import { useLocale, useTranslations } from './chunk-7VJ7CMMT.mjs';
8
- import { executeWorkflow, getWorkflowById, getAgentConfigsWithPrompts, getAgentModels, getAgentToolDefinitions, getAgentRules, getDatasources, listModelProviderConnections, getAgentTools, getWorkflows, saveWorkflowDraft, publishWorkflow, createWorkflow, deleteWorkflow, updateAgentTool, updateAgentRule, createDatasource, getDatasourceSchema, getDatasourceTables, updateAgentConfig, createAgentConfig, updateWorkflowSettings, getWorkflowRuns, buildAuthenticatedApiUrl } from './chunk-ZV5EZXXO.mjs';
9
9
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
10
10
  import { useNavigate } from 'react-router';
11
11
  import { ChartBarIcon, StopIcon, PlayIcon, DocumentCheckIcon } from '@heroicons/react/24/outline';
@@ -937,5 +937,5 @@ function AgentsWorkspace({ workflowId, messages }) {
937
937
  }
938
938
 
939
939
  export { AgentsWorkspace, applyWorkflowExecutionEventToStore, resetWorkflowRunPresentation, useRunEvents, useWorkflowExecution, useWorkflowRunPresentation };
940
- //# sourceMappingURL=chunk-BR2GAZKG.mjs.map
941
- //# sourceMappingURL=chunk-BR2GAZKG.mjs.map
940
+ //# sourceMappingURL=chunk-6V3DUBOZ.mjs.map
941
+ //# sourceMappingURL=chunk-6V3DUBOZ.mjs.map