@flamingo-stack/openframe-frontend-core 0.0.739 → 0.0.741

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 (197) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-ENCAIAMY.cjs → chunk-4XL4YEZM.cjs} +3 -3
  3. package/dist/{chunk-FL6UO7IR.cjs → chunk-5SVOGLNK.cjs} +2 -2
  4. package/dist/{chunk-WFPCCBOM.cjs → chunk-7AM3AFM4.cjs} +10 -10
  5. package/dist/{chunk-S2CA5WE4.cjs → chunk-CWRVTQUO.cjs} +9 -1
  6. package/dist/{chunk-KHXZFLIN.cjs → chunk-DKOLQPE7.cjs} +8 -2
  7. package/dist/{chunk-UXFJXIUT.cjs → chunk-EKGL5K5K.cjs} +2 -2
  8. package/dist/{chunk-DTLHY2ZF.cjs → chunk-FQN6STIM.cjs} +12 -155
  9. package/dist/{chunk-V2ZFH42N.cjs → chunk-HYBMADYO.cjs} +3 -3
  10. package/dist/{chunk-NX6JQT25.cjs → chunk-I6UE6YVM.cjs} +4 -4
  11. package/dist/{chunk-SB4VWA5V.cjs → chunk-IK2RJUEA.cjs} +2118 -268
  12. package/dist/{chunk-CUDTMCXK.cjs → chunk-ITPEFCQ2.cjs} +13 -13
  13. package/dist/{chunk-WMKNZI4G.cjs → chunk-JFS6TZDX.cjs} +22 -22
  14. package/dist/{chunk-RGFT3P3L.cjs → chunk-LZ6NOVXX.cjs} +55 -55
  15. package/dist/{chunk-TF7J6VXG.cjs → chunk-QEUGYHFB.cjs} +9 -9
  16. package/dist/{chunk-II4QMH26.cjs → chunk-STEJZPIO.cjs} +3 -3
  17. package/dist/{chunk-UI3HROSI.cjs → chunk-XJ36TEGE.cjs} +33 -33
  18. package/dist/{chunk-UYP3G6PB.cjs → chunk-YQ37ZCD2.cjs} +2 -2
  19. package/dist/{chunk-Q7GG3WC5.cjs → chunk-ZJPDGVA6.cjs} +5 -5
  20. package/dist/{chunk-EGN4I5Q7.cjs → chunk-ZYOS7LVQ.cjs} +134 -46
  21. package/dist/{cloud-tenants-QSFSO3PA.cjs → cloud-tenants-MVJK52I2.cjs} +13 -13
  22. package/dist/components/case-studies/index.cjs +11 -11
  23. package/dist/components/chat/index.cjs +2 -2
  24. package/dist/components/contact/index.cjs +4 -4
  25. package/dist/components/docs/index.cjs +7 -7
  26. package/dist/components/embeds/index.cjs +4 -4
  27. package/dist/components/faq/index.cjs +5 -5
  28. package/dist/components/features/capability-explorer.d.ts +9 -2
  29. package/dist/components/features/capability-explorer.d.ts.map +1 -1
  30. package/dist/components/features/capability-explorer.js +113 -6
  31. package/dist/components/features/index.cjs +141 -3
  32. package/dist/components/features/index.d.ts +1 -0
  33. package/dist/components/features/index.d.ts.map +1 -1
  34. package/dist/components/features/index.js +1 -0
  35. package/dist/components/features/scripts/execution-cells.d.ts +65 -0
  36. package/dist/components/features/scripts/execution-cells.d.ts.map +1 -0
  37. package/dist/components/features/scripts/execution-cells.js +75 -0
  38. package/dist/components/features/scripts/execution-status.d.ts +48 -0
  39. package/dist/components/features/scripts/execution-status.d.ts.map +1 -0
  40. package/dist/components/features/scripts/execution-status.js +15 -0
  41. package/dist/components/features/scripts/index.d.ts +20 -0
  42. package/dist/components/features/scripts/index.d.ts.map +1 -0
  43. package/dist/components/features/scripts/index.js +59 -0
  44. package/dist/components/features/scripts/schedule-form/index.d.ts +18 -0
  45. package/dist/components/features/scripts/schedule-form/index.d.ts.map +1 -0
  46. package/dist/components/features/scripts/schedule-form/index.js +84 -0
  47. package/dist/components/features/scripts/schedule-form/schedule-enums.d.ts +24 -0
  48. package/dist/components/features/scripts/schedule-form/schedule-enums.d.ts.map +1 -0
  49. package/dist/components/features/scripts/schedule-form/schedule-enums.js +18 -0
  50. package/dist/components/features/scripts/schedule-form/schedule-form-fields.d.ts +57 -0
  51. package/dist/components/features/scripts/schedule-form/schedule-form-fields.d.ts.map +1 -0
  52. package/dist/components/features/scripts/schedule-form/schedule-form-fields.js +169 -0
  53. package/dist/components/features/scripts/schedule-form/schedule-form-types.d.ts +138 -0
  54. package/dist/components/features/scripts/schedule-form/schedule-form-types.d.ts.map +1 -0
  55. package/dist/components/features/scripts/schedule-form/schedule-form-types.js +72 -0
  56. package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts +54 -0
  57. package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts.map +1 -0
  58. package/dist/components/features/scripts/schedule-form/schedule-interval-input.js +60 -0
  59. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts +29 -0
  60. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts.map +1 -0
  61. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.js +124 -0
  62. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.d.ts +52 -0
  63. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.d.ts.map +1 -0
  64. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.js +244 -0
  65. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.d.ts +35 -0
  66. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.d.ts.map +1 -0
  67. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.js +58 -0
  68. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.d.ts +25 -0
  69. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.d.ts.map +1 -0
  70. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.js +66 -0
  71. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.d.ts +77 -0
  72. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.d.ts.map +1 -0
  73. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.js +262 -0
  74. package/dist/components/features/scripts/schedule-form/schedule-timing.d.ts +288 -0
  75. package/dist/components/features/scripts/schedule-form/schedule-timing.d.ts.map +1 -0
  76. package/dist/components/features/scripts/schedule-form/schedule-timing.js +165 -0
  77. package/dist/components/features/scripts/script-cells.d.ts +11 -0
  78. package/dist/components/features/scripts/script-cells.d.ts.map +1 -0
  79. package/dist/components/features/scripts/script-cells.js +19 -0
  80. package/dist/components/features/scripts/script-executions-table.d.ts +58 -0
  81. package/dist/components/features/scripts/script-executions-table.d.ts.map +1 -0
  82. package/dist/components/features/scripts/script-executions-table.js +88 -0
  83. package/dist/components/features/scripts/script-schedules-table.d.ts +38 -0
  84. package/dist/components/features/scripts/script-schedules-table.d.ts.map +1 -0
  85. package/dist/components/features/scripts/script-schedules-table.js +71 -0
  86. package/dist/components/features/scripts/script-shell-badge.d.ts +9 -0
  87. package/dist/components/features/scripts/script-shell-badge.d.ts.map +1 -0
  88. package/dist/components/features/scripts/script-shell-badge.js +15 -0
  89. package/dist/components/features/scripts/scripts-table-columns.d.ts +162 -0
  90. package/dist/components/features/scripts/scripts-table-columns.d.ts.map +1 -0
  91. package/dist/components/features/scripts/scripts-table-columns.js +69 -0
  92. package/dist/components/features/scripts/scripts-table-shared.d.ts +19 -0
  93. package/dist/components/features/scripts/scripts-table-shared.d.ts.map +1 -0
  94. package/dist/components/features/scripts/scripts-table-shared.js +35 -0
  95. package/dist/components/features/scripts/scripts-table.d.ts +40 -0
  96. package/dist/components/features/scripts/scripts-table.d.ts.map +1 -0
  97. package/dist/components/features/scripts/scripts-table.js +84 -0
  98. package/dist/components/features/scripts/scripts-tabs.d.ts +5 -0
  99. package/dist/components/features/scripts/scripts-tabs.d.ts.map +1 -0
  100. package/dist/components/features/scripts/scripts-tabs.js +10 -0
  101. package/dist/components/features/scripts/shell-types.d.ts +13 -0
  102. package/dist/components/features/scripts/shell-types.d.ts.map +1 -0
  103. package/dist/components/features/scripts/shell-types.js +21 -0
  104. package/dist/components/help-center-pages/index.cjs +53 -53
  105. package/dist/components/index.cjs +178 -34
  106. package/dist/components/meeting-scheduler/index.cjs +17 -17
  107. package/dist/components/navigation/index.cjs +6 -6
  108. package/dist/components/onboarding-guides/index.cjs +5 -5
  109. package/dist/components/product-demo/fixtures/scripts.d.ts +34 -0
  110. package/dist/components/product-demo/fixtures/scripts.d.ts.map +1 -0
  111. package/dist/components/product-demo/fixtures/scripts.js +123 -0
  112. package/dist/components/product-demo/fixtures/shared.d.ts +8 -0
  113. package/dist/components/product-demo/fixtures/shared.d.ts.map +1 -1
  114. package/dist/components/product-demo/fixtures/shared.js +7 -1
  115. package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -1
  116. package/dist/components/product-demo/fixtures/software-update.js +1 -5
  117. package/dist/components/product-demo/index.cjs +16 -13
  118. package/dist/components/product-demo/product-screen.d.ts.map +1 -1
  119. package/dist/components/product-demo/product-screen.js +2 -1
  120. package/dist/components/product-demo/registry.d.ts.map +1 -1
  121. package/dist/components/product-demo/registry.js +2 -1
  122. package/dist/components/product-demo/screen-keys.cjs +2 -1
  123. package/dist/components/product-demo/screen-keys.d.ts +1 -0
  124. package/dist/components/product-demo/screen-keys.d.ts.map +1 -1
  125. package/dist/components/product-demo/screen-keys.js +2 -1
  126. package/dist/components/product-demo/screens/scripts.d.ts +11 -0
  127. package/dist/components/product-demo/screens/scripts.d.ts.map +1 -0
  128. package/dist/components/product-demo/screens/scripts.js +130 -0
  129. package/dist/components/shared/legal-document/index.d.ts +2 -1
  130. package/dist/components/shared/legal-document/index.d.ts.map +1 -1
  131. package/dist/components/shared/legal-document/index.js +10 -2
  132. package/dist/components/shared/legal-document/legal-document-page.d.ts +35 -23
  133. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  134. package/dist/components/shared/legal-document/legal-document-page.js +27 -10
  135. package/dist/components/shared/legal-document/use-legal-docs.d.ts +7 -3
  136. package/dist/components/shared/legal-document/use-legal-docs.d.ts.map +1 -1
  137. package/dist/components/shared/legal-document/use-legal-docs.js +7 -0
  138. package/dist/components/shared/legal-document/use-legal-documents.d.ts +31 -0
  139. package/dist/components/shared/legal-document/use-legal-documents.d.ts.map +1 -0
  140. package/dist/components/shared/legal-document/use-legal-documents.js +67 -0
  141. package/dist/components/tickets/index.cjs +8 -8
  142. package/dist/components/ui/index.cjs +3 -3
  143. package/dist/{devices-C7XLWJFC.cjs → devices-W3S7Q2PG.cjs} +9 -9
  144. package/dist/index.cjs +150 -8
  145. package/dist/{knowledge-3QKWTOE7.cjs → knowledge-AIYQ4FC3.cjs} +7 -7
  146. package/dist/{logs-JXD75NR4.cjs → logs-7SHJ2ARE.cjs} +25 -25
  147. package/dist/{policies-ZPN53PFQ.cjs → policies-EIZJ5SUP.cjs} +10 -10
  148. package/dist/{remote-session-DNFZ5OLY.cjs → remote-session-BZMNE6D2.cjs} +5 -5
  149. package/dist/scripts-J2FWC7E4.cjs +2112 -0
  150. package/dist/{software-update-CRSIBS3K.cjs → software-update-QAMNASVF.cjs} +14 -18
  151. package/dist/{tickets-board-CKZRB6YV.cjs → tickets-board-CEDHD3KB.cjs} +17 -17
  152. package/dist/utils/index.cjs +8 -0
  153. package/dist/utils/index.d.ts +1 -0
  154. package/dist/utils/index.d.ts.map +1 -1
  155. package/dist/utils/index.js +1 -0
  156. package/dist/utils/legal-documents.d.ts +18 -0
  157. package/dist/utils/legal-documents.d.ts.map +1 -0
  158. package/dist/utils/legal-documents.js +8 -0
  159. package/package.json +1 -1
  160. package/src/components/features/capability-explorer.tsx +134 -7
  161. package/src/components/features/index.ts +1 -0
  162. package/src/components/features/scripts/execution-cells.tsx +149 -0
  163. package/src/components/features/scripts/execution-status.ts +42 -0
  164. package/src/components/features/scripts/index.ts +42 -0
  165. package/src/components/features/scripts/schedule-form/index.ts +59 -0
  166. package/src/components/features/scripts/schedule-form/schedule-enums.ts +26 -0
  167. package/src/components/features/scripts/schedule-form/schedule-form-fields.tsx +249 -0
  168. package/src/components/features/scripts/schedule-form/schedule-form-types.ts +189 -0
  169. package/src/components/features/scripts/schedule-form/schedule-interval-input.tsx +121 -0
  170. package/src/components/features/scripts/schedule-form/schedule-offline-fields.tsx +218 -0
  171. package/src/components/features/scripts/schedule-form/schedule-script-picker-card.tsx +321 -0
  172. package/src/components/features/scripts/schedule-form/schedule-script-search-field.tsx +115 -0
  173. package/src/components/features/scripts/schedule-form/schedule-scripts-field.tsx +97 -0
  174. package/src/components/features/scripts/schedule-form/schedule-timing-fields.tsx +482 -0
  175. package/src/components/features/scripts/schedule-form/schedule-timing.ts +484 -0
  176. package/src/components/features/scripts/script-cells.tsx +29 -0
  177. package/src/components/features/scripts/script-executions-table.tsx +145 -0
  178. package/src/components/features/scripts/script-schedules-table.tsx +113 -0
  179. package/src/components/features/scripts/script-shell-badge.tsx +25 -0
  180. package/src/components/features/scripts/scripts-table-columns.ts +95 -0
  181. package/src/components/features/scripts/scripts-table-shared.tsx +43 -0
  182. package/src/components/features/scripts/scripts-table.tsx +124 -0
  183. package/src/components/features/scripts/scripts-tabs.ts +11 -0
  184. package/src/components/features/scripts/shell-types.ts +26 -0
  185. package/src/components/product-demo/fixtures/scripts.ts +186 -0
  186. package/src/components/product-demo/fixtures/shared.ts +7 -0
  187. package/src/components/product-demo/fixtures/software-update.ts +1 -7
  188. package/src/components/product-demo/product-screen.tsx +3 -1
  189. package/src/components/product-demo/registry.ts +1 -0
  190. package/src/components/product-demo/screen-keys.ts +1 -0
  191. package/src/components/product-demo/screens/scripts.tsx +192 -0
  192. package/src/components/shared/legal-document/index.ts +8 -0
  193. package/src/components/shared/legal-document/legal-document-page.tsx +83 -44
  194. package/src/components/shared/legal-document/use-legal-docs.ts +18 -3
  195. package/src/components/shared/legal-document/use-legal-documents.ts +113 -0
  196. package/src/utils/index.ts +1 -0
  197. package/src/utils/legal-documents.ts +21 -0
@@ -107,7 +107,9 @@ var _chunkYUMFVQINcjs = require('./chunk-YUMFVQIN.cjs');
107
107
 
108
108
 
109
109
 
110
- var _chunkS2CA5WE4cjs = require('./chunk-S2CA5WE4.cjs');
110
+
111
+
112
+ var _chunkCWRVTQUOcjs = require('./chunk-CWRVTQUO.cjs');
111
113
 
112
114
 
113
115
 
@@ -142,6 +144,7 @@ var _chunkBV5WZVOPcjs = require('./chunk-BV5WZVOP.cjs');
142
144
 
143
145
 
144
146
 
147
+
145
148
  var _chunkGABDE3FMcjs = require('./chunk-GABDE3FM.cjs');
146
149
 
147
150
 
@@ -188,6 +191,15 @@ var _chunkRNZYBODMcjs = require('./chunk-RNZYBODM.cjs');
188
191
  var _chunkJQEOUB5Fcjs = require('./chunk-JQEOUB5F.cjs');
189
192
 
190
193
 
194
+ var _chunkTPKKRHUMcjs = require('./chunk-TPKKRHUM.cjs');
195
+
196
+
197
+ var _chunkNIVJEJSGcjs = require('./chunk-NIVJEJSG.cjs');
198
+
199
+
200
+ var _chunkTRUW6DDAcjs = require('./chunk-TRUW6DDA.cjs');
201
+
202
+
191
203
  var _chunkTG6OBLADcjs = require('./chunk-TG6OBLAD.cjs');
192
204
 
193
205
 
@@ -224,6 +236,9 @@ var _chunk7GO2BPMRcjs = require('./chunk-7GO2BPMR.cjs');
224
236
  var _chunkFO6DOP6Mcjs = require('./chunk-FO6DOP6M.cjs');
225
237
 
226
238
 
239
+ var _chunkMCQY746Mcjs = require('./chunk-MCQY746M.cjs');
240
+
241
+
227
242
  var _chunk3JLYHTN6cjs = require('./chunk-3JLYHTN6.cjs');
228
243
 
229
244
 
@@ -257,6 +272,9 @@ var _chunkPTK7GOIIcjs = require('./chunk-PTK7GOII.cjs');
257
272
  var _chunkTTVGV2DYcjs = require('./chunk-TTVGV2DY.cjs');
258
273
 
259
274
 
275
+ var _chunkMT45XX7Icjs = require('./chunk-MT45XX7I.cjs');
276
+
277
+
260
278
  var _chunk7O43PYUZcjs = require('./chunk-7O43PYUZ.cjs');
261
279
 
262
280
 
@@ -389,6 +407,9 @@ var _chunk4TUSPDNScjs = require('./chunk-4TUSPDNS.cjs');
389
407
  var _chunkHFNBMV5Mcjs = require('./chunk-HFNBMV5M.cjs');
390
408
 
391
409
 
410
+ var _chunkSAPD55KQcjs = require('./chunk-SAPD55KQ.cjs');
411
+
412
+
392
413
  var _chunkKFICYKQQcjs = require('./chunk-KFICYKQQ.cjs');
393
414
 
394
415
 
@@ -4325,7 +4346,7 @@ function AdminFormDrawer({
4325
4346
  "form",
4326
4347
  {
4327
4348
  id: formId,
4328
- ..._chunkS2CA5WE4cjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
4349
+ ..._chunkCWRVTQUOcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
4329
4350
  className: "flex flex-col gap-[var(--spacing-system-lf)]",
4330
4351
  onSubmit: (e) => {
4331
4352
  e.preventDefault();
@@ -4435,7 +4456,7 @@ function AdminFormModal({
4435
4456
  "form",
4436
4457
  {
4437
4458
  id: formId,
4438
- ..._chunkS2CA5WE4cjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
4459
+ ..._chunkCWRVTQUOcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
4439
4460
  className: "flex min-h-0 flex-1 flex-col",
4440
4461
  onSubmit: (e) => {
4441
4462
  e.preventDefault();
@@ -5711,7 +5732,7 @@ function EmbedViewerFrame({
5711
5732
  const controllerRef = _react.useRef.call(void 0, null);
5712
5733
  _react.useEffect.call(void 0, () => {
5713
5734
  if (!fullscreenControl) return void 0;
5714
- const controller = new (0, _chunkS2CA5WE4cjs.FullscreenSwitchController)({
5735
+ const controller = new (0, _chunkCWRVTQUOcjs.FullscreenSwitchController)({
5715
5736
  target: () => frameRef.current,
5716
5737
  onFullscreenChange: setIsFullscreen
5717
5738
  });
@@ -7636,7 +7657,7 @@ var processShortcodes = (content) => {
7636
7657
  try {
7637
7658
  const urlObj = new URL(url);
7638
7659
  const hostname = urlObj.hostname.toLowerCase();
7639
- const hostIs = (domain) => _chunkS2CA5WE4cjs.hostMatches.call(void 0, hostname, domain);
7660
+ const hostIs = (domain) => _chunkCWRVTQUOcjs.hostMatches.call(void 0, hostname, domain);
7640
7661
  const isYouTubeVideo = hostIs("youtube.com") && urlObj.searchParams.has("v") || hostIs("youtu.be");
7641
7662
  if (isYouTubeVideo || hostIs("reddit.com") || hostIs("twitter.com") || hostIs("x.com") || hostIs("figma.com")) {
7642
7663
  return match;
@@ -9771,10 +9792,10 @@ var OSTypeBadge = ({
9771
9792
  if (!osType) {
9772
9793
  return labelOnly ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "text-ods-text-secondary", className), children: "Unknown" }) : null;
9773
9794
  }
9774
- const normalized = _chunkS2CA5WE4cjs.normalizeOSType.call(void 0, osType);
9795
+ const normalized = _chunkCWRVTQUOcjs.normalizeOSType.call(void 0, osType);
9775
9796
  if (!normalized && !labelOnly) return null;
9776
- const label = _chunkS2CA5WE4cjs.getOSLabel.call(void 0, osType);
9777
- const IconComponent = _chunkS2CA5WE4cjs.getOSIcon.call(void 0, osType);
9797
+ const label = _chunkCWRVTQUOcjs.getOSLabel.call(void 0, osType);
9798
+ const IconComponent = _chunkCWRVTQUOcjs.getOSIcon.call(void 0, osType);
9778
9799
  if (iconOnly && IconComponent) {
9779
9800
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, IconComponent, { className: _chunk3ATAYP36cjs.cn.call(void 0, iconSize, "text-ods-text-secondary", className) });
9780
9801
  }
@@ -10006,7 +10027,7 @@ function ComplianceLogo({
10006
10027
  fallback = null,
10007
10028
  className
10008
10029
  }) {
10009
- const standard = _chunkS2CA5WE4cjs.complianceStandardForName.call(void 0, ...names);
10030
+ const standard = _chunkCWRVTQUOcjs.complianceStandardForName.call(void 0, ...names);
10010
10031
  if (!standard) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: fallback });
10011
10032
  const Official = standard.logo ? COMPLIANCE_LOGOS[standard.logo] : null;
10012
10033
  return Official ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -11623,7 +11644,7 @@ function TableHeader({
11623
11644
  onFilterChange
11624
11645
  }
11625
11646
  ),
11626
- column.hint ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2CA5WE4cjs.InfoHint, { label: column.label, children: column.hint }) : null
11647
+ column.hint ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCWRVTQUOcjs.InfoHint, { label: column.label, children: column.hint }) : null
11627
11648
  ] })
11628
11649
  ) : (
11629
11650
  /* Non-filterable column — regular label with optional sort */
@@ -11649,7 +11670,7 @@ function TableHeader({
11649
11670
  hint exists, so a hint-less header keeps its DOM. */
11650
11671
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex min-w-0 items-start gap-[var(--spacing-system-xxs)]", children: [
11651
11672
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: TABLE_HEADER_LABEL_CLASS, children: column.label }),
11652
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2CA5WE4cjs.InfoHint, { label: column.label, children: column.hint })
11673
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCWRVTQUOcjs.InfoHint, { label: column.label, children: column.hint })
11653
11674
  ] })
11654
11675
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: TABLE_HEADER_LABEL_CLASS, children: column.label }),
11655
11676
  getSortIcon(column)
@@ -12990,7 +13011,7 @@ function HeaderCell({ header, sort, onSortChange }) {
12990
13011
  // child of the cell.
12991
13012
  _optionalChain([meta, 'optionalAccess', _234 => _234.hint]) ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-start gap-[var(--spacing-system-xxs)]", children: [
12992
13013
  filterTrigger,
12993
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2CA5WE4cjs.InfoHint, { label: resolveHeaderLabel(header), children: meta.hint })
13014
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCWRVTQUOcjs.InfoHint, { label: resolveHeaderLabel(header), children: meta.hint })
12994
13015
  ] }) : filterTrigger
12995
13016
  ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
12996
13017
  "div",
@@ -13015,7 +13036,7 @@ function HeaderCell({ header, sort, onSortChange }) {
13015
13036
  // centred on the row.
13016
13037
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex min-w-0 items-start gap-[var(--spacing-system-xxs)]", children: [
13017
13038
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderLabel, { header }),
13018
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2CA5WE4cjs.InfoHint, { label: resolveHeaderLabel(header), children: meta.hint })
13039
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCWRVTQUOcjs.InfoHint, { label: resolveHeaderLabel(header), children: meta.hint })
13019
13040
  ] })
13020
13041
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderLabel, { header }),
13021
13042
  canSort && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortIcon, { sorted: sortDir })
@@ -13234,7 +13255,7 @@ function PhoneInput({
13234
13255
  placeholder = "Phone Number (optional)",
13235
13256
  onKeyDown
13236
13257
  }) {
13237
- const { priority, others } = _react.useMemo.call(void 0, () => _chunkS2CA5WE4cjs.getCountryPhoneData.call(void 0, ), []);
13258
+ const { priority, others } = _react.useMemo.call(void 0, () => _chunkCWRVTQUOcjs.getCountryPhoneData.call(void 0, ), []);
13238
13259
  const selectedCountry = _react.useMemo.call(void 0,
13239
13260
  () => [...priority, ...others].find((c) => c.code === countryCode),
13240
13261
  [countryCode, priority, others]
@@ -13249,7 +13270,7 @@ function PhoneInput({
13249
13270
  _optionalChain([onValidationChange, 'optionalCall', _247 => _247(false)]);
13250
13271
  return;
13251
13272
  }
13252
- const invalid = !_chunkS2CA5WE4cjs.validatePhoneNumber.call(void 0, phone, countryCode);
13273
+ const invalid = !_chunkCWRVTQUOcjs.validatePhoneNumber.call(void 0, phone, countryCode);
13253
13274
  setIsInvalid(invalid);
13254
13275
  _optionalChain([onValidationChange, 'optionalCall', _248 => _248(invalid)]);
13255
13276
  },
@@ -16724,7 +16745,7 @@ var TRIAL_TERM_ICONS = {
16724
16745
  };
16725
16746
  var DEFAULT_TRIAL_TERMS = ["cancel", "length", "noContract"];
16726
16747
  function trialBenefits(trialDays, terms = DEFAULT_TRIAL_TERMS) {
16727
- const labels = _chunkS2CA5WE4cjs.trialLabels.call(void 0, trialDays);
16748
+ const labels = _chunkCWRVTQUOcjs.trialLabels.call(void 0, trialDays);
16728
16749
  return terms.flatMap((term) => {
16729
16750
  const label = labels[term];
16730
16751
  return label ? [{ icon: TRIAL_TERM_ICONS[term], label }] : [];
@@ -22264,14 +22285,14 @@ var MODEL_TOKEN_RATES_COPY = {
22264
22285
  empty: "No token rates are in effect right now."
22265
22286
  };
22266
22287
  function providerMark(providerType, stated, className) {
22267
- const Mark = _chunkFICJS5OAcjs.findIcon.call(void 0, _chunkS2CA5WE4cjs.aiProvider.call(void 0, providerType, { icon: stated }).icon);
22288
+ const Mark = _chunkFICJS5OAcjs.findIcon.call(void 0, _chunkCWRVTQUOcjs.aiProvider.call(void 0, providerType, { icon: stated }).icon);
22268
22289
  return Mark ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Mark, { className }) : void 0;
22269
22290
  }
22270
22291
  var PAD_X = "px-[var(--spacing-system-s)]";
22271
22292
  var ROW = "flex items-center gap-[var(--spacing-system-s)]";
22272
22293
  var NUMBER_CELL = "w-16 shrink-0 whitespace-nowrap text-right tabular-nums";
22273
22294
  function useProviderGroup(rates) {
22274
- const groups = _chunkS2CA5WE4cjs.groupTokenRatesByProvider.call(void 0, rates);
22295
+ const groups = _chunkCWRVTQUOcjs.groupTokenRatesByProvider.call(void 0, rates);
22275
22296
  const [picked, setPicked] = _react.useState.call(void 0, null);
22276
22297
  return { groups, group: _nullishCoalesce(groups.find((candidate) => candidate.providerType === picked), () => ( groups[0])), setPicked };
22277
22298
  }
@@ -22290,7 +22311,7 @@ function ProviderTabs({
22290
22311
  onValueChange,
22291
22312
  items: groups.map((candidate) => ({
22292
22313
  id: candidate.providerType,
22293
- label: _chunkS2CA5WE4cjs.tokenRateProviderLabel.call(void 0, candidate.providerType, _optionalChain([candidate, 'access', _432 => _432.rates, 'access', _433 => _433[0], 'optionalAccess', _434 => _434.providerLabel])),
22314
+ label: _chunkCWRVTQUOcjs.tokenRateProviderLabel.call(void 0, candidate.providerType, _optionalChain([candidate, 'access', _432 => _432.rates, 'access', _433 => _433[0], 'optionalAccess', _434 => _434.providerLabel])),
22294
22315
  icon: providerMark(candidate.providerType, _optionalChain([candidate, 'access', _435 => _435.rates, 'access', _436 => _436[0], 'optionalAccess', _437 => _437.providerIcon]), "size-full")
22295
22316
  })),
22296
22317
  className
@@ -22391,8 +22412,8 @@ function ModelTokenRatesTable({ rates }) {
22391
22412
  className: _chunk3ATAYP36cjs.cn.call(void 0, ROW, PAD_X, "py-[var(--spacing-system-xxs)] text-ods-text-primary text-h6"),
22392
22413
  children: [
22393
22414
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "rowheader", className: "min-w-0 flex-1 truncate", children: rate.displayName || rate.modelName }),
22394
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "cell", className: NUMBER_CELL, children: _chunkS2CA5WE4cjs.formatTokenRate.call(void 0, rate.inputTokenRate) }),
22395
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "cell", className: NUMBER_CELL, children: _chunkS2CA5WE4cjs.formatTokenRate.call(void 0, rate.outputTokenRate) })
22415
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "cell", className: NUMBER_CELL, children: _chunkCWRVTQUOcjs.formatTokenRate.call(void 0, rate.inputTokenRate) }),
22416
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "cell", className: NUMBER_CELL, children: _chunkCWRVTQUOcjs.formatTokenRate.call(void 0, rate.outputTokenRate) })
22396
22417
  ]
22397
22418
  },
22398
22419
  rate.modelName
@@ -22464,7 +22485,7 @@ function modelOption(rate) {
22464
22485
  return {
22465
22486
  label: rate.displayName || rate.modelName,
22466
22487
  value: rate.modelName,
22467
- description: _chunkS2CA5WE4cjs.tokenRateProviderLabel.call(void 0, rate.providerType, rate.providerLabel),
22488
+ description: _chunkCWRVTQUOcjs.tokenRateProviderLabel.call(void 0, rate.providerType, rate.providerLabel),
22468
22489
  icon: providerMark(rate.providerType, rate.providerIcon, "size-full text-ods-text-secondary")
22469
22490
  };
22470
22491
  }
