@flamingo-stack/openframe-frontend-core 0.0.740 → 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 (167) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-3ZIQOYNX.cjs → chunk-4XL4YEZM.cjs} +3 -3
  3. package/dist/{chunk-WFPCCBOM.cjs → chunk-7AM3AFM4.cjs} +10 -10
  4. package/dist/{chunk-KHXZFLIN.cjs → chunk-DKOLQPE7.cjs} +8 -2
  5. package/dist/{chunk-7UIQPMBJ.cjs → chunk-FQN6STIM.cjs} +1 -144
  6. package/dist/{chunk-ZLTCQKTD.cjs → chunk-I6UE6YVM.cjs} +2 -2
  7. package/dist/{chunk-VC4IV3AY.cjs → chunk-IK2RJUEA.cjs} +2049 -199
  8. package/dist/{chunk-D5KEWWLW.cjs → chunk-ITPEFCQ2.cjs} +10 -10
  9. package/dist/{chunk-2Y5Y4FLM.cjs → chunk-JFS6TZDX.cjs} +15 -15
  10. package/dist/{chunk-VU4CKUJW.cjs → chunk-LZ6NOVXX.cjs} +23 -23
  11. package/dist/{chunk-UW3YXDC4.cjs → chunk-QEUGYHFB.cjs} +4 -4
  12. package/dist/{chunk-II4QMH26.cjs → chunk-STEJZPIO.cjs} +3 -3
  13. package/dist/{chunk-4RLGLB45.cjs → chunk-XJ36TEGE.cjs} +11 -11
  14. package/dist/{chunk-BDA5F6RM.cjs → chunk-YQ37ZCD2.cjs} +2 -2
  15. package/dist/{chunk-LLAC2UZ3.cjs → chunk-ZJPDGVA6.cjs} +3 -3
  16. package/dist/{chunk-SWR22DOZ.cjs → chunk-ZYOS7LVQ.cjs} +22 -22
  17. package/dist/{cloud-tenants-PVXDI5MU.cjs → cloud-tenants-MVJK52I2.cjs} +12 -12
  18. package/dist/components/case-studies/index.cjs +10 -10
  19. package/dist/components/contact/index.cjs +3 -3
  20. package/dist/components/docs/index.cjs +5 -5
  21. package/dist/components/embeds/index.cjs +3 -3
  22. package/dist/components/faq/index.cjs +3 -3
  23. package/dist/components/features/capability-explorer.d.ts +9 -2
  24. package/dist/components/features/capability-explorer.d.ts.map +1 -1
  25. package/dist/components/features/capability-explorer.js +113 -6
  26. package/dist/components/features/index.cjs +140 -2
  27. package/dist/components/features/index.d.ts +1 -0
  28. package/dist/components/features/index.d.ts.map +1 -1
  29. package/dist/components/features/index.js +1 -0
  30. package/dist/components/features/scripts/execution-cells.d.ts +65 -0
  31. package/dist/components/features/scripts/execution-cells.d.ts.map +1 -0
  32. package/dist/components/features/scripts/execution-cells.js +75 -0
  33. package/dist/components/features/scripts/execution-status.d.ts +48 -0
  34. package/dist/components/features/scripts/execution-status.d.ts.map +1 -0
  35. package/dist/components/features/scripts/execution-status.js +15 -0
  36. package/dist/components/features/scripts/index.d.ts +20 -0
  37. package/dist/components/features/scripts/index.d.ts.map +1 -0
  38. package/dist/components/features/scripts/index.js +59 -0
  39. package/dist/components/features/scripts/schedule-form/index.d.ts +18 -0
  40. package/dist/components/features/scripts/schedule-form/index.d.ts.map +1 -0
  41. package/dist/components/features/scripts/schedule-form/index.js +84 -0
  42. package/dist/components/features/scripts/schedule-form/schedule-enums.d.ts +24 -0
  43. package/dist/components/features/scripts/schedule-form/schedule-enums.d.ts.map +1 -0
  44. package/dist/components/features/scripts/schedule-form/schedule-enums.js +18 -0
  45. package/dist/components/features/scripts/schedule-form/schedule-form-fields.d.ts +57 -0
  46. package/dist/components/features/scripts/schedule-form/schedule-form-fields.d.ts.map +1 -0
  47. package/dist/components/features/scripts/schedule-form/schedule-form-fields.js +169 -0
  48. package/dist/components/features/scripts/schedule-form/schedule-form-types.d.ts +138 -0
  49. package/dist/components/features/scripts/schedule-form/schedule-form-types.d.ts.map +1 -0
  50. package/dist/components/features/scripts/schedule-form/schedule-form-types.js +72 -0
  51. package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts +54 -0
  52. package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts.map +1 -0
  53. package/dist/components/features/scripts/schedule-form/schedule-interval-input.js +60 -0
  54. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts +29 -0
  55. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts.map +1 -0
  56. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.js +124 -0
  57. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.d.ts +52 -0
  58. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.d.ts.map +1 -0
  59. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.js +244 -0
  60. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.d.ts +35 -0
  61. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.d.ts.map +1 -0
  62. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.js +58 -0
  63. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.d.ts +25 -0
  64. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.d.ts.map +1 -0
  65. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.js +66 -0
  66. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.d.ts +77 -0
  67. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.d.ts.map +1 -0
  68. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.js +262 -0
  69. package/dist/components/features/scripts/schedule-form/schedule-timing.d.ts +288 -0
  70. package/dist/components/features/scripts/schedule-form/schedule-timing.d.ts.map +1 -0
  71. package/dist/components/features/scripts/schedule-form/schedule-timing.js +165 -0
  72. package/dist/components/features/scripts/script-cells.d.ts +11 -0
  73. package/dist/components/features/scripts/script-cells.d.ts.map +1 -0
  74. package/dist/components/features/scripts/script-cells.js +19 -0
  75. package/dist/components/features/scripts/script-executions-table.d.ts +58 -0
  76. package/dist/components/features/scripts/script-executions-table.d.ts.map +1 -0
  77. package/dist/components/features/scripts/script-executions-table.js +88 -0
  78. package/dist/components/features/scripts/script-schedules-table.d.ts +38 -0
  79. package/dist/components/features/scripts/script-schedules-table.d.ts.map +1 -0
  80. package/dist/components/features/scripts/script-schedules-table.js +71 -0
  81. package/dist/components/features/scripts/script-shell-badge.d.ts +9 -0
  82. package/dist/components/features/scripts/script-shell-badge.d.ts.map +1 -0
  83. package/dist/components/features/scripts/script-shell-badge.js +15 -0
  84. package/dist/components/features/scripts/scripts-table-columns.d.ts +162 -0
  85. package/dist/components/features/scripts/scripts-table-columns.d.ts.map +1 -0
  86. package/dist/components/features/scripts/scripts-table-columns.js +69 -0
  87. package/dist/components/features/scripts/scripts-table-shared.d.ts +19 -0
  88. package/dist/components/features/scripts/scripts-table-shared.d.ts.map +1 -0
  89. package/dist/components/features/scripts/scripts-table-shared.js +35 -0
  90. package/dist/components/features/scripts/scripts-table.d.ts +40 -0
  91. package/dist/components/features/scripts/scripts-table.d.ts.map +1 -0
  92. package/dist/components/features/scripts/scripts-table.js +84 -0
  93. package/dist/components/features/scripts/scripts-tabs.d.ts +5 -0
  94. package/dist/components/features/scripts/scripts-tabs.d.ts.map +1 -0
  95. package/dist/components/features/scripts/scripts-tabs.js +10 -0
  96. package/dist/components/features/scripts/shell-types.d.ts +13 -0
  97. package/dist/components/features/scripts/shell-types.d.ts.map +1 -0
  98. package/dist/components/features/scripts/shell-types.js +21 -0
  99. package/dist/components/help-center-pages/index.cjs +44 -44
  100. package/dist/components/index.cjs +162 -24
  101. package/dist/components/meeting-scheduler/index.cjs +11 -11
  102. package/dist/components/navigation/index.cjs +3 -3
  103. package/dist/components/onboarding-guides/index.cjs +4 -4
  104. package/dist/components/product-demo/fixtures/scripts.d.ts +34 -0
  105. package/dist/components/product-demo/fixtures/scripts.d.ts.map +1 -0
  106. package/dist/components/product-demo/fixtures/scripts.js +123 -0
  107. package/dist/components/product-demo/fixtures/shared.d.ts +8 -0
  108. package/dist/components/product-demo/fixtures/shared.d.ts.map +1 -1
  109. package/dist/components/product-demo/fixtures/shared.js +7 -1
  110. package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -1
  111. package/dist/components/product-demo/fixtures/software-update.js +1 -5
  112. package/dist/components/product-demo/index.cjs +16 -13
  113. package/dist/components/product-demo/product-screen.d.ts.map +1 -1
  114. package/dist/components/product-demo/product-screen.js +2 -1
  115. package/dist/components/product-demo/registry.d.ts.map +1 -1
  116. package/dist/components/product-demo/registry.js +2 -1
  117. package/dist/components/product-demo/screen-keys.cjs +2 -1
  118. package/dist/components/product-demo/screen-keys.d.ts +1 -0
  119. package/dist/components/product-demo/screen-keys.d.ts.map +1 -1
  120. package/dist/components/product-demo/screen-keys.js +2 -1
  121. package/dist/components/product-demo/screens/scripts.d.ts +11 -0
  122. package/dist/components/product-demo/screens/scripts.d.ts.map +1 -0
  123. package/dist/components/product-demo/screens/scripts.js +130 -0
  124. package/dist/components/tickets/index.cjs +5 -5
  125. package/dist/components/ui/index.cjs +2 -2
  126. package/dist/{devices-TWEA7XOR.cjs → devices-W3S7Q2PG.cjs} +8 -8
  127. package/dist/index.cjs +143 -5
  128. package/dist/{knowledge-4GQDBNQB.cjs → knowledge-AIYQ4FC3.cjs} +6 -6
  129. package/dist/{logs-EVU6GJHZ.cjs → logs-7SHJ2ARE.cjs} +24 -24
  130. package/dist/{policies-OZUEA5YS.cjs → policies-EIZJ5SUP.cjs} +9 -9
  131. package/dist/{remote-session-DNFZ5OLY.cjs → remote-session-BZMNE6D2.cjs} +5 -5
  132. package/dist/scripts-J2FWC7E4.cjs +2112 -0
  133. package/dist/{software-update-BLIVYOY2.cjs → software-update-QAMNASVF.cjs} +13 -17
  134. package/dist/{tickets-board-CKZRB6YV.cjs → tickets-board-CEDHD3KB.cjs} +17 -17
  135. package/package.json +1 -1
  136. package/src/components/features/capability-explorer.tsx +134 -7
  137. package/src/components/features/index.ts +1 -0
  138. package/src/components/features/scripts/execution-cells.tsx +149 -0
  139. package/src/components/features/scripts/execution-status.ts +42 -0
  140. package/src/components/features/scripts/index.ts +42 -0
  141. package/src/components/features/scripts/schedule-form/index.ts +59 -0
  142. package/src/components/features/scripts/schedule-form/schedule-enums.ts +26 -0
  143. package/src/components/features/scripts/schedule-form/schedule-form-fields.tsx +249 -0
  144. package/src/components/features/scripts/schedule-form/schedule-form-types.ts +189 -0
  145. package/src/components/features/scripts/schedule-form/schedule-interval-input.tsx +121 -0
  146. package/src/components/features/scripts/schedule-form/schedule-offline-fields.tsx +218 -0
  147. package/src/components/features/scripts/schedule-form/schedule-script-picker-card.tsx +321 -0
  148. package/src/components/features/scripts/schedule-form/schedule-script-search-field.tsx +115 -0
  149. package/src/components/features/scripts/schedule-form/schedule-scripts-field.tsx +97 -0
  150. package/src/components/features/scripts/schedule-form/schedule-timing-fields.tsx +482 -0
  151. package/src/components/features/scripts/schedule-form/schedule-timing.ts +484 -0
  152. package/src/components/features/scripts/script-cells.tsx +29 -0
  153. package/src/components/features/scripts/script-executions-table.tsx +145 -0
  154. package/src/components/features/scripts/script-schedules-table.tsx +113 -0
  155. package/src/components/features/scripts/script-shell-badge.tsx +25 -0
  156. package/src/components/features/scripts/scripts-table-columns.ts +95 -0
  157. package/src/components/features/scripts/scripts-table-shared.tsx +43 -0
  158. package/src/components/features/scripts/scripts-table.tsx +124 -0
  159. package/src/components/features/scripts/scripts-tabs.ts +11 -0
  160. package/src/components/features/scripts/shell-types.ts +26 -0
  161. package/src/components/product-demo/fixtures/scripts.ts +186 -0
  162. package/src/components/product-demo/fixtures/shared.ts +7 -0
  163. package/src/components/product-demo/fixtures/software-update.ts +1 -7
  164. package/src/components/product-demo/product-screen.tsx +3 -1
  165. package/src/components/product-demo/registry.ts +1 -0
  166. package/src/components/product-demo/screen-keys.ts +1 -0
  167. package/src/components/product-demo/screens/scripts.tsx +192 -0
@@ -104,6 +104,8 @@ var _chunkYUMFVQINcjs = require('./chunk-YUMFVQIN.cjs');
104
104
 
105
105
 
106
106
 
107
+
108
+
107
109
 
108
110
 
109
111
 
@@ -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
 
@@ -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: _chunkCWRVTQUOcjs.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
  }
@@ -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;