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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-ENCAIAMY.cjs → chunk-4XL4YEZM.cjs} +3 -3
  3. package/dist/{chunk-FL6UO7IR.cjs → chunk-5SVOGLNK.cjs} +2 -2
  4. package/dist/{chunk-WFPCCBOM.cjs → chunk-7AM3AFM4.cjs} +10 -10
  5. package/dist/{chunk-S2CA5WE4.cjs → chunk-CWRVTQUO.cjs} +9 -1
  6. package/dist/{chunk-KHXZFLIN.cjs → chunk-DKOLQPE7.cjs} +8 -2
  7. package/dist/{chunk-UXFJXIUT.cjs → chunk-EKGL5K5K.cjs} +2 -2
  8. package/dist/{chunk-DTLHY2ZF.cjs → chunk-FQN6STIM.cjs} +12 -155
  9. package/dist/{chunk-V2ZFH42N.cjs → chunk-HYBMADYO.cjs} +3 -3
  10. package/dist/{chunk-NX6JQT25.cjs → chunk-I6UE6YVM.cjs} +4 -4
  11. package/dist/{chunk-SB4VWA5V.cjs → chunk-IK2RJUEA.cjs} +2118 -268
  12. package/dist/{chunk-CUDTMCXK.cjs → chunk-ITPEFCQ2.cjs} +13 -13
  13. package/dist/{chunk-WMKNZI4G.cjs → chunk-JFS6TZDX.cjs} +22 -22
  14. package/dist/{chunk-RGFT3P3L.cjs → chunk-LZ6NOVXX.cjs} +55 -55
  15. package/dist/{chunk-TF7J6VXG.cjs → chunk-QEUGYHFB.cjs} +9 -9
  16. package/dist/{chunk-II4QMH26.cjs → chunk-STEJZPIO.cjs} +3 -3
  17. package/dist/{chunk-UI3HROSI.cjs → chunk-XJ36TEGE.cjs} +33 -33
  18. package/dist/{chunk-UYP3G6PB.cjs → chunk-YQ37ZCD2.cjs} +2 -2
  19. package/dist/{chunk-Q7GG3WC5.cjs → chunk-ZJPDGVA6.cjs} +5 -5
  20. package/dist/{chunk-EGN4I5Q7.cjs → chunk-ZYOS7LVQ.cjs} +134 -46
  21. package/dist/{cloud-tenants-QSFSO3PA.cjs → cloud-tenants-MVJK52I2.cjs} +13 -13
  22. package/dist/components/case-studies/index.cjs +11 -11
  23. package/dist/components/chat/index.cjs +2 -2
  24. package/dist/components/contact/index.cjs +4 -4
  25. package/dist/components/docs/index.cjs +7 -7
  26. package/dist/components/embeds/index.cjs +4 -4
  27. package/dist/components/faq/index.cjs +5 -5
  28. package/dist/components/features/capability-explorer.d.ts +9 -2
  29. package/dist/components/features/capability-explorer.d.ts.map +1 -1
  30. package/dist/components/features/capability-explorer.js +113 -6
  31. package/dist/components/features/index.cjs +141 -3
  32. package/dist/components/features/index.d.ts +1 -0
  33. package/dist/components/features/index.d.ts.map +1 -1
  34. package/dist/components/features/index.js +1 -0
  35. package/dist/components/features/scripts/execution-cells.d.ts +65 -0
  36. package/dist/components/features/scripts/execution-cells.d.ts.map +1 -0
  37. package/dist/components/features/scripts/execution-cells.js +75 -0
  38. package/dist/components/features/scripts/execution-status.d.ts +48 -0
  39. package/dist/components/features/scripts/execution-status.d.ts.map +1 -0
  40. package/dist/components/features/scripts/execution-status.js +15 -0
  41. package/dist/components/features/scripts/index.d.ts +20 -0
  42. package/dist/components/features/scripts/index.d.ts.map +1 -0
  43. package/dist/components/features/scripts/index.js +59 -0
  44. package/dist/components/features/scripts/schedule-form/index.d.ts +18 -0
  45. package/dist/components/features/scripts/schedule-form/index.d.ts.map +1 -0
  46. package/dist/components/features/scripts/schedule-form/index.js +84 -0
  47. package/dist/components/features/scripts/schedule-form/schedule-enums.d.ts +24 -0
  48. package/dist/components/features/scripts/schedule-form/schedule-enums.d.ts.map +1 -0
  49. package/dist/components/features/scripts/schedule-form/schedule-enums.js +18 -0
  50. package/dist/components/features/scripts/schedule-form/schedule-form-fields.d.ts +57 -0
  51. package/dist/components/features/scripts/schedule-form/schedule-form-fields.d.ts.map +1 -0
  52. package/dist/components/features/scripts/schedule-form/schedule-form-fields.js +169 -0
  53. package/dist/components/features/scripts/schedule-form/schedule-form-types.d.ts +138 -0
  54. package/dist/components/features/scripts/schedule-form/schedule-form-types.d.ts.map +1 -0
  55. package/dist/components/features/scripts/schedule-form/schedule-form-types.js +72 -0
  56. package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts +54 -0
  57. package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts.map +1 -0
  58. package/dist/components/features/scripts/schedule-form/schedule-interval-input.js +60 -0
  59. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts +29 -0
  60. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts.map +1 -0
  61. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.js +124 -0
  62. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.d.ts +52 -0
  63. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.d.ts.map +1 -0
  64. package/dist/components/features/scripts/schedule-form/schedule-script-picker-card.js +244 -0
  65. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.d.ts +35 -0
  66. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.d.ts.map +1 -0
  67. package/dist/components/features/scripts/schedule-form/schedule-script-search-field.js +58 -0
  68. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.d.ts +25 -0
  69. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.d.ts.map +1 -0
  70. package/dist/components/features/scripts/schedule-form/schedule-scripts-field.js +66 -0
  71. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.d.ts +77 -0
  72. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.d.ts.map +1 -0
  73. package/dist/components/features/scripts/schedule-form/schedule-timing-fields.js +262 -0
  74. package/dist/components/features/scripts/schedule-form/schedule-timing.d.ts +288 -0
  75. package/dist/components/features/scripts/schedule-form/schedule-timing.d.ts.map +1 -0
  76. package/dist/components/features/scripts/schedule-form/schedule-timing.js +165 -0
  77. package/dist/components/features/scripts/script-cells.d.ts +11 -0
  78. package/dist/components/features/scripts/script-cells.d.ts.map +1 -0
  79. package/dist/components/features/scripts/script-cells.js +19 -0
  80. package/dist/components/features/scripts/script-executions-table.d.ts +58 -0
  81. package/dist/components/features/scripts/script-executions-table.d.ts.map +1 -0
  82. package/dist/components/features/scripts/script-executions-table.js +88 -0
  83. package/dist/components/features/scripts/script-schedules-table.d.ts +38 -0
  84. package/dist/components/features/scripts/script-schedules-table.d.ts.map +1 -0
  85. package/dist/components/features/scripts/script-schedules-table.js +71 -0
  86. package/dist/components/features/scripts/script-shell-badge.d.ts +9 -0
  87. package/dist/components/features/scripts/script-shell-badge.d.ts.map +1 -0
  88. package/dist/components/features/scripts/script-shell-badge.js +15 -0
  89. package/dist/components/features/scripts/scripts-table-columns.d.ts +162 -0
  90. package/dist/components/features/scripts/scripts-table-columns.d.ts.map +1 -0
  91. package/dist/components/features/scripts/scripts-table-columns.js +69 -0
  92. package/dist/components/features/scripts/scripts-table-shared.d.ts +19 -0
  93. package/dist/components/features/scripts/scripts-table-shared.d.ts.map +1 -0
  94. package/dist/components/features/scripts/scripts-table-shared.js +35 -0
  95. package/dist/components/features/scripts/scripts-table.d.ts +40 -0
  96. package/dist/components/features/scripts/scripts-table.d.ts.map +1 -0
  97. package/dist/components/features/scripts/scripts-table.js +84 -0
  98. package/dist/components/features/scripts/scripts-tabs.d.ts +5 -0
  99. package/dist/components/features/scripts/scripts-tabs.d.ts.map +1 -0
  100. package/dist/components/features/scripts/scripts-tabs.js +10 -0
  101. package/dist/components/features/scripts/shell-types.d.ts +13 -0
  102. package/dist/components/features/scripts/shell-types.d.ts.map +1 -0
  103. package/dist/components/features/scripts/shell-types.js +21 -0
  104. package/dist/components/help-center-pages/index.cjs +53 -53
  105. package/dist/components/index.cjs +178 -34
  106. package/dist/components/meeting-scheduler/index.cjs +17 -17
  107. package/dist/components/navigation/index.cjs +6 -6
  108. package/dist/components/onboarding-guides/index.cjs +5 -5
  109. package/dist/components/product-demo/fixtures/scripts.d.ts +34 -0
  110. package/dist/components/product-demo/fixtures/scripts.d.ts.map +1 -0
  111. package/dist/components/product-demo/fixtures/scripts.js +123 -0
  112. package/dist/components/product-demo/fixtures/shared.d.ts +8 -0
  113. package/dist/components/product-demo/fixtures/shared.d.ts.map +1 -1
  114. package/dist/components/product-demo/fixtures/shared.js +7 -1
  115. package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -1
  116. package/dist/components/product-demo/fixtures/software-update.js +1 -5
  117. package/dist/components/product-demo/index.cjs +16 -13
  118. package/dist/components/product-demo/product-screen.d.ts.map +1 -1
  119. package/dist/components/product-demo/product-screen.js +2 -1
  120. package/dist/components/product-demo/registry.d.ts.map +1 -1
  121. package/dist/components/product-demo/registry.js +2 -1
  122. package/dist/components/product-demo/screen-keys.cjs +2 -1
  123. package/dist/components/product-demo/screen-keys.d.ts +1 -0
  124. package/dist/components/product-demo/screen-keys.d.ts.map +1 -1
  125. package/dist/components/product-demo/screen-keys.js +2 -1
  126. package/dist/components/product-demo/screens/scripts.d.ts +11 -0
  127. package/dist/components/product-demo/screens/scripts.d.ts.map +1 -0
  128. package/dist/components/product-demo/screens/scripts.js +130 -0
  129. package/dist/components/shared/legal-document/index.d.ts +2 -1
  130. package/dist/components/shared/legal-document/index.d.ts.map +1 -1
  131. package/dist/components/shared/legal-document/index.js +10 -2
  132. package/dist/components/shared/legal-document/legal-document-page.d.ts +35 -23
  133. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  134. package/dist/components/shared/legal-document/legal-document-page.js +27 -10
  135. package/dist/components/shared/legal-document/use-legal-docs.d.ts +7 -3
  136. package/dist/components/shared/legal-document/use-legal-docs.d.ts.map +1 -1
  137. package/dist/components/shared/legal-document/use-legal-docs.js +7 -0
  138. package/dist/components/shared/legal-document/use-legal-documents.d.ts +31 -0
  139. package/dist/components/shared/legal-document/use-legal-documents.d.ts.map +1 -0
  140. package/dist/components/shared/legal-document/use-legal-documents.js +67 -0
  141. package/dist/components/tickets/index.cjs +8 -8
  142. package/dist/components/ui/index.cjs +3 -3
  143. package/dist/{devices-C7XLWJFC.cjs → devices-W3S7Q2PG.cjs} +9 -9
  144. package/dist/index.cjs +150 -8
  145. package/dist/{knowledge-3QKWTOE7.cjs → knowledge-AIYQ4FC3.cjs} +7 -7
  146. package/dist/{logs-JXD75NR4.cjs → logs-7SHJ2ARE.cjs} +25 -25
  147. package/dist/{policies-ZPN53PFQ.cjs → policies-EIZJ5SUP.cjs} +10 -10
  148. package/dist/{remote-session-DNFZ5OLY.cjs → remote-session-BZMNE6D2.cjs} +5 -5
  149. package/dist/scripts-J2FWC7E4.cjs +2112 -0
  150. package/dist/{software-update-CRSIBS3K.cjs → software-update-QAMNASVF.cjs} +14 -18
  151. package/dist/{tickets-board-CKZRB6YV.cjs → tickets-board-CEDHD3KB.cjs} +17 -17
  152. package/dist/utils/index.cjs +8 -0
  153. package/dist/utils/index.d.ts +1 -0
  154. package/dist/utils/index.d.ts.map +1 -1
  155. package/dist/utils/index.js +1 -0
  156. package/dist/utils/legal-documents.d.ts +18 -0
  157. package/dist/utils/legal-documents.d.ts.map +1 -0
  158. package/dist/utils/legal-documents.js +8 -0
  159. package/package.json +1 -1
  160. package/src/components/features/capability-explorer.tsx +134 -7
  161. package/src/components/features/index.ts +1 -0
  162. package/src/components/features/scripts/execution-cells.tsx +149 -0
  163. package/src/components/features/scripts/execution-status.ts +42 -0
  164. package/src/components/features/scripts/index.ts +42 -0
  165. package/src/components/features/scripts/schedule-form/index.ts +59 -0
  166. package/src/components/features/scripts/schedule-form/schedule-enums.ts +26 -0
  167. package/src/components/features/scripts/schedule-form/schedule-form-fields.tsx +249 -0
  168. package/src/components/features/scripts/schedule-form/schedule-form-types.ts +189 -0
  169. package/src/components/features/scripts/schedule-form/schedule-interval-input.tsx +121 -0
  170. package/src/components/features/scripts/schedule-form/schedule-offline-fields.tsx +218 -0
  171. package/src/components/features/scripts/schedule-form/schedule-script-picker-card.tsx +321 -0
  172. package/src/components/features/scripts/schedule-form/schedule-script-search-field.tsx +115 -0
  173. package/src/components/features/scripts/schedule-form/schedule-scripts-field.tsx +97 -0
  174. package/src/components/features/scripts/schedule-form/schedule-timing-fields.tsx +482 -0
  175. package/src/components/features/scripts/schedule-form/schedule-timing.ts +484 -0
  176. package/src/components/features/scripts/script-cells.tsx +29 -0
  177. package/src/components/features/scripts/script-executions-table.tsx +145 -0
  178. package/src/components/features/scripts/script-schedules-table.tsx +113 -0
  179. package/src/components/features/scripts/script-shell-badge.tsx +25 -0
  180. package/src/components/features/scripts/scripts-table-columns.ts +95 -0
  181. package/src/components/features/scripts/scripts-table-shared.tsx +43 -0
  182. package/src/components/features/scripts/scripts-table.tsx +124 -0
  183. package/src/components/features/scripts/scripts-tabs.ts +11 -0
  184. package/src/components/features/scripts/shell-types.ts +26 -0
  185. package/src/components/product-demo/fixtures/scripts.ts +186 -0
  186. package/src/components/product-demo/fixtures/shared.ts +7 -0
  187. package/src/components/product-demo/fixtures/software-update.ts +1 -7
  188. package/src/components/product-demo/product-screen.tsx +3 -1
  189. package/src/components/product-demo/registry.ts +1 -0
  190. package/src/components/product-demo/screen-keys.ts +1 -0
  191. package/src/components/product-demo/screens/scripts.tsx +192 -0
  192. package/src/components/shared/legal-document/index.ts +8 -0
  193. package/src/components/shared/legal-document/legal-document-page.tsx +83 -44
  194. package/src/components/shared/legal-document/use-legal-docs.ts +18 -3
  195. package/src/components/shared/legal-document/use-legal-documents.ts +113 -0
  196. package/src/utils/index.ts +1 -0
  197. package/src/utils/legal-documents.ts +21 -0