@@ -22518,8 +22539,8 @@ function ModelTokenExchange({
22518
22539
  const [chosen, setChosen] = _react.useState.call(void 0, null);
22519
22540
  const balance = _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(chosen, () => ( defaultAmount)), () => ( _optionalChain([tokenPrice, 'optionalAccess', _438 => _438.tokens]))), () => ( MODEL_TOKEN_EXCHANGE_BALANCE));
22520
22541
  const max = Math.max(amountRange.max, balance, ...presets.map((preset) => preset.tokens));
22521
- const tokens = _chunkS2CA5WE4cjs.formatTokenAmount.call(void 0, balance);
22522
- const cost = _chunkS2CA5WE4cjs.tokenCost.call(void 0, balance, tokenPrice);
22542
+ const tokens = _chunkCWRVTQUOcjs.formatTokenAmount.call(void 0, balance);
22543
+ const cost = _chunkCWRVTQUOcjs.tokenCost.call(void 0, balance, tokenPrice);
22523
22544
  const balancePrice = cost === null ? null : _chunk7ZFCR7UYcjs.formatPrice.call(void 0, cost);
22524
22545
  const model = rate ? rate.displayName || rate.modelName : "";
22525
22546
  const options = models.map(modelOption);
@@ -22561,7 +22582,7 @@ function ModelTokenExchange({
22561
22582
  variant: preset.tokens === balance ? "accent" : "outline",
22562
22583
  size: "small",
22563
22584
  onClick: () => setChosen(preset.tokens),
22564
- children: copy.buy.preset(_chunkS2CA5WE4cjs.formatTokenAmount.call(void 0, preset.tokens), preset.label)
22585
+ children: copy.buy.preset(_chunkCWRVTQUOcjs.formatTokenAmount.call(void 0, preset.tokens), preset.label)
22565
22586
  },
22566
22587
  preset.label
22567
22588
  )) })
@@ -22580,7 +22601,7 @@ function ModelTokenExchange({
22580
22601
  const stated = _nullishCoalesce(models.find((option) => option.providerType === providerType), () => ( (_optionalChain([rate, 'optionalAccess', _439 => _439.providerType]) === providerType ? rate : null)));
22581
22602
  return {
22582
22603
  id: providerType,
22583
- name: _chunkS2CA5WE4cjs.tokenRateProviderLabel.call(void 0, providerType, _optionalChain([stated, 'optionalAccess', _440 => _440.providerLabel])),
22604
+ name: _chunkCWRVTQUOcjs.tokenRateProviderLabel.call(void 0, providerType, _optionalChain([stated, 'optionalAccess', _440 => _440.providerLabel])),
22584
22605
  icon: providerMark(providerType, _optionalChain([stated, 'optionalAccess', _441 => _441.providerIcon]), "size-8 text-ods-text-secondary")
22585
22606
  };
22586
22607
  }),
@@ -22618,7 +22639,7 @@ function ModelTokenExchange({
22618
22639
  {
22619
22640
  size: "plain",
22620
22641
  loading,
22621
- figure: _chunkS2CA5WE4cjs.formatTokenRate.call(void 0, _optionalChain([rate, 'optionalAccess', _446 => _446.inputTokenRate])),
22642
+ figure: _chunkCWRVTQUOcjs.formatTokenRate.call(void 0, _optionalChain([rate, 'optionalAccess', _446 => _446.inputTokenRate])),
22622
22643
  words: copy.charge.input
22623
22644
  }
22624
22645
  ),
@@ -22627,7 +22648,7 @@ function ModelTokenExchange({
22627
22648
  {
22628
22649
  size: "plain",
22629
22650
  loading,
22630
- figure: _chunkS2CA5WE4cjs.formatTokenRate.call(void 0, _optionalChain([rate, 'optionalAccess', _447 => _447.outputTokenRate])),
22651
+ figure: _chunkCWRVTQUOcjs.formatTokenRate.call(void 0, _optionalChain([rate, 'optionalAccess', _447 => _447.outputTokenRate])),
22631
22652
  words: copy.charge.output
22632
22653
  }
22633
22654
  )
@@ -22639,9 +22660,9 @@ function ModelTokenExchange({
22639
22660
  className: "mt-auto flex flex-col rounded-md border border-ods-accent bg-ods-bg p-[var(--spacing-system-mf)]",
22640
22661
  children: [
22641
22662
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[2lh] text-ods-text-secondary text-h4", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Bar, { className: "w-full max-w-xs" }) : copy.charge.so(_nullishCoalesce(balancePrice, () => ( copy.buy.tokens(tokens))), model) }),
22642
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] whitespace-nowrap tabular-nums text-ods-text-primary text-h1", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Bar, { className: "w-40" }) : _chunkS2CA5WE4cjs.formatTokenAmount.call(void 0, _chunkS2CA5WE4cjs.tokensForBalance.call(void 0, balance, rate.inputTokenRate)) }),
22663
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] whitespace-nowrap tabular-nums text-ods-text-primary text-h1", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Bar, { className: "w-40" }) : _chunkCWRVTQUOcjs.formatTokenAmount.call(void 0, _chunkCWRVTQUOcjs.tokensForBalance.call(void 0, balance, rate.inputTokenRate)) }),
22643
22664
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] text-ods-text-primary text-h3", children: copy.charge.read }),
22644
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] text-ods-text-secondary text-h4", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Bar, { className: "w-48" }) : copy.charge.orWritten(_chunkS2CA5WE4cjs.formatTokenAmount.call(void 0, _chunkS2CA5WE4cjs.tokensForBalance.call(void 0, balance, rate.outputTokenRate))) })
22665
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] text-ods-text-secondary text-h4", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Bar, { className: "w-48" }) : copy.charge.orWritten(_chunkCWRVTQUOcjs.formatTokenAmount.call(void 0, _chunkCWRVTQUOcjs.tokensForBalance.call(void 0, balance, rate.outputTokenRate))) })
22645
22666
  ]
22646
22667
  }
22647
22668
  )
@@ -23139,14 +23160,14 @@ var ConfidenceBadge = ({
23139
23160
  size = "sm",
23140
23161
  className
23141
23162
  }) => {
23142
- const level = _chunkS2CA5WE4cjs.getConfidenceLevel.call(void 0, confidence);
23163
+ const level = _chunkCWRVTQUOcjs.getConfidenceLevel.call(void 0, confidence);
23143
23164
  if (level === "none") {
23144
23165
  return null;
23145
23166
  }
23146
- const label = _chunkS2CA5WE4cjs.getConfidenceLabel.call(void 0, confidence);
23147
- const borderClass = _chunkS2CA5WE4cjs.getConfidenceBorderClass.call(void 0, confidence);
23148
- const textClass = _chunkS2CA5WE4cjs.getConfidenceTextClass.call(void 0, confidence);
23149
- const bgClass = _chunkS2CA5WE4cjs.getConfidenceBgClass.call(void 0, confidence);
23167
+ const label = _chunkCWRVTQUOcjs.getConfidenceLabel.call(void 0, confidence);
23168
+ const borderClass = _chunkCWRVTQUOcjs.getConfidenceBorderClass.call(void 0, confidence);
23169
+ const textClass = _chunkCWRVTQUOcjs.getConfidenceTextClass.call(void 0, confidence);
23170
+ const bgClass = _chunkCWRVTQUOcjs.getConfidenceBgClass.call(void 0, confidence);
23150
23171
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
23151
23172
  "span",
23152
23173
  {
@@ -23197,9 +23218,9 @@ function SEOEditorPreview({
23197
23218
  const [isUploading, setIsUploading] = _react.useState.call(void 0, false);
23198
23219
  const [fileInputRef, setFileInputRef] = _react.useState.call(void 0, null);
23199
23220
  const seoTitleLength = (seoTitle || "").length;
23200
- const seoTitleTooLong = seoTitleLength > _chunkS2CA5WE4cjs.SEO_TITLE_MAX_LENGTH;
23221
+ const seoTitleTooLong = seoTitleLength > _chunkCWRVTQUOcjs.SEO_TITLE_MAX_LENGTH;
23201
23222
  const seoDescriptionLength = (seoDescription || "").length;
23202
- const seoDescriptionTooLong = seoDescriptionLength > _chunkS2CA5WE4cjs.SEO_DESCRIPTION_MAX_LENGTH;
23223
+ const seoDescriptionTooLong = seoDescriptionLength > _chunkCWRVTQUOcjs.SEO_DESCRIPTION_MAX_LENGTH;
23203
23224
  const displayTitle = seoTitle.trim() || title || "Untitled";
23204
23225
  const displayDescription = seoDescription.trim() || summary || "No description";
23205
23226
  const hasOgImage = ogImageUrl.trim();
@@ -23224,10 +23245,10 @@ function SEOEditorPreview({
23224
23245
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 content-lg:grid-cols-2", children: [
23225
23246
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
23226
23247
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23227
- _chunkS2CA5WE4cjs.Field,
23248
+ _chunkCWRVTQUOcjs.Field,
23228
23249
  {
23229
23250
  label: "SEO Title",
23230
- error: seoTitleTooLong ? `Too long: search engines may truncate this title (keep it under ${_chunkS2CA5WE4cjs.SEO_TITLE_MAX_LENGTH})` : null,
23251
+ error: seoTitleTooLong ? `Too long: search engines may truncate this title (keep it under ${_chunkCWRVTQUOcjs.SEO_TITLE_MAX_LENGTH})` : null,
23231
23252
  labelExtras: aiConfidenceSeoTitle !== void 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
23232
23253
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AIGeneratedBadge, {}),
23233
23254
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ConfidenceBadge, { confidence: aiConfidenceSeoTitle, showLabel: true, showPercentage: true, size: "sm" })
@@ -23242,7 +23263,7 @@ function SEOEditorPreview({
23242
23263
  children: [
23243
23264
  seoTitleLength,
23244
23265
  "/",
23245
- _chunkS2CA5WE4cjs.SEO_TITLE_MAX_LENGTH
23266
+ _chunkCWRVTQUOcjs.SEO_TITLE_MAX_LENGTH
23246
23267
  ]
23247
23268
  }
23248
23269
  ),
@@ -23253,7 +23274,7 @@ function SEOEditorPreview({
23253
23274
  value: seoTitle || "",
23254
23275
  onChange: (e) => onSeoTitleChange(e.target.value),
23255
23276
  disabled,
23256
- maxLength: _chunkS2CA5WE4cjs.SEO_TITLE_MAX_LENGTH,
23277
+ maxLength: _chunkCWRVTQUOcjs.SEO_TITLE_MAX_LENGTH,
23257
23278
  invalid: seoTitleTooLong,
23258
23279
  placeholder: "Enter SEO meta title...",
23259
23280
  className: "border-ods-border bg-ods-bg text-ods-text-primary"
@@ -23264,7 +23285,7 @@ function SEOEditorPreview({
23264
23285
  !seoTitle && title && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-accent text-h6", children: "Auto-populated from title" })
23265
23286
  ] }),
23266
23287
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23267
- _chunkS2CA5WE4cjs.Field,
23288
+ _chunkCWRVTQUOcjs.Field,
23268
23289
  {
23269
23290
  label: "SEO Keywords",
23270
23291
  labelExtras: aiConfidenceSeoKeywords !== void 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
@@ -23296,10 +23317,10 @@ function SEOEditorPreview({
23296
23317
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 content-lg:grid-cols-2", children: [
23297
23318
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
23298
23319
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23299
- _chunkS2CA5WE4cjs.Field,
23320
+ _chunkCWRVTQUOcjs.Field,
23300
23321
  {
23301
23322
  label: "SEO Description",
23302
- error: seoDescriptionTooLong ? `Too long: search engines may truncate this description (keep it under ${_chunkS2CA5WE4cjs.SEO_DESCRIPTION_MAX_LENGTH})` : null,
23323
+ error: seoDescriptionTooLong ? `Too long: search engines may truncate this description (keep it under ${_chunkCWRVTQUOcjs.SEO_DESCRIPTION_MAX_LENGTH})` : null,
23303
23324
  labelExtras: aiConfidenceSeoDescription !== void 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
23304
23325
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AIGeneratedBadge, {}),
23305
23326
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -23322,7 +23343,7 @@ function SEOEditorPreview({
23322
23343
  children: [
23323
23344
  seoDescriptionLength,
23324
23345
  "/",
23325
- _chunkS2CA5WE4cjs.SEO_DESCRIPTION_MAX_LENGTH
23346
+ _chunkCWRVTQUOcjs.SEO_DESCRIPTION_MAX_LENGTH
23326
23347
  ]
23327
23348
  }
23328
23349
  ),
@@ -23333,7 +23354,7 @@ function SEOEditorPreview({
23333
23354
  value: seoDescription || "",
23334
23355
  onChange: (e) => onSeoDescriptionChange(e.target.value),
23335
23356
  disabled,
23336
- maxLength: _chunkS2CA5WE4cjs.SEO_DESCRIPTION_MAX_LENGTH,
23357
+ maxLength: _chunkCWRVTQUOcjs.SEO_DESCRIPTION_MAX_LENGTH,
23337
23358
  invalid: seoDescriptionTooLong,
23338
23359
  placeholder: "Enter SEO meta description...",
23339
23360
  className: _chunk3ATAYP36cjs.cn.call(void 0, "resize-none border-ods-border bg-ods-bg text-ods-text-primary", SEO_MEDIA_BOX_HEIGHT)
@@ -23486,7 +23507,7 @@ function socialIcon(platform) {
23486
23507
  return _nullishCoalesce(_chunkFICJS5OAcjs.iconOf.call(void 0, SOCIAL_ICONS[platform]), () => ( void 0));
23487
23508
  }
23488
23509
  function renderSocialIcon(platform) {
23489
- const key = _nullishCoalesce(_chunkS2CA5WE4cjs.normalizeSocialPlatform.call(void 0, platform), () => ( "website"));
23510
+ const key = _nullishCoalesce(_chunkCWRVTQUOcjs.normalizeSocialPlatform.call(void 0, platform), () => ( "website"));
23490
23511
  const icon = _nullishCoalesce(socialIcon(key), () => ( socialIcon("website")));
23491
23512
  return icon ? _react.createElement.call(void 0, icon, { className: "h-5 w-5" }) : null;
23492
23513
  }
@@ -23569,7 +23590,7 @@ function SocialLinksManager({
23569
23590
  };
23570
23591
  const getIcon = (link, platform) => {
23571
23592
  const iconKey = _optionalChain([platform, 'optionalAccess', _457 => _457.icon_name]) || link.platform;
23572
- const key = _chunkS2CA5WE4cjs.normalizeSocialPlatform.call(void 0, iconKey);
23593
+ const key = _chunkCWRVTQUOcjs.normalizeSocialPlatform.call(void 0, iconKey);
23573
23594
  if (!key) return null;
23574
23595
  const icon = socialIcon(key);
23575
23596
  return icon ? _react.createElement.call(void 0, icon, { className: "h-5 w-5 text-ods-text-secondary" }) : null;
@@ -24007,7 +24028,7 @@ function WalkthroughVideo({
24007
24028
  onOpenChange,
24008
24029
  defaultOpen,
24009
24030
  defaultOpenPaused,
24010
- deepLinkParam = _chunkS2CA5WE4cjs.WALKTHROUGH_OPEN_QUERY_PARAM,
24031
+ deepLinkParam = _chunkCWRVTQUOcjs.WALKTHROUGH_OPEN_QUERY_PARAM,
24011
24032
  autoPlayCard = false,
24012
24033
  label = "Play Demo Video",
24013
24034
  placement,
@@ -24023,7 +24044,7 @@ function WalkthroughVideo({
24023
24044
  }) {
24024
24045
  const inline = placement === "inline";
24025
24046
  const dismissEnabled = dismissal !== false;
24026
- const storageKey = dismissEnabled && dismissal.storageKey || _chunkS2CA5WE4cjs.WALKTHROUGH_VIDEO_DISMISS_KEY;
24047
+ const storageKey = dismissEnabled && dismissal.storageKey || _chunkCWRVTQUOcjs.WALKTHROUGH_VIDEO_DISMISS_KEY;
24027
24048
  const dismissalId = _optionalChain([video, 'optionalAccess', _463 => _463.id]) != null ? String(video.id) : "dismissed";
24028
24049
  const [mounted, setMounted] = _react.useState.call(void 0, false);
24029
24050
  const [dismissed, setDismissed] = _react.useState.call(void 0, false);
@@ -24035,7 +24056,7 @@ function WalkthroughVideo({
24035
24056
  let delayElapsed = false;
24036
24057
  let interacted = inline;
24037
24058
  const reveal = () => {
24038
- if (dismissEnabled && _chunkS2CA5WE4cjs.isWalkthroughDismissed.call(void 0, storageKey, dismissalId)) {
24059
+ if (dismissEnabled && _chunkCWRVTQUOcjs.isWalkthroughDismissed.call(void 0, storageKey, dismissalId)) {
24039
24060
  setDismissed(true);
24040
24061
  return;
24041
24062
  }
@@ -24322,7 +24343,7 @@ function WalkthroughVideo({
24322
24343
  (e) => {
24323
24344
  e.stopPropagation();
24324
24345
  pausePreviewNow();
24325
- if (dismissEnabled) _chunkS2CA5WE4cjs.dismissWalkthrough.call(void 0, storageKey, dismissalId);
24346
+ if (dismissEnabled) _chunkCWRVTQUOcjs.dismissWalkthrough.call(void 0, storageKey, dismissalId);
24326
24347
  setDismissed(true);
24327
24348
  },
24328
24349
  [dismissEnabled, storageKey, dismissalId, pausePreviewNow]
@@ -25410,7 +25431,7 @@ function HighlightConfigSection({
25410
25431
  disabled = false,
25411
25432
  className = ""
25412
25433
  }) {
25413
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `space-y-3 rounded-lg border border-ods-border bg-ods-card p-4 ${className}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2CA5WE4cjs.Field, { label: "Target Duration", children: (f) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25434
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `space-y-3 rounded-lg border border-ods-border bg-ods-card p-4 ${className}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCWRVTQUOcjs.Field, { label: "Target Duration", children: (f) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25414
25435
  _chunkDSVNFRY5cjs.Select,
25415
25436
  {
25416
25437
  value: targetDurationSeconds.toString(),
@@ -25511,7 +25532,7 @@ var AIStatusIndicator = ({
25511
25532
  }) => {
25512
25533
  const config = statusConfig[status];
25513
25534
  const displayText = message || config.label;
25514
- const confidenceLabel = showConfidence && confidence !== void 0 ? `${_chunkS2CA5WE4cjs.getConfidenceLabel.call(void 0, confidence)} (${confidence}%)` : null;
25535
+ const confidenceLabel = showConfidence && confidence !== void 0 ? `${_chunkCWRVTQUOcjs.getConfidenceLabel.call(void 0, confidence)} (${confidence}%)` : null;
25515
25536
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "inline-flex items-center gap-2 rounded-lg px-3 py-1.5", config.bgColor, className), children: [
25516
25537
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
25517
25538
  _chunkUNFCRSYIcjs.SparklesIcon,
@@ -25519,7 +25540,7 @@ var AIStatusIndicator = ({
25519
25540
  size: 16,
25520
25541
  className: _chunk3ATAYP36cjs.cn.call(void 0,
25521
25542
  status === "loading" && "animate-pulse",
25522
- confidence !== void 0 && status === "success" ? _chunkS2CA5WE4cjs.getConfidenceTextClass.call(void 0, confidence) : config.color
25543
+ confidence !== void 0 && status === "success" ? _chunkCWRVTQUOcjs.getConfidenceTextClass.call(void 0, confidence) : config.color
25523
25544
  )
25524
25545
  }
25525
25546
  ),
@@ -25528,7 +25549,7 @@ var AIStatusIndicator = ({
25528
25549
  {
25529
25550
  className: _chunk3ATAYP36cjs.cn.call(void 0,
25530
25551
  "text-h6",
25531
- confidence !== void 0 && status === "success" ? _chunkS2CA5WE4cjs.getConfidenceTextClass.call(void 0, confidence) : config.color
25552
+ confidence !== void 0 && status === "success" ? _chunkCWRVTQUOcjs.getConfidenceTextClass.call(void 0, confidence) : config.color
25532
25553
  ),
25533
25554
  children: displayText
25534
25555
  }
@@ -25538,8 +25559,8 @@ var AIStatusIndicator = ({
25538
25559
  {
25539
25560
  className: _chunk3ATAYP36cjs.cn.call(void 0,
25540
25561
  "rounded-full border px-2 py-0.5 text-h6",
25541
- _chunkS2CA5WE4cjs.getConfidenceBorderClass.call(void 0, confidence),
25542
- _chunkS2CA5WE4cjs.getConfidenceTextClass.call(void 0, confidence)
25562
+ _chunkCWRVTQUOcjs.getConfidenceBorderClass.call(void 0, confidence),
25563
+ _chunkCWRVTQUOcjs.getConfidenceTextClass.call(void 0, confidence)
25543
25564
  ),
25544
25565
  children: confidenceLabel
25545
25566
  }
@@ -26435,7 +26456,7 @@ function PoliciesTable({
26435
26456
  cell: ({ row }) => row.original.href ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
26436
26457
  _chunk2QMBXGMQcjs.Button,
26437
26458
  {
26438
- onClick: _chunkS2CA5WE4cjs.openInNewTab.call(void 0, row.original.href),
26459
+ onClick: _chunkCWRVTQUOcjs.openInNewTab.call(void 0, row.original.href),
26439
26460
  variant: "outline",
26440
26461
  size: "icon",
26441
26462
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
@@ -26761,7 +26782,7 @@ function TenantsTableView({
26761
26782
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
26762
26783
  _chunk2QMBXGMQcjs.Button,
26763
26784
  {
26764
- onClick: _chunkS2CA5WE4cjs.openInNewTab.call(void 0, getHref(row.original)),
26785
+ onClick: _chunkCWRVTQUOcjs.openInNewTab.call(void 0, getHref(row.original)),
26765
26786
  variant: "outline",
26766
26787
  size: "icon",
26767
26788
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
@@ -26857,7 +26878,7 @@ function WaitlistForm({
26857
26878
  _react.useEffect.call(void 0, () => {
26858
26879
  rescue.track({ email, phone }, null);
26859
26880
  }, [email, phone, rescue]);
26860
- const isMailDomainGeneric = _chunkS2CA5WE4cjs.hasGenericEmailDomain.call(void 0, email);
26881
+ const isMailDomainGeneric = _chunkCWRVTQUOcjs.hasGenericEmailDomain.call(void 0, email);
26861
26882
  const [syncedDefaultEmail, setSyncedDefaultEmail] = _react.useState.call(void 0, defaultEmail);
26862
26883
  if (syncedDefaultEmail !== defaultEmail) {
26863
26884
  setSyncedDefaultEmail(defaultEmail);
@@ -26891,7 +26912,7 @@ function WaitlistForm({
26891
26912
  setShowConsentError(true);
26892
26913
  return;
26893
26914
  }
26894
- const finalPhone = phone ? _chunkS2CA5WE4cjs.formatPhoneE164.call(void 0, phone, countryCode) : void 0;
26915
+ const finalPhone = phone ? _chunkCWRVTQUOcjs.formatPhoneE164.call(void 0, phone, countryCode) : void 0;
26895
26916
  try {
26896
26917
  await onRegister(email, finalPhone, getSignals(), rescue.submitFields());
26897
26918
  rescue.complete();
@@ -28983,7 +29004,7 @@ function getDeviceStatusConfig(status) {
28983
29004
  }
28984
29005
  }
28985
29006
  function getDeviceOperatingSystem(osType) {
28986
- return _chunkS2CA5WE4cjs.getOSPlatformId.call(void 0, osType);
29007
+ return _chunkCWRVTQUOcjs.getOSPlatformId.call(void 0, osType);
28987
29008
  }
28988
29009
 
28989
29010
  // src/components/features/devices/device-statuses.ts
@@ -31046,7 +31067,7 @@ var ToolBadge = ({
31046
31067
  className,
31047
31068
  iconClassName
31048
31069
  }) => {
31049
- const text = _nullishCoalesce(label, () => ( (toolType ? _chunkS2CA5WE4cjs.getToolLabel.call(void 0, toolType) : "")));
31070
+ const text = _nullishCoalesce(label, () => ( (toolType ? _chunkCWRVTQUOcjs.getToolLabel.call(void 0, toolType) : "")));
31050
31071
  const mark = _nullishCoalesce(icon, () => ( (toolType ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNTJE6SM6cjs.ToolIcon, { toolType, className: iconClassName, size: 16 }) : null)));
31051
31072
  const linked = (node, linkClassName) => href && targetPlatform ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31052
31073
  _chunkBV5WZVOPcjs.NavLinkAnchorViaRuntime,
@@ -31156,7 +31177,7 @@ function LogsTableView({
31156
31177
  cell: ({ row }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31157
31178
  ToolBadge,
31158
31179
  {
31159
- toolType: _chunkS2CA5WE4cjs.normalizeToolTypeWithFallback.call(void 0, row.original.source.toolType),
31180
+ toolType: _chunkCWRVTQUOcjs.normalizeToolTypeWithFallback.call(void 0, row.original.source.toolType),
31160
31181
  iconClassName: "h-4 w-4 content-md:h-6 content-md:w-6"
31161
31182
  }
31162
31183
  ),
@@ -31168,7 +31189,7 @@ function LogsTableView({
31168
31189
  filter: {
31169
31190
  options: _nullishCoalesce(_optionalChain([facets, 'optionalAccess', _652 => _652.toolTypes, 'access', _653 => _653.map, 'call', _654 => _654((toolType) => ({
31170
31191
  id: toolType,
31171
- label: _chunkS2CA5WE4cjs.toToolLabel.call(void 0, toolType),
31192
+ label: _chunkCWRVTQUOcjs.toToolLabel.call(void 0, toolType),
31172
31193
  value: toolType
31173
31194
  }))]), () => ( []))
31174
31195
  }
@@ -31226,7 +31247,7 @@ function LogsTableView({
31226
31247
  cell: ({ row }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31227
31248
  _chunk2QMBXGMQcjs.Button,
31228
31249
  {
31229
- onClick: getLogHref ? _chunkS2CA5WE4cjs.openInNewTab.call(void 0, getLogHref(row.original)) : void 0,
31250
+ onClick: getLogHref ? _chunkCWRVTQUOcjs.openInNewTab.call(void 0, getLogHref(row.original)) : void 0,
31230
31251
  variant: "outline",
31231
31252
  size: "icon",
31232
31253
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
@@ -31431,197 +31452,822 @@ function logSeverityVariant(severity) {
31431
31452
  }
31432
31453
  }
31433
31454
 
31434
- // src/components/features/knowledge-base/knowledge-base-item-icon.ts
31435
- var KNOWLEDGE_BASE_ITEM_ICON = {
31436
- ARTICLE: _chunkAGGRYMOJcjs.BookTextIcon,
31437
- FOLDER: _chunkQ6Z5Z3C4cjs.FolderIcon
31455
+ // src/components/features/scripts/execution-status.ts
31456
+ var SCRIPT_EXECUTION_STATUS_PRESENTATION = {
31457
+ QUEUED: { label: "Queued", variant: "grey", inFlight: true },
31458
+ RUNNING: { label: "Running", variant: "warning", inFlight: true },
31459
+ SUCCESS: { label: "Completed", variant: "success", inFlight: false },
31460
+ FAILED: { label: "Failed", variant: "error", inFlight: false }
31438
31461
  };
31462
+ function scriptExecutionStatus(status) {
31463
+ if (!status || !Object.prototype.hasOwnProperty.call(SCRIPT_EXECUTION_STATUS_PRESENTATION, status)) return void 0;
31464
+ return SCRIPT_EXECUTION_STATUS_PRESENTATION[status];
31465
+ }
31439
31466
 
31440
- // src/components/features/knowledge-base/knowledge-base-table.tsx
31467
+ // src/components/features/scripts/execution-cells.tsx
31468
+
31469
+ function ExecutionSourceBadge({ source, className }) {
31470
+ const tagProps = { as: "span", variant: "outline", className: _chunk3ATAYP36cjs.cn.call(void 0, "shrink-0", className) };
31471
+ if (source === "SCHEDULED") return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7ZFCR7UYcjs.Tag, { ...tagProps, label: "Scheduled" });
31472
+ if (source === "AI_ASSISTANT") {
31473
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7ZFCR7UYcjs.Tag, { ...tagProps, label: "Mingo", icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGABDE3FMcjs.AgentMark, { agent: "mingo", className: "size-4" }) });
31474
+ }
31475
+ return null;
31476
+ }
31477
+ function ExecutionTimestampCell({ timestamp, executionId }) {
31478
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col justify-center gap-1", children: [
31479
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: timestamp }),
31480
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", tone: "secondary", children: executionId })
31481
+ ] });
31482
+ }
31483
+ function ExecutionStatusCell({ status }) {
31484
+ const presentation = scriptExecutionStatus(status);
31485
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7ZFCR7UYcjs.Tag, { label: _nullishCoalesce(_optionalChain([presentation, 'optionalAccess', _667 => _667.label]), () => ( String(_nullishCoalesce(status, () => ( ""))))), variant: _nullishCoalesce(_optionalChain([presentation, 'optionalAccess', _668 => _668.variant]), () => ( "grey")) }) });
31486
+ }
31487
+ function ExecutionDeviceCell({ name, organization }) {
31488
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col justify-center gap-1", children: [
31489
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center gap-1", children: [
31490
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPTK7GOIIcjs.MonitorIcon, { className: "size-6 shrink-0 text-ods-text-secondary" }),
31491
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1", children: typeof name === "string" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: name }) : name })
31492
+ ] }),
31493
+ organization && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", tone: "secondary", children: organization })
31494
+ ] });
31495
+ }
31496
+ function ExecutionInitiatorCell({
31497
+ avatar,
31498
+ name,
31499
+ source,
31500
+ scriptName
31501
+ }) {
31502
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xsf)]", children: [
31503
+ avatar,
31504
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
31505
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: [
31506
+ typeof name === "string" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: name }) : name,
31507
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExecutionSourceBadge, { source })
31508
+ ] }),
31509
+ scriptName && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", tone: "secondary", children: scriptName })
31510
+ ] })
31511
+ ] });
31512
+ }
31513
+ function ExecutionResultCell({ result, empty = null }) {
31514
+ return result ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { lines: 2, children: result }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: empty });
31515
+ }
31516
+ function ScriptExecutionResult({
31517
+ result,
31518
+ inFlight = false,
31519
+ empty,
31520
+ className
31521
+ }) {
31522
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex flex-col gap-[var(--spacing-system-xxs)] p-[var(--spacing-system-m)]", className), children: [
31523
+ result ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "whitespace-pre-wrap break-words text-ods-text-primary text-h4", children: result }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-ods-text-secondary text-h4", children: inFlight ? "Waiting for output\u2026" : empty }),
31524
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-ods-text-secondary text-h6", children: "Result" })
31525
+ ] });
31526
+ }
31441
31527
 
31528
+ // src/components/features/scripts/script-cells.tsx
31442
31529
 
31443
- // src/components/features/knowledge-base/knowledge-base-status.ts
31444
- var KNOWLEDGE_BASE_STATUS_VARIANT = {
31445
- PUBLISHED: "success",
31446
- DRAFT: "warning",
31447
- ARCHIVED: "grey"
31530
+ function ScriptNameCell({ name, description }) {
31531
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col justify-center gap-1", children: [
31532
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: name }),
31533
+ description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", tone: "secondary", children: description })
31534
+ ] });
31535
+ }
31536
+ function ScheduleDateTimeCell({ date, time }) {
31537
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col justify-center gap-1", children: [
31538
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: date }),
31539
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", tone: "secondary", children: time })
31540
+ ] });
31541
+ }
31542
+
31543
+ // src/components/features/scripts/script-executions-table.tsx
31544
+
31545
+
31546
+ // src/components/features/scripts/scripts-table-columns.ts
31547
+ var SCRIPT_COLUMNS = {
31548
+ name: { id: "name", header: "Name", width: "flex-1 min-w-0" },
31549
+ shellType: { id: "shellType", header: "Shell Type", width: "w-[100px] content-md:w-[160px]", filterable: true },
31550
+ supportedPlatforms: { id: "supportedPlatforms", header: "OS", width: "w-[80px]", hideAt: "lg", filterable: true },
31551
+ authorId: { id: "authorId", header: "Added by", width: "w-[250px]", hideAt: "lg", filterable: true },
31552
+ actions: { id: "actions", width: "w-12 shrink-0 flex-none", align: "right" },
31553
+ open: { id: "open", width: "w-12 shrink-0 flex-none", hideAt: "md", align: "right" }
31554
+ };
31555
+ var SCHEDULE_COLUMNS = {
31556
+ name: { id: "name", header: "Script", width: "flex-1 min-w-0" },
31557
+ supportedPlatforms: { id: "supportedPlatforms", header: "OS", width: "w-[90px]", hideAt: "lg", filterable: true },
31558
+ dateTime: {
31559
+ id: "dateTime",
31560
+ header: "Date & Time",
31561
+ width: "w-[100px] content-md:w-[160px]",
31562
+ hideAt: "md",
31563
+ dateFilterable: true
31564
+ },
31565
+ repeat: { id: "repeat", header: "Repeat", width: "w-[120px]", hideAt: "md", sortable: true },
31566
+ deviceCount: { id: "deviceCount", header: "Devices", width: "w-[100px] content-md:w-[140px]", hideAt: "lg" },
31567
+ actions: { id: "actions", width: "w-12 shrink-0 flex-none", align: "right" },
31568
+ open: { id: "open", width: "w-12 shrink-0 flex-none", hideAt: "md", align: "right" }
31569
+ };
31570
+ var EXECUTION_COLUMNS = {
31571
+ executionId: { id: "executionId", header: "Execution", width: "w-[160px]", dateFilterable: true },
31572
+ status: { id: "status", header: "Status", width: "w-[120px]", filterable: true },
31573
+ machineId: { id: "machineId", header: "Device", width: "w-[200px]", hideAt: "lg", filterable: true },
31574
+ initiatorId: { id: "initiatorId", header: "Executed by", width: "flex-1 min-w-0", hideAt: "md", filterable: true },
31575
+ result: { id: "result", header: "Result", width: "flex-1 min-w-0", hideAt: "xl" },
31576
+ actions: { id: "actions", width: "w-12 shrink-0 flex-none", align: "right" },
31577
+ open: { id: "open", width: "w-12 shrink-0 flex-none", hideAt: "md", align: "right" }
31448
31578
  };
31579
+ var SCRIPTS_TAB_WIDTHS = ["w-[160px]", "w-[200px]"];
31580
+ var SCRIPTS_TABLE_COLUMNS = [
31581
+ SCRIPT_COLUMNS.name,
31582
+ SCRIPT_COLUMNS.shellType,
31583
+ SCRIPT_COLUMNS.supportedPlatforms,
31584
+ SCRIPT_COLUMNS.authorId,
31585
+ SCRIPT_COLUMNS.actions,
31586
+ SCRIPT_COLUMNS.open
31587
+ ];
31588
+ var SCHEDULES_TABLE_COLUMNS = [
31589
+ SCHEDULE_COLUMNS.name,
31590
+ SCHEDULE_COLUMNS.supportedPlatforms,
31591
+ SCHEDULE_COLUMNS.dateTime,
31592
+ SCHEDULE_COLUMNS.repeat,
31593
+ SCHEDULE_COLUMNS.deviceCount,
31594
+ SCHEDULE_COLUMNS.actions,
31595
+ SCHEDULE_COLUMNS.open
31596
+ ];
31597
+ var EXECUTIONS_TABLE_COLUMNS = [
31598
+ EXECUTION_COLUMNS.executionId,
31599
+ EXECUTION_COLUMNS.status,
31600
+ EXECUTION_COLUMNS.machineId,
31601
+ EXECUTION_COLUMNS.initiatorId,
31602
+ EXECUTION_COLUMNS.result,
31603
+ EXECUTION_COLUMNS.actions,
31604
+ EXECUTION_COLUMNS.open
31605
+ ];
31449
31606
 
31450
- // src/components/features/knowledge-base/knowledge-base-table.tsx
31607
+ // src/components/features/scripts/scripts-table-shared.tsx
31451
31608
 
31452
- function getKnowledgeBaseOpenColumn(getHref) {
31609
+ function scriptsColumnMeta(column) {
31453
31610
  return {
31454
- id: "open",
31455
- cell: ({ row }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31456
- _chunk2QMBXGMQcjs.Button,
31457
- {
31458
- onClick: _chunkS2CA5WE4cjs.openInNewTab.call(void 0, getHref(row.original)),
31459
- variant: "outline",
31460
- size: "icon",
31461
- leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
31462
- "aria-label": "Open in new tab",
31463
- className: "bg-ods-card"
31464
- }
31465
- ) }),
31466
- enableSorting: false,
31467
- meta: { width: "w-12 shrink-0 flex-none", hideAt: "md", align: "right" }
31611
+ width: column.width,
31612
+ hideAt: column.hideAt,
31613
+ align: column.align,
31614
+ sortable: column.sortable,
31615
+ alwaysShowHeader: column.dateFilterable
31468
31616
  };
31469
31617
  }
31470
- function getKnowledgeBaseColumns(mode) {
31471
- return [
31618
+ function RowActionsCell({ children }) {
31619
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end gap-2", children });
31620
+ }
31621
+ function OpenInNewTabCell({ href }) {
31622
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31623
+ _chunk2QMBXGMQcjs.Button,
31472
31624
  {
31473
- accessorKey: "name",
31474
- header: "Name",
31475
- cell: ({ row }) => {
31476
- const item = row.original;
31477
- const Icon = item.type === "FOLDER" ? KNOWLEDGE_BASE_ITEM_ICON.FOLDER : KNOWLEDGE_BASE_ITEM_ICON.ARTICLE;
31478
- const status = item.status;
31479
- const tagStatus = status === "DRAFT" || status === "ARCHIVED" ? status : null;
31480
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative box-border flex h-20 w-full shrink-0 content-stretch items-center justify-start gap-[var(--spacing-system-m)] py-0", children: [
31481
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "relative flex h-8 w-8 shrink-0 items-center justify-center rounded-[6px] border border-ods-border", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Icon, { size: 16, className: "shrink-0 text-ods-text-secondary" }) }),
31482
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
31483
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
31484
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: item.name }) }),
31485
- tagStatus && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31486
- _chunk7ZFCR7UYcjs.Tag,
31487
- {
31488
- variant: KNOWLEDGE_BASE_STATUS_VARIANT[tagStatus],
31489
- label: tagStatus,
31490
- className: "shrink-0"
31491
- }
31492
- )
31493
- ] }),
31494
- item.type === "ARTICLE" && item.summary && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", tone: "secondary", children: item.summary })
31495
- ] })
31496
- ] });
31497
- },
31625
+ onClick: _chunkCWRVTQUOcjs.openInNewTab.call(void 0, href),
31626
+ variant: "outline",
31627
+ size: "icon",
31628
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
31629
+ "aria-label": "Open in new tab",
31630
+ className: "bg-ods-card"
31631
+ }
31632
+ ) });
31633
+ }
31634
+
31635
+ // src/components/features/scripts/script-executions-table.tsx
31636
+
31637
+ function ScriptExecutionsTable({
31638
+ rows,
31639
+ columns: layout = EXECUTIONS_TABLE_COLUMNS,
31640
+ hideColumns,
31641
+ renderSubRow,
31642
+ compact = false,
31643
+ isLoading = false,
31644
+ emptyMessage = "No executions found.",
31645
+ showHeader: withHeader = true,
31646
+ rightSlot,
31647
+ skeletonRows = 10
31648
+ }) {
31649
+ const columns = _react.useMemo.call(void 0, () => {
31650
+ const renderers = {
31651
+ [EXECUTION_COLUMNS.executionId.id]: (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExecutionTimestampCell, { timestamp: row.timestamp, executionId: row.executionId }),
31652
+ [EXECUTION_COLUMNS.status.id]: (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExecutionStatusCell, { status: row.status }),
31653
+ [EXECUTION_COLUMNS.machineId.id]: (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExecutionDeviceCell, { name: row.machineName, organization: row.organization }),
31654
+ [EXECUTION_COLUMNS.initiatorId.id]: (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31655
+ ExecutionInitiatorCell,
31656
+ {
31657
+ avatar: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31658
+ _chunk7ZFCR7UYcjs.SquareAvatar,
31659
+ {
31660
+ variant: "round",
31661
+ size: "md",
31662
+ src: row.initiator.image,
31663
+ fallback: row.initiator.initials,
31664
+ alt: row.initiator.name,
31665
+ initialsClassName: "text-ods-text-secondary"
31666
+ }
31667
+ ),
31668
+ name: row.initiator.name,
31669
+ source: row.source,
31670
+ scriptName: row.scriptName
31671
+ }
31672
+ ),
31673
+ [EXECUTION_COLUMNS.result.id]: (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExecutionResultCell, { result: row.result }),
31674
+ [EXECUTION_COLUMNS.open.id]: (row) => row.href ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, OpenInNewTabCell, { href: row.href }) : null
31675
+ };
31676
+ return layout.filter((column) => renderers[column.id] && !_optionalChain([hideColumns, 'optionalAccess', _669 => _669.includes, 'call', _670 => _670(column.id)])).map((column) => ({
31677
+ id: column.id,
31678
+ header: _nullishCoalesce(column.header, () => ( "")),
31679
+ cell: ({ row }) => renderers[column.id](row.original),
31498
31680
  enableSorting: false,
31499
- meta: { width: "flex-1 min-w-0" }
31500
- },
31501
- {
31502
- accessorKey: mode === "archive" ? "updatedAt" : "createdAt",
31503
- header: mode === "archive" ? "Archived" : "Created",
31504
- cell: ({ row }) => {
31505
- if (row.original.type !== "ARTICLE") return null;
31506
- const ts = mode === "archive" ? _nullishCoalesce(row.original.updatedAt, () => ( row.original.createdAt)) : row.original.createdAt;
31507
- if (!ts) return null;
31508
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col whitespace-nowrap", children: [
31509
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: _chunkPQ2M7P2Ucjs.formatDate.call(void 0, ts) }),
31510
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-heading-5 text-ods-text-secondary", children: _chunkPQ2M7P2Ucjs.formatTime.call(void 0, ts) })
31511
- ] });
31512
- },
31681
+ meta: scriptsColumnMeta(column)
31682
+ }));
31683
+ }, [layout, hideColumns]);
31684
+ const table = useDataTable({
31685
+ data: rows,
31686
+ columns,
31687
+ getRowId: (row) => row.id,
31688
+ enableSorting: false
31689
+ });
31690
+ const rowHref = _react.useCallback.call(void 0, (row) => row.href, []);
31691
+ const showHeader = withHeader && (isLoading || rows.length > 0);
31692
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, DataTable, { table, children: [
31693
+ showHeader && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.Header, { rightSlot }),
31694
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31695
+ DataTable.Body,
31696
+ {
31697
+ loading: isLoading,
31698
+ skeletonRows,
31699
+ emptyMessage,
31700
+ rowClassName: "mb-1",
31701
+ compact,
31702
+ rowHref,
31703
+ renderSubRow
31704
+ }
31705
+ )
31706
+ ] });
31707
+ }
31708
+
31709
+ // src/components/features/scripts/script-schedules-table.tsx
31710
+
31711
+
31712
+ var VALUE_CLASS = "text-ods-text-primary text-h4";
31713
+ function ScriptSchedulesTable({
31714
+ rows,
31715
+ isLoading = false,
31716
+ hideColumns,
31717
+ renderActions,
31718
+ emptyMessage = "No schedules found.",
31719
+ stickyHeader = false,
31720
+ stickyHeaderOffset,
31721
+ rightSlot,
31722
+ skeletonRows = 10
31723
+ }) {
31724
+ const columns = _react.useMemo.call(void 0, () => {
31725
+ const cell = (layout, render) => ({
31726
+ id: layout.id,
31727
+ header: _nullishCoalesce(layout.header, () => ( "")),
31728
+ cell: ({ row }) => render(row.original),
31513
31729
  enableSorting: false,
31514
- meta: { width: "w-[140px]", hideAt: "lg" }
31730
+ // A picture of the table sorts nothing: the layout's sort icon is the live page's.
31731
+ meta: { ...scriptsColumnMeta(layout), sortable: false }
31732
+ });
31733
+ const all = [
31734
+ cell(SCHEDULE_COLUMNS.name, (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScriptNameCell, { name: row.name, description: row.description })),
31735
+ cell(SCHEDULE_COLUMNS.supportedPlatforms, (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, OSTypeBadgeGroup, { osTypes: row.supportedPlatforms, iconSize: "w-4 h-4 content-md:w-6 content-md:h-6" })),
31736
+ cell(
31737
+ SCHEDULE_COLUMNS.dateTime,
31738
+ (row) => row.startsAt ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScheduleDateTimeCell, { date: row.startsAt.date, time: row.startsAt.time }) : row.trigger ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { tone: "secondary", children: row.trigger }) : null
31739
+ ),
31740
+ cell(SCHEDULE_COLUMNS.repeat, (row) => row.repeat ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: VALUE_CLASS, children: row.repeat }) : null),
31741
+ cell(SCHEDULE_COLUMNS.deviceCount, (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: VALUE_CLASS, children: row.deviceCount }))
31742
+ ];
31743
+ if (renderActions) {
31744
+ all.push(cell(SCHEDULE_COLUMNS.actions, (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RowActionsCell, { children: renderActions(row) })));
31515
31745
  }
31516
- ];
31746
+ all.push(cell(SCHEDULE_COLUMNS.open, (row) => row.href ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, OpenInNewTabCell, { href: row.href }) : null));
31747
+ return hideColumns ? all.filter((column) => !hideColumns.includes(_nullishCoalesce(column.id, () => ( "")))) : all;
31748
+ }, [hideColumns, renderActions]);
31749
+ const table = useDataTable({
31750
+ data: rows,
31751
+ columns,
31752
+ getRowId: (row) => row.id,
31753
+ enableSorting: false
31754
+ });
31755
+ const rowHref = _react.useCallback.call(void 0, (row) => row.href, []);
31756
+ const showHeader = isLoading || rows.length > 0;
31757
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, DataTable, { table, children: [
31758
+ showHeader && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.Header, { stickyHeader, stickyHeaderOffset, rightSlot }),
31759
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31760
+ DataTable.Body,
31761
+ {
31762
+ loading: isLoading,
31763
+ skeletonRows,
31764
+ emptyMessage,
31765
+ rowClassName: "mb-1",
31766
+ rowHref
31767
+ }
31768
+ )
31769
+ ] });
31517
31770
  }
31518
- function KnowledgeBaseTableBody({
31519
- items,
31520
- getHref,
31521
- mode = "standard",
31522
- isLoading,
31523
- emptyMessage = "No items found.",
31524
- skeletonRows,
31771
+
31772
+ // src/components/features/scripts/shell-types.ts
31773
+ var SCRIPT_SHELL_TYPES = [
31774
+ { id: _chunkCWRVTQUOcjs.ShellTypeValues.POWERSHELL, label: "PowerShell", value: "powershell", icon: _chunkMCQY746Mcjs.PowershellLogoGreyIcon },
31775
+ { id: _chunkCWRVTQUOcjs.ShellTypeValues.CMD, label: "CMD", value: "cmd", icon: _chunkNIVJEJSGcjs.TerminalSquareIcon },
31776
+ { id: _chunkCWRVTQUOcjs.ShellTypeValues.BASH, label: "Bash", value: "bash", icon: _chunkTRUW6DDAcjs.TerminalIcon }
31777
+ ];
31778
+ function scriptShellType(value) {
31779
+ return SCRIPT_SHELL_TYPES.find((shell) => shell.value === value);
31780
+ }
31781
+ function scriptShellLabel(value) {
31782
+ return _nullishCoalesce(_optionalChain([scriptShellType, 'call', _671 => _671(value), 'optionalAccess', _672 => _672.label]), () => ( value));
31783
+ }
31784
+
31785
+ // src/components/features/scripts/script-shell-badge.tsx
31786
+
31787
+ function ScriptShellBadge({ value, className, iconClassName }) {
31788
+ const shell = scriptShellType(value);
31789
+ const Icon = _optionalChain([shell, 'optionalAccess', _673 => _673.icon]);
31790
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex items-center gap-2", className), children: [
31791
+ Icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Icon, { className: _chunk3ATAYP36cjs.cn.call(void 0, "h-5 w-5 text-ods-text-secondary", iconClassName) }),
31792
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _nullishCoalesce(_optionalChain([shell, 'optionalAccess', _674 => _674.label]), () => ( value)) })
31793
+ ] });
31794
+ }
31795
+
31796
+ // src/components/features/scripts/scripts-table.tsx
31797
+
31798
+
31799
+ var BADGE_ICON = "h-4 w-4 content-md:h-6 content-md:w-6";
31800
+ function ScriptsTable({
31801
+ rows,
31802
+ isLoading = false,
31803
+ hideColumns,
31804
+ renderActions,
31805
+ emptyMessage = "No scripts found.",
31806
+ stickyHeader = false,
31525
31807
  stickyHeaderOffset,
31526
- footerSlot,
31527
- actionsColumn,
31528
- totalCount,
31529
- compact = false
31808
+ rightSlot,
31809
+ skeletonRows = 10
31530
31810
  }) {
31531
31811
  const columns = _react.useMemo.call(void 0, () => {
31532
- const base = getKnowledgeBaseColumns(mode);
31533
- const leading = compact ? base.slice(0, 1) : base;
31534
- const trailing = compact ? [] : [getKnowledgeBaseOpenColumn(getHref)];
31535
- return actionsColumn ? [...leading, actionsColumn, ...trailing] : [...leading, ...trailing];
31536
- }, [mode, actionsColumn, getHref, compact]);
31812
+ const cell = (layout, render) => ({
31813
+ id: layout.id,
31814
+ header: _nullishCoalesce(layout.header, () => ( "")),
31815
+ cell: ({ row }) => render(row.original),
31816
+ enableSorting: false,
31817
+ meta: scriptsColumnMeta(layout)
31818
+ });
31819
+ const all = [
31820
+ cell(SCRIPT_COLUMNS.name, (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScriptNameCell, { name: row.name, description: row.description })),
31821
+ cell(SCRIPT_COLUMNS.shellType, (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScriptShellBadge, { value: row.shellType, iconClassName: BADGE_ICON })),
31822
+ cell(SCRIPT_COLUMNS.supportedPlatforms, (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, OSTypeBadgeGroup, { osTypes: row.supportedPlatforms, iconSize: "w-4 h-4 content-md:w-6 content-md:h-6" })),
31823
+ cell(
31824
+ SCRIPT_COLUMNS.authorId,
31825
+ (row) => row.author ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
31826
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31827
+ _chunk7ZFCR7UYcjs.SquareAvatar,
31828
+ {
31829
+ variant: "round",
31830
+ size: "sm",
31831
+ src: row.author.image,
31832
+ fallback: row.author.initials,
31833
+ alt: row.author.name,
31834
+ initialsClassName: "text-ods-text-secondary"
31835
+ }
31836
+ ),
31837
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: row.author.name }) })
31838
+ ] }) : null
31839
+ )
31840
+ ];
31841
+ if (renderActions) {
31842
+ all.push(cell(SCRIPT_COLUMNS.actions, (row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RowActionsCell, { children: renderActions(row) })));
31843
+ }
31844
+ all.push(cell(SCRIPT_COLUMNS.open, (row) => row.href ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, OpenInNewTabCell, { href: row.href }) : null));
31845
+ return hideColumns ? all.filter((column) => !hideColumns.includes(_nullishCoalesce(column.id, () => ( "")))) : all;
31846
+ }, [hideColumns, renderActions]);
31537
31847
  const table = useDataTable({
31538
- data: items,
31848
+ data: rows,
31539
31849
  columns,
31540
31850
  getRowId: (row) => row.id,
31541
31851
  enableSorting: false
31542
31852
  });
31853
+ const rowHref = _react.useCallback.call(void 0, (row) => row.href, []);
31854
+ const showHeader = isLoading || rows.length > 0;
31543
31855
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, DataTable, { table, children: [
31856
+ showHeader && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.Header, { stickyHeader, stickyHeaderOffset, rightSlot }),
31544
31857
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31545
- DataTable.Header,
31858
+ DataTable.Body,
31546
31859
  {
31547
- stickyHeader: !!stickyHeaderOffset,
31548
- stickyHeaderOffset,
31549
- rightSlot: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.RowCount, { itemName: mode === "archive" ? "article" : "item", totalCount })
31860
+ loading: isLoading,
31861
+ skeletonRows,
31862
+ emptyMessage,
31863
+ rowClassName: "mb-1",
31864
+ rowHref
31550
31865
  }
31551
- ),
31552
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.Body, { loading: isLoading, skeletonRows, emptyMessage, rowHref: getHref }),
31553
- footerSlot
31866
+ )
31554
31867
  ] });
31555
31868
  }
31556
31869
 
31557
- // src/components/features/knowledge-base/knowledge-base-article-view.tsx
31870
+ // src/components/features/scripts/scripts-tabs.ts
31871
+ var SCRIPTS_TABS = [
31872
+ { id: "list", label: "Scripts List", icon: _chunkSAPD55KQcjs.BracketCurlyIcon },
31873
+ { id: "schedules", label: "Scripts Schedules", icon: _chunkTPKKRHUMcjs.TimerIcon }
31874
+ ];
31558
31875
 