@@ -0,0 +1,115 @@
1
+ 'use client';
2
+
3
+ import type { FocusEvent } from 'react';
4
+ import { OS_PLATFORMS } from '../../../../utils/os-platforms';
5
+ import { Autocomplete } from '../../../ui/autocomplete';
6
+ import { Label } from '../../../ui/label';
7
+ import { TruncateText } from '../../../ui/truncate-text';
8
+
9
+ /** One script a search offers. */
10
+ export interface ScheduleScriptSearchResult {
11
+ id: string;
12
+ name: string;
13
+ /** UI platform ids the script runs on — the icons beside its name. */
14
+ supportedPlatforms: string[];
15
+ }
16
+
17
+ export interface ScheduleScriptSearchFieldProps {
18
+ /** The card's script: `''` while nothing is picked. */
19
+ scriptId: string;
20
+ /** Its name — the label shown when the script is not on the current search page. */
21
+ name: string;
22
+ /** The current page of the host's search. */
23
+ scripts: ScheduleScriptSearchResult[];
24
+ isLoading?: boolean;
25
+ /** What is typed in the field; decides which "nothing found" reading shows. */
26
+ inputValue?: string;
27
+ onInputChange?: (value: string) => void;
28
+ /** Focus entered the field: a lazy search starts here. */
29
+ onOpen?: () => void;
30
+ /** Focus left the whole field. */
31
+ onClose?: () => void;
32
+ /** A script of `scripts` was picked (its id), or the field was cleared (null). */
33
+ onChange: (scriptId: string | null) => void;
34
+ disabled?: boolean;
35
+ error?: string;
36
+ invalid?: boolean;
37
+ }
38
+
39
+ function ScriptPlatformIcons({ platforms }: { platforms: string[] }) {
40
+ return (
41
+ <span className="inline-flex shrink-0 items-center gap-0.5">
42
+ {OS_PLATFORMS.filter(p => platforms.includes(p.id)).map(p => (
43
+ <p.icon key={p.id} className="h-3.5 w-3.5 text-ods-text-secondary opacity-60" />
44
+ ))}
45
+ </span>
46
+ );
47
+ }
48
+
49
+ /**
50
+ * "Select Script": the autocomplete of a schedule's script card. The search is
51
+ * the host's (server-side, so the field does no filtering of its own); this is
52
+ * the field every host draws around it.
53
+ */
54
+ export function ScheduleScriptSearchField({
55
+ scriptId,
56
+ name,
57
+ scripts,
58
+ isLoading = false,
59
+ inputValue = '',
60
+ onInputChange,
61
+ onOpen,
62
+ onClose,
63
+ onChange,
64
+ disabled = false,
65
+ error,
66
+ invalid = false,
67
+ }: ScheduleScriptSearchFieldProps) {
68
+ // Fires only when focus leaves the entire autocomplete widget (not on internal focus moves).
69
+ const handleBlur = (e: FocusEvent<HTMLDivElement>) => {
70
+ if (!e.currentTarget.contains(e.relatedTarget)) onClose?.();
71
+ };
72
+
73
+ // Every script stays offered in every card: the same script may legitimately
74
+ // appear in a schedule more than once (the run order is the payload, so
75
+ // "A, B, A" is a real recipe). Rows are keyed by the `useFieldArray` field id,
76
+ // not by `scriptId`, so duplicates never collide in React or in dnd-kit.
77
+ //
78
+ // The selected script may not be in the current search page — prepend it so
79
+ // the Autocomplete can always render its label (edit mode, stale searches).
80
+ const options = scripts.map(s => ({ label: s.name, value: s.id }));
81
+ if (scriptId && !options.some(o => o.value === scriptId)) {
82
+ options.unshift({ label: name, value: scriptId });
83
+ }
84
+
85
+ return (
86
+ <div className="flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]" onFocus={onOpen} onBlur={handleBlur}>
87
+ <Label className="text-h4">Select Script</Label>
88
+ <Autocomplete<string>
89
+ options={options}
90
+ value={scriptId || null}
91
+ onChange={onChange}
92
+ placeholder="Select a script..."
93
+ disableClientFilter
94
+ onInputChange={onInputChange}
95
+ loading={isLoading}
96
+ loadingText="Searching scripts..."
97
+ noOptionsText={inputValue ? 'No scripts match your search' : 'No scripts available'}
98
+ disabled={disabled}
99
+ error={error}
100
+ invalid={invalid}
101
+ // Mirrors the Autocomplete's own option layout (flex row,
102
+ // truncated label with a title) — overriding `renderOption`
103
+ // opts out of it, which is what let long script names wrap.
104
+ renderOption={(option, isSelected) => (
105
+ <span className="flex w-full min-w-0 items-center gap-[var(--spacing-system-xsf)]">
106
+ <span className="min-w-0 flex-1">
107
+ <TruncateText className={isSelected ? 'text-ods-accent' : undefined}>{option.label}</TruncateText>
108
+ </span>
109
+ <ScriptPlatformIcons platforms={scripts.find(s => s.id === option.value)?.supportedPlatforms ?? []} />
110
+ </span>
111
+ )}
112
+ />
113
+ </div>
114
+ );
115
+ }
@@ -0,0 +1,97 @@
1
+ 'use client';
2
+ 'use no memo';
3
+
4
+ import { useFieldArray, useFormContext, useWatch } from 'react-hook-form';
5
+ import { PlusCircleIcon } from '../../../icons-v2-generated/signs-and-symbols/plus-circle-icon';
6
+ import { Button } from '../../../ui/button';
7
+ import { SortableList } from '../../sortable-list/sortable-list';
8
+ import {
9
+ EMPTY_SCHEDULE_SCRIPT_ROW,
10
+ type RenderScheduleScriptSearch,
11
+ type ScheduleFormData,
12
+ } from './schedule-form-types';
13
+ import { ScheduleScriptPickerCard } from './schedule-script-picker-card';
14
+
15
+ export interface ScheduleScriptsFieldProps {
16
+ showErrors: boolean;
17
+ disabled?: boolean;
18
+ /** The "Select Script" field of each card. */
19
+ renderScriptSearch: RenderScheduleScriptSearch;
20
+ /** The "Scheduled Scripts" heading over the cards. Default true. */
21
+ showHeading?: boolean;
22
+ /** Each card's arguments and environment variables. Default true; false is one row per card. */
23
+ showScriptParams?: boolean;
24
+ /** Offer "Add Script" (several scripts in one schedule). Default true. */
25
+ addScripts?: boolean;
26
+ }
27
+
28
+ /**
29
+ * "Scheduled Scripts" — the ordered list of script cards. Card order IS the run
30
+ * order: it is submitted as `scriptIds` verbatim, so a reorder is a real,
31
+ * persisted change.
32
+ *
33
+ * Reordering runs on the core library's `SortableList` (Pragmatic drag and
34
+ * drop): drag on desktop, an up/down button pair per card on touch/narrow
35
+ * viewports, where no DnD is initialized at all. The list owns the live-region
36
+ * announcements (`getItemLabel`) and the keyboard path on the handle.
37
+ */
38
+ export function ScheduleScriptsField({
39
+ showErrors,
40
+ disabled = false,
41
+ renderScriptSearch,
42
+ showHeading = true,
43
+ showScriptParams = true,
44
+ addScripts = true,
45
+ }: ScheduleScriptsFieldProps) {
46
+ const { control, getValues } = useFormContext<ScheduleFormData>();
47
+ const { fields, append, remove, move } = useFieldArray({ control, name: 'scripts' });
48
+ const supportedPlatforms = useWatch({ control, name: 'supportedPlatforms' });
49
+
50
+ return (
51
+ <div className="flex flex-col gap-[var(--spacing-system-lf)]">
52
+ {showHeading && (
53
+ <div className="flex min-h-[72px] items-end pt-[var(--spacing-system-l)]">
54
+ <h2 className="text-ods-text-primary text-h2">Scheduled Scripts</h2>
55
+ </div>
56
+ )}
57
+
58
+ {/* Rows are keyed by the `useFieldArray` field id, stable across reorders
59
+ and safe for duplicate scripts; the reorder itself is DOM-order based. */}
60
+ <SortableList
61
+ onReorder={move}
62
+ disabled={disabled}
63
+ getItemLabel={index => getValues(`scripts.${index}.name`) || `script ${index + 1}`}
64
+ className="flex flex-col gap-[var(--spacing-system-lf)]"
65
+ >
66
+ {fields.map((field, index) => (
67
+ <ScheduleScriptPickerCard
68
+ key={field.id}
69
+ index={index}
70
+ count={fields.length}
71
+ supportedPlatforms={supportedPlatforms}
72
+ renderScriptSearch={renderScriptSearch}
73
+ onRemove={() => remove(index)}
74
+ canRemove={fields.length > 1}
75
+ disabled={disabled}
76
+ showErrors={showErrors}
77
+ showParams={showScriptParams}
78
+ />
79
+ ))}
80
+ </SortableList>
81
+
82
+ {addScripts && (
83
+ <Button
84
+ type="button"
85
+ variant="outline"
86
+ size="small"
87
+ onClick={() => append(EMPTY_SCHEDULE_SCRIPT_ROW)}
88
+ disabled={disabled}
89
+ className="self-start"
90
+ leftIcon={<PlusCircleIcon className="text-ods-text-secondary" />}
91
+ >
92
+ Add Script
93
+ </Button>
94
+ )}
95
+ </div>
96
+ );
97
+ }