31559
- function KnowledgeBaseArticleView({
31560
- title,
31561
- onBack,
31562
- actions,
31563
- menuActions,
31564
- tags = [],
31565
- author,
31566
- updatedLabel,
31567
- status,
31568
- content,
31569
- attachments = [],
31570
- children,
31571
- className = "px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]"
31876
+ // src/components/features/scripts/schedule-form/schedule-enums.ts
31877
+ var SCRIPT_SCHEDULE_TRIGGER = {
31878
+ DATE_TIME: "DATE_TIME",
31879
+ DEVICE_ONLINE: "DEVICE_ONLINE"
31880
+ };
31881
+ var SCHEDULE_TIME_REFERENCE = {
31882
+ SERVER: "SERVER",
31883
+ DEVICE_LOCAL: "DEVICE_LOCAL"
31884
+ };
31885
+ var SCHEDULE_OFFLINE_BEHAVIOR = {
31886
+ SKIP: "SKIP",
31887
+ RETRY_ON_RECONNECT: "RETRY_ON_RECONNECT"
31888
+ };
31889
+
31890
+ // src/components/features/scripts/schedule-form/schedule-form-fields.tsx
31891
+
31892
+ var _reacthookform = require('react-hook-form');
31893
+
31894
+ // src/components/features/scripts/schedule-form/schedule-timing.ts
31895
+ function isEventTrigger(trigger) {
31896
+ return trigger === SCRIPT_SCHEDULE_TRIGGER.DEVICE_ONLINE;
31897
+ }
31898
+ function isDeviceLocalTime(timeReference) {
31899
+ return timeReference === SCHEDULE_TIME_REFERENCE.DEVICE_LOCAL;
31900
+ }
31901
+ var DURATION_UNIT_VALUES = ["minute", "hour", "day", "week", "month"];
31902
+ var DURATION_UNIT_SECONDS = {
31903
+ minute: 60,
31904
+ hour: 3600,
31905
+ day: 86400,
31906
+ week: 604800,
31907
+ month: 2592e3
31908
+ // 30 days — the only "calendar" unit the seconds model can approximate
31909
+ };
31910
+ var DURATION_UNIT_LABELS = {
31911
+ minute: "Minute",
31912
+ hour: "Hour",
31913
+ day: "Day",
31914
+ week: "Week",
31915
+ month: "Month"
31916
+ };
31917
+ var MIN_REPEAT_MINUTES = 30;
31918
+ var DURATION_UNIT_OPTIONS = DURATION_UNIT_VALUES.map((value) => ({
31919
+ value,
31920
+ label: DURATION_UNIT_LABELS[value]
31921
+ }));
31922
+ function snapRepeatInterval(interval, unit) {
31923
+ if (unit !== "minute" || interval === null) return interval;
31924
+ if (!Number.isFinite(interval) || interval < MIN_REPEAT_MINUTES) return MIN_REPEAT_MINUTES;
31925
+ return Math.ceil(interval / MIN_REPEAT_MINUTES) * MIN_REPEAT_MINUTES;
31926
+ }
31927
+ function isRetryOnReconnect(behavior) {
31928
+ return behavior === SCHEDULE_OFFLINE_BEHAVIOR.RETRY_ON_RECONNECT;
31929
+ }
31930
+ var MIN_RECONNECT_MINUTES = 30;
31931
+ function snapReconnectInterval(interval, unit) {
31932
+ if (unit !== "minute" || interval === null) return interval;
31933
+ return Math.max(interval, MIN_RECONNECT_MINUTES);
31934
+ }
31935
+ var DEFAULT_RECONNECT_WINDOW = {
31936
+ interval: MIN_RECONNECT_MINUTES,
31937
+ unit: "minute"
31938
+ };
31939
+ var SLOTS_PER_DAY = 48;
31940
+ var SLOT_MINUTES = 30;
31941
+ function slotBaseMinutes(timeReference) {
31942
+ if (isDeviceLocalTime(timeReference)) return 0;
31943
+ const offset = (/* @__PURE__ */ new Date()).getTimezoneOffset();
31944
+ return (-offset % SLOT_MINUTES + SLOT_MINUTES) % SLOT_MINUTES;
31945
+ }
31946
+ function isSlotOnGrid(slot, timeReference) {
31947
+ if (!slot) return true;
31948
+ const [hours, minutes] = slot.split(":").map(Number);
31949
+ const offGrid = (hours * 60 + minutes - slotBaseMinutes(timeReference)) % SLOT_MINUTES;
31950
+ return (offGrid % SLOT_MINUTES + SLOT_MINUTES) % SLOT_MINUTES === 0;
31951
+ }
31952
+ function slotValue(minutesOfDay) {
31953
+ const hours = Math.floor(minutesOfDay / 60);
31954
+ const minutes = minutesOfDay % 60;
31955
+ return `${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`;
31956
+ }
31957
+ function slotLabel(minutesOfDay) {
31958
+ return _chunkPQ2M7P2Ucjs.formatTime.call(void 0, new Date(1970, 0, 1, Math.floor(minutesOfDay / 60), minutesOfDay % 60));
31959
+ }
31960
+ function getTimeSlotOptions(forDate, timeReference) {
31961
+ const base = slotBaseMinutes(timeReference);
31962
+ const cutoff = !isDeviceLocalTime(timeReference) && forDate && isToday(forDate) ? nowMinutesOfDay() : -1;
31963
+ return Array.from({ length: SLOTS_PER_DAY }, (_, slot) => {
31964
+ const minutesOfDay = base + slot * SLOT_MINUTES;
31965
+ return { value: slotValue(minutesOfDay), label: slotLabel(minutesOfDay), minutesOfDay };
31966
+ }).filter((slot) => slot.minutesOfDay > cutoff).map(({ value, label }) => ({ value, label }));
31967
+ }
31968
+ function slotToLabel(slot) {
31969
+ const [hours, minutes] = slot.split(":").map(Number);
31970
+ return slotLabel(hours * 60 + minutes);
31971
+ }
31972
+ function nowMinutesOfDay() {
31973
+ const now = /* @__PURE__ */ new Date();
31974
+ return now.getHours() * 60 + now.getMinutes();
31975
+ }
31976
+ function isToday(date) {
31977
+ const now = /* @__PURE__ */ new Date();
31978
+ return date.getFullYear() === now.getFullYear() && date.getMonth() === now.getMonth() && date.getDate() === now.getDate();
31979
+ }
31980
+ function startOfToday() {
31981
+ const now = /* @__PURE__ */ new Date();
31982
+ return new Date(now.getFullYear(), now.getMonth(), now.getDate());
31983
+ }
31984
+ function earliestDeviceLocalDay() {
31985
+ const westernmostNow = new Date(Date.now() - 12 * 60 * 60 * 1e3);
31986
+ return new Date(westernmostNow.getUTCFullYear(), westernmostNow.getUTCMonth(), westernmostNow.getUTCDate());
31987
+ }
31988
+ function earliestScheduleDay(timeReference) {
31989
+ return isDeviceLocalTime(timeReference) ? earliestDeviceLocalDay() : startOfToday();
31990
+ }
31991
+ function isScheduleStartInPast(date, slot, timeReference) {
31992
+ if (!date || !slot || isDeviceLocalTime(timeReference)) return false;
31993
+ return applyTimeSlot(date, slot).getTime() < Date.now();
31994
+ }
31995
+ var PAST_START_MESSAGE = "Start time must be in the future";
31996
+ var NO_SLOTS_TODAY_MESSAGE = "No start times left today \u2014 pick another day";
31997
+ function isStartInPastAndChanged(date, slot, storedIso, timeReference) {
31998
+ if (!isScheduleStartInPast(date, slot, timeReference) || !date) return false;
31999
+ const stored = storedIso ? fromScheduleInstant(storedIso, timeReference).getTime() : null;
32000
+ return applyTimeSlot(date, slot).getTime() !== stored;
32001
+ }
32002
+ function dateToTimeSlot(date, timeReference) {
32003
+ if (!date) return "";
32004
+ const base = slotBaseMinutes(timeReference);
32005
+ const minutesOfDay = date.getHours() * 60 + date.getMinutes();
32006
+ const slot = Math.min(SLOTS_PER_DAY - 1, Math.max(0, Math.floor((minutesOfDay - base) / SLOT_MINUTES)));
32007
+ return slotValue(base + slot * SLOT_MINUTES);
32008
+ }
32009
+ function applyTimeSlot(date, slot) {
32010
+ const [hours, minutes] = slot.split(":").map(Number);
32011
+ const next = date ? new Date(date) : /* @__PURE__ */ new Date();
32012
+ next.setHours(hours, minutes, 0, 0);
32013
+ return next;
32014
+ }
32015
+ function fromScheduleInstant(iso, timeReference) {
32016
+ const instant = new Date(iso);
32017
+ if (!isDeviceLocalTime(timeReference)) return instant;
32018
+ return new Date(
32019
+ instant.getUTCFullYear(),
32020
+ instant.getUTCMonth(),
32021
+ instant.getUTCDate(),
32022
+ instant.getUTCHours(),
32023
+ instant.getUTCMinutes()
32024
+ );
32025
+ }
32026
+
32027
+ // src/components/features/scripts/schedule-form/schedule-form-types.ts
32028
+ var EMPTY_SCHEDULE_SCRIPT_ROW = {
32029
+ scriptId: "",
32030
+ name: "",
32031
+ supportedPlatforms: [],
32032
+ // 0 keeps the Timeout field locked and empty until a script is picked.
32033
+ timeoutSeconds: 0,
32034
+ args: [],
32035
+ envVars: [],
32036
+ defaultArgs: [],
32037
+ defaultEnvVars: []
32038
+ };
32039
+ var SCHEDULE_TRIGGER_OPTIONS = [
32040
+ {
32041
+ value: SCRIPT_SCHEDULE_TRIGGER.DATE_TIME,
32042
+ label: "Run on schedule",
32043
+ description: "Runs at the set date and time, whether or not the device is online."
32044
+ },
32045
+ {
32046
+ value: SCRIPT_SCHEDULE_TRIGGER.DEVICE_ONLINE,
32047
+ label: "Run when device comes online",
32048
+ description: "Waits for the device to connect, then runs as soon as it's reachable."
32049
+ }
32050
+ ];
32051
+ var SCHEDULE_TIME_REFERENCE_OPTIONS = [
32052
+ { value: SCHEDULE_TIME_REFERENCE.SERVER, label: "Your account timezone" },
32053
+ { value: SCHEDULE_TIME_REFERENCE.DEVICE_LOCAL, label: "Device local timezone" }
32054
+ ];
32055
+ var SCHEDULE_OFFLINE_BEHAVIOR_OPTIONS = [
32056
+ {
32057
+ value: SCHEDULE_OFFLINE_BEHAVIOR.SKIP,
32058
+ label: "Skip this Run",
32059
+ description: "Next run stays on schedule. Missed runs are logged."
32060
+ },
32061
+ {
32062
+ value: SCHEDULE_OFFLINE_BEHAVIOR.RETRY_ON_RECONNECT,
32063
+ label: "Run when device comes back online",
32064
+ description: "Executes on the next reconnect."
32065
+ }
32066
+ ];
32067
+ var DEFAULT_SCHEDULE_FORM_VALUES = {
32068
+ name: "",
32069
+ description: "",
32070
+ trigger: SCRIPT_SCHEDULE_TRIGGER.DATE_TIME,
32071
+ scheduledDate: null,
32072
+ scheduledTime: "",
32073
+ timeReference: SCHEDULE_TIME_REFERENCE.SERVER,
32074
+ repeatEnabled: false,
32075
+ repeatInterval: 1,
32076
+ repeatUnit: "day",
32077
+ repeatSecondsStored: null,
32078
+ startAtStored: null,
32079
+ offlineBehavior: SCHEDULE_OFFLINE_BEHAVIOR.SKIP,
32080
+ reconnectInterval: DEFAULT_RECONNECT_WINDOW.interval,
32081
+ reconnectUnit: DEFAULT_RECONNECT_WINDOW.unit,
32082
+ reconnectWindowSecondsStored: null,
32083
+ supportedPlatforms: ["windows"],
32084
+ scripts: [EMPTY_SCHEDULE_SCRIPT_ROW]
32085
+ };
32086
+
32087
+ // src/components/features/scripts/schedule-form/schedule-offline-fields.tsx
32088
+
32089
+
32090
+ // src/components/features/scripts/schedule-form/schedule-interval-input.tsx
32091
+
32092
+
32093
+ function ScheduleIntervalInput({
32094
+ value,
32095
+ onChange,
32096
+ onBlur,
32097
+ disabled,
32098
+ invalid,
32099
+ error,
32100
+ min,
32101
+ className,
32102
+ "aria-label": ariaLabel,
32103
+ "data-invalid-focus": invalidFocus
31572
32104
  }) {
31573
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
31574
- _chunkDSVNFRY5cjs.PageLayout,
32105
+ const [text, setText] = _react.useState.call(void 0, () => value === null ? "" : String(value));
32106
+ const focused = _react.useRef.call(void 0, false);
32107
+ _react.useEffect.call(void 0, () => {
32108
+ if (focused.current) return;
32109
+ const next = value === null ? "" : String(value);
32110
+ setText((current) => current === next ? current : next);
32111
+ }, [value]);
32112
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32113
+ _chunkHTRILBJDcjs.Input,
31575
32114
  {
31576
- title,
31577
- backButton: onBack ? { label: "Back", onClick: onBack } : void 0,
31578
- actionsVariant: "menu-primary",
31579
- actions,
31580
- menuActions,
32115
+ type: "number",
32116
+ min,
32117
+ inputMode: "numeric",
32118
+ "aria-label": ariaLabel,
32119
+ "data-invalid-focus": invalidFocus || void 0,
31581
32120
  className,
31582
- children: [
31583
- tags.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap gap-[var(--spacing-system-xsf)]", children: tags.map((tag) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7ZFCR7UYcjs.Tag, { label: tag.label, variant: "outline", className: "max-w-full" }, tag.id)) }),
31584
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYXKB5WREcjs.Card, { className: "border-ods-border px-[var(--spacing-system-mf)] py-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-2 gap-x-[var(--spacing-system-mf)] content-lg:grid-cols-3", children: [
31585
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-20 min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
31586
- author.deleted ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkO67V3HJRcjs.DeletedUserAvatar, { size: "md" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31587
- _chunk7ZFCR7UYcjs.SquareAvatar,
32121
+ value: text,
32122
+ onFocus: () => {
32123
+ focused.current = true;
32124
+ },
32125
+ onBlur: () => {
32126
+ focused.current = false;
32127
+ setText(value === null ? "" : String(value));
32128
+ _optionalChain([onBlur, 'optionalCall', _675 => _675()]);
32129
+ },
32130
+ onChange: (e) => {
32131
+ const raw = e.target.value;
32132
+ setText(raw);
32133
+ if (raw.trim() === "") {
32134
+ onChange(null);
32135
+ return;
32136
+ }
32137
+ const parsed = Number(raw);
32138
+ onChange(Number.isFinite(parsed) ? parsed : null);
32139
+ },
32140
+ disabled,
32141
+ invalid,
32142
+ error
32143
+ }
32144
+ );
32145
+ }
32146
+
32147
+ // src/components/features/scripts/schedule-form/schedule-offline-fields.tsx
32148
+
32149
+ function ReconnectWindowFields({
32150
+ interval,
32151
+ unit,
32152
+ onIntervalChange,
32153
+ onIntervalBlur,
32154
+ onUnitChange,
32155
+ disabled,
32156
+ invalid,
32157
+ fluid = false,
32158
+ className
32159
+ }) {
32160
+ const controlWidth = fluid ? "flex-1 min-w-0" : "w-[120px]";
32161
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex items-center gap-[var(--spacing-system-xsf)]", className), children: [
32162
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "shrink-0 text-h4", disabled ? "text-ods-text-disabled" : "text-ods-text-secondary"), children: "Stop Retry after" }),
32163
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32164
+ ScheduleIntervalInput,
32165
+ {
32166
+ min: unit === "minute" ? MIN_RECONNECT_MINUTES : 1,
32167
+ "aria-label": "Stop retry after",
32168
+ className: controlWidth,
32169
+ value: interval,
32170
+ onChange: onIntervalChange,
32171
+ onBlur: onIntervalBlur,
32172
+ "data-invalid-focus": true,
32173
+ disabled,
32174
+ invalid
32175
+ }
32176
+ ),
32177
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkDSVNFRY5cjs.Select, { value: unit, onValueChange: (next) => onUnitChange(next), disabled, children: [
32178
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectTrigger, { className: controlWidth, "aria-label": "Stop retry after unit", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectValue, {}) }),
32179
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectContent, { children: DURATION_UNIT_OPTIONS.map((opt) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
32180
+ ] })
32181
+ ] });
32182
+ }
32183
+ function ScheduleOfflineFields({ showErrors, disabled = false }) {
32184
+ const { control } = _reacthookform.useFormContext.call(void 0, );
32185
+ const trigger = _reacthookform.useWatch.call(void 0, { control, name: "trigger" });
32186
+ const collapsed = isEventTrigger(trigger);
32187
+ const { field: behaviorField } = _reacthookform.useController.call(void 0, { control, name: "offlineBehavior" });
32188
+ const { field: intervalField, fieldState: intervalState } = _reacthookform.useController.call(void 0, { control, name: "reconnectInterval" });
32189
+ const { field: unitField } = _reacthookform.useController.call(void 0, { control, name: "reconnectUnit" });
32190
+ const windowDisabled = disabled || !isRetryOnReconnect(behaviorField.value);
32191
+ const intervalError = showErrors ? _optionalChain([intervalState, 'access', _676 => _676.error, 'optionalAccess', _677 => _677.message]) : void 0;
32192
+ const handleUnitChange = (next) => {
32193
+ unitField.onChange(next);
32194
+ const snapped = snapReconnectInterval(intervalField.value, next);
32195
+ if (snapped !== intervalField.value) intervalField.onChange(snapped);
32196
+ };
32197
+ const windowFieldsFor = (fluid) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32198
+ ReconnectWindowFields,
32199
+ {
32200
+ interval: intervalField.value,
32201
+ unit: unitField.value,
32202
+ onIntervalChange: intervalField.onChange,
32203
+ onIntervalBlur: intervalField.onBlur,
32204
+ onUnitChange: handleUnitChange,
32205
+ disabled: windowDisabled,
32206
+ invalid: !!intervalError,
32207
+ fluid
32208
+ }
32209
+ );
32210
+ const options = SCHEDULE_OFFLINE_BEHAVIOR_OPTIONS.map(
32211
+ (option) => isRetryOnReconnect(option.value) ? (
32212
+ // Desktop only. Below `md` the caption plus two controls cannot share a
32213
+ // row with the option's own label without squeezing it to nothing, so
32214
+ // the same fields render full-width under the group instead.
32215
+ { ...option, trailing: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden content-md:flex", children: windowFieldsFor(false) }) }
32216
+ ) : option
32217
+ );
32218
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32219
+ "div",
32220
+ {
32221
+ inert: collapsed,
32222
+ style: {
32223
+ gridTemplateRows: collapsed ? "0fr" : "1fr",
32224
+ opacity: collapsed ? 0 : 1
32225
+ },
32226
+ className: "mb-[calc(-1*var(--spacing-system-lf))] grid transition-[grid-template-rows,opacity] duration-200 ease-out motion-reduce:transition-none",
32227
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pb-[var(--spacing-system-lf)]", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
32228
+ "div",
32229
+ {
32230
+ className: "relative flex flex-col gap-[var(--spacing-system-xxs)]",
32231
+ "data-invalid": intervalError ? true : void 0,
32232
+ children: [
32233
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "If device is offline at scheduled time" }),
32234
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32235
+ RadioGroupBlock,
31588
32236
  {
31589
- src: author.imageUrl,
31590
- fallback: _nullishCoalesce(author.name, () => ( "A")),
31591
- alt: _nullishCoalesce(author.name, () => ( "Author")),
31592
- size: "md",
31593
- variant: "round"
32237
+ variant: "grouped",
32238
+ value: behaviorField.value,
32239
+ onValueChange: behaviorField.onChange,
32240
+ disabled,
32241
+ options
31594
32242
  }
31595
32243
  ),
31596
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
31597
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { className: author.deleted ? "text-ods-error" : void 0, children: _nullishCoalesce(author.name, () => ( "Unknown")) }),
31598
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Author" })
31599
- ] })
31600
- ] }),
31601
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-20 min-w-0 flex-col justify-center", children: [
31602
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: updatedLabel }),
31603
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Updated" })
31604
- ] }),
31605
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31606
- "div",
31607
- {
31608
- className: "col-span-2 -mx-[var(--spacing-system-mf)] border-t border-ods-border content-lg:hidden",
31609
- "aria-hidden": true
31610
- }
31611
- ),
31612
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-20 min-w-0 flex-col items-start justify-center gap-[var(--spacing-system-xxs)]", children: [
31613
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7ZFCR7UYcjs.Tag, { variant: KNOWLEDGE_BASE_STATUS_VARIANT[status], label: status }),
31614
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Status" })
31615
- ] })
31616
- ] }) }),
31617
- content,
31618
- attachments.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketDetailSection, { label: "Attachments", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketAttachmentsList, { attachments }) }),
31619
- children
31620
- ]
32244
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-xs)] content-md:hidden", children: windowFieldsFor(true) }),
32245
+ intervalError && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute bottom-0 left-0 right-0 translate-y-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", className: "text-ods-error", children: intervalError }) })
32246
+ ]
32247
+ }
32248
+ ) }) })
31621
32249
  }
31622
32250
  );
31623
32251
  }
31624
32252
 
32253
+ // src/components/features/scripts/schedule-form/schedule-scripts-field.tsx
32254
+
32255
+
32256
+ // src/components/features/sortable-list/sortable-list.tsx
32257
+ var _combine = require('@atlaskit/pragmatic-drag-and-drop/combine');
32258
+ var _adapter = require('@atlaskit/pragmatic-drag-and-drop/element/adapter');
32259
+ var _preventunhandled = require('@atlaskit/pragmatic-drag-and-drop/utils/prevent-unhandled');
32260
+
32261
+
32262
+
32263
+
32264
+
32265
+
32266
+
32267
+
32268
+
32269
+
32270
+
31625
32271
  // src/components/features/sortable-list/slot-geometry.ts
31626
32272
  var SLOT_STICKINESS = 0.25;
31627
32273
  function measureSlots(items, from, gap, origin) {
@@ -31658,37 +32304,7 @@ function shiftFor(slots, index, to) {
31658
32304
  return 0;
31659
32305
  }
31660
32306
 
31661
- // src/components/features/sortable-list/sortable-drag-handle.tsx
31662
-
31663
- function SortableDragHandle({ handleProps, label, className }) {
31664
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31665
- _chunk2QMBXGMQcjs.Button,
31666
- {
31667
- type: "button",
31668
- variant: "transparent",
31669
- size: "icon-sm",
31670
- "aria-label": label ? `Drag ${label} to reorder` : "Drag to reorder",
31671
- ...handleProps,
31672
- className: _chunk3ATAYP36cjs.cn.call(void 0, "shrink-0 cursor-grab touch-none text-ods-text-secondary hover:text-ods-text-primary", className),
31673
- leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJAWIFYB2cjs.DraggerIcon, {})
31674
- }
31675
- );
31676
- }
31677
-
31678
32307
  // src/components/features/sortable-list/sortable-list.tsx
31679
- var _combine = require('@atlaskit/pragmatic-drag-and-drop/combine');
31680
- var _adapter = require('@atlaskit/pragmatic-drag-and-drop/element/adapter');
31681
- var _preventunhandled = require('@atlaskit/pragmatic-drag-and-drop/utils/prevent-unhandled');
31682
-
31683
-
31684
-
31685
-
31686
-
31687
-
31688
-
31689
-
31690
-
31691
-
31692
32308
 
31693
32309
  var SORTABLE_ITEM_ATTRIBUTE = "data-sortable-item";
31694
32310
  var SHIFT_MS = 200;
@@ -31715,13 +32331,13 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
31715
32331
  const [flipTick, setFlipTick] = _react.useState.call(void 0, 0);
31716
32332
  const flipTimer = _react.useRef.call(void 0, null);
31717
32333
  const readItems = _react.useCallback.call(void 0,
31718
- () => [..._nullishCoalesce(_optionalChain([listRef, 'access', _667 => _667.current, 'optionalAccess', _668 => _668.querySelectorAll, 'call', _669 => _669(`[${SORTABLE_ITEM_ATTRIBUTE}]`)]), () => ( []))],
32334
+ () => [..._nullishCoalesce(_optionalChain([listRef, 'access', _678 => _678.current, 'optionalAccess', _679 => _679.querySelectorAll, 'call', _680 => _680(`[${SORTABLE_ITEM_ATTRIBUTE}]`)]), () => ( []))],
31719
32335
  []
31720
32336
  );
31721
32337
  const reorder = _react.useCallback.call(void 0,
31722
32338
  (from, to) => {
31723
32339
  if (from === to) return;
31724
- const label = _nullishCoalesce(_optionalChain([getItemLabelRef, 'access', _670 => _670.current, 'optionalCall', _671 => _671(from)]), () => ( "Item"));
32340
+ const label = _nullishCoalesce(_optionalChain([getItemLabelRef, 'access', _681 => _681.current, 'optionalCall', _682 => _682(from)]), () => ( "Item"));
31725
32341
  setAnnouncement(`${label} moved to position ${to + 1} of ${readItems().length}.`);
31726
32342
  onReorderRef.current(from, to);
31727
32343
  },
@@ -31809,7 +32425,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
31809
32425
  moving.push(item);
31810
32426
  }
31811
32427
  if (moving.length === 0) return;
31812
- void _optionalChain([listRef, 'access', _672 => _672.current, 'optionalAccess', _673 => _673.offsetHeight]);
32428
+ void _optionalChain([listRef, 'access', _683 => _683.current, 'optionalAccess', _684 => _684.offsetHeight]);
31813
32429
  for (const item of moving) {
31814
32430
  item.style.transition = `transform ${DROP_MS}ms ${EASING}`;
31815
32431
  item.style.transform = "";
@@ -31834,6 +32450,136 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
31834
32450
  ] }) });
31835
32451
  }
31836
32452
 
32453
+ // src/components/features/scripts/schedule-form/schedule-script-picker-card.tsx
32454
+
32455
+
32456
+ // src/components/platform/ScriptArguments.tsx
32457
+
32458
+
32459
+ var SECRET_MASK = "**********";
32460
+ var STORED_SECRET_KEY_HINT = "A stored secret can't be renamed \u2014 delete it and add a new one";
32461
+ var ScriptArguments = ({
32462
+ arguments: args,
32463
+ onArgumentsChange,
32464
+ keyPlaceholder = "Enter Key",
32465
+ valuePlaceholder = "Enter Value (empty=flag)",
32466
+ addButtonLabel = "Add Script Argument",
32467
+ addSecretButtonLabel,
32468
+ disabled = false,
32469
+ className,
32470
+ titleLabel
32471
+ }) => {
32472
+ const handleKeyChange = (id, newKey) => {
32473
+ if (!onArgumentsChange) return;
32474
+ const updated = args.map((arg) => arg.id === id ? { ...arg, key: newKey } : arg);
32475
+ onArgumentsChange(updated);
32476
+ };
32477
+ const handleValueChange = (id, newValue) => {
32478
+ if (!onArgumentsChange) return;
32479
+ const updated = args.map((arg) => arg.id === id ? { ...arg, value: newValue } : arg);
32480
+ onArgumentsChange(updated);
32481
+ };
32482
+ const handleDelete = (id) => {
32483
+ if (!onArgumentsChange) return;
32484
+ const updated = args.filter((arg) => arg.id !== id);
32485
+ onArgumentsChange(updated);
32486
+ };
32487
+ const handleAdd = (secret = false) => {
32488
+ if (!onArgumentsChange) return;
32489
+ const newArg = {
32490
+ id: _chunkJKX2C3I2cjs.randomId.call(void 0, ),
32491
+ key: "",
32492
+ value: "",
32493
+ // Only set on a secret, so a plain pair keeps the shape it always had.
32494
+ ...secret && { secret: true }
32495
+ };
32496
+ onArgumentsChange([...args, newArg]);
32497
+ };
32498
+ const isFirstRow = (index) => index === 0;
32499
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex flex-col gap-2", className), children: [
32500
+ args.map((arg, index) => {
32501
+ const isStoredSecret = Boolean(arg.secret && arg.hasStoredValue);
32502
+ const showsMask = isStoredSecret && !arg.value;
32503
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full items-end gap-2", children: [
32504
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
32505
+ isFirstRow(index) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { spacing: "tight", children: titleLabel }),
32506
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32507
+ _chunkHTRILBJDcjs.Input,
32508
+ {
32509
+ value: arg.key,
32510
+ onChange: (e) => handleKeyChange(arg.id, e.target.value),
32511
+ placeholder: keyPlaceholder,
32512
+ disabled,
32513
+ readOnly: isStoredSecret,
32514
+ title: isStoredSecret ? STORED_SECRET_KEY_HINT : void 0,
32515
+ startAdornment: arg.secret ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMT45XX7Icjs.LockIcon, { role: "img", "aria-label": "Secret" }) : void 0
32516
+ }
32517
+ )
32518
+ ] }),
32519
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
32520
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32521
+ _chunkHTRILBJDcjs.Input,
32522
+ {
32523
+ type: arg.secret ? "password" : void 0,
32524
+ autoComplete: arg.secret ? "new-password" : void 0,
32525
+ value: arg.value,
32526
+ onChange: (e) => handleValueChange(arg.id, e.target.value),
32527
+ placeholder: showsMask ? SECRET_MASK : valuePlaceholder,
32528
+ disabled,
32529
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
32530
+ !arg.value && "placeholder:text-ods-text-muted",
32531
+ // The mask reads as a value that is there, not as a prompt to fill one in.
32532
+ showsMask && "[&_input]:placeholder:text-ods-text-primary"
32533
+ )
32534
+ }
32535
+ ) }),
32536
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32537
+ _chunk2QMBXGMQcjs.Button,
32538
+ {
32539
+ type: "button",
32540
+ variant: "outline",
32541
+ size: "icon",
32542
+ onClick: () => handleDelete(arg.id),
32543
+ disabled,
32544
+ "aria-label": "Delete argument",
32545
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Trash2, { className: "size-4 content-md:size-6", color: "var(--color-error)" })
32546
+ }
32547
+ )
32548
+ ] })
32549
+ ] }, arg.id);
32550
+ }),
32551
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-wrap justify-start gap-[var(--spacing-system-xs)]", children: [
32552
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32553
+ _chunk2QMBXGMQcjs.Button,
32554
+ {
32555
+ type: "button",
32556
+ variant: "outline",
32557
+ size: "small",
32558
+ onClick: () => handleAdd(),
32559
+ disabled,
32560
+ className: "self-start",
32561
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkEETTUAAFcjs.PlusCircleIcon, { className: "text-ods-text-secondary" }),
32562
+ children: addButtonLabel
32563
+ }
32564
+ ),
32565
+ addSecretButtonLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32566
+ _chunk2QMBXGMQcjs.Button,
32567
+ {
32568
+ type: "button",
32569
+ variant: "outline",
32570
+ size: "small",
32571
+ onClick: () => handleAdd(true),
32572
+ disabled,
32573
+ className: "self-start",
32574
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMT45XX7Icjs.LockIcon, { className: "text-ods-text-secondary" }),
32575
+ children: addSecretButtonLabel
32576
+ }
32577
+ )
32578
+ ] })
32579
+ ] });
32580
+ };
32581
+ ScriptArguments.displayName = "ScriptArguments";
32582
+
31837
32583
  // src/components/features/sortable-list/sortable-move-buttons.tsx
31838
32584
 
31839
32585
 
@@ -31846,8 +32592,8 @@ function SortableMoveButtons({ index, count, label, className }) {
31846
32592
  if (to < 0 || to >= count) return;
31847
32593
  reorder(index, to);
31848
32594
  requestAnimationFrame(() => {
31849
- if (step === -1 && to === 0) _optionalChain([downRef, 'access', _674 => _674.current, 'optionalAccess', _675 => _675.focus, 'call', _676 => _676()]);
31850
- if (step === 1 && to === count - 1) _optionalChain([upRef, 'access', _677 => _677.current, 'optionalAccess', _678 => _678.focus, 'call', _679 => _679()]);
32595
+ if (step === -1 && to === 0) _optionalChain([downRef, 'access', _685 => _685.current, 'optionalAccess', _686 => _686.focus, 'call', _687 => _687()]);
32596
+ if (step === 1 && to === count - 1) _optionalChain([upRef, 'access', _688 => _688.current, 'optionalAccess', _689 => _689.focus, 'call', _690 => _690()]);
31851
32597
  });
31852
32598
  };
31853
32599
  const subject = _nullishCoalesce(label, () => ( "item"));
@@ -31895,7 +32641,7 @@ function useSortableItem() {
31895
32641
  const [handle, setHandle] = _react.useState.call(void 0, null);
31896
32642
  const [isDragging, setIsDragging] = _react.useState.call(void 0, false);
31897
32643
  const itemRef = _react.useCallback.call(void 0, (node) => {
31898
- _optionalChain([node, 'optionalAccess', _680 => _680.setAttribute, 'call', _681 => _681(SORTABLE_ITEM_ATTRIBUTE, "")]);
32644
+ _optionalChain([node, 'optionalAccess', _691 => _691.setAttribute, 'call', _692 => _692(SORTABLE_ITEM_ATTRIBUTE, "")]);
31899
32645
  setItem(node);
31900
32646
  }, []);
31901
32647
  _react.useEffect.call(void 0, () => {
@@ -31925,13 +32671,940 @@ function useSortableItem() {
31925
32671
  if (from < 0 || to < 0 || to >= items.length) return;
31926
32672
  event.preventDefault();
31927
32673
  reorder(from, to);
31928
- requestAnimationFrame(() => _optionalChain([handle, 'optionalAccess', _682 => _682.focus, 'call', _683 => _683()]));
32674
+ requestAnimationFrame(() => _optionalChain([handle, 'optionalAccess', _693 => _693.focus, 'call', _694 => _694()]));
31929
32675
  },
31930
32676
  [inert, readItems, reorder, handle]
31931
32677
  );
31932
32678
  return { itemRef, dragHandleProps: { ref: setHandle, onKeyDown }, isDragging, dragAndDropEnabled };
31933
32679
  }
31934
32680
 
32681
+ // src/components/features/scripts/schedule-form/schedule-script-picker-card.tsx
32682
+
32683
+ var UNSET_TIMEOUT = 0;
32684
+ function ScheduleScriptPickerCard({
32685
+ index,
32686
+ count,
32687
+ supportedPlatforms,
32688
+ renderScriptSearch,
32689
+ onRemove,
32690
+ canRemove,
32691
+ disabled = false,
32692
+ showErrors = true,
32693
+ showParams = true
32694
+ }) {
32695
+ const { control, setValue, watch } = _reacthookform.useFormContext.call(void 0, );
32696
+ const selected = watch(`scripts.${index}`);
32697
+ const runParamsLocked = disabled || !_optionalChain([selected, 'optionalAccess', _695 => _695.scriptId]);
32698
+ const { itemRef, dragHandleProps, isDragging, dragAndDropEnabled } = useSortableItem();
32699
+ const isMdUp = _chunkGVTDVS5Ucjs.useContentMdUp.call(void 0, );
32700
+ const handleScriptPick = (row) => {
32701
+ if (!row) {
32702
+ setValue(`scripts.${index}`, EMPTY_SCHEDULE_SCRIPT_ROW, { shouldValidate: true });
32703
+ return;
32704
+ }
32705
+ setValue(`scripts.${index}`, row, { shouldValidate: true, shouldDirty: true });
32706
+ };
32707
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
32708
+ "div",
32709
+ {
32710
+ ref: itemRef,
32711
+ className: `flex flex-col gap-[var(--spacing-system-sf)] rounded-[6px] border bg-ods-bg p-[var(--spacing-system-l)] content-md:gap-[var(--spacing-system-lf)] ${isDragging ? "relative z-10 border-ods-accent shadow-lg" : "border-ods-border"}`,
32712
+ children: [
32713
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
32714
+ "div",
32715
+ {
32716
+ className: `flex flex-col gap-[var(--spacing-system-sf)] content-md:gap-[var(--spacing-system-lf)] ${dragAndDropEnabled ? "content-md:flex-row content-md:items-end" : ""}`,
32717
+ children: [
32718
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
32719
+ "div",
32720
+ {
32721
+ className: `flex min-w-0 flex-1 items-end ${dragAndDropEnabled ? "gap-[var(--spacing-system-xs)]" : "gap-[var(--spacing-system-xsf)]"}`,
32722
+ children: [
32723
+ dragAndDropEnabled && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32724
+ "button",
32725
+ {
32726
+ type: "button",
32727
+ ...dragHandleProps,
32728
+ disabled,
32729
+ "aria-label": `Reorder ${_optionalChain([selected, 'optionalAccess', _696 => _696.name]) || `script ${index + 1}`}`,
32730
+ className: `flex size-12 shrink-0 items-center justify-center rounded-[6px] text-ods-text-secondary hover:text-ods-text-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-ods-border-focus disabled:cursor-not-allowed disabled:opacity-30 ${isDragging ? "cursor-grabbing text-ods-text-primary" : "cursor-grab"}`,
32731
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJAWIFYB2cjs.DraggerIcon, { size: 24 })
32732
+ }
32733
+ ),
32734
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32735
+ _reacthookform.Controller,
32736
+ {
32737
+ name: `scripts.${index}.scriptId`,
32738
+ control,
32739
+ render: ({ fieldState }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: renderScriptSearch({
32740
+ scriptId: _nullishCoalesce(_optionalChain([selected, 'optionalAccess', _697 => _697.scriptId]), () => ( "")),
32741
+ name: _nullishCoalesce(_optionalChain([selected, 'optionalAccess', _698 => _698.name]), () => ( "")),
32742
+ supportedPlatforms,
32743
+ onPick: handleScriptPick,
32744
+ disabled,
32745
+ error: showErrors ? _optionalChain([fieldState, 'access', _699 => _699.error, 'optionalAccess', _700 => _700.message]) : void 0,
32746
+ invalid: showErrors && !!fieldState.error
32747
+ }) })
32748
+ }
32749
+ ),
32750
+ !dragAndDropEnabled && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
32751
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortableMoveButtons, { index, count, label: _optionalChain([selected, 'optionalAccess', _701 => _701.name]) || `script ${index + 1}` }),
32752
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32753
+ _chunk2QMBXGMQcjs.Button,
32754
+ {
32755
+ variant: "outline",
32756
+ size: "icon",
32757
+ onClick: onRemove,
32758
+ disabled: !canRemove || disabled,
32759
+ "aria-label": "Remove script from schedule",
32760
+ className: "text-ods-error disabled:opacity-30",
32761
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkIYHH5EIOcjs.TrashIcon, { size: 20 })
32762
+ }
32763
+ )
32764
+ ] })
32765
+ ]
32766
+ }
32767
+ ),
32768
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 items-end gap-[var(--spacing-system-xs)]", children: [
32769
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]", children: [
32770
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Timeout" }),
32771
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32772
+ _reacthookform.Controller,
32773
+ {
32774
+ name: `scripts.${index}.timeoutSeconds`,
32775
+ control,
32776
+ render: ({ field, fieldState }) => (
32777
+ // Locked until a script is picked: the timeout belongs to the
32778
+ // script, so the field stays EMPTY until there is one — the
32779
+ // sentinel is a "nothing here yet" marker, and rendering it as
32780
+ // a literal 0 would read as a real (and invalid) timeout.
32781
+ // Picking a script writes its own timeout in.
32782
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32783
+ _chunkHTRILBJDcjs.Input,
32784
+ {
32785
+ type: "number",
32786
+ min: 1,
32787
+ className: "w-full",
32788
+ value: field.value ? String(field.value) : "",
32789
+ onChange: (e) => field.onChange(e.target.value ? Number(e.target.value) : UNSET_TIMEOUT),
32790
+ disabled: runParamsLocked,
32791
+ endAdornment: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-secondary text-h6", children: "Seconds" }),
32792
+ error: showErrors ? _optionalChain([fieldState, 'access', _702 => _702.error, 'optionalAccess', _703 => _703.message]) : void 0,
32793
+ invalid: showErrors && !!fieldState.error
32794
+ }
32795
+ )
32796
+ )
32797
+ }
32798
+ )
32799
+ ] }),
32800
+ dragAndDropEnabled && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32801
+ _chunk2QMBXGMQcjs.Button,
32802
+ {
32803
+ variant: "outline",
32804
+ size: "icon",
32805
+ onClick: onRemove,
32806
+ disabled: !canRemove || disabled,
32807
+ "aria-label": "Remove script from schedule",
32808
+ className: "text-ods-error disabled:opacity-30",
32809
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkIYHH5EIOcjs.TrashIcon, { size: 20 })
32810
+ }
32811
+ )
32812
+ ] })
32813
+ ]
32814
+ }
32815
+ ),
32816
+ !showParams ? null : isMdUp === false ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Accordion, { type: "multiple", className: "overflow-hidden rounded-[6px] border border-ods-border", children: [
32817
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, AccordionItem, { value: "args", className: "border-ods-border data-[state=closed]:bg-ods-card", children: [
32818
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AccordionTrigger, { className: "h-14 px-[var(--spacing-system-sf)] py-0 text-ods-text-primary text-h6 hover:no-underline [&>svg]:text-ods-text-secondary", children: "Edit Default Script Arguments" }),
32819
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AccordionContent, { className: "px-[var(--spacing-system-sf)] [&_label:empty]:hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32820
+ _reacthookform.Controller,
32821
+ {
32822
+ name: `scripts.${index}.args`,
32823
+ control,
32824
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32825
+ ScriptArguments,
32826
+ {
32827
+ arguments: field.value,
32828
+ onArgumentsChange: field.onChange,
32829
+ keyPlaceholder: "Key",
32830
+ valuePlaceholder: "Enter Value (empty=flag)",
32831
+ addButtonLabel: "Add Script Argument",
32832
+ titleLabel: "",
32833
+ disabled: runParamsLocked
32834
+ }
32835
+ )
32836
+ }
32837
+ ) })
32838
+ ] }),
32839
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, AccordionItem, { value: "env", className: "border-b-0 border-ods-border data-[state=closed]:bg-ods-card", children: [
32840
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AccordionTrigger, { className: "h-14 px-[var(--spacing-system-sf)] py-0 text-ods-text-primary text-h6 hover:no-underline [&>svg]:text-ods-text-secondary", children: "Edit Default Environment Vars" }),
32841
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AccordionContent, { className: "px-[var(--spacing-system-sf)] [&_label:empty]:hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32842
+ _reacthookform.Controller,
32843
+ {
32844
+ name: `scripts.${index}.envVars`,
32845
+ control,
32846
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32847
+ ScriptArguments,
32848
+ {
32849
+ arguments: field.value,
32850
+ onArgumentsChange: field.onChange,
32851
+ keyPlaceholder: "Key",
32852
+ valuePlaceholder: "Enter Value",
32853
+ addButtonLabel: "Add Environment Var",
32854
+ addSecretButtonLabel: "Add Secret",
32855
+ titleLabel: "",
32856
+ disabled: runParamsLocked
32857
+ }
32858
+ )
32859
+ }
32860
+ ) })
32861
+ ] })
32862
+ ] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col items-start gap-[var(--spacing-system-lf)] content-md:flex-row", children: [
32863
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full min-w-0 flex-1 [&_label]:text-h4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32864
+ _reacthookform.Controller,
32865
+ {
32866
+ name: `scripts.${index}.args`,
32867
+ control,
32868
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32869
+ ScriptArguments,
32870
+ {
32871
+ arguments: field.value,
32872
+ onArgumentsChange: field.onChange,
32873
+ keyPlaceholder: "Key",
32874
+ valuePlaceholder: "Enter Value (empty=flag)",
32875
+ addButtonLabel: "Add Script Argument",
32876
+ titleLabel: "Script Arguments",
32877
+ disabled: runParamsLocked
32878
+ }
32879
+ )
32880
+ }
32881
+ ) }),
32882
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full min-w-0 flex-1 [&_label]:text-h4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32883
+ _reacthookform.Controller,
32884
+ {
32885
+ name: `scripts.${index}.envVars`,
32886
+ control,
32887
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32888
+ ScriptArguments,
32889
+ {
32890
+ arguments: field.value,
32891
+ onArgumentsChange: field.onChange,
32892
+ keyPlaceholder: "Key",
32893
+ valuePlaceholder: "Enter Value",
32894
+ addButtonLabel: "Add Environment Var",
32895
+ addSecretButtonLabel: "Add Secret",
32896
+ titleLabel: "Environment Vars",
32897
+ disabled: runParamsLocked
32898
+ }
32899
+ )
32900
+ }
32901
+ ) })
32902
+ ] })
32903
+ ]
32904
+ }
32905
+ );
32906
+ }
32907
+
32908
+ // src/components/features/scripts/schedule-form/schedule-scripts-field.tsx
32909
+
32910
+ function ScheduleScriptsField({
32911
+ showErrors,
32912
+ disabled = false,
32913
+ renderScriptSearch,
32914
+ showHeading = true,
32915
+ showScriptParams = true,
32916
+ addScripts = true
32917
+ }) {
32918
+ const { control, getValues } = _reacthookform.useFormContext.call(void 0, );
32919
+ const { fields, append, remove, move } = _reacthookform.useFieldArray.call(void 0, { control, name: "scripts" });
32920
+ const supportedPlatforms = _reacthookform.useWatch.call(void 0, { control, name: "supportedPlatforms" });
32921
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-lf)]", children: [
32922
+ showHeading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-h-[72px] items-end pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-ods-text-primary text-h2", children: "Scheduled Scripts" }) }),
32923
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32924
+ SortableList,
32925
+ {
32926
+ onReorder: move,
32927
+ disabled,
32928
+ getItemLabel: (index) => getValues(`scripts.${index}.name`) || `script ${index + 1}`,
32929
+ className: "flex flex-col gap-[var(--spacing-system-lf)]",
32930
+ children: fields.map((field, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32931
+ ScheduleScriptPickerCard,
32932
+ {
32933
+ index,
32934
+ count: fields.length,
32935
+ supportedPlatforms,
32936
+ renderScriptSearch,
32937
+ onRemove: () => remove(index),
32938
+ canRemove: fields.length > 1,
32939
+ disabled,
32940
+ showErrors,
32941
+ showParams: showScriptParams
32942
+ },
32943
+ field.id
32944
+ ))
32945
+ }
32946
+ ),
32947
+ addScripts && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32948
+ _chunk2QMBXGMQcjs.Button,
32949
+ {
32950
+ type: "button",
32951
+ variant: "outline",
32952
+ size: "small",
32953
+ onClick: () => append(EMPTY_SCHEDULE_SCRIPT_ROW),
32954
+ disabled,
32955
+ className: "self-start",
32956
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkEETTUAAFcjs.PlusCircleIcon, { className: "text-ods-text-secondary" }),
32957
+ children: "Add Script"
32958
+ }
32959
+ )
32960
+ ] });
32961
+ }
32962
+
32963
+ // src/components/features/scripts/schedule-form/schedule-timing-fields.tsx
32964
+
32965
+
32966
+
32967
+ function ScheduleTimingFields({
32968
+ showErrors,
32969
+ disabled = false,
32970
+ timeReferenceGate = "off",
32971
+ getTimeSlots = getTimeSlotOptions
32972
+ }) {
32973
+ const { control, getValues, setValue, trigger: triggerValidation } = _reacthookform.useFormContext.call(void 0, );
32974
+ const showTimeReference = timeReferenceGate === "on";
32975
+ const fieldsDisabled = disabled || timeReferenceGate === "loading";
32976
+ const recheckReconnectWindow = _react.useCallback.call(void 0, () => {
32977
+ if (showErrors) void triggerValidation("reconnectInterval");
32978
+ }, [showErrors, triggerValidation]);
32979
+ const trigger = _reacthookform.useWatch.call(void 0, { control, name: "trigger" });
32980
+ const repeatEnabled = _reacthookform.useWatch.call(void 0, { control, name: "repeatEnabled" });
32981
+ const repeatUnit = _reacthookform.useWatch.call(void 0, { control, name: "repeatUnit" });
32982
+ const scheduledDate = _reacthookform.useWatch.call(void 0, { control, name: "scheduledDate" });
32983
+ const scheduledTime = _reacthookform.useWatch.call(void 0, { control, name: "scheduledTime" });
32984
+ const timeReference = _reacthookform.useWatch.call(void 0, { control, name: "timeReference" });
32985
+ const eventDriven = isEventTrigger(trigger);
32986
+ const intervalStep = repeatUnit === "minute" ? MIN_REPEAT_MINUTES : 1;
32987
+ const timeSlots = _react.useMemo.call(void 0, () => {
32988
+ const slots = getTimeSlots(scheduledDate, timeReference);
32989
+ if (!scheduledTime || slots.some((slot) => slot.value === scheduledTime)) return slots;
32990
+ return [{ value: scheduledTime, label: slotToLabel(scheduledTime) }, ...slots];
32991
+ }, [getTimeSlots, scheduledDate, scheduledTime, timeReference]);
32992
+ const minDate = _react.useMemo.call(void 0, () => earliestScheduleDay(timeReference), [timeReference]);
32993
+ const handleDateChange = _react.useCallback.call(void 0,
32994
+ (onChange, date) => {
32995
+ onChange(date);
32996
+ const time = getValues("scheduledTime");
32997
+ if (date && time && date >= minDate && isScheduleStartInPast(date, time, getValues("timeReference")))
32998
+ setValue("scheduledTime", "");
32999
+ },
33000
+ [getValues, setValue, minDate]
33001
+ );
33002
+ const handleTimeReferenceChange = _react.useCallback.call(void 0,
33003
+ (onChange, next) => {
33004
+ onChange(next);
33005
+ const time = getValues("scheduledTime");
33006
+ if (time && !isSlotOnGrid(time, next)) setValue("scheduledTime", "");
33007
+ },
33008
+ [getValues, setValue]
33009
+ );
33010
+ const startAtStored = _reacthookform.useWatch.call(void 0, { control, name: "startAtStored" });
33011
+ const startsInPast = !eventDriven && isStartInPastAndChanged(scheduledDate, scheduledTime, startAtStored, timeReference);
33012
+ const pastDateError = startsInPast && scheduledDate && scheduledDate < minDate ? PAST_START_MESSAGE : void 0;
33013
+ const pastTimeError = startsInPast && !pastDateError ? PAST_START_MESSAGE : void 0;
33014
+ const noSlotsLeftToday = !eventDriven && timeSlots.length === 0;
33015
+ const dateError = _nullishCoalesce(pastDateError, () => ( (noSlotsLeftToday ? NO_SLOTS_TODAY_MESSAGE : void 0)));
33016
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33017
+ "div",
33018
+ {
33019
+ inert: eventDriven,
33020
+ style: {
33021
+ gridTemplateRows: eventDriven ? "0fr" : "1fr",
33022
+ opacity: eventDriven ? 0 : 1
33023
+ },
33024
+ className: "mb-[calc(-1*var(--spacing-system-lf))] grid transition-[grid-template-rows,opacity] duration-200 ease-out motion-reduce:transition-none",
33025
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-[var(--spacing-system-lf)] pb-[var(--spacing-system-lf)] content-md:grid-cols-4 content-md:items-end", children: [
33026
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
33027
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Date" }),
33028
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33029
+ _reacthookform.Controller,
33030
+ {
33031
+ name: "scheduledDate",
33032
+ control,
33033
+ render: ({ field, fieldState }) => (
33034
+ // The core picker has no clear affordance, so the design's xmark
33035
+ // rides on top of the trigger's free right edge.
33036
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative", children: [
33037
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33038
+ DatePickerInputSimple,
33039
+ {
33040
+ placeholder: "Select date",
33041
+ value: _nullishCoalesce(field.value, () => ( void 0)),
33042
+ onChange: (date) => handleDateChange(field.onChange, _nullishCoalesce(date, () => ( null))),
33043
+ fromDate: minDate,
33044
+ disabled: fieldsDisabled,
33045
+ className: "w-full",
33046
+ error: _nullishCoalesce(dateError, () => ( (showErrors ? _optionalChain([fieldState, 'access', _704 => _704.error, 'optionalAccess', _705 => _705.message]) : void 0))),
33047
+ invalid: !!dateError || showErrors && !!fieldState.error
33048
+ }
33049
+ ),
33050
+ field.value && !fieldsDisabled && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33051
+ "button",
33052
+ {
33053
+ type: "button",
33054
+ onClick: () => field.onChange(null),
33055
+ "aria-label": "Clear date",
33056
+ className: "absolute right-3 top-6 -translate-y-1/2 text-ods-text-secondary hover:text-ods-text-primary",
33057
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRUHKTWGBcjs.XmarkCircleIcon, { size: 24 })
33058
+ }
33059
+ )
33060
+ ] })
33061
+ )
33062
+ }
33063
+ )
33064
+ ] }),
33065
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
33066
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Time" }),
33067
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33068
+ _reacthookform.Controller,
33069
+ {
33070
+ name: "scheduledTime",
33071
+ control,
33072
+ render: ({ field, fieldState }) => (
33073
+ // `''` reads as "no selection" to Radix, so the placeholder shows
33074
+ // until a slot is picked — a date at midnight no longer
33075
+ // masquerades as a chosen 12:00 AM.
33076
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkDSVNFRY5cjs.Select, { value: field.value, onValueChange: field.onChange, disabled: fieldsDisabled, children: [
33077
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33078
+ _chunkDSVNFRY5cjs.SelectTrigger,
33079
+ {
33080
+ className: "w-full",
33081
+ error: _nullishCoalesce(pastTimeError, () => ( (showErrors ? _optionalChain([fieldState, 'access', _706 => _706.error, 'optionalAccess', _707 => _707.message]) : void 0))),
33082
+ invalid: !!pastTimeError || showErrors && !!fieldState.error,
33083
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectValue, { placeholder: "Select time" })
33084
+ }
33085
+ ),
33086
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectContent, { children: timeSlots.length === 0 ? (
33087
+ // Deliberately NOT a `SelectItem` — there is nothing here
33088
+ // to select, and a selectable row would put a bogus value
33089
+ // in the form. It replaces a popup that opened blank; the
33090
+ // Date field carries the same sentence for whoever never
33091
+ // opens this one.
33092
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "px-4 py-[var(--spacing-system-sf)] text-ods-text-secondary text-h6", children: NO_SLOTS_TODAY_MESSAGE })
33093
+ ) : timeSlots.map((opt) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
33094
+ ] })
33095
+ )
33096
+ }
33097
+ )
33098
+ ] }),
33099
+ showTimeReference && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
33100
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Timezone" }),
33101
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33102
+ _reacthookform.Controller,
33103
+ {
33104
+ name: "timeReference",
33105
+ control,
33106
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
33107
+ _chunkDSVNFRY5cjs.Select,
33108
+ {
33109
+ value: field.value,
33110
+ onValueChange: (next) => handleTimeReferenceChange(field.onChange, next),
33111
+ disabled: fieldsDisabled,
33112
+ children: [
33113
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectTrigger, { className: "w-full", "aria-label": "Timezone", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectValue, {}) }),
33114
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectContent, { children: SCHEDULE_TIME_REFERENCE_OPTIONS.map((opt) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
33115
+ ]
33116
+ }
33117
+ )
33118
+ }
33119
+ )
33120
+ ] }),
33121
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "min-w-0", showTimeReference && "content-md:col-start-1"), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33122
+ _reacthookform.Controller,
33123
+ {
33124
+ name: "repeatEnabled",
33125
+ control,
33126
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33127
+ CheckboxBlock,
33128
+ {
33129
+ label: "Repeat Script Run",
33130
+ checked: field.value,
33131
+ onCheckedChange: (next) => {
33132
+ field.onChange(next);
33133
+ recheckReconnectWindow();
33134
+ },
33135
+ disabled: fieldsDisabled,
33136
+ className: "w-full"
33137
+ }
33138
+ )
33139
+ }
33140
+ ) }),
33141
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-end gap-[var(--spacing-system-xs)]", children: [
33142
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]", children: [
33143
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Repeat in" }),
33144
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33145
+ _reacthookform.Controller,
33146
+ {
33147
+ name: "repeatInterval",
33148
+ control,
33149
+ render: ({ field, fieldState }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33150
+ ScheduleIntervalInput,
33151
+ {
33152
+ min: intervalStep,
33153
+ className: "w-full",
33154
+ value: field.value,
33155
+ onChange: field.onChange,
33156
+ onBlur: () => {
33157
+ field.onBlur();
33158
+ recheckReconnectWindow();
33159
+ },
33160
+ disabled: fieldsDisabled || !repeatEnabled,
33161
+ error: showErrors ? _optionalChain([fieldState, 'access', _708 => _708.error, 'optionalAccess', _709 => _709.message]) : void 0,
33162
+ invalid: showErrors && !!fieldState.error
33163
+ }
33164
+ )
33165
+ }
33166
+ )
33167
+ ] }),
33168
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33169
+ _reacthookform.Controller,
33170
+ {
33171
+ name: "repeatUnit",
33172
+ control,
33173
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
33174
+ _chunkDSVNFRY5cjs.Select,
33175
+ {
33176
+ value: field.value,
33177
+ onValueChange: (next) => {
33178
+ field.onChange(next);
33179
+ const snapped = snapRepeatInterval(getValues("repeatInterval"), next);
33180
+ if (snapped !== getValues("repeatInterval")) setValue("repeatInterval", snapped);
33181
+ recheckReconnectWindow();
33182
+ },
33183
+ disabled: fieldsDisabled || !repeatEnabled,
33184
+ children: [
33185
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectTrigger, { className: "w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectValue, {}) }),
33186
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectContent, { children: DURATION_UNIT_OPTIONS.map((opt) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.SelectItem, { value: opt.value, children: opt.label }, opt.value)) })
33187
+ ]
33188
+ }
33189
+ )
33190
+ }
33191
+ ) })
33192
+ ] })
33193
+ ] }) })
33194
+ }
33195
+ );
33196
+ }
33197
+
33198
+ // src/components/features/scripts/schedule-form/schedule-form-fields.tsx
33199
+
33200
+ function ScheduleFormFields({
33201
+ showErrors,
33202
+ disabled = false,
33203
+ renderScriptSearch,
33204
+ timeReferenceGate = "off",
33205
+ platforms = _chunkCWRVTQUOcjs.OS_PLATFORMS,
33206
+ comingSoonPlatforms = [],
33207
+ getTimeSlots,
33208
+ nameLayout = "stacked",
33209
+ showNote = true,
33210
+ showTrigger = true,
33211
+ showPlatforms = true,
33212
+ showOfflineBehavior = true,
33213
+ showScriptsHeading = true,
33214
+ showScriptParams = true,
33215
+ addScripts = true
33216
+ }) {
33217
+ const { control, formState, getValues, setValue } = _reacthookform.useFormContext.call(void 0, );
33218
+ const isMdUp = _chunkGVTDVS5Ucjs.useContentMdUp.call(void 0, );
33219
+ const supportedPlatforms = _reacthookform.useWatch.call(void 0, { control, name: "supportedPlatforms" });
33220
+ const togglePlatform = _react.useCallback.call(void 0,
33221
+ (platform) => {
33222
+ const current = getValues("supportedPlatforms");
33223
+ const has = current.includes(platform);
33224
+ setValue("supportedPlatforms", has ? current.filter((p) => p !== platform) : [...current, platform], {
33225
+ shouldValidate: true,
33226
+ shouldDirty: true
33227
+ });
33228
+ },
33229
+ [getValues, setValue]
33230
+ );
33231
+ const nameField = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
33232
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Schedule Name" }),
33233
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33234
+ _reacthookform.Controller,
33235
+ {
33236
+ name: "name",
33237
+ control,
33238
+ render: ({ field, fieldState }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33239
+ _chunkHTRILBJDcjs.Input,
33240
+ {
33241
+ placeholder: "Enter schedule name",
33242
+ value: field.value,
33243
+ onChange: field.onChange,
33244
+ disabled,
33245
+ className: "w-full",
33246
+ error: showErrors ? _optionalChain([fieldState, 'access', _710 => _710.error, 'optionalAccess', _711 => _711.message]) : void 0,
33247
+ invalid: showErrors && !!fieldState.error
33248
+ }
33249
+ )
33250
+ }
33251
+ )
33252
+ ] });
33253
+ const platformField = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
33254
+ "div",
33255
+ {
33256
+ className: "relative flex flex-col gap-[var(--spacing-system-xxs)]",
33257
+ "data-invalid": showErrors && !!formState.errors.supportedPlatforms || void 0,
33258
+ children: [
33259
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Supported Platform" }),
33260
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "grid grid-cols-2 gap-[var(--spacing-system-mf)] content-md:grid-cols-4", children: platforms.map((platform) => {
33261
+ const comingSoon = comingSoonPlatforms.includes(platform.id);
33262
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33263
+ SelectButton,
33264
+ {
33265
+ title: platform.name,
33266
+ icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, platform.icon, { className: "h-5 w-5" }),
33267
+ selected: !comingSoon && supportedPlatforms.includes(platform.id),
33268
+ disabled: comingSoon || disabled,
33269
+ tag: comingSoon ? isMdUp ? "Coming Soon" : "Soon" : void 0,
33270
+ onClick: comingSoon || disabled ? void 0 : () => togglePlatform(platform.id)
33271
+ },
33272
+ platform.id
33273
+ );
33274
+ }) }),
33275
+ showErrors && formState.errors.supportedPlatforms && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute bottom-0 left-0 right-0 translate-y-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", className: "text-ods-error", children: _nullishCoalesce(formState.errors.supportedPlatforms.message, () => ( "")) }) })
33276
+ ]
33277
+ }
33278
+ );
33279
+ const timingFields = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33280
+ ScheduleTimingFields,
33281
+ {
33282
+ showErrors,
33283
+ disabled,
33284
+ timeReferenceGate,
33285
+ getTimeSlots
33286
+ }
33287
+ );
33288
+ const nameInline = nameLayout === "inline";
33289
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-lf)]", children: [
33290
+ nameInline ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-lf)] content-md:flex-row content-md:items-start", children: [
33291
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 content-md:flex-1", children: nameField }),
33292
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 content-md:flex-[3]", children: timingFields })
33293
+ ] }) : nameField,
33294
+ showNote && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
33295
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Note" }),
33296
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33297
+ _reacthookform.Controller,
33298
+ {
33299
+ name: "description",
33300
+ control,
33301
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33302
+ Textarea,
33303
+ {
33304
+ placeholder: "Enter note here (optional)",
33305
+ value: field.value,
33306
+ onChange: field.onChange,
33307
+ disabled,
33308
+ className: "min-h-[96px] w-full"
33309
+ }
33310
+ )
33311
+ }
33312
+ )
33313
+ ] }),
33314
+ showTrigger && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33315
+ _reacthookform.Controller,
33316
+ {
33317
+ name: "trigger",
33318
+ control,
33319
+ render: ({ field }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33320
+ RadioGroupBlock,
33321
+ {
33322
+ variant: "grouped",
33323
+ value: field.value,
33324
+ onValueChange: field.onChange,
33325
+ disabled,
33326
+ options: SCHEDULE_TRIGGER_OPTIONS
33327
+ }
33328
+ )
33329
+ }
33330
+ ),
33331
+ showPlatforms && platformField,
33332
+ !nameInline && timingFields,
33333
+ showOfflineBehavior && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScheduleOfflineFields, { showErrors, disabled }),
33334
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33335
+ ScheduleScriptsField,
33336
+ {
33337
+ showErrors,
33338
+ disabled,
33339
+ renderScriptSearch,
33340
+ showHeading: showScriptsHeading,
33341
+ showScriptParams,
33342
+ addScripts
33343
+ }
33344
+ )
33345
+ ] });
33346
+ }
33347
+
33348
+ // src/components/features/scripts/schedule-form/schedule-script-search-field.tsx
33349
+
33350
+ function ScriptPlatformIcons({ platforms }) {
33351
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "inline-flex shrink-0 items-center gap-0.5", children: _chunkCWRVTQUOcjs.OS_PLATFORMS.filter((p) => platforms.includes(p.id)).map((p) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, p.icon, { className: "h-3.5 w-3.5 text-ods-text-secondary opacity-60" }, p.id)) });
33352
+ }
33353
+ function ScheduleScriptSearchField({
33354
+ scriptId,
33355
+ name,
33356
+ scripts,
33357
+ isLoading = false,
33358
+ inputValue = "",
33359
+ onInputChange,
33360
+ onOpen,
33361
+ onClose,
33362
+ onChange,
33363
+ disabled = false,
33364
+ error,
33365
+ invalid = false
33366
+ }) {
33367
+ const handleBlur = (e) => {
33368
+ if (!e.currentTarget.contains(e.relatedTarget)) _optionalChain([onClose, 'optionalCall', _712 => _712()]);
33369
+ };
33370
+ const options = scripts.map((s) => ({ label: s.name, value: s.id }));
33371
+ if (scriptId && !options.some((o) => o.value === scriptId)) {
33372
+ options.unshift({ label: name, value: scriptId });
33373
+ }
33374
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]", onFocus: onOpen, onBlur: handleBlur, children: [
33375
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkK6VWTUCHcjs.Label, { className: "text-h4", children: "Select Script" }),
33376
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33377
+ _chunkDSVNFRY5cjs.Autocomplete,
33378
+ {
33379
+ options,
33380
+ value: scriptId || null,
33381
+ onChange,
33382
+ placeholder: "Select a script...",
33383
+ disableClientFilter: true,
33384
+ onInputChange,
33385
+ loading: isLoading,
33386
+ loadingText: "Searching scripts...",
33387
+ noOptionsText: inputValue ? "No scripts match your search" : "No scripts available",
33388
+ disabled,
33389
+ error,
33390
+ invalid,
33391
+ renderOption: (option, isSelected) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex w-full min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
33392
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-w-0 flex-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { className: isSelected ? "text-ods-accent" : void 0, children: option.label }) }),
33393
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScriptPlatformIcons, { platforms: _nullishCoalesce(_optionalChain([scripts, 'access', _713 => _713.find, 'call', _714 => _714((s) => s.id === option.value), 'optionalAccess', _715 => _715.supportedPlatforms]), () => ( [])) })
33394
+ ] })
33395
+ }
33396
+ )
33397
+ ] });
33398
+ }
33399
+
33400
+ // src/components/features/knowledge-base/knowledge-base-item-icon.ts
33401
+ var KNOWLEDGE_BASE_ITEM_ICON = {
33402
+ ARTICLE: _chunkAGGRYMOJcjs.BookTextIcon,
33403
+ FOLDER: _chunkQ6Z5Z3C4cjs.FolderIcon
33404
+ };
33405
+
33406
+ // src/components/features/knowledge-base/knowledge-base-table.tsx
33407
+
33408
+
33409
+ // src/components/features/knowledge-base/knowledge-base-status.ts
33410
+ var KNOWLEDGE_BASE_STATUS_VARIANT = {
33411
+ PUBLISHED: "success",
33412
+ DRAFT: "warning",
33413
+ ARCHIVED: "grey"
33414
+ };
33415
+
33416
+ // src/components/features/knowledge-base/knowledge-base-table.tsx
33417
+
33418
+ function getKnowledgeBaseOpenColumn(getHref) {
33419
+ return {
33420
+ id: "open",
33421
+ cell: ({ row }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33422
+ _chunk2QMBXGMQcjs.Button,
33423
+ {
33424
+ onClick: _chunkCWRVTQUOcjs.openInNewTab.call(void 0, getHref(row.original)),
33425
+ variant: "outline",
33426
+ size: "icon",
33427
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
33428
+ "aria-label": "Open in new tab",
33429
+ className: "bg-ods-card"
33430
+ }
33431
+ ) }),
33432
+ enableSorting: false,
33433
+ meta: { width: "w-12 shrink-0 flex-none", hideAt: "md", align: "right" }
33434
+ };
33435
+ }
33436
+ function getKnowledgeBaseColumns(mode) {
33437
+ return [
33438
+ {
33439
+ accessorKey: "name",
33440
+ header: "Name",
33441
+ cell: ({ row }) => {
33442
+ const item = row.original;
33443
+ const Icon = item.type === "FOLDER" ? KNOWLEDGE_BASE_ITEM_ICON.FOLDER : KNOWLEDGE_BASE_ITEM_ICON.ARTICLE;
33444
+ const status = item.status;
33445
+ const tagStatus = status === "DRAFT" || status === "ARCHIVED" ? status : null;
33446
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative box-border flex h-20 w-full shrink-0 content-stretch items-center justify-start gap-[var(--spacing-system-m)] py-0", children: [
33447
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "relative flex h-8 w-8 shrink-0 items-center justify-center rounded-[6px] border border-ods-border", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Icon, { size: 16, className: "shrink-0 text-ods-text-secondary" }) }),
33448
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
33449
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
33450
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: item.name }) }),
33451
+ tagStatus && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33452
+ _chunk7ZFCR7UYcjs.Tag,
33453
+ {
33454
+ variant: KNOWLEDGE_BASE_STATUS_VARIANT[tagStatus],
33455
+ label: tagStatus,
33456
+ className: "shrink-0"
33457
+ }
33458
+ )
33459
+ ] }),
33460
+ item.type === "ARTICLE" && item.summary && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { variant: "h6", tone: "secondary", children: item.summary })
33461
+ ] })
33462
+ ] });
33463
+ },
33464
+ enableSorting: false,
33465
+ meta: { width: "flex-1 min-w-0" }
33466
+ },
33467
+ {
33468
+ accessorKey: mode === "archive" ? "updatedAt" : "createdAt",
33469
+ header: mode === "archive" ? "Archived" : "Created",
33470
+ cell: ({ row }) => {
33471
+ if (row.original.type !== "ARTICLE") return null;
33472
+ const ts = mode === "archive" ? _nullishCoalesce(row.original.updatedAt, () => ( row.original.createdAt)) : row.original.createdAt;
33473
+ if (!ts) return null;
33474
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col whitespace-nowrap", children: [
33475
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: _chunkPQ2M7P2Ucjs.formatDate.call(void 0, ts) }),
33476
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-heading-5 text-ods-text-secondary", children: _chunkPQ2M7P2Ucjs.formatTime.call(void 0, ts) })
33477
+ ] });
33478
+ },
33479
+ enableSorting: false,
33480
+ meta: { width: "w-[140px]", hideAt: "lg" }
33481
+ }
33482
+ ];
33483
+ }
33484
+ function KnowledgeBaseTableBody({
33485
+ items,
33486
+ getHref,
33487
+ mode = "standard",
33488
+ isLoading,
33489
+ emptyMessage = "No items found.",
33490
+ skeletonRows,
33491
+ stickyHeaderOffset,
33492
+ footerSlot,
33493
+ actionsColumn,
33494
+ totalCount,
33495
+ compact = false
33496
+ }) {
33497
+ const columns = _react.useMemo.call(void 0, () => {
33498
+ const base = getKnowledgeBaseColumns(mode);
33499
+ const leading = compact ? base.slice(0, 1) : base;
33500
+ const trailing = compact ? [] : [getKnowledgeBaseOpenColumn(getHref)];
33501
+ return actionsColumn ? [...leading, actionsColumn, ...trailing] : [...leading, ...trailing];
33502
+ }, [mode, actionsColumn, getHref, compact]);
33503
+ const table = useDataTable({
33504
+ data: items,
33505
+ columns,
33506
+ getRowId: (row) => row.id,
33507
+ enableSorting: false
33508
+ });
33509
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, DataTable, { table, children: [
33510
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33511
+ DataTable.Header,
33512
+ {
33513
+ stickyHeader: !!stickyHeaderOffset,
33514
+ stickyHeaderOffset,
33515
+ rightSlot: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.RowCount, { itemName: mode === "archive" ? "article" : "item", totalCount })
33516
+ }
33517
+ ),
33518
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.Body, { loading: isLoading, skeletonRows, emptyMessage, rowHref: getHref }),
33519
+ footerSlot
33520
+ ] });
33521
+ }
33522
+
33523
+ // src/components/features/knowledge-base/knowledge-base-article-view.tsx
33524
+
33525
+ function KnowledgeBaseArticleView({
33526
+ title,
33527
+ onBack,
33528
+ actions,
33529
+ menuActions,
33530
+ tags = [],
33531
+ author,
33532
+ updatedLabel,
33533
+ status,
33534
+ content,
33535
+ attachments = [],
33536
+ children,
33537
+ className = "px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]"
33538
+ }) {
33539
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
33540
+ _chunkDSVNFRY5cjs.PageLayout,
33541
+ {
33542
+ title,
33543
+ backButton: onBack ? { label: "Back", onClick: onBack } : void 0,
33544
+ actionsVariant: "menu-primary",
33545
+ actions,
33546
+ menuActions,
33547
+ className,
33548
+ children: [
33549
+ tags.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap gap-[var(--spacing-system-xsf)]", children: tags.map((tag) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7ZFCR7UYcjs.Tag, { label: tag.label, variant: "outline", className: "max-w-full" }, tag.id)) }),
33550
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYXKB5WREcjs.Card, { className: "border-ods-border px-[var(--spacing-system-mf)] py-0", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-2 gap-x-[var(--spacing-system-mf)] content-lg:grid-cols-3", children: [
33551
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-20 min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
33552
+ author.deleted ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkO67V3HJRcjs.DeletedUserAvatar, { size: "md" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33553
+ _chunk7ZFCR7UYcjs.SquareAvatar,
33554
+ {
33555
+ src: author.imageUrl,
33556
+ fallback: _nullishCoalesce(author.name, () => ( "A")),
33557
+ alt: _nullishCoalesce(author.name, () => ( "Author")),
33558
+ size: "md",
33559
+ variant: "round"
33560
+ }
33561
+ ),
33562
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
33563
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { className: author.deleted ? "text-ods-error" : void 0, children: _nullishCoalesce(author.name, () => ( "Unknown")) }),
33564
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Author" })
33565
+ ] })
33566
+ ] }),
33567
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-20 min-w-0 flex-col justify-center", children: [
33568
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { children: updatedLabel }),
33569
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Updated" })
33570
+ ] }),
33571
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33572
+ "div",
33573
+ {
33574
+ className: "col-span-2 -mx-[var(--spacing-system-mf)] border-t border-ods-border content-lg:hidden",
33575
+ "aria-hidden": true
33576
+ }
33577
+ ),
33578
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-20 min-w-0 flex-col items-start justify-center gap-[var(--spacing-system-xxs)]", children: [
33579
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7ZFCR7UYcjs.Tag, { variant: KNOWLEDGE_BASE_STATUS_VARIANT[status], label: status }),
33580
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-heading-5 text-ods-text-secondary", children: "Status" })
33581
+ ] })
33582
+ ] }) }),
33583
+ content,
33584
+ attachments.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketDetailSection, { label: "Attachments", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketAttachmentsList, { attachments }) }),
33585
+ children
33586
+ ]
33587
+ }
33588
+ );
33589
+ }
33590
+
33591
+ // src/components/features/sortable-list/sortable-drag-handle.tsx
33592
+
33593
+ function SortableDragHandle({ handleProps, label, className }) {
33594
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33595
+ _chunk2QMBXGMQcjs.Button,
33596
+ {
33597
+ type: "button",
33598
+ variant: "transparent",
33599
+ size: "icon-sm",
33600
+ "aria-label": label ? `Drag ${label} to reorder` : "Drag to reorder",
33601
+ ...handleProps,
33602
+ className: _chunk3ATAYP36cjs.cn.call(void 0, "shrink-0 cursor-grab touch-none text-ods-text-secondary hover:text-ods-text-primary", className),
33603
+ leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJAWIFYB2cjs.DraggerIcon, {})
33604
+ }
33605
+ );
33606
+ }
33607
+
31935
33608
  // src/components/features/ticket-status-config-list/ticket-status-config-list.tsx
31936
33609
 
31937
33610
  function TicketStatusConfigList({
@@ -31947,7 +33620,7 @@ function TicketStatusConfigList({
31947
33620
  onReorder,
31948
33621
  getItemLabel,
31949
33622
  className: _chunk3ATAYP36cjs.cn.call(void 0, "flex w-full flex-col gap-[var(--spacing-system-xs)]", className),
31950
- children: items.map((item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortableRow, { index, count: items.length, label: _optionalChain([getItemLabel, 'optionalCall', _684 => _684(index)]), children: (args) => renderRow(item, args) }, item.id))
33623
+ children: items.map((item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortableRow, { index, count: items.length, label: _optionalChain([getItemLabel, 'optionalCall', _716 => _716(index)]), children: (args) => renderRow(item, args) }, item.id))
31951
33624
  }
31952
33625
  );
31953
33626
  }
@@ -31996,13 +33669,13 @@ function ConversationCard({
31996
33669
  ),
31997
33670
  style: tint,
31998
33671
  children: [
31999
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkS2CA5WE4cjs.ChatTurn, { avatar: requester.avatar, name: requester.name, meta: requester.meta, time: requester.time, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "m-0 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", title: request, children: [
33672
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCWRVTQUOcjs.ChatTurn, { avatar: requester.avatar, name: requester.name, meta: requester.meta, time: requester.time, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "m-0 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", title: request, children: [
32000
33673
  "\u201C",
32001
33674
  request,
32002
33675
  "\u201D"
32003
33676
  ] }) }),
32004
33677
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
32005
- _chunkS2CA5WE4cjs.ChatTurn,
33678
+ _chunkCWRVTQUOcjs.ChatTurn,
32006
33679
  {
32007
33680
  avatar: responder.avatar,
32008
33681
  name: responder.name,
@@ -32033,7 +33706,6 @@ var PANEL_TOP_HEIGHT_CLASS = "h-[256px]";
32033
33706
  var PANEL_SCREEN_HEIGHT_CLASS = "h-[420px]";
32034
33707
  var PANEL_FOOTER_HEIGHT_CLASS = "h-[52px]";
32035
33708
  var CARD_HEIGHT_CLASS = "h-[700px]";
32036
- var SKELETON_HEIGHT_CLASS = "h-[700px] content-lg:h-[824px]";
32037
33709
  var capabilityTabId = (id) => `${id}-tab`;
32038
33710
  function Highlights({ items, className }) {
32039
33711
  if (items.length === 0) return null;
@@ -32065,16 +33737,16 @@ function Example({
32065
33737
  ),
32066
33738
  children: [
32067
33739
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 gap-2.5", children: [
32068
- mark(_nullishCoalesce(_optionalChain([requester, 'optionalAccess', _685 => _685.mark]), () => ( requesterMark))),
33740
+ mark(_nullishCoalesce(_optionalChain([requester, 'optionalAccess', _717 => _717.mark]), () => ( requesterMark))),
32069
33741
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
32070
- who(_nullishCoalesce(_optionalChain([requester, 'optionalAccess', _686 => _686.name]), () => ( labels.requester)), _nullishCoalesce(_optionalChain([requester, 'optionalAccess', _687 => _687.note]), () => ( labels.requesterNote))),
33742
+ who(_nullishCoalesce(_optionalChain([requester, 'optionalAccess', _718 => _718.name]), () => ( labels.requester)), _nullishCoalesce(_optionalChain([requester, 'optionalAccess', _719 => _719.note]), () => ( labels.requesterNote))),
32071
33743
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { lines: 2, variant: "h4", className: "min-h-[2lh]", children: `\u201C${example.request}\u201D` })
32072
33744
  ] })
32073
33745
  ] }),
32074
33746
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 gap-2.5 border-t border-ods-border pt-3", children: [
32075
- mark(_nullishCoalesce(_optionalChain([responder, 'optionalAccess', _688 => _688.mark]), () => ( responderMark))),
33747
+ mark(_nullishCoalesce(_optionalChain([responder, 'optionalAccess', _720 => _720.mark]), () => ( responderMark))),
32076
33748
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
32077
- who(_nullishCoalesce(_optionalChain([responder, 'optionalAccess', _689 => _689.name]), () => ( labels.responder)), _nullishCoalesce(_optionalChain([responder, 'optionalAccess', _690 => _690.note]), () => ( labels.responderNote))),
33749
+ who(_nullishCoalesce(_optionalChain([responder, 'optionalAccess', _721 => _721.name]), () => ( labels.responder)), _nullishCoalesce(_optionalChain([responder, 'optionalAccess', _722 => _722.note]), () => ( labels.responderNote))),
32078
33750
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-start gap-2", children: [
32079
33751
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXIBCMGBWcjs.CheckIcon, { size: 16, className: "mt-0.5 shrink-0 text-ods-flamingo-cyan" }),
32080
33752
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDSVNFRY5cjs.TruncateText, { lines: 2, variant: "h6", tone: "secondary", className: "min-h-[2lh]", triggerClassName: "flex-1", children: example.outcome })
@@ -32085,10 +33757,118 @@ function Example({
32085
33757
  }
32086
33758
  );
32087
33759
  }
32088
- function CapabilityExplorerSkeleton({ className }) {
32089
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className, children: [
32090
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5M5C6UV4cjs.Skeleton, { className: _chunk3ATAYP36cjs.cn.call(void 0, SKELETON_HEIGHT_CLASS, "w-full") }),
32091
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SnapCarouselControlsSkeleton, { className: "content-lg:hidden" })
33760
+ function LineBar2({ line, width }) {
33761
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: line, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "inline-block h-[0.7em] animate-pulse rounded bg-ods-border align-middle", width) }) });
33762
+ }
33763
+ function ExampleSkeleton({ className }) {
33764
+ const turn = (first) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex min-w-0 gap-2.5", !first && "border-t border-ods-border pt-3"), children: [
33765
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5M5C6UV4cjs.Skeleton, { className: "size-6 shrink-0 rounded-full" }),
33766
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
33767
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h6", width: "w-28" }),
33768
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-h-[2lh] text-h4", children: [
33769
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h4", width: "w-full" }),
33770
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h4", width: "w-2/3" })
33771
+ ] })
33772
+ ] })
33773
+ ] });
33774
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
33775
+ "div",
33776
+ {
33777
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
33778
+ "flex min-w-0 flex-col justify-center gap-3 overflow-hidden rounded-xl border border-ods-border bg-ods-bg px-[var(--spacing-system-mf)] py-[var(--spacing-system-sf)]",
33779
+ className
33780
+ ),
33781
+ children: [
33782
+ turn(true),
33783
+ turn(false)
33784
+ ]
33785
+ }
33786
+ );
33787
+ }
33788
+ function JobHeadSkeleton() {
33789
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
33790
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5M5C6UV4cjs.Skeleton, { className: "size-9 shrink-0 rounded-lg" }),
33791
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
33792
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h4", width: "w-32" }),
33793
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-0.5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h6", width: "w-40" }) })
33794
+ ] })
33795
+ ] });
33796
+ }
33797
+ function CapabilityExplorerSkeleton({ className, count = 8 }) {
33798
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className, "aria-hidden": true, children: [
33799
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "content-lg:hidden", children: [
33800
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex gap-[var(--spacing-system-sf)] overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
33801
+ "div",
33802
+ {
33803
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
33804
+ "flex min-w-0 shrink-0 basis-[86%] flex-col gap-[var(--spacing-system-sf)] overflow-hidden rounded-xl border border-ods-border bg-ods-card p-[var(--spacing-system-mf)]",
33805
+ CARD_HEIGHT_CLASS
33806
+ ),
33807
+ children: [
33808
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-w-0 items-center gap-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, JobHeadSkeleton, {}) }),
33809
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-h-[3lh] text-h6", children: [
33810
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h6", width: "w-full" }),
33811
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h6", width: "w-5/6" })
33812
+ ] }),
33813
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5M5C6UV4cjs.Skeleton, { className: "h-[300px] shrink-0 rounded-lg" }),
33814
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExampleSkeleton, { className: "shrink-0" })
33815
+ ]
33816
+ }
33817
+ ) }),
33818
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SnapCarouselControlsSkeleton, {})
33819
+ ] }),
33820
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
33821
+ "div",
33822
+ {
33823
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
33824
+ "hidden grid-cols-[minmax(0,360px)_minmax(0,1fr)] gap-[var(--spacing-system-lf)] content-lg:grid",
33825
+ PANEL_HEIGHT_CLASS
33826
+ ),
33827
+ children: [
33828
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-h-0 flex-col gap-1 overflow-hidden", children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33829
+ "div",
33830
+ {
33831
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
33832
+ "flex min-w-0 shrink-0 items-center gap-3.5 rounded-lg border px-3.5 py-3",
33833
+ i === 0 ? "border-ods-border bg-ods-card" : "border-transparent"
33834
+ ),
33835
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, JobHeadSkeleton, {})
33836
+ },
33837
+ i
33838
+ )) }),
33839
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-h-0 min-w-0 flex-col gap-5 overflow-hidden rounded-xl border border-ods-border bg-ods-card px-8 py-7", children: [
33840
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "grid shrink-0 grid-cols-[minmax(0,1fr)_minmax(0,380px)] gap-8", PANEL_TOP_HEIGHT_CLASS), children: [
33841
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-col overflow-hidden", children: [
33842
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mb-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h2", width: "w-64" }) }),
33843
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-h-[3lh] text-h4", children: [
33844
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h4", width: "w-full" }),
33845
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h4", width: "w-4/5" })
33846
+ ] }),
33847
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-auto grid grid-cols-1 gap-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center gap-2.5", children: [
33848
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5M5C6UV4cjs.Skeleton, { className: "size-4 shrink-0 rounded-full" }),
33849
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h6", width: i === 1 ? "w-56" : "w-48" })
33850
+ ] }, i)) })
33851
+ ] }),
33852
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExampleSkeleton, {})
33853
+ ] }),
33854
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5M5C6UV4cjs.Skeleton, { className: _chunk3ATAYP36cjs.cn.call(void 0, "shrink-0 rounded-xl", PANEL_SCREEN_HEIGHT_CLASS) }),
33855
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
33856
+ "div",
33857
+ {
33858
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
33859
+ "flex min-w-0 shrink-0 items-center gap-[var(--spacing-system-sf)]",
33860
+ PANEL_FOOTER_HEIGHT_CLASS
33861
+ ),
33862
+ children: [
33863
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LineBar2, { line: "text-h5", width: "w-16" }),
33864
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5M5C6UV4cjs.Skeleton, { className: "h-7 w-36 rounded-md" })
33865
+ ]
33866
+ }
33867
+ )
33868
+ ] })
33869
+ ]
33870
+ }
33871
+ )
32092
33872
  ] });
32093
33873
  }
32094
33874
  function CapabilityExplorer({
@@ -32166,7 +33946,7 @@ function CapabilityExplorer({
32166
33946
  if (next === null) return;
32167
33947
  event.preventDefault();
32168
33948
  onActiveChange(items[next].id);
32169
- _optionalChain([listRef, 'access', _691 => _691.current, 'optionalAccess', _692 => _692.querySelectorAll, 'call', _693 => _693('[role="tab"]'), 'access', _694 => _694[next], 'optionalAccess', _695 => _695.focus, 'call', _696 => _696()]);
33949
+ _optionalChain([listRef, 'access', _723 => _723.current, 'optionalAccess', _724 => _724.querySelectorAll, 'call', _725 => _725('[role="tab"]'), 'access', _726 => _726[next], 'optionalAccess', _727 => _727.focus, 'call', _728 => _728()]);
32170
33950
  };
32171
33951
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
32172
33952
  "div",
@@ -32900,4 +34680,74 @@ function CapabilityExplorer({
32900
34680
 
32901
34681
 
32902
34682
 
32903
- exports.AllowedDomainsInput = AllowedDomainsInput; exports.AnnouncementBarView = AnnouncementBarView; exports.timezoneLabel = timezoneLabel; exports.timezoneOptions = timezoneOptions; exports.TimezoneSelect = TimezoneSelect; exports.CheckboxBlock = CheckboxBlock; exports.CheckboxWithDescription = CheckboxWithDescription; exports.DatePickerCalendar = DatePickerCalendar; exports.DatePicker = DatePicker; exports.DatePickerInput = DatePickerInput; exports.DatePickerInputSimple = DatePickerInputSimple; exports.DateFilterPanel = DateFilterPanel; exports.DateFilterMenu = DateFilterMenu; exports.DurationInput = DurationInput; exports.HoneypotField = HoneypotField; exports.JsonDetailList = JsonDetailList; exports.ProgressBar = ProgressBar; exports.InfoCard = InfoCard; exports.InfoRow = InfoRow; exports.SearchableSelect = SearchableSelect; exports.AssigneeDropdown = AssigneeDropdown; exports.InfoSection = InfoSection; exports.InputTrigger = InputTrigger; exports.MediaTypeSelector = MediaTypeSelector; exports.noDataIconClasses = noDataIconClasses; exports.noDataActionsVariants = noDataActionsVariants; exports.NoDataAction = NoDataAction; exports.NoDataActions = NoDataActions; exports.NoDataMessage = NoDataMessage; exports.NoData = NoData; exports.PageLoader = PageLoader; exports.CompactPageLoader = CompactPageLoader; exports.RadioGroup = RadioGroup; exports.RadioGroupItem = RadioGroupItem; exports.RadioGroupBlock = RadioGroupBlock; exports.Switch = Switch; exports.TagSelectDropdown = TagSelectDropdown; exports.badgeVariants = badgeVariants; exports.Badge = Badge; exports.TagsInput = TagsInput; exports.TagsManager = TagsManager; exports.Textarea = Textarea; exports.AlertDialog = AlertDialog; exports.AlertDialogTrigger = AlertDialogTrigger; exports.AlertDialogPortal = AlertDialogPortal; exports.AlertDialogOverlay = AlertDialogOverlay; exports.AlertDialogContent = AlertDialogContent; exports.AlertDialogHeader = AlertDialogHeader; exports.AlertDialogFooter = AlertDialogFooter; exports.AlertDialogTitle = AlertDialogTitle; exports.AlertDialogDescription = AlertDialogDescription; exports.AlertDialogAction = AlertDialogAction; exports.AlertDialogCancel = AlertDialogCancel; exports.AspectRatio = AspectRatio; exports.Dialog = Dialog; exports.DialogTrigger = DialogTrigger; exports.DialogPortal = DialogPortal; exports.DialogClose = DialogClose; exports.DialogOverlay = DialogOverlay; exports.DialogContent = DialogContent; exports.DialogHeader = DialogHeader; exports.DialogFooter = DialogFooter; exports.DialogTitle = DialogTitle; exports.DialogDescription = DialogDescription; exports.useConfirm = useConfirm; exports.useGuardedClose = useGuardedClose; exports.UnsavedChangesChip = UnsavedChangesChip; exports.AdminFormDrawer = AdminFormDrawer; exports.AdminFormModal = AdminFormModal; exports.Separator = Separator; exports.Sheet = Sheet; exports.SheetTrigger = SheetTrigger; exports.SheetClose = SheetClose; exports.SheetPortal = SheetPortal; exports.SheetOverlay = SheetOverlay; exports.SheetContent = SheetContent; exports.SheetHeader = SheetHeader; exports.SheetFooter = SheetFooter; exports.SheetTitle = SheetTitle; exports.SheetDescription = SheetDescription; exports.Accordion = Accordion; exports.AccordionItem = AccordionItem; exports.AccordionTrigger = AccordionTrigger; exports.AccordionContent = AccordionContent; exports.Breadcrumb = Breadcrumb; exports.BreadcrumbList = BreadcrumbList; exports.BreadcrumbItem = BreadcrumbItem; exports.BreadcrumbLink = BreadcrumbLink; exports.BreadcrumbPage = BreadcrumbPage; exports.BreadcrumbSeparator = BreadcrumbSeparator; exports.BreadcrumbEllipsis = BreadcrumbEllipsis; exports.MenubarMenu = MenubarMenu; exports.MenubarGroup = MenubarGroup; exports.MenubarPortal = MenubarPortal; exports.MenubarSub = MenubarSub; exports.MenubarRadioGroup = MenubarRadioGroup; exports.Menubar = Menubar; exports.MenubarTrigger = MenubarTrigger; exports.MenubarSubTrigger = MenubarSubTrigger; exports.MenubarSubContent = MenubarSubContent; exports.MenubarContent = MenubarContent; exports.MenubarItem = MenubarItem; exports.MenubarCheckboxItem = MenubarCheckboxItem; exports.MenubarRadioItem = MenubarRadioItem; exports.MenubarLabel = MenubarLabel; exports.MenubarSeparator = MenubarSeparator; exports.MenubarShortcut = MenubarShortcut; exports.NavigationMenuViewport = NavigationMenuViewport; exports.NavigationMenu = NavigationMenu; exports.NavigationMenuList = NavigationMenuList; exports.NavigationMenuItem = NavigationMenuItem; exports.navigationMenuTriggerStyle = navigationMenuTriggerStyle; exports.NavigationMenuTrigger = NavigationMenuTrigger; exports.NavigationMenuContent = NavigationMenuContent; exports.NavigationMenuLink = NavigationMenuLink; exports.NavigationMenuIndicator = NavigationMenuIndicator; exports.CrossfadePanels = CrossfadePanels; exports.TabContent = TabContent; exports.TabNavigation = TabNavigation; exports.getTabById = getTabById; exports.getTabComponent = getTabComponent; exports.Alert = Alert; exports.AlertTitle = AlertTitle; exports.AlertDescription = AlertDescription; exports.AIGeneratedBadge = AIGeneratedBadge; exports.FADE_PREVIEW_MAX_UNMEASURED_ITEMS = FADE_PREVIEW_MAX_UNMEASURED_ITEMS; exports.FadePreview = FadePreview; exports.TextHold = TextHold; exports.LayoutHold = LayoutHold; exports.Progress = Progress; exports.RichMarkdownRuntimeProvider = RichMarkdownRuntimeProvider; exports.useRichMarkdownRuntime = useRichMarkdownRuntime; exports.EmbedIframe = EmbedIframe; exports.EmbedViewerFrame = EmbedViewerFrame; exports.ClaudeEmbed = ClaudeEmbed; exports.FigmaEmbed = FigmaEmbed; exports.EMBED_SIZES = EMBED_SIZES; exports.EmbedContainer = EmbedContainer; exports.YouTubeContainer = YouTubeContainer; exports.TwitterContainer = TwitterContainer; exports.RedditContainer = RedditContainer; exports.LinkPreviewContainer = LinkPreviewContainer; exports.LinkedInContainer = LinkedInContainer; exports.LinkedInEmbedClient = LinkedInEmbedClient; exports.MarkdownImage = MarkdownImage; exports.OGLinkErrorBoundary = OGLinkErrorBoundary; exports.OGLinkPreview = OGLinkPreview; exports.MediaCarousel = MediaCarousel; exports.RedditEmbedClient = RedditEmbedClient; exports.TwitterEmbedClient = TwitterEmbedClient; exports.processShortcodes = processShortcodes; exports.RichMarkdownRenderer = RichMarkdownRenderer; exports.ReleaseChangelogSection = ReleaseChangelogSection; exports.StackedRowsPanel = StackedRowsPanel; exports.SlackChannelChip = SlackChannelChip; exports.AppStoreBadge = AppStoreBadge; exports.GooglePlayBadge = GooglePlayBadge; exports.StoreBadgeLinks = StoreBadgeLinks; exports.MobileAppQr = MobileAppQr; exports.StatusIndicator = StatusIndicator; exports.ErrorState = ErrorState; exports.PageError = PageError; exports.LoadError = LoadError; exports.NotFoundError = NotFoundError; exports.FilterCheckboxItem = FilterCheckboxItem; exports.TagKeyValueFilter = TagKeyValueFilter; exports.FilterModal = FilterModal; exports.PageContainer = PageContainer; exports.ListPageContainer = ListPageContainer; exports.DetailPageContainer = DetailPageContainer; exports.FormPageContainer = FormPageContainer; exports.ContentPageContainer = ContentPageContainer; exports.ListPageLayout = ListPageLayout; exports.PageShell = PageShell; exports.PageMain = PageMain; exports.ArticleDetailLayout = ArticleDetailLayout; exports.toggleVariants = toggleVariants; exports.Toggle = Toggle; exports.ToggleGroup = ToggleGroup; exports.ToggleGroupItem = ToggleGroupItem; exports.BenefitCard = BenefitCard; exports.benefitCardBorderClass = benefitCardBorderClass; exports.BenefitCardGrid = BenefitCardGrid; exports.BrandAssociationCard = BrandAssociationCard; exports.BrandAssociationGrid = BrandAssociationGrid; exports.BulletList = BulletList; exports.ChevronButton = ChevronButton; exports.CircularProgress = CircularProgress; exports.CheckIcon = CheckIcon2; exports.XIcon = XIcon2; exports.MinusIcon = MinusIcon; exports.CheckCircleIcon = CheckCircleIcon2; exports.XCircleIcon = XCircleIcon; exports.DashboardInfoCard = DashboardInfoCard; exports.InfoCardRow = InfoCardRow; exports.OSTypeBadge = OSTypeBadge; exports.OSTypeIcon = OSTypeIcon; exports.OSTypeLabel = OSTypeLabel; exports.DeviceCard = DeviceCard; exports.DeviceCardCompact = DeviceCardCompact; exports.DataAttribution = DataAttribution; exports.DownloadButton = DownloadButton; exports.ComplianceBadge = ComplianceBadge; exports.ComplianceLogo = ComplianceLogo; exports.FeatureCardGrid = FeatureCardGrid; exports.StepNumber = StepNumber; exports.NumberedStep = NumberedStep; exports.FeatureList = FeatureList; exports.SourceTooltip = SourceTooltip; exports.HighlightCard = HighlightCard; exports.HighlightCardGrid = HighlightCardGrid; exports.IconsBlock = IconsBlock; exports.DropdownButton = DropdownButton; exports.MoreActionsMenu = MoreActionsMenu; exports.OrganizationCard = OrganizationCard; exports.ServiceCard = ServiceCard; exports.Slider = Slider; exports.PersonCell = PersonCell; exports.PeopleCell = PeopleCell; exports.TitleContentBlock = TitleContentBlock; exports.ContentLoader = ContentLoader; exports.CardLoader = CardLoader; exports.FormLoader = FormLoader; exports.DetailLoader = DetailLoader; exports.ListLoader = ListLoader; exports.CursorPagination = CursorPagination; exports.CursorPaginationSimple = CursorPaginationSimple; exports.useDataTableContext = useDataTableContext; exports.DataTableRoot = DataTableRoot; exports.getHideClasses = getHideClasses; exports.alignJustify = alignJustify; exports.multiSelectFilterFn = multiSelectFilterFn; exports.ROW_HEIGHT_DESKTOP = ROW_HEIGHT_DESKTOP; exports.ROW_HEIGHT_MOBILE = ROW_HEIGHT_MOBILE; exports.ROW_SHELL_CLASSES = ROW_SHELL_CLASSES; exports.DataTableSkeleton = DataTableSkeleton; exports.TableEmptyState = TableEmptyState; exports.DynamicThemeProvider = DynamicThemeProvider; exports.useDynamicTheme = useDynamicTheme; exports.THEME_STORAGE_KEY = THEME_STORAGE_KEY; exports.THEME_ATTRIBUTE = THEME_ATTRIBUTE; exports.DEFAULT_THEME = DEFAULT_THEME; exports.ThemeProvider = ThemeProvider; exports.useTheme = useTheme; exports.useThemeToggle = useThemeToggle; exports.ArrayEntryManager = ArrayEntryManager; exports.PasswordInput = PasswordInput; exports.AccountDetailsFields = AccountDetailsFields; exports.TRIAL_TERM_ICONS = TRIAL_TERM_ICONS; exports.DEFAULT_TRIAL_TERMS = DEFAULT_TRIAL_TERMS; exports.trialBenefits = trialBenefits; exports.BenefitList = BenefitList; exports.AuthBenefitsPanel = AuthBenefitsPanel; exports.OpenFrameWordmark = OpenFrameWordmark; exports.PoweredByFlamingo = PoweredByFlamingo; exports.AuthShell = AuthShell; exports.BackToLoginLink = BackToLoginLink; exports.CompactAuthShell = CompactAuthShell; exports.LabeledDivider = LabeledDivider; exports.PROVIDER_META = PROVIDER_META; exports.SsoProviderButtons = SsoProviderButtons; exports.CompleteAccountForm = CompleteAccountForm; exports.PolicyLink = PolicyLink; exports.TermsAgreementLabel = TermsAgreementLabel; exports.CreateOrganizationForm = CreateOrganizationForm; exports.InviteLinkInvalidModal = InviteLinkInvalidModal; exports.LegalLinks = LegalLinks; exports.LoginForm = LoginForm; exports.NoAccountNotice = NoAccountNotice; exports.OpenFrameSsoLoginForm = OpenFrameSsoLoginForm; exports.OpenFrameSsoSignUpForm = OpenFrameSsoSignUpForm; exports.PasswordResetForm = PasswordResetForm; exports.SsoAuthShell = SsoAuthShell; exports.SsoJoinForm = SsoJoinForm; exports.ProviderButton = ProviderButton; exports.AuthProvidersList = AuthProvidersList; exports.ChangelogManager = ChangelogManager; exports.ChangelogSectionsManager = ChangelogSectionsManager; exports.ClickUpTasksManager = ClickUpTasksManager; exports.CommandBox = CommandBox; exports.TAG_BADGE_CLASS = TAG_BADGE_CLASS; exports.EntityTagBadges = EntityTagBadges; exports.ErrorBoundary = ErrorBoundary; exports.SectionSelector = SectionSelector; exports.FigmaPrototypeViewer = FigmaPrototypeViewer; exports.FiltersDropdown = FiltersDropdown; exports.useFiltersDropdown = useFiltersDropdown; exports.GitHubReleasesManager = GitHubReleasesManager; exports.KnowledgeBaseLinksManager = KnowledgeBaseLinksManager; exports.LoadingProvider = LoadingProvider; exports.useLoading = useLoading; exports.useMediaIntake = useMediaIntake; exports.MediaUploadArea = MediaUploadArea; exports.MediaGalleryManager = MediaGalleryManager; exports.CardSkeleton = CardSkeleton; exports.CardSkeletonGrid = CardSkeletonGrid; exports.AnnouncementBarSkeleton = AnnouncementBarSkeleton; exports.HeroSkeleton = HeroSkeleton; exports.SearchContainerSkeleton = SearchContainerSkeleton; exports.CategorySidebarSkeleton = CategorySidebarSkeleton; exports.BreadcrumbSkeleton = BreadcrumbSkeleton; exports.ResultsHeaderSkeleton = ResultsHeaderSkeleton; exports.TwoColumnLayoutSkeleton = TwoColumnLayoutSkeleton; exports.ArticleLayoutSkeleton = ArticleLayoutSkeleton; exports.VendorDetailLayoutSkeleton = VendorDetailLayoutSkeleton; exports.StatsSectionSkeleton = StatsSectionSkeleton; exports.BlogCardGridSkeleton = BlogCardGridSkeleton; exports.VendorGridSkeleton = VendorGridSkeleton; exports.SlackCommunitySkeleton = SlackCommunitySkeleton; exports.ContentLoadingContainer = ContentLoadingContainer; exports.useContentLoading = useContentLoading; exports.ParagraphSkeleton = ParagraphSkeleton; exports.ListSkeleton = ListSkeleton; exports.TableSkeleton = TableSkeleton; exports.FormSkeleton = FormSkeleton; exports.NavigationSkeleton = NavigationSkeleton; exports.ProfileSkeleton = ProfileSkeleton; exports.CommentSkeleton = CommentSkeleton; exports.FeatureListSkeleton = FeatureListSkeleton; exports.TimelineSkeleton = TimelineSkeleton; exports.PricingSkeleton = PricingSkeleton; exports.ProfileLoadingSkeleton = ProfileLoadingSkeleton; exports.MspProfileFormSkeleton = MspProfileFormSkeleton; exports.CategoryCardSkeleton = CategoryCardSkeleton; exports.CategoryVendorSelectorSkeleton = CategoryVendorSelectorSkeleton; exports.WizardLayoutSkeleton = WizardLayoutSkeleton; exports.MarginReportSkeleton = MarginReportSkeleton; exports.UsersGridSkeleton = UsersGridSkeleton; exports.DynamicSkeleton = DynamicSkeleton; exports.SkeletonPresets = SkeletonPresets; exports.PlatformSkeletonContainer = PlatformSkeletonContainer; exports.ProgressiveSkeleton = ProgressiveSkeleton; exports.OrganizationIconSkeleton = OrganizationIconSkeleton; exports.OrganizationCardSkeleton = OrganizationCardSkeleton; exports.OrganizationCardSkeletonGrid = OrganizationCardSkeletonGrid; exports.DeviceCardSkeleton = DeviceCardSkeleton; exports.DeviceCardSkeletonGrid = DeviceCardSkeletonGrid; exports.PushButtonSelector = PushButtonSelector; exports.MODEL_TOKEN_RATES_COPY = MODEL_TOKEN_RATES_COPY; exports.ModelTokenRates = ModelTokenRates; exports.ModelTokenRatesPopover = ModelTokenRatesPopover; exports.ModelTokenRatesUnavailable = ModelTokenRatesUnavailable; exports.ModelTokenRatesSkeleton = ModelTokenRatesSkeleton; exports.MODEL_TOKEN_EXCHANGE_BALANCE = MODEL_TOKEN_EXCHANGE_BALANCE; exports.MODEL_TOKEN_EXCHANGE_RANGE = MODEL_TOKEN_EXCHANGE_RANGE; exports.ModelTokenExchange = ModelTokenExchange; exports.MoreAboutButton = MoreAboutButton; exports.OSTypeBadgeGroup = OSTypeBadgeGroup; exports.ParallaxImageShowcase = ParallaxImageShowcase; exports.PathsDisplay = PathsDisplay; exports.OPENFRAME_PATHS = OPENFRAME_PATHS; exports.getOpenFramePaths = getOpenFramePaths; exports.OPENFRAME_DOCTOR_COMMANDS = OPENFRAME_DOCTOR_COMMANDS; exports.getOpenFrameDoctorCommand = getOpenFrameDoctorCommand; exports.PlatformFilterComponent = PlatformFilterComponent; exports.SelectButton = SelectButton; exports.ConfidenceBadge = ConfidenceBadge; exports.SEOEditorPreview = SEOEditorPreview; exports.socialIcon = socialIcon; exports.SocialIconRow = SocialIconRow; exports.SocialLinksManager = SocialLinksManager; exports.StartWithOpenFrameButton = StartWithOpenFrameButton; exports.StatusFilterComponent = StatusFilterComponent; exports.TagsSelector = TagsSelector; exports.WarningBlock = WarningBlock; exports.VideoBitesDisplay = VideoBitesDisplay; exports.FloatingWalkthroughVideo = FloatingWalkthroughVideo; exports.InlineWalkthroughVideo = InlineWalkthroughVideo; exports.useWalkthroughVideo = useWalkthroughVideo; exports.VideoSourceSelector = VideoSourceSelector; exports.SubtitlesEditor = SubtitlesEditor; exports.TranscriptSummaryEditor = TranscriptSummaryEditor; exports.AIEnrichButton = AIEnrichButton; exports.AIWarningsSection = AIWarningsSection; exports.AIEnrichSection = AIEnrichSection; exports.HighlightVideoSection = HighlightVideoSection; exports.HighlightConfigSection = HighlightConfigSection; exports.EntitySummaryEditor = EntitySummaryEditor; exports.AIStatusIndicator = AIStatusIndicator; exports.AIRequiredBadge = AIRequiredBadge; exports.TranscribeSummarizeSection = TranscribeSummarizeSection; exports.VideoClipsSection = VideoClipsSection; exports.HighlightGenerationSection = HighlightGenerationSection; exports.HighlightVideoPreview = HighlightVideoPreview; exports.TranscribeAndSummarizeCombinedSection = TranscribeAndSummarizeCombinedSection; exports.HighlightVideoCombinedSection = HighlightVideoCombinedSection; exports.ViewToggle = ViewToggle; exports.APPROVAL_LEVELS = APPROVAL_LEVELS; exports.APPROVAL_LEVEL_META = APPROVAL_LEVEL_META; exports.ApprovalLevelView = ApprovalLevelView; exports.PolicyConfigurationPanel = PolicyConfigurationPanel; exports.DataTableEmpty = DataTableEmpty; exports.DataTableRow = DataTableRow; exports.DataTableBody = DataTableBody; exports.DataTableCursorFooter = DataTableCursorFooter; exports.DataTableHeader = DataTableHeader; exports.DATA_TABLE_HEADER_LABEL_CLASS = DATA_TABLE_HEADER_LABEL_CLASS; exports.DataTableInfiniteFooter = DataTableInfiniteFooter; exports.DataTableRowCount = DataTableRowCount; exports.useDataTable = useDataTable; exports.DataTable = DataTable; exports.flexRender = _reacttable.flexRender; exports.createColumnHelper = _reacttable.createColumnHelper; exports.getCoreRowModel = _reacttable.getCoreRowModel; exports.getExpandedRowModel = _reacttable.getExpandedRowModel; exports.getFacetedRowModel = _reacttable.getFacetedRowModel; exports.getFacetedUniqueValues = _reacttable.getFacetedUniqueValues; exports.getFilteredRowModel = _reacttable.getFilteredRowModel; exports.getGroupedRowModel = _reacttable.getGroupedRowModel; exports.getPaginationRowModel = _reacttable.getPaginationRowModel; exports.getSortedRowModel = _reacttable.getSortedRowModel; exports.PoliciesTable = PoliciesTable; exports.PolicySummaryCards = PolicySummaryCards; exports.POLICY_STATUS_CONFIG = POLICY_STATUS_CONFIG; exports.getPolicyStatus = getPolicyStatus; exports.getPolicyTableStatus = getPolicyTableStatus; exports.computePolicySummary = computePolicySummary; exports.TENANT_EMPTY_VALUE = TENANT_EMPTY_VALUE; exports.accessStateTag = accessStateTag; exports.providerMark = providerMark2; exports.lastReadAt = lastReadAt; exports.formatLastRead = formatLastRead; exports.usersCountLabel = usersCountLabel; exports.TenantAccessCell = TenantAccessCell; exports.TenantCell = TenantCell; exports.TenantCustomerCell = TenantCustomerCell; exports.TENANT_COLUMNS = TENANT_COLUMNS; exports.TENANTS_TABLE_COLUMNS = TENANTS_TABLE_COLUMNS; exports.TenantsTableView = TenantsTableView; exports.PhoneInput = PhoneInput; exports.WaitlistForm = WaitlistForm; exports.NotificationsProvider = NotificationsProvider; exports.useNotifications = useNotifications; exports.useOptionalNotifications = useOptionalNotifications; exports.AppLayoutDrawerContainerContext = AppLayoutDrawerContainerContext; exports.useAppLayoutDrawerContainer = useAppLayoutDrawerContainer; exports.AppLayoutDrawerCoordinationContext = AppLayoutDrawerCoordinationContext; exports.AppLayoutDrawerRoot = AppLayoutDrawerRoot; exports.AppLayoutDrawerTrigger = AppLayoutDrawerTrigger; exports.AppLayoutDrawerClose = AppLayoutDrawerClose; exports.AppLayoutDrawerContent = AppLayoutDrawerContent; exports.AppLayoutDrawerHeader = AppLayoutDrawerHeader; exports.AppLayoutDrawerTitle = AppLayoutDrawerTitle; exports.AppLayoutDrawerDescription = AppLayoutDrawerDescription; exports.AppLayoutDrawerBody = AppLayoutDrawerBody; exports.AppLayoutDrawerFooter = AppLayoutDrawerFooter; exports.NotificationTile = NotificationTile; exports.NotificationDrawer = NotificationDrawer; exports.NotificationPopups = NotificationPopups; exports.TICKET_APPROVAL_REQUEST_TYPE = TICKET_APPROVAL_REQUEST_TYPE; exports.MINGO_APPROVAL_REQUEST_TYPE = MINGO_APPROVAL_REQUEST_TYPE; exports.isApprovalNotificationType = isApprovalNotificationType; exports.isApprovalNotification = isApprovalNotification; exports.getApprovalMeta = getApprovalMeta; exports.resolutionToStatus = resolutionToStatus; exports.approvalMetaToBatchData = approvalMetaToBatchData; exports.ApprovalRequestNotificationTile = ApprovalRequestNotificationTile; exports.TimeTrackerProvider = TimeTrackerProvider; exports.useTimeTracker = useTimeTracker; exports.useOptionalTimeTracker = useOptionalTimeTracker; exports.useTrackerClock = useTrackerClock; exports.TimeTrackerPanel = TimeTrackerPanel; exports.UnreadDot = UnreadDot; exports.UnreadCountBadge = UnreadCountBadge; exports.HeaderButton = HeaderButton; exports.TimeTrackerHeaderButton = TimeTrackerHeaderButton; exports.formatLastOnline = formatLastOnline; exports.getDeviceName = getDeviceName; exports.matchesDeviceName = matchesDeviceName; exports.DevicesViewConfigProvider = DevicesViewConfigProvider; exports.useDevicesViewConfig = useDevicesViewConfig; exports.useDeviceImageUrl = useDeviceImageUrl; exports.DeviceSelectionModeRadio = DeviceSelectionModeRadio; exports.getDeviceStatusConfig = getDeviceStatusConfig; exports.getDeviceOperatingSystem = getDeviceOperatingSystem; exports.DEVICE_STATUS = DEVICE_STATUS; exports.DEFAULT_VISIBLE_STATUSES = DEFAULT_VISIBLE_STATUSES; exports.DEFAULT_DASHBOARD_STATUSES = DEFAULT_DASHBOARD_STATUSES; exports.DEFAULT_DEVICES_LIST_STATUSES = DEFAULT_DEVICES_LIST_STATUSES; exports.DEVICE_ENRICHMENT_STATUSES = DEVICE_ENRICHMENT_STATUSES; exports.DEVICE_ENRICHMENT_FILTER = DEVICE_ENRICHMENT_FILTER; exports.HIDDEN_DEVICE_STATUSES = HIDDEN_DEVICE_STATUSES; exports.renderDeviceTypeIcon = renderDeviceTypeIcon; exports.DeviceTypeTile = DeviceTypeTile; exports.DeviceTagsFilterButton = DeviceTagsFilterButton; exports.DevicesFilterToolbar = DevicesFilterToolbar; exports.getDeviceActionsColumn = getDeviceActionsColumn; exports.getDeviceOpenColumn = getDeviceOpenColumn; exports.DevicesTableBody = DevicesTableBody; exports.getDeviceFilterColumns = getDeviceFilterColumns; exports.getDeviceTableColumns = getDeviceTableColumns; exports.useTagFilterModal = useTagFilterModal; exports.DeviceSelector = DeviceSelector; exports.DeviceSelectorSkeleton = DeviceSelectorSkeleton; exports.EMPTY_NARROWING = EMPTY_NARROWING; exports.narrowingToFilter = narrowingToFilter; exports.DevicesGrid = DevicesGrid; exports.DevicesGridFilters = DevicesGridFilters; exports.EMPTY_DEVICES_NARROWING = EMPTY_DEVICES_NARROWING; exports.isNarrowed = isNarrowed; exports.DevicesList = DevicesList; exports.DEVICE_VIEW_MODE_ITEMS = DEVICE_VIEW_MODE_ITEMS; exports.buildDevicePanelActions = buildDevicePanelActions; exports.IDLE_DEVICES_TOOLBAR = IDLE_DEVICES_TOOLBAR; exports.DevicesPanelView = DevicesPanelView; exports.PACKAGE_MANAGERS = PACKAGE_MANAGERS; exports.PACKAGE_MANAGER_LABEL = PACKAGE_MANAGER_LABEL; exports.PACKAGE_MANAGER_ICON = PACKAGE_MANAGER_ICON; exports.PACKAGE_MANAGER_OS = PACKAGE_MANAGER_OS; exports.packageManagerLabel = packageManagerLabel; exports.SOFTWARE_SOURCE_LABEL = SOFTWARE_SOURCE_LABEL; exports.PACKAGE_SEARCH_LABEL = PACKAGE_SEARCH_LABEL; exports.PACKAGE_SEARCH_PLACEHOLDER = PACKAGE_SEARCH_PLACEHOLDER; exports.PackageSearchFieldPlaceholder = PackageSearchFieldPlaceholder; exports.SoftwareScheduleFields = SoftwareScheduleFields; exports.SOFTWARE_ACTION_COPY = SOFTWARE_ACTION_COPY; exports.SOFTWARE_ACTION_DETAIL_TITLE = SOFTWARE_ACTION_DETAIL_TITLE; exports.softwareActionCopy = softwareActionCopy; exports.newSoftwareRow = newSoftwareRow; exports.SoftwareRowFields = SoftwareRowFields; exports.SoftwareActionForm = SoftwareActionForm; exports.LogDrawer = LogDrawer; exports.SYSTEM_SOURCE_LABEL = SYSTEM_SOURCE_LABEL; exports.logSourceLabels = logSourceLabels; exports.LogsPageView = LogsPageView; exports.LogCopyIconButton = LogCopyIconButton; exports.LOG_COLUMN_WIDTHS = LOG_COLUMN_WIDTHS; exports.ToolBadge = ToolBadge; exports.LogsTableView = LogsTableView; exports.LogsTableSkeleton = LogsTableSkeleton; exports.logSeverityVariant = logSeverityVariant; exports.KNOWLEDGE_BASE_ITEM_ICON = KNOWLEDGE_BASE_ITEM_ICON; exports.getKnowledgeBaseOpenColumn = getKnowledgeBaseOpenColumn; exports.getKnowledgeBaseColumns = getKnowledgeBaseColumns; exports.KnowledgeBaseTableBody = KnowledgeBaseTableBody; exports.TicketAttachmentsList = TicketAttachmentsList; exports.TicketDetailSection = TicketDetailSection; exports.KnowledgeBaseArticleView = KnowledgeBaseArticleView; exports.SLOT_STICKINESS = SLOT_STICKINESS; exports.SortableDragHandle = SortableDragHandle; exports.SortableList = SortableList; exports.SortableMoveButtons = SortableMoveButtons; exports.useSortableItem = useSortableItem; exports.TicketStatusConfigList = TicketStatusConfigList; exports.ConversationCard = ConversationCard; exports.SnapCarouselControlsSkeleton = SnapCarouselControlsSkeleton; exports.SnapCarousel = SnapCarousel; exports.capabilityTabId = capabilityTabId; exports.CapabilityExplorerSkeleton = CapabilityExplorerSkeleton; exports.CapabilityExplorer = CapabilityExplorer; exports.TableHeader = TableHeader; exports.TableCell = TableCell; exports.TableCardSkeleton = TableCardSkeleton; exports.TableRow = TableRow; exports.Table = Table; exports.TableDescriptionCell = TableDescriptionCell; exports.TableTimestampCell = TableTimestampCell; exports.QueryReportTableHeader = QueryReportTableHeader; exports.QueryReportTableRow = QueryReportTableRow; exports.QueryReportTableSkeleton = QueryReportTableSkeleton; exports.deriveColumns = deriveColumns; exports.exportToCSV = exportToCSV; exports.QueryReportTable = QueryReportTable; exports.SearchInput = SearchInput; exports.FilterListItem = FilterListItem; exports.FilterList = FilterList; exports.TagSearchInput = TagSearchInput; exports.MarkdownEditor = MarkdownEditor; exports.FileUpload = FileUpload; exports.ImageUploader = ImageUploader; exports.TICKET_STATUS_COLOR_PRESETS = TICKET_STATUS_COLOR_PRESETS; exports.CUSTOM_PRESET_KEY = CUSTOM_PRESET_KEY; exports.DEFAULT_CUSTOM_STATUS_COLOR = DEFAULT_CUSTOM_STATUS_COLOR; exports.ColorPresetSelect = ColorPresetSelect; exports.ColorPickerInput = ColorPickerInput; exports.TicketStatusConfigRow = TicketStatusConfigRow; exports.formatTestRunDuration = formatTestRunDuration; exports.TestResultsSkeleton = TestResultsSkeleton; exports.TestResultsTable = TestResultsTable; exports.TestRunErrorBanner = TestRunErrorBanner; exports.TestRunResults = TestRunResults; exports.TimingStat = TimingStat; exports.TestRunStatusStat = TestRunStatusStat; exports.useTestRunState = useTestRunState; exports.TicketNoteCard = TicketNoteCard; exports.TicketNotesSection = TicketNotesSection; exports.TicketInfoSection = TicketInfoSection; exports.renderTicketStatusOption = renderTicketStatusOption; exports.renderTicketAssigneeOption = renderTicketAssigneeOption; exports.TakeOverTicketModal = TakeOverTicketModal; exports.ReopenTicketModal = ReopenTicketModal; exports.ReopenTicketRequestModal = ReopenTicketRequestModal; exports.PHOTO_WALL_FRAME = PHOTO_WALL_FRAME; exports.photoWallRequestWidth = photoWallRequestWidth; exports.photoOrientation = photoOrientation; exports.arrangePhotoWall = arrangePhotoWall; exports.PhotoWall = PhotoWall; exports.FilterPillRow = FilterPillRow; exports.LazyMount = LazyMount; exports.AppWindowFrame = AppWindowFrame; exports.PhoneFrame = PhoneFrame; exports.NotificationStack = NotificationStack; exports.StripCard = StripCard; exports.LeaderRow = LeaderRow; exports.AnalyzingState = AnalyzingState; exports.IncidentStatusLine = IncidentStatusLine; exports.IncidentFeed = IncidentFeed; exports.useBetweenAnchors = useBetweenAnchors; exports.StickyActionBar = StickyActionBar; exports.IconTile = IconTile;
34683
+
34684
+
34685
+
34686
+
34687
+
34688
+
34689
+
34690
+
34691
+
34692
+
34693
+
34694
+
34695
+
34696
+
34697
+
34698
+
34699
+
34700
+
34701
+
34702
+
34703
+
34704
+
34705
+
34706
+
34707
+
34708
+
34709
+
34710
+
34711
+
34712
+
34713
+
34714
+
34715
+
34716
+
34717
+
34718
+
34719
+
34720
+
34721
+
34722
+
34723
+
34724
+
34725
+
34726
+
34727
+
34728
+
34729
+
34730
+
34731
+
34732
+
34733
+
34734
+
34735
+
34736
+
34737
+
34738
+
34739
+
34740
+
34741
+
34742
+
34743
+
34744
+
34745
+
34746
+
34747
+
34748
+
34749
+
34750
+
34751
+
34752
+
34753
+ exports.AllowedDomainsInput = AllowedDomainsInput; exports.AnnouncementBarView = AnnouncementBarView; exports.timezoneLabel = timezoneLabel; exports.timezoneOptions = timezoneOptions; exports.TimezoneSelect = TimezoneSelect; exports.CheckboxBlock = CheckboxBlock; exports.CheckboxWithDescription = CheckboxWithDescription; exports.DatePickerCalendar = DatePickerCalendar; exports.DatePicker = DatePicker; exports.DatePickerInput = DatePickerInput; exports.DatePickerInputSimple = DatePickerInputSimple; exports.DateFilterPanel = DateFilterPanel; exports.DateFilterMenu = DateFilterMenu; exports.DurationInput = DurationInput; exports.HoneypotField = HoneypotField; exports.JsonDetailList = JsonDetailList; exports.ProgressBar = ProgressBar; exports.InfoCard = InfoCard; exports.InfoRow = InfoRow; exports.SearchableSelect = SearchableSelect; exports.AssigneeDropdown = AssigneeDropdown; exports.InfoSection = InfoSection; exports.InputTrigger = InputTrigger; exports.MediaTypeSelector = MediaTypeSelector; exports.noDataIconClasses = noDataIconClasses; exports.noDataActionsVariants = noDataActionsVariants; exports.NoDataAction = NoDataAction; exports.NoDataActions = NoDataActions; exports.NoDataMessage = NoDataMessage; exports.NoData = NoData; exports.PageLoader = PageLoader; exports.CompactPageLoader = CompactPageLoader; exports.RadioGroup = RadioGroup; exports.RadioGroupItem = RadioGroupItem; exports.RadioGroupBlock = RadioGroupBlock; exports.Switch = Switch; exports.TagSelectDropdown = TagSelectDropdown; exports.badgeVariants = badgeVariants; exports.Badge = Badge; exports.TagsInput = TagsInput; exports.TagsManager = TagsManager; exports.Textarea = Textarea; exports.AlertDialog = AlertDialog; exports.AlertDialogTrigger = AlertDialogTrigger; exports.AlertDialogPortal = AlertDialogPortal; exports.AlertDialogOverlay = AlertDialogOverlay; exports.AlertDialogContent = AlertDialogContent; exports.AlertDialogHeader = AlertDialogHeader; exports.AlertDialogFooter = AlertDialogFooter; exports.AlertDialogTitle = AlertDialogTitle; exports.AlertDialogDescription = AlertDialogDescription; exports.AlertDialogAction = AlertDialogAction; exports.AlertDialogCancel = AlertDialogCancel; exports.AspectRatio = AspectRatio; exports.Dialog = Dialog; exports.DialogTrigger = DialogTrigger; exports.DialogPortal = DialogPortal; exports.DialogClose = DialogClose; exports.DialogOverlay = DialogOverlay; exports.DialogContent = DialogContent; exports.DialogHeader = DialogHeader; exports.DialogFooter = DialogFooter; exports.DialogTitle = DialogTitle; exports.DialogDescription = DialogDescription; exports.useConfirm = useConfirm; exports.useGuardedClose = useGuardedClose; exports.UnsavedChangesChip = UnsavedChangesChip; exports.AdminFormDrawer = AdminFormDrawer; exports.AdminFormModal = AdminFormModal; exports.Separator = Separator; exports.Sheet = Sheet; exports.SheetTrigger = SheetTrigger; exports.SheetClose = SheetClose; exports.SheetPortal = SheetPortal; exports.SheetOverlay = SheetOverlay; exports.SheetContent = SheetContent; exports.SheetHeader = SheetHeader; exports.SheetFooter = SheetFooter; exports.SheetTitle = SheetTitle; exports.SheetDescription = SheetDescription; exports.Accordion = Accordion; exports.AccordionItem = AccordionItem; exports.AccordionTrigger = AccordionTrigger; exports.AccordionContent = AccordionContent; exports.Breadcrumb = Breadcrumb; exports.BreadcrumbList = BreadcrumbList; exports.BreadcrumbItem = BreadcrumbItem; exports.BreadcrumbLink = BreadcrumbLink; exports.BreadcrumbPage = BreadcrumbPage; exports.BreadcrumbSeparator = BreadcrumbSeparator; exports.BreadcrumbEllipsis = BreadcrumbEllipsis; exports.MenubarMenu = MenubarMenu; exports.MenubarGroup = MenubarGroup; exports.MenubarPortal = MenubarPortal; exports.MenubarSub = MenubarSub; exports.MenubarRadioGroup = MenubarRadioGroup; exports.Menubar = Menubar; exports.MenubarTrigger = MenubarTrigger; exports.MenubarSubTrigger = MenubarSubTrigger; exports.MenubarSubContent = MenubarSubContent; exports.MenubarContent = MenubarContent; exports.MenubarItem = MenubarItem; exports.MenubarCheckboxItem = MenubarCheckboxItem; exports.MenubarRadioItem = MenubarRadioItem; exports.MenubarLabel = MenubarLabel; exports.MenubarSeparator = MenubarSeparator; exports.MenubarShortcut = MenubarShortcut; exports.NavigationMenuViewport = NavigationMenuViewport; exports.NavigationMenu = NavigationMenu; exports.NavigationMenuList = NavigationMenuList; exports.NavigationMenuItem = NavigationMenuItem; exports.navigationMenuTriggerStyle = navigationMenuTriggerStyle; exports.NavigationMenuTrigger = NavigationMenuTrigger; exports.NavigationMenuContent = NavigationMenuContent; exports.NavigationMenuLink = NavigationMenuLink; exports.NavigationMenuIndicator = NavigationMenuIndicator; exports.CrossfadePanels = CrossfadePanels; exports.TabContent = TabContent; exports.TabNavigation = TabNavigation; exports.getTabById = getTabById; exports.getTabComponent = getTabComponent; exports.Alert = Alert; exports.AlertTitle = AlertTitle; exports.AlertDescription = AlertDescription; exports.AIGeneratedBadge = AIGeneratedBadge; exports.FADE_PREVIEW_MAX_UNMEASURED_ITEMS = FADE_PREVIEW_MAX_UNMEASURED_ITEMS; exports.FadePreview = FadePreview; exports.TextHold = TextHold; exports.LayoutHold = LayoutHold; exports.Progress = Progress; exports.RichMarkdownRuntimeProvider = RichMarkdownRuntimeProvider; exports.useRichMarkdownRuntime = useRichMarkdownRuntime; exports.EmbedIframe = EmbedIframe; exports.EmbedViewerFrame = EmbedViewerFrame; exports.ClaudeEmbed = ClaudeEmbed; exports.FigmaEmbed = FigmaEmbed; exports.EMBED_SIZES = EMBED_SIZES; exports.EmbedContainer = EmbedContainer; exports.YouTubeContainer = YouTubeContainer; exports.TwitterContainer = TwitterContainer; exports.RedditContainer = RedditContainer; exports.LinkPreviewContainer = LinkPreviewContainer; exports.LinkedInContainer = LinkedInContainer; exports.LinkedInEmbedClient = LinkedInEmbedClient; exports.MarkdownImage = MarkdownImage; exports.OGLinkErrorBoundary = OGLinkErrorBoundary; exports.OGLinkPreview = OGLinkPreview; exports.MediaCarousel = MediaCarousel; exports.RedditEmbedClient = RedditEmbedClient; exports.TwitterEmbedClient = TwitterEmbedClient; exports.processShortcodes = processShortcodes; exports.RichMarkdownRenderer = RichMarkdownRenderer; exports.ReleaseChangelogSection = ReleaseChangelogSection; exports.StackedRowsPanel = StackedRowsPanel; exports.SlackChannelChip = SlackChannelChip; exports.AppStoreBadge = AppStoreBadge; exports.GooglePlayBadge = GooglePlayBadge; exports.StoreBadgeLinks = StoreBadgeLinks; exports.MobileAppQr = MobileAppQr; exports.StatusIndicator = StatusIndicator; exports.ErrorState = ErrorState; exports.PageError = PageError; exports.LoadError = LoadError; exports.NotFoundError = NotFoundError; exports.FilterCheckboxItem = FilterCheckboxItem; exports.TagKeyValueFilter = TagKeyValueFilter; exports.FilterModal = FilterModal; exports.PageContainer = PageContainer; exports.ListPageContainer = ListPageContainer; exports.DetailPageContainer = DetailPageContainer; exports.FormPageContainer = FormPageContainer; exports.ContentPageContainer = ContentPageContainer; exports.ListPageLayout = ListPageLayout; exports.PageShell = PageShell; exports.PageMain = PageMain; exports.ArticleDetailLayout = ArticleDetailLayout; exports.toggleVariants = toggleVariants; exports.Toggle = Toggle; exports.ToggleGroup = ToggleGroup; exports.ToggleGroupItem = ToggleGroupItem; exports.BenefitCard = BenefitCard; exports.benefitCardBorderClass = benefitCardBorderClass; exports.BenefitCardGrid = BenefitCardGrid; exports.BrandAssociationCard = BrandAssociationCard; exports.BrandAssociationGrid = BrandAssociationGrid; exports.BulletList = BulletList; exports.ChevronButton = ChevronButton; exports.CircularProgress = CircularProgress; exports.CheckIcon = CheckIcon2; exports.XIcon = XIcon2; exports.MinusIcon = MinusIcon; exports.CheckCircleIcon = CheckCircleIcon2; exports.XCircleIcon = XCircleIcon; exports.DashboardInfoCard = DashboardInfoCard; exports.InfoCardRow = InfoCardRow; exports.OSTypeBadge = OSTypeBadge; exports.OSTypeIcon = OSTypeIcon; exports.OSTypeLabel = OSTypeLabel; exports.DeviceCard = DeviceCard; exports.DeviceCardCompact = DeviceCardCompact; exports.DataAttribution = DataAttribution; exports.DownloadButton = DownloadButton; exports.ComplianceBadge = ComplianceBadge; exports.ComplianceLogo = ComplianceLogo; exports.FeatureCardGrid = FeatureCardGrid; exports.StepNumber = StepNumber; exports.NumberedStep = NumberedStep; exports.FeatureList = FeatureList; exports.SourceTooltip = SourceTooltip; exports.HighlightCard = HighlightCard; exports.HighlightCardGrid = HighlightCardGrid; exports.IconsBlock = IconsBlock; exports.DropdownButton = DropdownButton; exports.MoreActionsMenu = MoreActionsMenu; exports.OrganizationCard = OrganizationCard; exports.ServiceCard = ServiceCard; exports.Slider = Slider; exports.PersonCell = PersonCell; exports.PeopleCell = PeopleCell; exports.TitleContentBlock = TitleContentBlock; exports.ContentLoader = ContentLoader; exports.CardLoader = CardLoader; exports.FormLoader = FormLoader; exports.DetailLoader = DetailLoader; exports.ListLoader = ListLoader; exports.CursorPagination = CursorPagination; exports.CursorPaginationSimple = CursorPaginationSimple; exports.useDataTableContext = useDataTableContext; exports.DataTableRoot = DataTableRoot; exports.getHideClasses = getHideClasses; exports.alignJustify = alignJustify; exports.multiSelectFilterFn = multiSelectFilterFn; exports.ROW_HEIGHT_DESKTOP = ROW_HEIGHT_DESKTOP; exports.ROW_HEIGHT_MOBILE = ROW_HEIGHT_MOBILE; exports.ROW_SHELL_CLASSES = ROW_SHELL_CLASSES; exports.DataTableSkeleton = DataTableSkeleton; exports.TableEmptyState = TableEmptyState; exports.DynamicThemeProvider = DynamicThemeProvider; exports.useDynamicTheme = useDynamicTheme; exports.THEME_STORAGE_KEY = THEME_STORAGE_KEY; exports.THEME_ATTRIBUTE = THEME_ATTRIBUTE; exports.DEFAULT_THEME = DEFAULT_THEME; exports.ThemeProvider = ThemeProvider; exports.useTheme = useTheme; exports.useThemeToggle = useThemeToggle; exports.ArrayEntryManager = ArrayEntryManager; exports.PasswordInput = PasswordInput; exports.AccountDetailsFields = AccountDetailsFields; exports.TRIAL_TERM_ICONS = TRIAL_TERM_ICONS; exports.DEFAULT_TRIAL_TERMS = DEFAULT_TRIAL_TERMS; exports.trialBenefits = trialBenefits; exports.BenefitList = BenefitList; exports.AuthBenefitsPanel = AuthBenefitsPanel; exports.OpenFrameWordmark = OpenFrameWordmark; exports.PoweredByFlamingo = PoweredByFlamingo; exports.AuthShell = AuthShell; exports.BackToLoginLink = BackToLoginLink; exports.CompactAuthShell = CompactAuthShell; exports.LabeledDivider = LabeledDivider; exports.PROVIDER_META = PROVIDER_META; exports.SsoProviderButtons = SsoProviderButtons; exports.CompleteAccountForm = CompleteAccountForm; exports.PolicyLink = PolicyLink; exports.TermsAgreementLabel = TermsAgreementLabel; exports.CreateOrganizationForm = CreateOrganizationForm; exports.InviteLinkInvalidModal = InviteLinkInvalidModal; exports.LegalLinks = LegalLinks; exports.LoginForm = LoginForm; exports.NoAccountNotice = NoAccountNotice; exports.OpenFrameSsoLoginForm = OpenFrameSsoLoginForm; exports.OpenFrameSsoSignUpForm = OpenFrameSsoSignUpForm; exports.PasswordResetForm = PasswordResetForm; exports.SsoAuthShell = SsoAuthShell; exports.SsoJoinForm = SsoJoinForm; exports.ProviderButton = ProviderButton; exports.AuthProvidersList = AuthProvidersList; exports.ChangelogManager = ChangelogManager; exports.ChangelogSectionsManager = ChangelogSectionsManager; exports.ClickUpTasksManager = ClickUpTasksManager; exports.CommandBox = CommandBox; exports.TAG_BADGE_CLASS = TAG_BADGE_CLASS; exports.EntityTagBadges = EntityTagBadges; exports.ErrorBoundary = ErrorBoundary; exports.SectionSelector = SectionSelector; exports.FigmaPrototypeViewer = FigmaPrototypeViewer; exports.FiltersDropdown = FiltersDropdown; exports.useFiltersDropdown = useFiltersDropdown; exports.GitHubReleasesManager = GitHubReleasesManager; exports.KnowledgeBaseLinksManager = KnowledgeBaseLinksManager; exports.LoadingProvider = LoadingProvider; exports.useLoading = useLoading; exports.useMediaIntake = useMediaIntake; exports.MediaUploadArea = MediaUploadArea; exports.MediaGalleryManager = MediaGalleryManager; exports.CardSkeleton = CardSkeleton; exports.CardSkeletonGrid = CardSkeletonGrid; exports.AnnouncementBarSkeleton = AnnouncementBarSkeleton; exports.HeroSkeleton = HeroSkeleton; exports.SearchContainerSkeleton = SearchContainerSkeleton; exports.CategorySidebarSkeleton = CategorySidebarSkeleton; exports.BreadcrumbSkeleton = BreadcrumbSkeleton; exports.ResultsHeaderSkeleton = ResultsHeaderSkeleton; exports.TwoColumnLayoutSkeleton = TwoColumnLayoutSkeleton; exports.ArticleLayoutSkeleton = ArticleLayoutSkeleton; exports.VendorDetailLayoutSkeleton = VendorDetailLayoutSkeleton; exports.StatsSectionSkeleton = StatsSectionSkeleton; exports.BlogCardGridSkeleton = BlogCardGridSkeleton; exports.VendorGridSkeleton = VendorGridSkeleton; exports.SlackCommunitySkeleton = SlackCommunitySkeleton; exports.ContentLoadingContainer = ContentLoadingContainer; exports.useContentLoading = useContentLoading; exports.ParagraphSkeleton = ParagraphSkeleton; exports.ListSkeleton = ListSkeleton; exports.TableSkeleton = TableSkeleton; exports.FormSkeleton = FormSkeleton; exports.NavigationSkeleton = NavigationSkeleton; exports.ProfileSkeleton = ProfileSkeleton; exports.CommentSkeleton = CommentSkeleton; exports.FeatureListSkeleton = FeatureListSkeleton; exports.TimelineSkeleton = TimelineSkeleton; exports.PricingSkeleton = PricingSkeleton; exports.ProfileLoadingSkeleton = ProfileLoadingSkeleton; exports.MspProfileFormSkeleton = MspProfileFormSkeleton; exports.CategoryCardSkeleton = CategoryCardSkeleton; exports.CategoryVendorSelectorSkeleton = CategoryVendorSelectorSkeleton; exports.WizardLayoutSkeleton = WizardLayoutSkeleton; exports.MarginReportSkeleton = MarginReportSkeleton; exports.UsersGridSkeleton = UsersGridSkeleton; exports.DynamicSkeleton = DynamicSkeleton; exports.SkeletonPresets = SkeletonPresets; exports.PlatformSkeletonContainer = PlatformSkeletonContainer; exports.ProgressiveSkeleton = ProgressiveSkeleton; exports.OrganizationIconSkeleton = OrganizationIconSkeleton; exports.OrganizationCardSkeleton = OrganizationCardSkeleton; exports.OrganizationCardSkeletonGrid = OrganizationCardSkeletonGrid; exports.DeviceCardSkeleton = DeviceCardSkeleton; exports.DeviceCardSkeletonGrid = DeviceCardSkeletonGrid; exports.PushButtonSelector = PushButtonSelector; exports.MODEL_TOKEN_RATES_COPY = MODEL_TOKEN_RATES_COPY; exports.ModelTokenRates = ModelTokenRates; exports.ModelTokenRatesPopover = ModelTokenRatesPopover; exports.ModelTokenRatesUnavailable = ModelTokenRatesUnavailable; exports.ModelTokenRatesSkeleton = ModelTokenRatesSkeleton; exports.MODEL_TOKEN_EXCHANGE_BALANCE = MODEL_TOKEN_EXCHANGE_BALANCE; exports.MODEL_TOKEN_EXCHANGE_RANGE = MODEL_TOKEN_EXCHANGE_RANGE; exports.ModelTokenExchange = ModelTokenExchange; exports.MoreAboutButton = MoreAboutButton; exports.OSTypeBadgeGroup = OSTypeBadgeGroup; exports.ParallaxImageShowcase = ParallaxImageShowcase; exports.PathsDisplay = PathsDisplay; exports.OPENFRAME_PATHS = OPENFRAME_PATHS; exports.getOpenFramePaths = getOpenFramePaths; exports.OPENFRAME_DOCTOR_COMMANDS = OPENFRAME_DOCTOR_COMMANDS; exports.getOpenFrameDoctorCommand = getOpenFrameDoctorCommand; exports.PlatformFilterComponent = PlatformFilterComponent; exports.SelectButton = SelectButton; exports.ConfidenceBadge = ConfidenceBadge; exports.SEOEditorPreview = SEOEditorPreview; exports.socialIcon = socialIcon; exports.SocialIconRow = SocialIconRow; exports.SocialLinksManager = SocialLinksManager; exports.StartWithOpenFrameButton = StartWithOpenFrameButton; exports.StatusFilterComponent = StatusFilterComponent; exports.TagsSelector = TagsSelector; exports.WarningBlock = WarningBlock; exports.VideoBitesDisplay = VideoBitesDisplay; exports.FloatingWalkthroughVideo = FloatingWalkthroughVideo; exports.InlineWalkthroughVideo = InlineWalkthroughVideo; exports.useWalkthroughVideo = useWalkthroughVideo; exports.VideoSourceSelector = VideoSourceSelector; exports.SubtitlesEditor = SubtitlesEditor; exports.TranscriptSummaryEditor = TranscriptSummaryEditor; exports.AIEnrichButton = AIEnrichButton; exports.AIWarningsSection = AIWarningsSection; exports.AIEnrichSection = AIEnrichSection; exports.HighlightVideoSection = HighlightVideoSection; exports.HighlightConfigSection = HighlightConfigSection; exports.EntitySummaryEditor = EntitySummaryEditor; exports.AIStatusIndicator = AIStatusIndicator; exports.AIRequiredBadge = AIRequiredBadge; exports.TranscribeSummarizeSection = TranscribeSummarizeSection; exports.VideoClipsSection = VideoClipsSection; exports.HighlightGenerationSection = HighlightGenerationSection; exports.HighlightVideoPreview = HighlightVideoPreview; exports.TranscribeAndSummarizeCombinedSection = TranscribeAndSummarizeCombinedSection; exports.HighlightVideoCombinedSection = HighlightVideoCombinedSection; exports.ViewToggle = ViewToggle; exports.APPROVAL_LEVELS = APPROVAL_LEVELS; exports.APPROVAL_LEVEL_META = APPROVAL_LEVEL_META; exports.ApprovalLevelView = ApprovalLevelView; exports.PolicyConfigurationPanel = PolicyConfigurationPanel; exports.DataTableEmpty = DataTableEmpty; exports.DataTableRow = DataTableRow; exports.DataTableBody = DataTableBody; exports.DataTableCursorFooter = DataTableCursorFooter; exports.DataTableHeader = DataTableHeader; exports.DATA_TABLE_HEADER_LABEL_CLASS = DATA_TABLE_HEADER_LABEL_CLASS; exports.DataTableInfiniteFooter = DataTableInfiniteFooter; exports.DataTableRowCount = DataTableRowCount; exports.useDataTable = useDataTable; exports.DataTable = DataTable; exports.flexRender = _reacttable.flexRender; exports.createColumnHelper = _reacttable.createColumnHelper; exports.getCoreRowModel = _reacttable.getCoreRowModel; exports.getExpandedRowModel = _reacttable.getExpandedRowModel; exports.getFacetedRowModel = _reacttable.getFacetedRowModel; exports.getFacetedUniqueValues = _reacttable.getFacetedUniqueValues; exports.getFilteredRowModel = _reacttable.getFilteredRowModel; exports.getGroupedRowModel = _reacttable.getGroupedRowModel; exports.getPaginationRowModel = _reacttable.getPaginationRowModel; exports.getSortedRowModel = _reacttable.getSortedRowModel; exports.PoliciesTable = PoliciesTable; exports.PolicySummaryCards = PolicySummaryCards; exports.POLICY_STATUS_CONFIG = POLICY_STATUS_CONFIG; exports.getPolicyStatus = getPolicyStatus; exports.getPolicyTableStatus = getPolicyTableStatus; exports.computePolicySummary = computePolicySummary; exports.TENANT_EMPTY_VALUE = TENANT_EMPTY_VALUE; exports.accessStateTag = accessStateTag; exports.providerMark = providerMark2; exports.lastReadAt = lastReadAt; exports.formatLastRead = formatLastRead; exports.usersCountLabel = usersCountLabel; exports.TenantAccessCell = TenantAccessCell; exports.TenantCell = TenantCell; exports.TenantCustomerCell = TenantCustomerCell; exports.TENANT_COLUMNS = TENANT_COLUMNS; exports.TENANTS_TABLE_COLUMNS = TENANTS_TABLE_COLUMNS; exports.TenantsTableView = TenantsTableView; exports.PhoneInput = PhoneInput; exports.WaitlistForm = WaitlistForm; exports.NotificationsProvider = NotificationsProvider; exports.useNotifications = useNotifications; exports.useOptionalNotifications = useOptionalNotifications; exports.AppLayoutDrawerContainerContext = AppLayoutDrawerContainerContext; exports.useAppLayoutDrawerContainer = useAppLayoutDrawerContainer; exports.AppLayoutDrawerCoordinationContext = AppLayoutDrawerCoordinationContext; exports.AppLayoutDrawerRoot = AppLayoutDrawerRoot; exports.AppLayoutDrawerTrigger = AppLayoutDrawerTrigger; exports.AppLayoutDrawerClose = AppLayoutDrawerClose; exports.AppLayoutDrawerContent = AppLayoutDrawerContent; exports.AppLayoutDrawerHeader = AppLayoutDrawerHeader; exports.AppLayoutDrawerTitle = AppLayoutDrawerTitle; exports.AppLayoutDrawerDescription = AppLayoutDrawerDescription; exports.AppLayoutDrawerBody = AppLayoutDrawerBody; exports.AppLayoutDrawerFooter = AppLayoutDrawerFooter; exports.NotificationTile = NotificationTile; exports.NotificationDrawer = NotificationDrawer; exports.NotificationPopups = NotificationPopups; exports.TICKET_APPROVAL_REQUEST_TYPE = TICKET_APPROVAL_REQUEST_TYPE; exports.MINGO_APPROVAL_REQUEST_TYPE = MINGO_APPROVAL_REQUEST_TYPE; exports.isApprovalNotificationType = isApprovalNotificationType; exports.isApprovalNotification = isApprovalNotification; exports.getApprovalMeta = getApprovalMeta; exports.resolutionToStatus = resolutionToStatus; exports.approvalMetaToBatchData = approvalMetaToBatchData; exports.ApprovalRequestNotificationTile = ApprovalRequestNotificationTile; exports.TimeTrackerProvider = TimeTrackerProvider; exports.useTimeTracker = useTimeTracker; exports.useOptionalTimeTracker = useOptionalTimeTracker; exports.useTrackerClock = useTrackerClock; exports.TimeTrackerPanel = TimeTrackerPanel; exports.UnreadDot = UnreadDot; exports.UnreadCountBadge = UnreadCountBadge; exports.HeaderButton = HeaderButton; exports.TimeTrackerHeaderButton = TimeTrackerHeaderButton; exports.formatLastOnline = formatLastOnline; exports.getDeviceName = getDeviceName; exports.matchesDeviceName = matchesDeviceName; exports.DevicesViewConfigProvider = DevicesViewConfigProvider; exports.useDevicesViewConfig = useDevicesViewConfig; exports.useDeviceImageUrl = useDeviceImageUrl; exports.DeviceSelectionModeRadio = DeviceSelectionModeRadio; exports.getDeviceStatusConfig = getDeviceStatusConfig; exports.getDeviceOperatingSystem = getDeviceOperatingSystem; exports.DEVICE_STATUS = DEVICE_STATUS; exports.DEFAULT_VISIBLE_STATUSES = DEFAULT_VISIBLE_STATUSES; exports.DEFAULT_DASHBOARD_STATUSES = DEFAULT_DASHBOARD_STATUSES; exports.DEFAULT_DEVICES_LIST_STATUSES = DEFAULT_DEVICES_LIST_STATUSES; exports.DEVICE_ENRICHMENT_STATUSES = DEVICE_ENRICHMENT_STATUSES; exports.DEVICE_ENRICHMENT_FILTER = DEVICE_ENRICHMENT_FILTER; exports.HIDDEN_DEVICE_STATUSES = HIDDEN_DEVICE_STATUSES; exports.renderDeviceTypeIcon = renderDeviceTypeIcon; exports.DeviceTypeTile = DeviceTypeTile; exports.DeviceTagsFilterButton = DeviceTagsFilterButton; exports.DevicesFilterToolbar = DevicesFilterToolbar; exports.getDeviceActionsColumn = getDeviceActionsColumn; exports.getDeviceOpenColumn = getDeviceOpenColumn; exports.DevicesTableBody = DevicesTableBody; exports.getDeviceFilterColumns = getDeviceFilterColumns; exports.getDeviceTableColumns = getDeviceTableColumns; exports.useTagFilterModal = useTagFilterModal; exports.DeviceSelector = DeviceSelector; exports.DeviceSelectorSkeleton = DeviceSelectorSkeleton; exports.EMPTY_NARROWING = EMPTY_NARROWING; exports.narrowingToFilter = narrowingToFilter; exports.DevicesGrid = DevicesGrid; exports.DevicesGridFilters = DevicesGridFilters; exports.EMPTY_DEVICES_NARROWING = EMPTY_DEVICES_NARROWING; exports.isNarrowed = isNarrowed; exports.DevicesList = DevicesList; exports.DEVICE_VIEW_MODE_ITEMS = DEVICE_VIEW_MODE_ITEMS; exports.buildDevicePanelActions = buildDevicePanelActions; exports.IDLE_DEVICES_TOOLBAR = IDLE_DEVICES_TOOLBAR; exports.DevicesPanelView = DevicesPanelView; exports.PACKAGE_MANAGERS = PACKAGE_MANAGERS; exports.PACKAGE_MANAGER_LABEL = PACKAGE_MANAGER_LABEL; exports.PACKAGE_MANAGER_ICON = PACKAGE_MANAGER_ICON; exports.PACKAGE_MANAGER_OS = PACKAGE_MANAGER_OS; exports.packageManagerLabel = packageManagerLabel; exports.SOFTWARE_SOURCE_LABEL = SOFTWARE_SOURCE_LABEL; exports.PACKAGE_SEARCH_LABEL = PACKAGE_SEARCH_LABEL; exports.PACKAGE_SEARCH_PLACEHOLDER = PACKAGE_SEARCH_PLACEHOLDER; exports.PackageSearchFieldPlaceholder = PackageSearchFieldPlaceholder; exports.SoftwareScheduleFields = SoftwareScheduleFields; exports.SOFTWARE_ACTION_COPY = SOFTWARE_ACTION_COPY; exports.SOFTWARE_ACTION_DETAIL_TITLE = SOFTWARE_ACTION_DETAIL_TITLE; exports.softwareActionCopy = softwareActionCopy; exports.newSoftwareRow = newSoftwareRow; exports.SoftwareRowFields = SoftwareRowFields; exports.SoftwareActionForm = SoftwareActionForm; exports.LogDrawer = LogDrawer; exports.SYSTEM_SOURCE_LABEL = SYSTEM_SOURCE_LABEL; exports.logSourceLabels = logSourceLabels; exports.LogsPageView = LogsPageView; exports.LogCopyIconButton = LogCopyIconButton; exports.LOG_COLUMN_WIDTHS = LOG_COLUMN_WIDTHS; exports.ToolBadge = ToolBadge; exports.LogsTableView = LogsTableView; exports.LogsTableSkeleton = LogsTableSkeleton; exports.logSeverityVariant = logSeverityVariant; exports.SCRIPT_EXECUTION_STATUS_PRESENTATION = SCRIPT_EXECUTION_STATUS_PRESENTATION; exports.scriptExecutionStatus = scriptExecutionStatus; exports.ExecutionSourceBadge = ExecutionSourceBadge; exports.ExecutionTimestampCell = ExecutionTimestampCell; exports.ExecutionStatusCell = ExecutionStatusCell; exports.ExecutionDeviceCell = ExecutionDeviceCell; exports.ExecutionInitiatorCell = ExecutionInitiatorCell; exports.ExecutionResultCell = ExecutionResultCell; exports.ScriptExecutionResult = ScriptExecutionResult; exports.ScriptNameCell = ScriptNameCell; exports.ScheduleDateTimeCell = ScheduleDateTimeCell; exports.SCRIPT_COLUMNS = SCRIPT_COLUMNS; exports.SCHEDULE_COLUMNS = SCHEDULE_COLUMNS; exports.EXECUTION_COLUMNS = EXECUTION_COLUMNS; exports.SCRIPTS_TAB_WIDTHS = SCRIPTS_TAB_WIDTHS; exports.SCRIPTS_TABLE_COLUMNS = SCRIPTS_TABLE_COLUMNS; exports.SCHEDULES_TABLE_COLUMNS = SCHEDULES_TABLE_COLUMNS; exports.EXECUTIONS_TABLE_COLUMNS = EXECUTIONS_TABLE_COLUMNS; exports.scriptsColumnMeta = scriptsColumnMeta; exports.RowActionsCell = RowActionsCell; exports.OpenInNewTabCell = OpenInNewTabCell; exports.ScriptExecutionsTable = ScriptExecutionsTable; exports.ScriptSchedulesTable = ScriptSchedulesTable; exports.SCRIPT_SHELL_TYPES = SCRIPT_SHELL_TYPES; exports.scriptShellType = scriptShellType; exports.scriptShellLabel = scriptShellLabel; exports.ScriptShellBadge = ScriptShellBadge; exports.ScriptsTable = ScriptsTable; exports.SCRIPTS_TABS = SCRIPTS_TABS; exports.SCRIPT_SCHEDULE_TRIGGER = SCRIPT_SCHEDULE_TRIGGER; exports.SCHEDULE_TIME_REFERENCE = SCHEDULE_TIME_REFERENCE; exports.SCHEDULE_OFFLINE_BEHAVIOR = SCHEDULE_OFFLINE_BEHAVIOR; exports.isEventTrigger = isEventTrigger; exports.isDeviceLocalTime = isDeviceLocalTime; exports.DURATION_UNIT_VALUES = DURATION_UNIT_VALUES; exports.DURATION_UNIT_SECONDS = DURATION_UNIT_SECONDS; exports.DURATION_UNIT_LABELS = DURATION_UNIT_LABELS; exports.MIN_REPEAT_MINUTES = MIN_REPEAT_MINUTES; exports.DURATION_UNIT_OPTIONS = DURATION_UNIT_OPTIONS; exports.snapRepeatInterval = snapRepeatInterval; exports.isRetryOnReconnect = isRetryOnReconnect; exports.MIN_RECONNECT_MINUTES = MIN_RECONNECT_MINUTES; exports.snapReconnectInterval = snapReconnectInterval; exports.DEFAULT_RECONNECT_WINDOW = DEFAULT_RECONNECT_WINDOW; exports.isSlotOnGrid = isSlotOnGrid; exports.getTimeSlotOptions = getTimeSlotOptions; exports.slotToLabel = slotToLabel; exports.startOfToday = startOfToday; exports.earliestDeviceLocalDay = earliestDeviceLocalDay; exports.earliestScheduleDay = earliestScheduleDay; exports.isScheduleStartInPast = isScheduleStartInPast; exports.PAST_START_MESSAGE = PAST_START_MESSAGE; exports.NO_SLOTS_TODAY_MESSAGE = NO_SLOTS_TODAY_MESSAGE; exports.isStartInPastAndChanged = isStartInPastAndChanged; exports.dateToTimeSlot = dateToTimeSlot; exports.applyTimeSlot = applyTimeSlot; exports.fromScheduleInstant = fromScheduleInstant; exports.EMPTY_SCHEDULE_SCRIPT_ROW = EMPTY_SCHEDULE_SCRIPT_ROW; exports.SCHEDULE_TRIGGER_OPTIONS = SCHEDULE_TRIGGER_OPTIONS; exports.SCHEDULE_TIME_REFERENCE_OPTIONS = SCHEDULE_TIME_REFERENCE_OPTIONS; exports.SCHEDULE_OFFLINE_BEHAVIOR_OPTIONS = SCHEDULE_OFFLINE_BEHAVIOR_OPTIONS; exports.DEFAULT_SCHEDULE_FORM_VALUES = DEFAULT_SCHEDULE_FORM_VALUES; exports.ScheduleIntervalInput = ScheduleIntervalInput; exports.ScheduleOfflineFields = ScheduleOfflineFields; exports.SLOT_STICKINESS = SLOT_STICKINESS; exports.SortableList = SortableList; exports.ScriptArguments = ScriptArguments; exports.SortableMoveButtons = SortableMoveButtons; exports.useSortableItem = useSortableItem; exports.ScheduleScriptPickerCard = ScheduleScriptPickerCard; exports.ScheduleScriptsField = ScheduleScriptsField; exports.ScheduleTimingFields = ScheduleTimingFields; exports.ScheduleFormFields = ScheduleFormFields; exports.ScheduleScriptSearchField = ScheduleScriptSearchField; exports.KNOWLEDGE_BASE_ITEM_ICON = KNOWLEDGE_BASE_ITEM_ICON; exports.getKnowledgeBaseOpenColumn = getKnowledgeBaseOpenColumn; exports.getKnowledgeBaseColumns = getKnowledgeBaseColumns; exports.KnowledgeBaseTableBody = KnowledgeBaseTableBody; exports.TicketAttachmentsList = TicketAttachmentsList; exports.TicketDetailSection = TicketDetailSection; exports.KnowledgeBaseArticleView = KnowledgeBaseArticleView; exports.SortableDragHandle = SortableDragHandle; exports.TicketStatusConfigList = TicketStatusConfigList; exports.ConversationCard = ConversationCard; exports.SnapCarouselControlsSkeleton = SnapCarouselControlsSkeleton; exports.SnapCarousel = SnapCarousel; exports.capabilityTabId = capabilityTabId; exports.CapabilityExplorerSkeleton = CapabilityExplorerSkeleton; exports.CapabilityExplorer = CapabilityExplorer; exports.TableHeader = TableHeader; exports.TableCell = TableCell; exports.TableCardSkeleton = TableCardSkeleton; exports.TableRow = TableRow; exports.Table = Table; exports.TableDescriptionCell = TableDescriptionCell; exports.TableTimestampCell = TableTimestampCell; exports.QueryReportTableHeader = QueryReportTableHeader; exports.QueryReportTableRow = QueryReportTableRow; exports.QueryReportTableSkeleton = QueryReportTableSkeleton; exports.deriveColumns = deriveColumns; exports.exportToCSV = exportToCSV; exports.QueryReportTable = QueryReportTable; exports.SearchInput = SearchInput; exports.FilterListItem = FilterListItem; exports.FilterList = FilterList; exports.TagSearchInput = TagSearchInput; exports.MarkdownEditor = MarkdownEditor; exports.FileUpload = FileUpload; exports.ImageUploader = ImageUploader; exports.TICKET_STATUS_COLOR_PRESETS = TICKET_STATUS_COLOR_PRESETS; exports.CUSTOM_PRESET_KEY = CUSTOM_PRESET_KEY; exports.DEFAULT_CUSTOM_STATUS_COLOR = DEFAULT_CUSTOM_STATUS_COLOR; exports.ColorPresetSelect = ColorPresetSelect; exports.ColorPickerInput = ColorPickerInput; exports.TicketStatusConfigRow = TicketStatusConfigRow; exports.formatTestRunDuration = formatTestRunDuration; exports.TestResultsSkeleton = TestResultsSkeleton; exports.TestResultsTable = TestResultsTable; exports.TestRunErrorBanner = TestRunErrorBanner; exports.TestRunResults = TestRunResults; exports.TimingStat = TimingStat; exports.TestRunStatusStat = TestRunStatusStat; exports.useTestRunState = useTestRunState; exports.TicketNoteCard = TicketNoteCard; exports.TicketNotesSection = TicketNotesSection; exports.TicketInfoSection = TicketInfoSection; exports.renderTicketStatusOption = renderTicketStatusOption; exports.renderTicketAssigneeOption = renderTicketAssigneeOption; exports.TakeOverTicketModal = TakeOverTicketModal; exports.ReopenTicketModal = ReopenTicketModal; exports.ReopenTicketRequestModal = ReopenTicketRequestModal; exports.PHOTO_WALL_FRAME = PHOTO_WALL_FRAME; exports.photoWallRequestWidth = photoWallRequestWidth; exports.photoOrientation = photoOrientation; exports.arrangePhotoWall = arrangePhotoWall; exports.PhotoWall = PhotoWall; exports.FilterPillRow = FilterPillRow; exports.LazyMount = LazyMount; exports.AppWindowFrame = AppWindowFrame; exports.PhoneFrame = PhoneFrame; exports.NotificationStack = NotificationStack; exports.StripCard = StripCard; exports.LeaderRow = LeaderRow; exports.AnalyzingState = AnalyzingState; exports.IncidentStatusLine = IncidentStatusLine; exports.IncidentFeed = IncidentFeed; exports.useBetweenAnchors = useBetweenAnchors; exports.StickyActionBar = StickyActionBar; exports.IconTile = IconTile;