alembic 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +105 -0
  4. data/Rakefile +6 -0
  5. data/app/assets/builds/alembic/canvas.js +1 -0
  6. data/app/assets/builds/alembic/page_builder.css +1 -0
  7. data/app/assets/builds/alembic/page_builder.js +5 -0
  8. data/app/assets/stylesheets/alembic/application.css +15 -0
  9. data/app/controllers/alembic/application_controller.rb +32 -0
  10. data/app/controllers/alembic/flows_controller.rb +104 -0
  11. data/app/controllers/alembic/manage/base_controller.rb +16 -0
  12. data/app/controllers/alembic/manage/canvas_controller.rb +183 -0
  13. data/app/controllers/alembic/manage/definitions_controller.rb +15 -0
  14. data/app/controllers/alembic/manage/flows_controller.rb +55 -0
  15. data/app/controllers/alembic/manage/page_blocks_controller.rb +19 -0
  16. data/app/controllers/alembic/manage/pages_controller.rb +38 -0
  17. data/app/controllers/alembic/manage/previews_controller.rb +38 -0
  18. data/app/controllers/alembic/manage/versions_controller.rb +22 -0
  19. data/app/controllers/concerns/alembic/manage/authenticates_admin.rb +19 -0
  20. data/app/controllers/concerns/alembic/manage/draws_canvas.rb +35 -0
  21. data/app/helpers/alembic/application_helper.rb +11 -0
  22. data/app/javascript/alembic/canvas/Canvas.jsx +197 -0
  23. data/app/javascript/alembic/canvas/Connector.jsx +30 -0
  24. data/app/javascript/alembic/canvas/ConnectorLayer.jsx +31 -0
  25. data/app/javascript/alembic/canvas/Control.jsx +42 -0
  26. data/app/javascript/alembic/canvas/Inspector.jsx +44 -0
  27. data/app/javascript/alembic/canvas/Panel.jsx +67 -0
  28. data/app/javascript/alembic/canvas/Placeholder.jsx +24 -0
  29. data/app/javascript/alembic/canvas/Port.jsx +16 -0
  30. data/app/javascript/alembic/canvas/Records.jsx +34 -0
  31. data/app/javascript/alembic/canvas/StepCard.jsx +57 -0
  32. data/app/javascript/alembic/canvas/Toolbar.jsx +19 -0
  33. data/app/javascript/alembic/canvas/TypePicker.jsx +21 -0
  34. data/app/javascript/alembic/canvas/changes.js +5 -0
  35. data/app/javascript/alembic/canvas/choices.js +4 -0
  36. data/app/javascript/alembic/canvas/flow.js +7 -0
  37. data/app/javascript/alembic/canvas/flowSender.js +22 -0
  38. data/app/javascript/alembic/canvas/ids.js +7 -0
  39. data/app/javascript/alembic/canvas/rows.js +2 -0
  40. data/app/javascript/alembic/canvas/styles.js +3 -0
  41. data/app/javascript/alembic/canvas/useConnectors.js +75 -0
  42. data/app/javascript/alembic/canvas/useFlow.js +17 -0
  43. data/app/javascript/alembic/canvas.jsx +13 -0
  44. data/app/javascript/alembic/page_builder/PageBuilder.jsx +18 -0
  45. data/app/javascript/alembic/page_builder.jsx +10 -0
  46. data/app/jobs/alembic/application_job.rb +4 -0
  47. data/app/mailers/alembic/application_mailer.rb +6 -0
  48. data/app/models/alembic/application_record.rb +5 -0
  49. data/app/models/alembic/asked.rb +3 -0
  50. data/app/models/alembic/choice.rb +7 -0
  51. data/app/models/alembic/flow/admission.rb +19 -0
  52. data/app/models/alembic/flow/canvas.rb +167 -0
  53. data/app/models/alembic/flow/change.rb +18 -0
  54. data/app/models/alembic/flow/condition.rb +24 -0
  55. data/app/models/alembic/flow/definition.rb +132 -0
  56. data/app/models/alembic/flow/digest.rb +116 -0
  57. data/app/models/alembic/flow/document.rb +131 -0
  58. data/app/models/alembic/flow/drawing.rb +15 -0
  59. data/app/models/alembic/flow/edge.rb +9 -0
  60. data/app/models/alembic/flow/edit_history.rb +75 -0
  61. data/app/models/alembic/flow/layout.rb +88 -0
  62. data/app/models/alembic/flow/name.rb +15 -0
  63. data/app/models/alembic/flow/node.rb +5 -0
  64. data/app/models/alembic/flow/output.rb +23 -0
  65. data/app/models/alembic/flow/progress/kept.rb +38 -0
  66. data/app/models/alembic/flow/progress/loose.rb +43 -0
  67. data/app/models/alembic/flow/progress.rb +11 -0
  68. data/app/models/alembic/flow/registry.rb +25 -0
  69. data/app/models/alembic/flow/run.rb +54 -0
  70. data/app/models/alembic/flow/runner.rb +65 -0
  71. data/app/models/alembic/flow/settings.rb +80 -0
  72. data/app/models/alembic/flow/start.rb +13 -0
  73. data/app/models/alembic/flow/step.rb +42 -0
  74. data/app/models/alembic/flow/step_type/declaration.rb +118 -0
  75. data/app/models/alembic/flow/step_type.rb +69 -0
  76. data/app/models/alembic/flow/summaries.rb +44 -0
  77. data/app/models/alembic/flow/summary_version.rb +13 -0
  78. data/app/models/alembic/flow/switch.rb +17 -0
  79. data/app/models/alembic/flow/terminal.rb +13 -0
  80. data/app/models/alembic/flow/validator.rb +171 -0
  81. data/app/models/alembic/flow/version.rb +26 -0
  82. data/app/models/alembic/flow/violation.rb +9 -0
  83. data/app/models/alembic/flow.rb +44 -0
  84. data/app/models/alembic/outputs/band.rb +22 -0
  85. data/app/models/alembic/outputs/grouped.rb +26 -0
  86. data/app/models/alembic/outputs/lowest.rb +20 -0
  87. data/app/models/alembic/outputs/percentage.rb +31 -0
  88. data/app/models/alembic/outputs/tally.rb +23 -0
  89. data/app/models/alembic/outputs/weighted_sum.rb +26 -0
  90. data/app/models/alembic/page.rb +11 -0
  91. data/app/models/alembic/runner.rb +13 -0
  92. data/app/models/alembic/steps/question.rb +52 -0
  93. data/app/models/alembic/summary/output_type.rb +40 -0
  94. data/app/models/alembic/summary/registry.rb +25 -0
  95. data/app/models/alembic/summary/report.rb +31 -0
  96. data/app/models/alembic/summary/result.rb +5 -0
  97. data/app/models/alembic/summary/run.rb +13 -0
  98. data/app/models/alembic/summary.rb +15 -0
  99. data/app/views/alembic/flow/steps/_choosing.html.erb +9 -0
  100. data/app/views/alembic/flows/complete.html.erb +34 -0
  101. data/app/views/alembic/flows/show.html.erb +17 -0
  102. data/app/views/alembic/flows/step.html.erb +27 -0
  103. data/app/views/alembic/manage/definitions/edit.html.erb +13 -0
  104. data/app/views/alembic/manage/flows/edit.html.erb +29 -0
  105. data/app/views/alembic/manage/flows/index.html.erb +32 -0
  106. data/app/views/alembic/manage/flows/show.html.erb +26 -0
  107. data/app/views/alembic/manage/pages/_block_content.html.erb +1 -0
  108. data/app/views/alembic/manage/pages/index.html.erb +20 -0
  109. data/app/views/alembic/manage/pages/show.html.erb +11 -0
  110. data/app/views/alembic/manage/versions/index.html.erb +41 -0
  111. data/app/views/layouts/alembic/application.html.erb +17 -0
  112. data/config/routes.rb +42 -0
  113. data/db/migrate/20260604215031_create_alembic_diagnostics.rb +14 -0
  114. data/db/migrate/20260605015051_create_alembic_questions.rb +12 -0
  115. data/db/migrate/20260605021526_create_alembic_options.rb +14 -0
  116. data/db/migrate/20260605023308_create_alembic_conditions.rb +11 -0
  117. data/db/migrate/20260605025623_create_alembic_bands.rb +12 -0
  118. data/db/migrate/20260605032859_create_alembic_condition_options.rb +10 -0
  119. data/db/migrate/20260605032900_reshape_conditions_for_placement.rb +11 -0
  120. data/db/migrate/20260605125119_create_alembic_results.rb +14 -0
  121. data/db/migrate/20260605130338_create_alembic_rules.rb +10 -0
  122. data/db/migrate/20260605130339_create_alembic_rule_results.rb +10 -0
  123. data/db/migrate/20260605210714_add_definition_to_alembic_diagnostics.rb +5 -0
  124. data/db/migrate/20260606000855_add_guide_copy_to_alembic_diagnostics.rb +9 -0
  125. data/db/migrate/20260606005430_create_alembic_nodes.rb +22 -0
  126. data/db/migrate/20260606010312_create_alembic_build_steps.rb +12 -0
  127. data/db/migrate/20260606011110_create_alembic_warnings.rb +11 -0
  128. data/db/migrate/20260804180000_create_alembic_domains.rb +14 -0
  129. data/db/migrate/20260804180100_add_domain_to_alembic_questions.rb +5 -0
  130. data/db/migrate/20260822120000_create_alembic_definition_versions.rb +14 -0
  131. data/db/migrate/20260822120100_backfill_alembic_definition_versions.rb +17 -0
  132. data/db/migrate/20260822130000_remove_definition_from_alembic_diagnostics.rb +28 -0
  133. data/db/migrate/20260822140000_create_alembic_responses.rb +14 -0
  134. data/db/migrate/20260824120000_create_alembic_transitions.rb +10 -0
  135. data/db/migrate/20260824130000_drop_alembic_builder_tables.rb +17 -0
  136. data/db/migrate/20260824140000_add_definition_cursor_to_alembic_diagnostics.rb +5 -0
  137. data/db/migrate/20260824160000_add_summary_definition_to_alembic_diagnostics.rb +5 -0
  138. data/db/migrate/20260824170000_drop_alembic_guide_copy_columns.rb +8 -0
  139. data/db/migrate/20260825120000_create_alembic_summary_versions.rb +14 -0
  140. data/db/migrate/20260825130000_add_summary_cursor_to_alembic_diagnostics.rb +5 -0
  141. data/db/migrate/20260825140000_move_summary_definitions_into_versions.rb +26 -0
  142. data/db/migrate/20260825150000_drop_summary_definition_from_alembic_diagnostics.rb +5 -0
  143. data/db/migrate/20260825160000_add_summary_version_to_alembic_responses.rb +6 -0
  144. data/db/migrate/20260825170000_rename_question_settings_in_current_definitions.rb +51 -0
  145. data/db/migrate/20260825180000_add_document_to_alembic_diagnostics.rb +6 -0
  146. data/db/migrate/20260825190000_seed_documents_from_current_definitions.rb +29 -0
  147. data/db/migrate/20260825200000_add_published_version_to_alembic_diagnostics.rb +6 -0
  148. data/db/migrate/20260825210000_publish_current_definitions.rb +29 -0
  149. data/db/migrate/20260825220000_add_undone_changes_to_alembic_diagnostics.rb +5 -0
  150. data/db/migrate/20260825223322_add_status_to_alembic_definition_versions.rb +8 -0
  151. data/db/migrate/20260825224538_remove_published_version_from_alembic_diagnostics.rb +5 -0
  152. data/db/migrate/20260825225015_change_alembic_diagnostic_status_to_availability.rb +16 -0
  153. data/db/migrate/20260825230000_add_undo_history_to_alembic_diagnostics.rb +5 -0
  154. data/db/migrate/20260825230500_add_changes_to_alembic_definition_versions.rb +5 -0
  155. data/db/migrate/20260826230000_rename_alembic_responses_to_flow_runs.rb +5 -0
  156. data/db/migrate/20260826234500_rename_answers_to_recorded_on_flow_runs.rb +5 -0
  157. data/db/migrate/20260826235000_rename_definition_versions_to_flow_versions.rb +5 -0
  158. data/db/migrate/20260826235500_rename_summary_versions_to_flow_summaries.rb +5 -0
  159. data/db/migrate/20260827000000_rename_diagnostics_to_flows.rb +8 -0
  160. data/db/migrate/20260831000000_add_persists_to_alembic_flows.rb +5 -0
  161. data/db/migrate/20260914120000_create_alembic_pages.rb +9 -0
  162. data/db/migrate/20260915120000_add_blocks_to_alembic_pages.rb +5 -0
  163. data/lib/alembic/engine.rb +43 -0
  164. data/lib/alembic/leftover_stylesheet.rb +14 -0
  165. data/lib/alembic/version.rb +3 -0
  166. data/lib/alembic.rb +34 -0
  167. data/lib/tasks/alembic_tasks.rake +4 -0
  168. metadata +252 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 55017b8bfc074b743ba32a6f00cc86d494cf92a561ebdacc2af0ed4d52f9e668
4
+ data.tar.gz: 284b1694b63816c270c95e50bb7cb9b4cdb20ecdd9c59435a57220af34e6abf2
5
+ SHA512:
6
+ metadata.gz: f6b17305a5bbe69f8ba3161f59152869d0b2c3218c51f69e7a1e63dc4519b191255375d7fdb911c45902ef1bb1b1b79ef37cfc24af5fce3fba4f82e2f66ff33e
7
+ data.tar.gz: 6518af63bfc9d09a03ff507fa3270f02990e234df3e66e09c4e02c1ef4f1a3dd7b0ea7a5440e59daa8b5c81392bea50f7a2d9d334d3e8684ca0dfb7aae4f80a3
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright tylercschneider
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,105 @@
1
+ # Alembic
2
+
3
+ A diagnostics engine built on a general-purpose flow layer: typed steps joined
4
+ into a graph, walked by the host application, and summarised separately.
5
+
6
+ ## Usage
7
+
8
+ Alembic ships a builder for authoring flows and a small runtime for walking
9
+ them. The flow layer knows nothing about diagnostics — it is step-typed, and a
10
+ host application registers whatever step types it needs.
11
+
12
+ **[docs/vocabulary.md](docs/vocabulary.md)** defines every word the flow layer
13
+ uses, and says which word to use where two could mean the same thing.
14
+
15
+ **[docs/consuming.md](docs/consuming.md)** documents that interface: the flow
16
+ document format, the step-type DSL, driving a run, validation, and the summary
17
+ layer. Read it if you are embedding Alembic, or writing your own step types.
18
+
19
+ ## Installation
20
+ Add this line to your application's Gemfile:
21
+
22
+ ```ruby
23
+ gem "alembic"
24
+ ```
25
+
26
+ And then execute:
27
+ ```bash
28
+ $ bundle
29
+ ```
30
+
31
+ Or install it yourself as:
32
+ ```bash
33
+ $ gem install alembic
34
+ ```
35
+
36
+ ## Styling
37
+
38
+ Alembic's views are written in Tailwind utility classes, and they render through
39
+ the [`keystone_ui`](https://github.com/tylercschneider/keystone_ui) component
40
+ gem. The gem ships no compiled stylesheet — your application's Tailwind build
41
+ produces the CSS, so it must scan the engine's views and React source and the
42
+ `keystone_ui` components, all inside installed gems.
43
+
44
+ Those paths resolve to machine-specific gem directories, so none of them can be
45
+ written as a literal in a committed stylesheet. When `keystone_ui` is installed,
46
+ Alembic registers its paths with `keystone_ui` at boot, and `keystone_ui` writes
47
+ every registered path into one file for you to import.
48
+
49
+ With [`tailwindcss-rails`](https://github.com/rails/tailwindcss-rails) v4,
50
+ install `keystone_ui`'s entry point:
51
+
52
+ ```bash
53
+ $ bin/rails generate keystone:install
54
+ ```
55
+
56
+ then import it in `app/assets/tailwind/application.css`:
57
+
58
+ ```css
59
+ @import "tailwindcss";
60
+ @import "./keystone_source.css";
61
+ ```
62
+
63
+ `keystone_source.css` is written at boot. It carries the `keystone_ui` component
64
+ path, its `accent` and `surface` color scales, and Alembic's view and React
65
+ source paths. It is a build artifact — gitignore it.
66
+
67
+ ### Upgrading from an earlier Alembic
68
+
69
+ Remove `@import "../builds/tailwind/alembic";` from
70
+ `app/assets/tailwind/application.css`. Alembic deletes the leftover
71
+ `app/assets/builds/tailwind/alembic.css` when your app boots.
72
+
73
+ Finally, the engine has to render inside a layout that links your compiled CSS.
74
+ Point `Alembic.layout` (visitor pages) and `Alembic.admin_layout` (the builder)
75
+ at your own layouts:
76
+
77
+ ```ruby
78
+ Alembic.layout = "application"
79
+ Alembic.admin_layout = "admin"
80
+ ```
81
+
82
+ ## The flow canvas
83
+
84
+ The builder's flow canvas is a React application — DOM nodes laid out on a
85
+ grid with an SVG connector layer, not a graph library — built here and shipped
86
+ as a committed bundle — a gem cannot run a JavaScript build on the host's
87
+ machine. Host applications need no Node toolchain and no configuration; the
88
+ bundle is served by the asset pipeline like any other engine asset.
89
+
90
+ Working on the canvas source in `app/javascript/alembic` means rebuilding it:
91
+
92
+ ```bash
93
+ $ npm install
94
+ $ npm run build
95
+ ```
96
+
97
+ That writes `app/assets/builds/alembic/canvas.js` and its stylesheet, both of
98
+ which are committed. CI rebuilds the bundle and fails if it differs from what
99
+ is committed, so the artifact cannot drift away from its source.
100
+
101
+ ## Contributing
102
+ Contribution directions go here.
103
+
104
+ ## License
105
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ require "bundler/gem_tasks"
@@ -0,0 +1 @@
1
+ (()=>{var Dt=globalThis.ReactDOM;var{createPortal:ze,createRoot:K,flushSync:Be,hydrateRoot:Ee,preconnect:Te,prefetchDNS:$e,preinit:Ae,preinitModule:De,preload:Pe,preloadModule:Le,requestFormReset:Ie,unstable_batchedUpdates:Me,useFormState:_e,useFormStatus:Oe,version:He}=Dt;var Z=globalThis.React,e=Z,{Children:Fe,Component:Ve,Fragment:We,PureComponent:Ye,StrictMode:Ue,Suspense:Xe,cloneElement:Ge,createContext:qe,createElement:Je,createRef:Ke,forwardRef:Ze,isValidElement:Qe,lazy:Re,memo:to,startTransition:eo,useCallback:oo,useContext:ro,useDebugValue:no,useDeferredValue:so,useEffect:E,useId:ao,useImperativeHandle:lo,useLayoutEffect:Q,useMemo:P,useReducer:io,useRef:j,useState:b,useSyncExternalStore:co,useTransition:mo}=Z;var R=new Map,L=new Map,tt=(t,o)=>R.set(t,o),et=()=>{L.forEach(t=>t.unmount()),L.clear()},ot=(t,o)=>t.querySelectorAll("[data-react-ui]").forEach(s=>{if(L.has(s))return;let r=R.get(s.dataset.reactUi),a=o(s);L.set(s,a),a.render(e.createElement(r,JSON.parse(s.dataset.props)))});var rt=(t,o)=>{let s=()=>ot(t,o);t.addEventListener("turbo:load",s),t.addEventListener("turbo:frame-load",s),t.addEventListener("turbo:before-cache",et),t.readyState==="loading"?t.addEventListener("DOMContentLoaded",s):s()};var Pt="border border-amber-500 bg-white text-amber-700 dark:bg-zinc-900 dark:text-amber-400",Lt="border border-gray-300 bg-white text-gray-500 dark:border-zinc-600 dark:bg-zinc-900 dark:text-gray-400",It="border border-accent-600 bg-accent-600 text-white",Mt=({name:t,connected:o,armed:s,onArm:r,connecting:a})=>e.createElement("button",{onClick:l=>{a||(l.stopPropagation(),r(l))},title:s?"Now choose a step to connect to":"Connect this branch",className:s?It:o?Lt:Pt,style:{padding:"1px 8px",marginRight:4,borderRadius:999,fontSize:11,cursor:"pointer"}},t||"next"),nt=Mt;var _t={width:240,boxSizing:"border-box",borderRadius:8},Ot={padding:"8px 14px",textAlign:"center",fontWeight:600},Ht={fontWeight:600,lineHeight:1.3},jt=(t,o,s)=>{let r=s?"ring-4 ring-accent-600/15":"shadow-sm";return t||s&&!o?`border-accent-600 ${r}`:o?`border-red-600 ${r}`:"border-gray-300 shadow-sm dark:border-zinc-700"},Ft=({node:t,selected:o,armed:s,connecting:r,onSelect:a,onArm:l,onDragEnd:i,onDragStart:f})=>{let m=t.begins_here||t.ends_here,d=t.begins_here,p=t.ends_here?[]:t.ports,u=r&&!d;return e.createElement("div",{ref:t.ref,"data-step":t.id,draggable:!d,onDragStart:c=>{c.dataTransfer.effectAllowed="move",c.dataTransfer.setData("text/plain",t.id),f()},onDragEnd:i,onClick:a,className:`bg-white border-2 dark:bg-zinc-900 ${jt(u,t.violations.length>0,o)}`,style:{..._t,padding:m?0:"12px 14px",cursor:d?"default":r?"crosshair":"grab"}},m&&e.createElement("div",{className:"text-gray-500 dark:text-gray-400",style:Ot},t.label),!m&&e.createElement("div",{style:Ht},t.label),!m&&e.createElement("div",{className:"text-gray-500 dark:text-gray-400",style:{fontSize:11,marginTop:2}},t.type),t.violations.map(c=>e.createElement("div",{key:c.problem+c.detail,className:"text-red-600 dark:text-red-400",style:{fontSize:11,padding:"0 14px 6px"}},c.problem.replace(/_/g," "),c.detail?`: ${c.detail}`:"")),p.length>0&&e.createElement("div",{style:{padding:t.begins_here?"0 14px 8px":"10px 0 0"}},p.map(c=>e.createElement(nt,{key:c,name:c,connected:t.connected.includes(c),connecting:r,armed:s===c,onArm:x=>l(c,x)}))))},F=Ft;var st=(t,o)=>t.includes(o)?t.filter(s=>s!==o):[...t,o],at=(t,o)=>({...o?.choices||{},...t?.choices||{}});var k=(...t)=>t.filter(Boolean).join(" ");var Vt=({as:t="input",disabled:o,className:s,...r})=>e.createElement(t,{...r,disabled:o,className:k("ks-input",o&&"ks-input-disabled",s)}),w=Vt;var Wt=t=>e.createElement(w,{...t,as:"select"}),lt=Wt;var Yt=({className:t,...o})=>e.createElement("input",{type:"checkbox",...o,className:k("ks-checkbox",t)}),V=Yt;var Ut=t=>(t||[]).map(o=>typeof o=="object"?o:{value:o,label:o}),Xt=({type:t,value:o,choices:s,onChange:r,onSettle:a})=>{if(t==="boolean")return e.createElement(V,{checked:!!o,onChange:l=>a(l.target.checked)});if(t==="select"||t==="previous_step"||t==="from_step")return e.createElement(lt,{className:"mb-3",value:o??"",onChange:l=>a(l.target.value)},e.createElement("option",{value:""}),Ut(s).map(l=>e.createElement("option",{key:l.value,value:l.value},l.label)));if(t==="multi_select"){let l=Array.isArray(o)?o:[],i=f=>a(st(l,f));return e.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8}},(s||[]).map(f=>e.createElement("label",{key:f,style:{display:"inline-flex",alignItems:"center",gap:4}},e.createElement(V,{checked:l.includes(f),onChange:()=>i(f)}),e.createElement("span",null,f))))}return t==="integer"||t==="float"?e.createElement(w,{className:"mb-3",type:"number",step:t==="integer"?"1":"any",value:o??"",onChange:l=>r(l.target.value),onBlur:l=>a(l.target.value)}):e.createElement(w,{className:"mb-3",type:"text",value:o??"",onChange:l=>r(l.target.value),onBlur:l=>a(l.target.value)})},I=Xt;var it=(t,o,s,r)=>t.map((a,l)=>l===o?{...a,[s]:r}:a);var Gt={primary:"ks-button-primary",secondary:"ks-button-secondary",danger:"ks-button-danger"},qt={sm:"ks-button-sm",md:"ks-button-md",lg:"ks-button-lg"},Jt=({variant:t="primary",size:o="md",className:s,children:r,...a})=>{let l=a.href?"a":"button";return e.createElement(l,{...a,className:k("ks-button",Gt[t],qt[o],s)},r)},y=Jt;var Kt=({holds:t,labels:o,rows:s,onChange:r,onSettle:a})=>{let l=Array.isArray(s)?s:[],i=(f,m,d,p)=>{let u=it(l,f,m,d);p?a(u):r(u)};return e.createElement("div",{style:{marginBottom:12}},l.map((f,m)=>e.createElement("div",{key:m,className:"rounded-md border border-gray-200 dark:border-zinc-700",style:{padding:"8px 8px 2px",marginBottom:6}},Object.entries(t).map(([d,p])=>e.createElement("label",{key:d,style:{display:"block"}},e.createElement("span",{className:"text-gray-500 dark:text-gray-400",style:{display:"block",marginBottom:2,fontSize:11}},(o||{})[d]||d),e.createElement(I,{type:p,value:f[d],onChange:u=>i(m,d,u,!1),onSettle:u=>i(m,d,u,!0)}))),e.createElement(y,{variant:"secondary",size:"sm",className:"mb-1.5",onClick:()=>a(l.filter((d,p)=>p!==m))},"Remove"))),e.createElement(y,{variant:"secondary",size:"sm",className:"w-full",onClick:()=>a([...l,{}])},"Add"))},dt=Kt;var Zt=({as:t="div",className:o,children:s,...r})=>e.createElement(t,{...r,className:k("ks-panel",o)},s),$=Zt;var M=(t,o)=>({className:s,children:r,...a})=>e.createElement(t,{...a,className:k(o,s)},r),A=M("label","ks-label"),er=M("p","ks-hint"),or=M("p","ks-error"),rr=M("span","ks-required");var Qt={width:280,padding:20,overflowY:"auto"},Rt=({node:t,fields:o,holds:s,labels:r,recordLabels:a,choices:l,onSave:i,onDelete:f,onClose:m})=>{let[d,p]=b(t.config);E(()=>p(t.config),[t.id,t.config]);let u=c=>{p(c),JSON.stringify(c)!==JSON.stringify(t.config)&&i(c)};return e.createElement($,{as:"aside",style:Qt,"data-inspector":!0},e.createElement("div",{style:{display:"flex",alignItems:"start",justifyContent:"space-between",gap:8}},e.createElement("h2",{style:{fontWeight:600,marginBottom:2}},t.label),e.createElement("button",{title:"Close",onClick:m,className:"text-gray-500 dark:text-gray-400",style:{border:"none",background:"none",cursor:"pointer",fontSize:18,lineHeight:1}},"\xD7")),e.createElement("p",{className:"text-gray-500 dark:text-gray-400",style:{fontSize:11,marginBottom:16}},t.id," \xB7 ",t.type),Object.entries(o).map(([c,x])=>e.createElement(A,{key:c},e.createElement("span",{style:{display:"block",marginBottom:3}},r[c]||c),x==="list"?e.createElement(dt,{holds:s[c]||{},labels:a[c]||{},rows:d[c],onChange:h=>p({...d,[c]:h}),onSettle:h=>u({...d,[c]:h})}):e.createElement(I,{type:x,value:d[c],choices:l[c],onChange:h=>p({...d,[c]:h}),onSettle:h=>u({...d,[c]:h})}))),e.createElement(y,{variant:"danger",size:"sm",className:"w-full",onClick:f},"Delete step"))},ct=Rt;var te={width:240,boxSizing:"border-box",padding:"10px 14px",borderRadius:8,textAlign:"center",fontSize:12,cursor:"pointer"},ee="border-2 border-dashed border-amber-500 bg-amber-50 text-amber-700 dark:bg-amber-950 dark:text-amber-300",oe="border-2 border-dashed border-accent-600 bg-accent-50 text-accent-800 dark:bg-accent-950 dark:text-accent-200",re=({node:t,dragging:o,onFill:s,onDrop:r})=>e.createElement("div",{ref:t.ref,"data-placeholder":t.id,title:`Choose the step \u201C${t.label}\u201D should lead to`,onClick:s,onDragOver:a=>{o&&(a.preventDefault(),a.dataTransfer.dropEffect="move")},onDrop:a=>{a.preventDefault(),r()},className:o?oe:ee,style:te},e.createElement("div",{style:{fontWeight:600}},t.label),e.createElement("div",{style:{fontSize:11}},o?"drop a step here":"leads nowhere yet \u2014 click to choose")),mt=re;var ne=({entries:t,at:o,onPick:s,onConnect:r,onDismiss:a})=>e.createElement($,{className:"shadow-lg",style:{position:"absolute",zIndex:9,top:o.y,left:o.x,width:210,padding:8,borderRadius:8}},e.createElement("p",{className:"text-gray-500 dark:text-gray-400",style:{margin:"0 0 6px",fontSize:11}},"Add a step"),t.map(l=>e.createElement(y,{key:l.type,variant:"secondary",size:"sm",className:"w-full mb-1.5 flex-col",onClick:()=>s(l)},l.label,e.createElement("span",{className:"opacity-75",style:{display:"block",fontSize:11}},l.type))),r&&e.createElement(y,{variant:"secondary",size:"sm",className:"w-full mb-1.5",onClick:r},"Connect to a step already here"),e.createElement(y,{variant:"secondary",size:"sm",className:"w-full",onClick:a},"Cancel")),pt=ne;var se={width:24,height:24,padding:0,fontSize:15,lineHeight:"15px"},ut=({label:t,title:o,idle:s,enabled:r,onUse:a})=>e.createElement(y,{variant:"secondary",size:"sm",title:r?o:s,disabled:!r,onClick:a,style:{opacity:r?1:.4,cursor:r?"pointer":"default"}},t),ae=({undoable:t,redoable:o,onAdd:s,onUndo:r,onRedo:a})=>e.createElement("div",{style:{position:"absolute",top:16,left:16,zIndex:5,display:"flex",gap:8}},e.createElement(y,{variant:"secondary",className:"rounded-full",style:se,title:"Add a step",onClick:s},"+"),e.createElement(ut,{label:"\u21B6 Undo",title:"Undo the last change",idle:"Nothing to undo",enabled:t,onUse:r}),e.createElement(ut,{label:"\u21B7 Redo",title:"Redo the change you undid",idle:"Nothing to redo",enabled:o,onUse:a})),ft=ae;var le=t=>e.createElement(w,{...t,as:"textarea"}),gt=le;var yt=t=>{let o=t.problem.replace(/_/g," ");return t.node?`\u201C${t.node}\u201D ${o}`:o};var ht=({version:t,published:o})=>t?o?o===t?`Version ${t} \xB7 live`:`Version ${t} \xB7 visitors still on ${o}`:`Version ${t} \xB7 never published`:"No version yet";var ie={width:280,padding:20,overflowY:"auto"},W={fontWeight:600,marginBottom:6,marginTop:14},_={fontSize:12,marginBottom:4,lineHeight:1.4},Y={display:"block",marginBottom:3},U=(t,o,s)=>r=>{r.target.value!==(t[o]??"")&&s({[o]:r.target.value})},de=({flow:t,changes:o,problems:s,refusal:r,notice:a,onCreate:l,onPublish:i,onSaveDetails:f,onClose:m})=>e.createElement($,{as:"aside",style:ie,"data-builder-panel":!0},e.createElement("div",{style:{display:"flex",alignItems:"start",justifyContent:"space-between",gap:8}},e.createElement("h2",{style:{fontWeight:600},"data-flow-name":!0},t.title||t.slug),e.createElement("button",{title:"Close",onClick:m,className:"text-gray-500 dark:text-gray-400",style:{border:"none",background:"none",cursor:"pointer",fontSize:18,lineHeight:1}},"\xD7")),e.createElement("a",{className:"text-accent-600 dark:text-accent-400",style:{fontSize:12,display:"block"},href:t.history_url,"data-history":!0},ht(t)),e.createElement("h2",{style:W},"Problems"),r&&e.createElement("p",{className:"text-red-800 dark:text-red-400",style:{..._,fontWeight:600},"data-refusal":!0},r),a&&!r&&e.createElement("p",{className:"text-emerald-800 dark:text-emerald-400",style:{..._,fontWeight:600},"data-notice":!0},a),s.length===0&&!r?e.createElement("p",{className:"text-gray-500 dark:text-gray-400",style:{fontSize:12}},"Nothing wrong with this flow."):s.map(d=>e.createElement("p",{key:`${d.node}-${d.problem}`,className:"text-amber-700 dark:text-amber-400",style:_,"data-problem":!0},"\u26A0 ",yt(d))),e.createElement("h2",{style:W},"Changes since the last version"),o.length===0?e.createElement("p",{className:"text-gray-500 dark:text-gray-400",style:{fontSize:12}},"Nothing has changed."):o.map((d,p)=>e.createElement("p",{key:p,style:_,"data-change":!0},d)),e.createElement("h2",{style:W},"Details"),e.createElement(A,null,e.createElement("span",{style:Y},"Title"),e.createElement(w,{className:"mb-3",defaultValue:t.title??"",onBlur:U(t,"title",f),"data-flow-title":!0})),e.createElement(A,null,e.createElement("span",{style:Y},"Summary"),e.createElement(gt,{className:"mb-3",rows:4,defaultValue:t.summary??"",onBlur:U(t,"summary",f),"data-flow-summary":!0})),e.createElement(A,null,e.createElement("span",{style:Y},"Start label"),e.createElement(w,{className:"mb-3",defaultValue:t.start_label??"",onBlur:U(t,"start_label",f),"data-flow-start-label":!0})),e.createElement("div",{style:{marginTop:16}},e.createElement(y,{variant:"secondary",size:"sm",className:"w-full mb-1.5",onClick:l,"data-create-version":!0},"Create version"),e.createElement(y,{size:"sm",className:"w-full mb-1.5",onClick:i,"data-publish":!0},"Publish"),e.createElement(y,{variant:"secondary",size:"sm",className:"w-full mb-1.5",href:t.definition_url,"data-definition":!0},"Definition"),e.createElement(y,{variant:"secondary",size:"sm",className:"w-full mb-1.5",href:t.details_url,"data-details":!0},"Edit details"))),bt=de;var xt={width:24,height:24,padding:0,fontSize:15,lineHeight:"15px"},ce=({link:t,onInsert:o,onRemove:s,onDrop:r,dragging:a})=>{let[l,i]=b(!1),f=l||a;return e.createElement("div",{"data-connector":`${t.source}-${t.target}`,style:{position:"absolute",left:t.midX-34,top:t.midY-20,width:68,height:40,zIndex:4},onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),onDragEnter:()=>i(!0),onDragLeave:()=>i(!1),onDragOver:m=>{m.preventDefault(),m.dataTransfer.dropEffect="move"},onDrop:m=>{m.preventDefault(),i(!1),r()}},e.createElement("div",{style:{display:"flex",gap:4,justifyContent:"center",alignItems:"center",height:"100%",opacity:f?1:0,transition:"opacity .12s"}},e.createElement(y,{variant:"secondary",title:a?"Move the step here":"Insert a step here",onClick:o,className:"rounded-full data-[over=true]:ring-2 data-[over=true]:ring-accent-600","data-over":!!(a&&l),style:xt},"+"),!a&&e.createElement(y,{variant:"danger",title:"Remove this connection",onClick:s,className:"rounded-full",style:xt},"\xD7")))},vt=ce;var me=({links:t,extent:o,dragging:s,onInsert:r,onRemove:a,onDrop:l})=>e.createElement(e.Fragment,null,e.createElement("svg",{width:o.width,height:o.height,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:1}},e.createElement("defs",null,e.createElement("marker",{id:"alembic-arrow",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"5",markerHeight:"5",orient:"auto"},e.createElement("path",{d:"M 0 0 L 10 5 L 0 10 z",className:"fill-gray-400 dark:fill-zinc-500"}))),t.map(i=>e.createElement("path",{key:i.id,"data-link":i.id,className:"stroke-gray-400 dark:stroke-zinc-500",fill:"none",strokeWidth:"1.5",markerEnd:"url(#alembic-arrow)",d:i.path}))),t.filter(i=>i.label).map(i=>e.createElement("div",{key:`${i.id}-label`,"data-link-label":i.id,className:"bg-surface-50 text-gray-500 dark:bg-surface-950 dark:text-gray-400",style:{position:"absolute",left:i.midX-10,top:i.midY-18,zIndex:3,fontSize:11,padding:"0 3px"}},i.label)),t.filter(i=>!i.placeholder).map(i=>e.createElement(vt,{key:i.id,link:i,dragging:!!s,onInsert:()=>r(i),onRemove:()=>a(i),onDrop:()=>l(i)}))),kt=me;var pe="Your change was not saved because the server could not be reached.",wt=({base:t,token:o,fetch:s,onFlow:r,onError:a,onNotice:l})=>async(i,f,m)=>{let d=await s(t+i,{method:f,headers:{"Content-Type":"application/json","X-CSRF-Token":o},body:m&&JSON.stringify(m)}).catch(()=>null);if(!d)return l(null),a(pe);let p=await d.json().catch(()=>({}));if(!d.ok)return l(null),a(p.error||"That change was refused");a(null),l(p.notice||null),r(await(await s(t+".json",{headers:{Accept:"application/json"}})).json())};var ue=(t,o,s)=>{let[r,a]=b(s),[l,i]=b(null),[f,m]=b(null),d=P(()=>wt({base:t,token:o,fetch:(...p)=>window.fetch(...p),onFlow:a,onError:i,onNotice:m}),[t,o]);return{flow:r,error:l,notice:f,send:d}},Ct=ue;var O=(t,o,s,r)=>{let a=t.left-s.left+r.scrollLeft,l=t.top-s.top+r.scrollTop;return o==="left"?{x:a,y:l+t.height/2}:o==="right"?{x:a+t.width,y:l+t.height/2}:o==="top"?{x:a+t.width/2,y:l}:{x:a+t.width/2,y:l+t.height}},fe=(t,o)=>o==="top"?{x:t.x,y:t.y-3}:o==="left"?{x:t.x-3,y:t.y}:o==="right"?{x:t.x+3,y:t.y}:{x:t.x,y:t.y+3},ge=(t,o,s,r,a)=>{let l={straight:`M ${o.x} ${o.y} L ${s.x} ${s.y}`,turn:`M ${o.x} ${o.y} H ${s.x} V ${s.y}`,lane:`M ${o.x} ${o.y} V ${r} H ${s.x} V ${s.y}`,detour:`M ${o.x} ${o.y} H ${a} V ${s.y} H ${s.x}`}[t.route];return{...t,path:l,midX:t.route==="detour"?a:(o.x+s.x)/2,midY:t.route==="lane"?r:(o.y+s.y)/2}},ye=(t,o,s,r)=>{let[a,l]=b([]),[i,f]=b({width:"100%",height:"100%"});return Q(()=>{let m=()=>{let p=o.current?.getBoundingClientRect();p&&(f({width:o.current.scrollWidth,height:o.current.scrollHeight}),l(t.edges.flatMap(u=>{let c=s.current[u.source]?.getBoundingClientRect(),x=s.current[u.target]?.getBoundingClientRect();if(!c||!x)return[];let h=O(c,u.leaves,p,o.current),C=fe(O(x,u.enters,p,o.current),u.enters),N=(O(c,"bottom",p,o.current).y+O(x,"top",p,o.current).y)/2,z=u.leaves==="left"?Math.min(h.x,C.x)-28:Math.max(h.x,C.x)+28;return[ge(u,h,C,N,z)]})))};m(),window.addEventListener("resize",m);let d=new ResizeObserver(m);return o.current&&d.observe(o.current),()=>{window.removeEventListener("resize",m),d.disconnect()}},r),{links:a,extent:i}},St=ye;var Nt=(t,o)=>{let s=new Set(o),r=t,a=2;for(;s.has(r);)r=`${t}_${a++}`;return r};var xe={display:"flex",height:"100%",minHeight:0,fontSize:13},ve={flex:1,overflow:"auto",position:"relative"},ke={position:"absolute",top:56,left:16,zIndex:5,width:264,padding:12,borderRadius:8},we={display:"grid",rowGap:64,columnGap:0,padding:40,justifyContent:"center",position:"relative"},Ce={position:"sticky",zIndex:8,top:8,margin:"8px auto 0",width:"fit-content",padding:"6px 12px",borderRadius:6,fontSize:12},Se=({port:t,onCancel:o})=>e.createElement("div",{className:"bg-accent-100 text-accent-800 dark:bg-accent-900 dark:text-accent-100",style:Ce},"Choose the step \u201C",t||"next","\u201D should lead to \u2014 ",e.createElement("button",{onClick:o,className:"text-accent-800 underline dark:text-accent-100",style:{border:"none",background:"none",cursor:"pointer",fontSize:12,padding:0}},"cancel")),Ne=({base:t,token:o,initial:s})=>{let{flow:r,error:a,notice:l,send:i}=Ct(t,o,s),[f,m]=b(null),[d,p]=b(null),[u,c]=b(null),[x,h]=b(null),[C,N]=b(!1),z=j({}),B=j(null);E(()=>{let n=()=>{m(null),N(!0)};return document.addEventListener("alembic:open-flow",n),()=>document.removeEventListener("alembic:open-flow",n)},[]),E(()=>{if(!C)return;let n=g=>{g.target.closest("[data-builder-panel], [data-open-panel]")||N(!1)};return document.addEventListener("click",n),()=>document.removeEventListener("click",n)},[C]),E(()=>{document.dispatchEvent(new CustomEvent("alembic:flow-named",{detail:r.flow?.title||r.flow?.slug}))},[r.flow?.title,r.flow?.slug]);let Bt=P(()=>Object.fromEntries(r.nodes.map(n=>[n.id,n])),[r.nodes]),{links:Et,extent:Tt}=St(r,B,z,[r,f,Bt]),X=P(()=>{let n={};return r.violations.forEach(g=>{var v;return(n[v=g.node]||(n[v]=[])).push(g)}),n},[r.violations]),H=r.nodes.filter(n=>!n.loose),G=r.nodes.filter(n=>n.loose),$t=Math.max(0,...H.map(n=>n.row))+1,At=Math.max(0,...H.map(n=>n.column))+1,q=n=>{if(!u)return;let[g,v]=u;c(null),g!==n&&i("/edges","POST",{from:g,to:n,on:v||null})},S=r.nodes.find(n=>n.id===f),D=r.palette.find(n=>n.type===S?.type);return e.createElement("div",{className:"text-gray-900 dark:text-gray-100",style:xe,onMouseUp:()=>h(null),onKeyDown:n=>{n.key==="Escape"&&(m(null),c(null),p(null))},tabIndex:-1},e.createElement("div",{ref:B,className:"bg-surface-50 dark:bg-surface-950",style:ve,onClick:n=>{n.target===B.current&&(m(null),c(null),N(!1))}},u&&e.createElement(Se,{port:u[1],onCancel:()=>c(null)}),e.createElement(ft,{undoable:r.undoable,redoable:r.redoable,onAdd:()=>p({at:{x:16,y:52}}),onUndo:()=>{m(null),i("/undo","POST")},onRedo:()=>{m(null),i("/redo","POST")}}),e.createElement(kt,{links:Et,extent:Tt,dragging:x,onInsert:n=>p({from:n.source,to:n.target,at:{x:n.midX+30,y:n.midY}}),onRemove:n=>{m(null),i("/edges","DELETE",{from:n.source,to:n.target})},onDrop:n=>{let g=x;h(null),i("/steps/"+g+"/move","PATCH",{from:n.source,to:n.target})}}),G.length>0&&e.createElement("div",{"data-loose":!0,className:"border border-dashed border-gray-300 bg-gray-50 dark:border-zinc-700 dark:bg-zinc-900",style:ke},e.createElement("div",{className:"text-gray-500 dark:text-gray-400",style:{fontSize:11,marginBottom:6}},"Not in the flow yet \u2014 drag one onto a connection"),G.map(n=>e.createElement("div",{key:n.id,style:{marginBottom:8}},e.createElement(F,{node:{...n,ref:g=>{z.current[n.id]=g},violations:X[n.id]||[],connected:[]},selected:f===n.id,armed:u&&u[0]===n.id?u[1]:null,connecting:!!u,onSelect:()=>u?q(n.id):m(n.id),onArm:(g,v)=>{v.stopPropagation(),c([n.id,g])},onDragStart:()=>h(n.id),onDragEnd:()=>h(null)})))),e.createElement("div",{style:{...we,gridTemplateColumns:`repeat(${At+1}, ${280/2}px)`,gridTemplateRows:`repeat(${$t}, auto)`}},H.map(n=>e.createElement("div",{key:n.id,style:{gridRow:n.row+1,gridColumn:`${n.column+1} / span 2`,zIndex:2}},n.placeholder&&e.createElement(mt,{node:{...n,ref:g=>{z.current[n.id]=g}},dragging:!!x,onFill:()=>p({from:n.from,on:n.on,at:{x:16,y:52}}),onDrop:()=>{let g=x;h(null),g&&i("/edges","POST",{from:n.from,to:g,on:n.on})}}),!n.placeholder&&e.createElement(F,{node:{...n,ref:g=>{z.current[n.id]=g},violations:X[n.id]||[],connected:r.edges.filter(g=>g.source===n.id).map(g=>g.label||null)},selected:n.id===f,armed:u&&u[0]===n.id?u[1]:null,connecting:!!u&&u[0]!==n.id,onSelect:()=>u?q(n.id):m(n.id),onArm:(g,v)=>{let J=B.current.getBoundingClientRect();p({from:n.id,on:g,at:{x:v.clientX-J.left+B.current.scrollLeft+8,y:v.clientY-J.top+B.current.scrollTop+8}})},onDragEnd:()=>h(null),onDragStart:()=>h(n.id)})))),d&&e.createElement(pt,{entries:r.palette,at:d.at,onDismiss:()=>p(null),onConnect:d.on!==void 0?()=>{c([d.from,d.on]),p(null)}:null,onPick:n=>{let g=d;p(null),i("/steps","POST",{id:Nt(n.type,r.nodes.map(v=>v.id)),type:n.type,from:g.from,to:g.to,on:g.on})}})),C&&!S&&e.createElement(bt,{flow:r.flow||{},changes:r.changes||[],problems:r.violations,refusal:a,notice:l,onClose:()=>N(!1),onCreate:()=>i("/versions","POST"),onPublish:()=>i("/publish","POST"),onSaveDetails:n=>i("/details","PATCH",{flow:n})}),S&&e.createElement(ct,{node:S,fields:D?.fields||{},holds:D?.records||{},labels:D?.labels||{},recordLabels:D?.record_labels||{},choices:at(S,D),onClose:()=>m(null),onSave:n=>i(`/steps/${S.id}`,"PATCH",{config:n}),onDelete:()=>{m(null),i(`/steps/${S.id}`,"DELETE")}}))},zt=Ne;tt("alembic/flow-editor",zt);document.addEventListener("alembic:flow-named",t=>{let o=document.querySelector("[data-flow-heading]");o&&(o.textContent=t.detail)});rt(document,K);})();
@@ -0,0 +1 @@
1
+ .react-grid-layout{position:relative;transition:height .2s ease}.react-grid-item{transition:all .2s ease;transition-property:left,top,width,height}.react-grid-item img{pointer-events:none;user-select:none}.react-grid-item.cssTransforms{transition-property:transform,width,height}.react-grid-item.resizing{transition:none;z-index:1;will-change:width,height}.react-grid-item.react-draggable-dragging{transition:none;z-index:3;will-change:transform}.react-grid-item.dropping{visibility:hidden}.react-grid-item.react-grid-placeholder{background:red;opacity:.2;transition-duration:.1s;z-index:2;user-select:none}.react-grid-item.react-grid-placeholder.placeholder-resizing{transition:none}.react-grid-item>.react-resizable-handle{position:absolute;width:20px;height:20px;opacity:0}.react-grid-item:hover>.react-resizable-handle{opacity:1}.react-grid-item>.react-resizable-handle:after{content:"";position:absolute;right:3px;bottom:3px;width:5px;height:5px;border-right:2px solid rgba(0,0,0,.4);border-bottom:2px solid rgba(0,0,0,.4)}.react-resizable-hide>.react-resizable-handle{display:none}.react-grid-item>.react-resizable-handle.react-resizable-handle-sw{bottom:0;left:0;cursor:sw-resize;transform:rotate(90deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-se{bottom:0;right:0;cursor:se-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-nw{top:0;left:0;cursor:nw-resize;transform:rotate(180deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-ne{top:0;right:0;cursor:ne-resize;transform:rotate(270deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-w,.react-grid-item>.react-resizable-handle.react-resizable-handle-e{top:50%;margin-top:-10px;cursor:ew-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-w{left:0;transform:rotate(135deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-e{right:0;transform:rotate(315deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-n,.react-grid-item>.react-resizable-handle.react-resizable-handle-s{left:50%;margin-left:-10px;cursor:ns-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-n{top:0;transform:rotate(225deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-s{bottom:0;transform:rotate(45deg)}@media(hover:none){.react-grid-item>.react-resizable-handle{opacity:1}}[data-block-handle]{cursor:grab;touch-action:none;line-height:1;user-select:none}[data-block-handle]:active{cursor:grabbing}[data-block]{touch-action:pan-y}
@@ -0,0 +1,5 @@
1
+ (()=>{var cs=Object.create;var on=Object.defineProperty;var us=Object.getOwnPropertyDescriptor;var ds=Object.getOwnPropertyNames;var fs=Object.getPrototypeOf,ps=Object.prototype.hasOwnProperty;var Er=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var Mt=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(n){throw e=0,n}},zr=(t,e)=>{for(var n in e)on(t,n,{get:e[n],enumerable:!0})},Or=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ds(e))!ps.call(t,o)&&o!==n&&on(t,o,{get:()=>e[o],enumerable:!(r=us(e,o))||r.enumerable});return t};var sn=(t,e,n)=>(n=t!=null?cs(fs(t)):{},Or(e||!t||!t.__esModule?on(n,"default",{value:t,enumerable:!0}):n,t)),ge=t=>Or(on({},"__esModule",{value:!0}),t);var kn={};zr(kn,{createPortal:()=>hs,createRoot:()=>On,default:()=>Te,flushSync:()=>gs,hydrateRoot:()=>ms,preconnect:()=>ys,prefetchDNS:()=>bs,preinit:()=>vs,preinitModule:()=>ws,preload:()=>Ss,preloadModule:()=>xs,requestFormReset:()=>Ds,unstable_batchedUpdates:()=>Cs,useFormState:()=>Rs,useFormStatus:()=>Es,version:()=>zs});var kr,Te,hs,On,gs,ms,ys,bs,vs,ws,Ss,xs,Ds,Cs,Rs,Es,zs,Ce=Er(()=>{kr=globalThis.ReactDOM,Te=kr,{createPortal:hs,createRoot:On,flushSync:gs,hydrateRoot:ms,preconnect:ys,prefetchDNS:bs,preinit:vs,preinitModule:ws,preload:Ss,preloadModule:xs,requestFormReset:Ds,unstable_batchedUpdates:Cs,useFormState:Rs,useFormStatus:Es,version:zs}=kr});var ne={};zr(ne,{Children:()=>je,Component:()=>Be,Fragment:()=>Os,PureComponent:()=>ks,StrictMode:()=>Ps,Suspense:()=>Ms,cloneElement:()=>He,createContext:()=>Ns,createElement:()=>Pn,createRef:()=>Ls,default:()=>u,forwardRef:()=>_s,isValidElement:()=>Ts,lazy:()=>js,memo:()=>Bs,startTransition:()=>Hs,useCallback:()=>U,useContext:()=>As,useDebugValue:()=>Ws,useDeferredValue:()=>Is,useEffect:()=>qt,useId:()=>qs,useImperativeHandle:()=>Ys,useLayoutEffect:()=>Xs,useMemo:()=>Ct,useReducer:()=>$s,useRef:()=>q,useState:()=>at,useSyncExternalStore:()=>Gs,useTransition:()=>Fs});var Pr,u,je,Be,Os,ks,Ps,Ms,He,Ns,Pn,Ls,_s,Ts,js,Bs,Hs,U,As,Ws,Is,qt,qs,Ys,Xs,Ct,$s,q,at,Gs,Fs,et=Er(()=>{Pr=globalThis.React,u=Pr,{Children:je,Component:Be,Fragment:Os,PureComponent:ks,StrictMode:Ps,Suspense:Ms,cloneElement:He,createContext:Ns,createElement:Pn,createRef:Ls,forwardRef:_s,isValidElement:Ts,lazy:js,memo:Bs,startTransition:Hs,useCallback:U,useContext:As,useDebugValue:Ws,useDeferredValue:Is,useEffect:qt,useId:qs,useImperativeHandle:Ys,useLayoutEffect:Xs,useMemo:Ct,useReducer:$s,useRef:q,useState:at,useSyncExternalStore:Gs,useTransition:Fs}=Pr});var no=Mt((dn,eo)=>{(function(t,e){typeof dn=="object"&&typeof eo<"u"?e(dn):typeof define=="function"&&define.amd?define(["exports"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t["fast-equals"]={}))})(dn,(function(t){"use strict";function e(f){return function(P,y,x,D,j,F,A){return f(P,y,A)}}function n(f){return function(P,y,x,D){if(!P||!y||typeof P!="object"||typeof y!="object")return f(P,y,x,D);var j=D.get(P),F=D.get(y);if(j&&F)return j===y&&F===P;D.set(P,y),D.set(y,P);var A=f(P,y,x,D);return D.delete(P),D.delete(y),A}}function r(f,m){var P={};for(var y in f)P[y]=f[y];for(var y in m)P[y]=m[y];return P}function o(f){return f.constructor===Object||f.constructor==null}function a(f){return typeof f.then=="function"}function s(f,m){return f===m||f!==f&&m!==m}var i="[object Arguments]",l="[object Boolean]",c="[object Date]",p="[object RegExp]",d="[object Map]",g="[object Number]",z="[object Object]",w="[object Set]",k="[object String]",S=Object.prototype.toString;function b(f){var m=f.areArraysEqual,P=f.areDatesEqual,y=f.areMapsEqual,x=f.areObjectsEqual,D=f.areRegExpsEqual,j=f.areSetsEqual,F=f.createIsNestedEqual,A=F(st);function st(M,L,pt){if(M===L)return!0;if(!M||!L||typeof M!="object"||typeof L!="object")return M!==M&&L!==L;if(o(M)&&o(L))return x(M,L,A,pt);var X=Array.isArray(M),H=Array.isArray(L);if(X||H)return X===H&&m(M,L,A,pt);var $=S.call(M);return $!==S.call(L)?!1:$===c?P(M,L,A,pt):$===p?D(M,L,A,pt):$===d?y(M,L,A,pt):$===w?j(M,L,A,pt):$===z||$===i?a(M)||a(L)?!1:x(M,L,A,pt):$===l||$===g||$===k?s(M.valueOf(),L.valueOf()):!1}return st}function K(f,m,P,y){var x=f.length;if(m.length!==x)return!1;for(;x-- >0;)if(!P(f[x],m[x],x,x,f,m,y))return!1;return!0}var Z=n(K);function it(f,m){return s(f.valueOf(),m.valueOf())}function ut(f,m,P,y){var x=f.size===m.size;if(!x)return!1;if(!f.size)return!0;var D={},j=0;return f.forEach(function(F,A){if(x){var st=!1,M=0;m.forEach(function(L,pt){!st&&!D[M]&&(st=P(A,pt,j,M,f,m,y)&&P(F,L,A,pt,f,m,y))&&(D[M]=!0),M++}),j++,x=st}}),x}var lt=n(ut),ot="_owner",nt=Object.prototype.hasOwnProperty;function ct(f,m,P,y){var x=Object.keys(f),D=x.length;if(Object.keys(m).length!==D)return!1;for(var j;D-- >0;){if(j=x[D],j===ot){var F=!!f.$$typeof,A=!!m.$$typeof;if((F||A)&&F!==A)return!1}if(!nt.call(m,j)||!P(f[j],m[j],j,j,f,m,y))return!1}return!0}var Rt=n(ct);function At(f,m){return f.source===m.source&&f.flags===m.flags}function C(f,m,P,y){var x=f.size===m.size;if(!x)return!1;if(!f.size)return!0;var D={};return f.forEach(function(j,F){if(x){var A=!1,st=0;m.forEach(function(M,L){!A&&!D[st]&&(A=P(j,M,F,L,f,m,y))&&(D[st]=!0),st++}),x=A}}),x}var R=n(C),Y=Object.freeze({areArraysEqual:K,areDatesEqual:it,areMapsEqual:ut,areObjectsEqual:ct,areRegExpsEqual:At,areSetsEqual:C,createIsNestedEqual:e}),Ot=Object.freeze({areArraysEqual:Z,areDatesEqual:it,areMapsEqual:lt,areObjectsEqual:Rt,areRegExpsEqual:At,areSetsEqual:R,createIsNestedEqual:e}),xt=b(Y);function Et(f,m){return xt(f,m,void 0)}var ue=b(r(Y,{createIsNestedEqual:function(){return s}}));function de(f,m){return ue(f,m,void 0)}var Lt=b(Ot);function Vt(f,m){return Lt(f,m,new WeakMap)}var Kt=b(r(Ot,{createIsNestedEqual:function(){return s}}));function fe(f,m){return Kt(f,m,new WeakMap)}function pe(f){return b(r(Y,f(Y)))}function he(f){var m=b(r(Ot,f(Ot)));return(function(P,y,x){return x===void 0&&(x=new WeakMap),m(P,y,x)})}t.circularDeepEqual=Vt,t.circularShallowEqual=fe,t.createCustomCircularEqual=he,t.createCustomEqual=pe,t.deepEqual=Et,t.sameValueZeroEqual=s,t.shallowEqual=de,Object.defineProperty(t,"__esModule",{value:!0})}))});var oo=Mt((Ml,ro)=>{"use strict";var ya="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";ro.exports=ya});var lo=Mt((Nl,io)=>{"use strict";var ba=oo();function so(){}function ao(){}ao.resetWarningCache=so;io.exports=function(){function t(r,o,a,s,i,l){if(l!==ba){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}t.isRequired=t;function e(){return t}var n={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:ao,resetWarningCache:so};return n.PropTypes=n,n}});var me=Mt((Tl,co)=>{co.exports=lo()();var Ll,_l});var So=Mt(($l,tr)=>{function wo(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var o=t.length;for(e=0;e<o;e++)t[e]&&(n=wo(t[e]))&&(r&&(r+=" "),r+=n)}else for(n in t)t[n]&&(r&&(r+=" "),r+=n);return r}function vo(){for(var t,e,n=0,r="",o=arguments.length;n<o;n++)(t=arguments[n])&&(e=wo(t))&&(r&&(r+=" "),r+=e);return r}tr.exports=vo,tr.exports.clsx=vo});var No=Mt((Gl,Mo)=>{"use strict";var Ia=Object.create,hn=Object.defineProperty,qa=Object.getOwnPropertyDescriptor,Ya=Object.getOwnPropertyNames,Xa=Object.getPrototypeOf,$a=Object.prototype.hasOwnProperty,Ga=(t,e)=>{for(var n in e)hn(t,n,{get:e[n],enumerable:!0})},zo=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ya(e))!$a.call(t,o)&&o!==n&&hn(t,o,{get:()=>e[o],enumerable:!(r=qa(e,o))||r.enumerable});return t},Pe=(t,e,n)=>(n=t!=null?Ia(Xa(t)):{},zo(e||!t||!t.__esModule?hn(n,"default",{value:t,enumerable:!0}):n,t)),Fa=t=>zo(hn({},"__esModule",{value:!0}),t),Oo={};Ga(Oo,{DraggableCore:()=>ve,default:()=>gn});Mo.exports=Fa(Oo);var pn=Pe((et(),ge(ne))),V=Pe(me()),Ua=Pe((Ce(),ge(kn))),Va=So();function lr(t,e){for(let n=0,r=t.length;n<r;n++)if(e.apply(e,[t[n],n,t]))return t[n]}function xo(t){return typeof t=="function"||Object.prototype.toString.call(t)==="[object Function]"}function Ge(t){return typeof t=="number"&&!isNaN(t)}function vt(t){return parseInt(t,10)}function ke(t,e,n){if(t[e])return new Error(`Invalid prop ${e} passed to ${n} - do not set this, set it on the child.`)}var er=["Moz","Webkit","O","ms"];function Ka(t="transform"){var e,n;if(typeof window>"u")return"";let r=(n=(e=window.document)==null?void 0:e.documentElement)==null?void 0:n.style;if(!r||t in r)return"";for(let o=0;o<er.length;o++)if(ko(t,er[o])in r)return er[o];return""}function ko(t,e){return e?`${e}${Za(t)}`:t}function Za(t){let e="",n=!0;for(let r=0;r<t.length;r++)n?(e+=t[r].toUpperCase(),n=!1):t[r]==="-"?n=!0:e+=t[r];return e}var Ja=Ka(),nr="";function Qa(t,e){var n;nr||(nr=(n=lr(["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"],function(o){return xo(t[o])}))!=null?n:"");let r=t[nr];return xo(r)?!!r.call(t,e):!1}function Do(t,e,n){let r=t;do{if(Qa(r,e))return!0;if(r===n)return!1;r=r.parentNode}while(r);return!1}function rr(t,e,n,r){if(!t)return;let o={capture:!0,...r},a=n;t.addEventListener?t.addEventListener(e,a,o):t.attachEvent?t.attachEvent("on"+e,a):t["on"+e]=a}function be(t,e,n,r){if(!t)return;let o={capture:!0,...r},a=n;t.removeEventListener?t.removeEventListener(e,a,o):t.detachEvent?t.detachEvent("on"+e,a):t["on"+e]=null}function ti(t){let e=t.clientHeight,n=t.ownerDocument.defaultView.getComputedStyle(t);return e+=vt(n.borderTopWidth),e+=vt(n.borderBottomWidth),e}function ei(t){let e=t.clientWidth,n=t.ownerDocument.defaultView.getComputedStyle(t);return e+=vt(n.borderLeftWidth),e+=vt(n.borderRightWidth),e}function ni(t){let e=t.clientHeight,n=t.ownerDocument.defaultView.getComputedStyle(t);return e-=vt(n.paddingTop),e-=vt(n.paddingBottom),e}function ri(t){let e=t.clientWidth,n=t.ownerDocument.defaultView.getComputedStyle(t);return e-=vt(n.paddingLeft),e-=vt(n.paddingRight),e}function oi(t,e,n){let o=e===e.ownerDocument.body?{left:0,top:0}:e.getBoundingClientRect(),a=(t.clientX+e.scrollLeft-o.left)/n,s=(t.clientY+e.scrollTop-o.top)/n;return{x:a,y:s}}function si(t,e){let n=Po(t,e,"px");return{[ko("transform",Ja)]:n}}function ai(t,e){return Po(t,e,"")}function Po({x:t,y:e},n,r){let o=`translate(${t}${r},${e}${r})`;if(n){let a=`${typeof n.x=="string"?n.x:n.x+r}`,s=`${typeof n.y=="string"?n.y:n.y+r}`;o=`translate(${a}, ${s})`+o}return o}function ii(t,e){return t.targetTouches&&lr(t.targetTouches,n=>e===n.identifier)||t.changedTouches&&lr(t.changedTouches,n=>e===n.identifier)}function li(t){if(t.targetTouches&&t.targetTouches[0])return t.targetTouches[0].identifier;if(t.changedTouches&&t.changedTouches[0])return t.changedTouches[0].identifier}function ci(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0}function ui(t,e){if(!t)return;let n=t.getElementById("react-draggable-style-el");if(!n){n=t.createElement("style"),n.type="text/css",n.id="react-draggable-style-el";let r=e??ci();r&&n.setAttribute("nonce",r),n.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
2
+ `,n.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;}
3
+ `,t.getElementsByTagName("head")[0].appendChild(n)}t.body&&di(t.body,"react-draggable-transparent-selection")}function Co(t){window.requestAnimationFrame?window.requestAnimationFrame(()=>{Ro(t)}):Ro(t)}function Ro(t){if(t)try{t.body&&fi(t.body,"react-draggable-transparent-selection");let e=t.selection;if(e)e.empty();else{let n=(t.defaultView||window).getSelection();n&&n.type!=="Caret"&&n.removeAllRanges()}}catch{}}function di(t,e){t.classList?t.classList.add(e):t.className.match(new RegExp(`(?:^|\\s)${e}(?!\\S)`))||(t.className+=` ${e}`)}function fi(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(new RegExp(`(?:^|\\s)${e}(?!\\S)`,"g"),"")}function pi(t,e,n){if(!t.props.bounds)return[e,n];let{bounds:r}=t.props;r=typeof r=="string"?r:mi(r);let o=cr(t);if(typeof r=="string"){let{ownerDocument:a}=o,s=a.defaultView;if(!s)throw new Error("Cannot resolve the owner window of the draggable node.");let i;if(r==="parent"?i=o.parentNode:i=o.getRootNode().querySelector(r),!(i instanceof s.HTMLElement))throw new Error('Bounds selector "'+r+'" could not find an element.');let l=i,c=s.getComputedStyle(o),p=s.getComputedStyle(l);r={left:-o.offsetLeft+vt(p.paddingLeft)+vt(c.marginLeft),top:-o.offsetTop+vt(p.paddingTop)+vt(c.marginTop),right:ri(l)-ei(o)-o.offsetLeft+vt(p.paddingRight)-vt(c.marginRight),bottom:ni(l)-ti(o)-o.offsetTop+vt(p.paddingBottom)-vt(c.marginBottom)}}return Ge(r.right)&&(e=Math.min(e,r.right)),Ge(r.bottom)&&(n=Math.min(n,r.bottom)),Ge(r.left)&&(e=Math.max(e,r.left)),Ge(r.top)&&(n=Math.max(n,r.top)),[e,n]}function Eo(t,e,n){let r=Math.round(e/t[0])*t[0],o=Math.round(n/t[1])*t[1];return[r,o]}function hi(t){return t.props.axis==="both"||t.props.axis==="x"}function gi(t){return t.props.axis==="both"||t.props.axis==="y"}function or(t,e,n){let r=typeof e=="number"?ii(t,e):null;if(typeof e=="number"&&!r)return null;let o=cr(n),a=n.props.offsetParent||o.offsetParent||o.ownerDocument.body;return oi(r||t,a,n.props.scale)}function sr(t,e,n){let r=!Ge(t.lastX),o=cr(t);return r?{node:o,deltaX:0,deltaY:0,lastX:e,lastY:n,x:e,y:n}:{node:o,deltaX:e-t.lastX,deltaY:n-t.lastY,lastX:t.lastX,lastY:t.lastY,x:e,y:n}}function ar(t,e){let n=t.props.scale;return{node:e.node,x:t.state.x+e.deltaX/n,y:t.state.y+e.deltaY/n,deltaX:e.deltaX/n,deltaY:e.deltaY/n,lastX:t.state.x,lastY:t.state.y}}function mi(t){return{left:t.left,top:t.top,right:t.right,bottom:t.bottom}}function cr(t){let e=t.findDOMNode();if(!e)throw new Error("<DraggableCore>: Unmounted during event!");return e}var ir=Pe((et(),ge(ne))),bt=Pe(me()),yi=Pe((Ce(),ge(kn))),bi=typeof process<"u"&&process.env.DRAGGABLE_DEBUG?console.log.bind(console):function(){},Xt=bi,Ht={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}},le=Ht.mouse,ve=class extends ir.Component{constructor(){super(...arguments),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,this.touchIdentifier=null,this.mounted=!1,this.handleDragStart=t=>{if(this.props.onMouseDown(t),!this.props.allowAnyClick&&(typeof t.button=="number"&&t.button!==0||t.ctrlKey))return!1;let e=this.findDOMNode();if(!e||!e.ownerDocument||!e.ownerDocument.body)throw new Error("<DraggableCore> not mounted on DragStart!");let{ownerDocument:n}=e;if(this.props.disabled||!(t.target instanceof n.defaultView.Node)||this.props.handle&&!Do(t.target,this.props.handle,e)||this.props.cancel&&Do(t.target,this.props.cancel,e))return;t.type==="touchstart"&&!this.props.allowMobileScroll&&t.preventDefault();let r=li(t);this.touchIdentifier=r;let o=or(t,r,this);if(o==null)return;let{x:a,y:s}=o,i=sr(this,a,s);Xt("DraggableCore: handleDragStart: %j",i),Xt("calling",this.props.onStart),!(this.props.onStart(t,i)===!1||this.mounted===!1)&&(this.props.enableUserSelectHack&&ui(n,this.props.nonce),this.dragging=!0,this.lastX=a,this.lastY=s,rr(n,le.move,this.handleDrag),rr(n,le.stop,this.handleDragStop))},this.handleDrag=t=>{let e=or(t,this.touchIdentifier,this);if(e==null)return;let{x:n,y:r}=e;if(Array.isArray(this.props.grid)){let s=n-this.lastX,i=r-this.lastY;if([s,i]=Eo(this.props.grid,s,i),!s&&!i)return;n=this.lastX+s,r=this.lastY+i}let o=sr(this,n,r);if(Xt("DraggableCore: handleDrag: %j",o),this.props.onDrag(t,o)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent("mouseup"))}catch{let s=document.createEvent("MouseEvents");s.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(s)}return}this.lastX=n,this.lastY=r},this.handleDragStop=t=>{if(!this.dragging)return;let e=or(t,this.touchIdentifier,this);if(e==null)return;let{x:n,y:r}=e;if(Array.isArray(this.props.grid)){let i=n-this.lastX||0,l=r-this.lastY||0;[i,l]=Eo(this.props.grid,i,l),n=this.lastX+i,r=this.lastY+l}let o=sr(this,n,r);if(this.props.onStop(t,o)===!1||this.mounted===!1)return!1;let s=this.findDOMNode();s&&this.props.enableUserSelectHack&&Co(s.ownerDocument),Xt("DraggableCore: handleDragStop: %j",o),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,s&&(Xt("DraggableCore: Removing handlers"),be(s.ownerDocument,le.move,this.handleDrag),be(s.ownerDocument,le.stop,this.handleDragStop))},this.onMouseDown=t=>(le=Ht.mouse,this.handleDragStart(t)),this.onMouseUp=t=>(le=Ht.mouse,this.handleDragStop(t)),this.onTouchStart=t=>(le=Ht.touch,this.handleDragStart(t)),this.onTouchEnd=t=>(le=Ht.touch,this.handleDragStop(t))}componentDidMount(){this.mounted=!0;let t=this.findDOMNode();t&&rr(t,Ht.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;let t=this.findDOMNode();if(t){let{ownerDocument:e}=t;be(e,Ht.mouse.move,this.handleDrag),be(e,Ht.touch.move,this.handleDrag),be(e,Ht.mouse.stop,this.handleDragStop),be(e,Ht.touch.stop,this.handleDragStop),be(t,Ht.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&Co(e)}}findDOMNode(){var t;if((t=this.props)!=null&&t.nodeRef)return this.props.nodeRef.current;let e=yi.default;return typeof e.findDOMNode=="function"?e.findDOMNode(this):(Xt("react-draggable: ReactDOM.findDOMNode is not available in React 19+. You must provide a nodeRef prop. See: https://github.com/react-grid-layout/react-draggable#noderef"),null)}render(){return ir.cloneElement(ir.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}};ve.displayName="DraggableCore";ve.propTypes={allowAnyClick:bt.default.bool,allowMobileScroll:bt.default.bool,children:bt.default.node.isRequired,disabled:bt.default.bool,enableUserSelectHack:bt.default.bool,offsetParent:function(t,e){if(t[e]&&t[e].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:bt.default.arrayOf(bt.default.number),handle:bt.default.string,cancel:bt.default.string,nodeRef:bt.default.object,nonce:bt.default.string,onStart:bt.default.func,onDrag:bt.default.func,onStop:bt.default.func,onMouseDown:bt.default.func,scale:bt.default.number,className:ke,style:ke,transform:ke};ve.defaultProps={allowAnyClick:!1,allowMobileScroll:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1};var gn=class extends pn.Component{constructor(t){super(t),this.onDragStart=(e,n)=>{if(Xt("Draggable: onDragStart: %j",n),this.props.onStart(e,ar(this,n))===!1)return!1;this.setState({dragging:!0,dragged:!0})},this.onDrag=(e,n)=>{if(!this.state.dragging)return!1;Xt("Draggable: onDrag: %j",n);let r=ar(this,n),o={x:r.x,y:r.y,slackX:0,slackY:0};if(this.props.bounds){let{x:s,y:i}=o;o.x+=this.state.slackX,o.y+=this.state.slackY;let[l,c]=pi(this,o.x,o.y);o.x=l,o.y=c,o.slackX=this.state.slackX+(s-o.x),o.slackY=this.state.slackY+(i-o.y),r.x=o.x,r.y=o.y,r.deltaX=o.x-this.state.x,r.deltaY=o.y-this.state.y}if(this.props.onDrag(e,r)===!1)return!1;this.setState(o)},this.onDragStop=(e,n)=>{if(!this.state.dragging||this.props.onStop(e,ar(this,n))===!1)return!1;Xt("Draggable: onDragStop: %j",n);let o={dragging:!1,slackX:0,slackY:0};if(!!this.props.position){let{x:s,y:i}=this.props.position;o.x=s,o.y=i}this.setState(o)},this.state={dragging:!1,dragged:!1,x:t.position?t.position.x:t.defaultPosition.x,y:t.position?t.position.y:t.defaultPosition.y,prevPropsPosition:{...t.position},slackX:0,slackY:0,isElementSVG:!1},t.position&&!(t.onDrag||t.onStop)&&console.warn("A `position` was applied to this <Draggable>, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}static getDerivedStateFromProps({position:t},{prevPropsPosition:e}){return t&&(!e||t.x!==e.x||t.y!==e.y)?(Xt("Draggable: getDerivedStateFromProps %j",{position:t,prevPropsPosition:e}),{x:t.x,y:t.y,prevPropsPosition:{...t}}):null}componentDidMount(){typeof window.SVGElement<"u"&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.state.dragging&&this.setState({dragging:!1})}findDOMNode(){var t;if((t=this.props)!=null&&t.nodeRef)return this.props.nodeRef.current;let e=Ua.default;return typeof e.findDOMNode=="function"?e.findDOMNode(this):null}render(){let{axis:t,bounds:e,children:n,defaultPosition:r,defaultClassName:o,defaultClassNameDragging:a,defaultClassNameDragged:s,position:i,positionOffset:l,scale:c,...p}=this.props,d={},g=null,w=!!!i||this.state.dragging,k=i||r,S={x:hi(this)&&w?this.state.x:k.x,y:gi(this)&&w?this.state.y:k.y};this.state.isElementSVG?g=ai(S,l):d=si(S,l);let b=pn.Children.only(n),K=(0,Va.clsx)(b.props.className||"",o,{[a]:this.state.dragging,[s]:this.state.dragged});return pn.createElement(ve,{...p,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop},pn.cloneElement(b,{className:K,style:{...b.props.style,...d},transform:g}))}};gn.displayName="Draggable";gn.propTypes={...ve.propTypes,axis:V.default.oneOf(["both","x","y","none"]),bounds:V.default.oneOfType([V.default.shape({left:V.default.number,right:V.default.number,top:V.default.number,bottom:V.default.number}),V.default.string,V.default.oneOf([!1])]),defaultClassName:V.default.string,defaultClassNameDragging:V.default.string,defaultClassNameDragged:V.default.string,defaultPosition:V.default.shape({x:V.default.number,y:V.default.number}),positionOffset:V.default.shape({x:V.default.oneOfType([V.default.number,V.default.string]),y:V.default.oneOfType([V.default.number,V.default.string])}),position:V.default.shape({x:V.default.number,y:V.default.number}),className:ke,style:ke,transform:ke};gn.defaultProps={...ve.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1}});var dr=Mt((Vl,mn)=>{"use strict";var ur=No(),vi=ur.DraggableCore,Lo=ur.default||ur;mn.exports=Lo;mn.exports.default=Lo;mn.exports.DraggableCore=vi});var jo=Mt(fr=>{"use strict";fr.__esModule=!0;fr.cloneElement=Ri;var wi=Si((et(),ge(ne)));function Si(t){return t&&t.__esModule?t:{default:t}}function _o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function To(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?_o(Object(n),!0).forEach(function(r){xi(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):_o(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function xi(t,e,n){return(e=Di(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Di(t){var e=Ci(t,"string");return typeof e=="symbol"?e:e+""}function Ci(t,e){if(typeof t!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Ri(t,e){return e.style&&t.props.style&&(e.style=To(To({},t.props.style),e.style)),e.className&&t.props.className&&(e.className=t.props.className+" "+e.className),wi.default.cloneElement(t,e)}});var pr=Mt(yn=>{"use strict";yn.__esModule=!0;yn.resizableProps=void 0;var E=Ei(me()),Zl=dr();function Ei(t){return t&&t.__esModule?t:{default:t}}var Jl=yn.resizableProps={axis:E.default.oneOf(["both","x","y","none"]),className:E.default.string,children:E.default.element.isRequired,draggableOpts:E.default.shape({allowAnyClick:E.default.bool,cancel:E.default.string,children:E.default.node,disabled:E.default.bool,enableUserSelectHack:E.default.bool,offsetParent:typeof Element<"u"?E.default.instanceOf(Element):E.default.any,grid:E.default.arrayOf(E.default.number),handle:E.default.string,nodeRef:E.default.object,onStart:E.default.func,onDrag:E.default.func,onStop:E.default.func,onMouseDown:E.default.func,scale:E.default.number}),height:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];let r=e[0];return r.axis==="both"||r.axis==="y"?E.default.number.isRequired(...e):E.default.number(...e)},handle:E.default.oneOfType([E.default.node,E.default.func]),handleSize:E.default.arrayOf(E.default.number),lockAspectRatio:E.default.bool,maxConstraints:E.default.arrayOf(E.default.number),minConstraints:E.default.arrayOf(E.default.number),onResizeStop:E.default.func,onResizeStart:E.default.func,onResize:E.default.func,resizeHandles:E.default.arrayOf(E.default.oneOf(["s","w","e","n","sw","nw","se","ne"])),transformScale:E.default.number,width:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];let r=e[0];return r.axis==="both"||r.axis==="x"?E.default.number.isRequired(...e):E.default.number(...e)}}});var mr=Mt(bn=>{"use strict";bn.__esModule=!0;bn.default=void 0;var Me=Ho((et(),ge(ne))),zi=dr(),Oi=jo(),ki=pr(),Pi=["children","className","draggableOpts","width","height","handle","handleSize","lockAspectRatio","axis","minConstraints","maxConstraints","onResize","onResizeStop","onResizeStart","resizeHandles","transformScale"];function Ho(t,e){if(typeof WeakMap=="function")var n=new WeakMap,r=new WeakMap;return(Ho=function(o,a){if(!a&&o&&o.__esModule)return o;var s,i,l={__proto__:null,default:o};if(o===null||typeof o!="object"&&typeof o!="function")return l;if(s=a?r:n){if(s.has(o))return s.get(o);s.set(o,l)}for(let c in o)c!=="default"&&{}.hasOwnProperty.call(o,c)&&((i=(s=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,c))&&(i.get||i.set)?s(l,c,i):l[c]=o[c]);return l})(t,e)}function gr(){return gr=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},gr.apply(null,arguments)}function Mi(t,e){if(t==null)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;n[r]=t[r]}return n}function Bo(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function hr(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Bo(Object(n),!0).forEach(function(r){Ni(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Bo(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Ni(t,e,n){return(e=Li(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Li(t){var e=_i(t,"string");return typeof e=="symbol"?e:e+""}function _i(t,e){if(typeof t!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}var Fe=class extends Me.Component{constructor(){super(...arguments),this.handleRefs={},this.lastHandleRect=null,this.slack=null,this.lastSize=null}componentWillUnmount(){this.resetData()}resetData(){this.lastHandleRect=this.slack=this.lastSize=null}runConstraints(e,n){let r=this.props,o=r.minConstraints,a=r.maxConstraints,s=r.lockAspectRatio;if(!o&&!a&&!s)return[e,n];if(s){let g=this.props.width/this.props.height,z=e-this.props.width,w=n-this.props.height;Math.abs(z)>Math.abs(w*g)?n=e/g:e=n*g}let i=e,l=n,c=this.slack||[0,0],p=c[0],d=c[1];return e+=p,n+=d,o&&(e=Math.max(o[0],e),n=Math.max(o[1],n)),a&&(e=Math.min(a[0],e),n=Math.min(a[1],n)),this.slack=[p+(i-e),d+(l-n)],[e,n]}resizeHandler(e,n){return(r,o)=>{var a,s,i,l;let c=o.node,p=o.deltaX,d=o.deltaY;e==="onResizeStart"&&this.resetData();let g=(this.props.axis==="both"||this.props.axis==="x")&&n!=="n"&&n!=="s",z=(this.props.axis==="both"||this.props.axis==="y")&&n!=="e"&&n!=="w";if(!g&&!z)return;let w=n[0],k=n[n.length-1],S=c.getBoundingClientRect();if(this.lastHandleRect!=null){if(k==="w"){let Rt=S.left-this.lastHandleRect.left;p+=Rt}if(w==="n"){let Rt=S.top-this.lastHandleRect.top;d+=Rt}}this.lastHandleRect=S,k==="w"&&(p=-p),w==="n"&&(d=-d);let b=(a=(s=this.lastSize)==null?void 0:s.width)!=null?a:this.props.width,K=(i=(l=this.lastSize)==null?void 0:l.height)!=null?i:this.props.height,Z=b+(g?p/this.props.transformScale:0),it=K+(z?d/this.props.transformScale:0);var ut=this.runConstraints(Z,it);if(Z=ut[0],it=ut[1],e==="onResizeStop"&&this.lastSize){var lt=this.lastSize;Z=lt.width,it=lt.height}let ot=Z!==b||it!==K;e!=="onResizeStop"&&(this.lastSize={width:Z,height:it});let nt=typeof this.props[e]=="function"?this.props[e]:null;nt&&!(e==="onResize"&&!ot)&&(r.persist==null||r.persist(),nt(r,{node:c,size:{width:Z,height:it},handle:n})),e==="onResizeStop"&&this.resetData()}}renderResizeHandle(e,n){let r=this.props.handle;if(!r)return Me.createElement("span",{className:"react-resizable-handle react-resizable-handle-"+e,ref:n});if(typeof r=="function")return r(e,n);let o=typeof r.type=="string",a=hr({ref:n},o?{}:{handleAxis:e});return Me.cloneElement(r,a)}render(){let e=this.props,n=e.children,r=e.className,o=e.draggableOpts,a=e.width,s=e.height,i=e.handle,l=e.handleSize,c=e.lockAspectRatio,p=e.axis,d=e.minConstraints,g=e.maxConstraints,z=e.onResize,w=e.onResizeStop,k=e.onResizeStart,S=e.resizeHandles,b=e.transformScale,K=Mi(e,Pi);return(0,Oi.cloneElement)(n,hr(hr({},K),{},{className:(r?r+" ":"")+"react-resizable",children:[...Me.Children.toArray(n.props.children),...S.map(Z=>{var it;let ut=(it=this.handleRefs[Z])!=null?it:this.handleRefs[Z]=Me.createRef();return Me.createElement(zi.DraggableCore,gr({},o,{nodeRef:ut,key:"resizableHandle-"+Z,onStop:this.resizeHandler("onResizeStop",Z),onStart:this.resizeHandler("onResizeStart",Z),onDrag:this.resizeHandler("onResize",Z)}),this.renderResizeHandle(Z,ut))})]}))}};bn.default=Fe;Fe.propTypes=ki.resizableProps;Fe.defaultProps={axis:"both",handleSize:[20,20],lockAspectRatio:!1,minConstraints:[20,20],maxConstraints:[1/0,1/0],resizeHandles:["se"],transformScale:1}});var qo=Mt(Sn=>{"use strict";Sn.__esModule=!0;Sn.default=void 0;var yr=Io((et(),ge(ne))),Ti=Wo(me()),ji=Wo(mr()),Bi=pr(),Hi=["handle","handleSize","onResize","onResizeStart","onResizeStop","draggableOpts","minConstraints","maxConstraints","lockAspectRatio","axis","width","height","resizeHandles","style","transformScale"];function Wo(t){return t&&t.__esModule?t:{default:t}}function Io(t,e){if(typeof WeakMap=="function")var n=new WeakMap,r=new WeakMap;return(Io=function(o,a){if(!a&&o&&o.__esModule)return o;var s,i,l={__proto__:null,default:o};if(o===null||typeof o!="object"&&typeof o!="function")return l;if(s=a?r:n){if(s.has(o))return s.get(o);s.set(o,l)}for(let c in o)c!=="default"&&{}.hasOwnProperty.call(o,c)&&((i=(s=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,c))&&(i.get||i.set)?s(l,c,i):l[c]=o[c]);return l})(t,e)}function br(){return br=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},br.apply(null,arguments)}function Ao(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function vn(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Ao(Object(n),!0).forEach(function(r){Ai(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ao(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Ai(t,e,n){return(e=Wi(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Wi(t){var e=Ii(t,"string");return typeof e=="symbol"?e:e+""}function Ii(t,e){if(typeof t!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function qi(t,e){if(t==null)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;n[r]=t[r]}return n}var wn=class extends yr.Component{constructor(){super(...arguments),this.state={width:this.props.width,height:this.props.height,propsWidth:this.props.width,propsHeight:this.props.height},this.onResize=(e,n)=>{let r=n.size;this.props.onResize?(e.persist==null||e.persist(),this.setState(r,()=>this.props.onResize&&this.props.onResize(e,n))):this.setState(r)}}static getDerivedStateFromProps(e,n){return n.propsWidth!==e.width||n.propsHeight!==e.height?{width:e.width,height:e.height,propsWidth:e.width,propsHeight:e.height}:null}render(){let e=this.props,n=e.handle,r=e.handleSize,o=e.onResize,a=e.onResizeStart,s=e.onResizeStop,i=e.draggableOpts,l=e.minConstraints,c=e.maxConstraints,p=e.lockAspectRatio,d=e.axis,g=e.width,z=e.height,w=e.resizeHandles,k=e.style,S=e.transformScale,b=qi(e,Hi);return yr.createElement(ji.default,{axis:d,draggableOpts:i,handle:n,handleSize:r,height:this.state.height,lockAspectRatio:p,maxConstraints:c,minConstraints:l,onResizeStart:a,onResize:this.onResize,onResizeStop:s,resizeHandles:w,transformScale:S,width:this.state.width},yr.createElement("div",br({},b,{style:vn(vn({},k),{},{width:this.state.width+"px",height:this.state.height+"px"})})))}};Sn.default=wn;wn.propTypes=vn(vn({},Bi.resizableProps),{},{children:Ti.default.element})});var Yo=Mt((nc,xn)=>{"use strict";xn.exports=function(){throw new Error("Don't instantiate Resizable directly! Use require('react-resizable').Resizable")};xn.exports.Resizable=mr().default;xn.exports.ResizableBox=qo().default});Ce();et();var Mr=new Map,an=new Map,Nr=(t,e)=>Mr.set(t,e),Lr=()=>{an.forEach(t=>t.unmount()),an.clear()},_r=(t,e)=>t.querySelectorAll("[data-react-ui]").forEach(n=>{if(an.has(n))return;let r=Mr.get(n.dataset.reactUi),o=e(n);an.set(n,o),o.render(u.createElement(r,JSON.parse(n.dataset.props)))});var Tr=(t,e)=>{let n=()=>_r(t,e);t.addEventListener("turbo:load",n),t.addEventListener("turbo:frame-load",n),t.addEventListener("turbo:before-cache",Lr),t.readyState==="loading"?t.addEventListener("DOMContentLoaded",n):n()};et();et();var Re=(...t)=>t.filter(Boolean).join(" ");var Us={primary:"ks-button-primary",secondary:"ks-button-secondary",danger:"ks-button-danger"},Vs={sm:"ks-button-sm",md:"ks-button-md",lg:"ks-button-lg"},Ks=({variant:t="primary",size:e="md",className:n,children:r,...o})=>{let a=o.href?"a":"button";return u.createElement(a,{...o,className:Re("ks-button",Us[t],Vs[e],n)},r)},Mn=Ks;et();var Zs=({maxWidth:t="full",padding:e="standard",topOffset:n,className:r,children:o})=>u.createElement("div",{className:Re(e!=="none"&&"ks-page",n&&`ks-page-offset-${n}`,t!=="full"&&`ks-page-${t}`,r)},o),jr=Zs;et();var Js=({title:t,subtitle:e,actions:n,className:r})=>u.createElement("div",{className:Re("ks-page-header",r)},u.createElement("div",null,u.createElement("h1",{className:"ks-page-header-title"},t),e&&u.createElement("p",{className:"ks-page-header-subtitle"},e)),n&&u.createElement("div",{className:"page-header-actions ks-page-header-actions"},n)),Br=Js;et();function oe(t){let{margin:e,containerPadding:n,containerWidth:r,cols:o}=t;return(r-e[0]*(o-1)-n[0]*2)/o}function jt(t,e,n){return Number.isFinite(t)?Math.round(e*t+Math.max(0,t-1)*n):t}function We(t,e,n,r,o,a,s){let{margin:i,containerPadding:l,rowHeight:c}=t,p=oe(t),d,g,z,w;if(s?(d=Math.round(s.width),g=Math.round(s.height)):(d=jt(r,p,i[0]),g=jt(o,c,i[1])),a?(z=Math.round(a.top),w=Math.round(a.left)):s?(z=Math.round(s.top),w=Math.round(s.left)):(z=Math.round((c+i[1])*n+l[1]),w=Math.round((p+i[0])*e+l[0])),!a&&!s){if(Number.isFinite(r)){let S=Math.round((p+i[0])*(e+r)+l[0])-w-d;S!==i[0]&&(d+=S-i[0])}if(Number.isFinite(o)){let S=Math.round((c+i[1])*(n+o)+l[1])-z-g;S!==i[1]&&(g+=S-i[1])}}return{top:z,left:w,width:d,height:g}}function Ar(t,e,n,r,o){let{margin:a,containerPadding:s,cols:i,rowHeight:l,maxRows:c}=t,p=oe(t),d=Math.round((n-s[0])/(p+a[0])),g=Math.round((e-s[1])/(l+a[1]));return d=Ae(d,0,i-r),g=Ae(g,0,c-o),{x:d,y:g}}function Ie(t,e,n){let{margin:r,containerPadding:o,rowHeight:a}=t,s=oe(t),i=Math.round((n-o[0])/(s+r[0])),l=Math.round((e-o[1])/(a+r[1]));return{x:i,y:l}}function Wr(t,e,n){let{margin:r,rowHeight:o}=t,a=oe(t),s=Math.max(1,Math.round((e+r[0])/(a+r[0]))),i=Math.max(1,Math.round((n+r[1])/(o+r[1])));return{w:s,h:i}}function Ae(t,e,n){return Math.max(Math.min(t,n),e)}function cn(t,e){return!(t.i===e.i||t.x+t.w<=e.x||t.x>=e.x+e.w||t.y+t.h<=e.y||t.y>=e.y+e.h)}function se(t,e){for(let n=0;n<t.length;n++){let r=t[n];if(r!==void 0&&cn(r,e))return r}}function Nn(t,e){return t.filter(n=>cn(n,e))}function Qs(t,e){return e==="horizontal"?Ln(t):e==="vertical"||e==="wrap"?ln(t):[...t]}function ln(t){return[...t].sort((e,n)=>e.y!==n.y?e.y-n.y:e.x-n.x)}function Ln(t){return[...t].sort((e,n)=>e.x!==n.x?e.x-n.x:e.y-n.y)}function qe(t){let e=0;for(let n=0;n<t.length;n++){let r=t[n];if(r!==void 0){let o=r.y+r.h;o>e&&(e=o)}}return e}function ae(t,e){for(let n=0;n<t.length;n++){let r=t[n];if(r!==void 0&&r.i===e)return r}}function Ye(t){return t.filter(e=>e.static===!0)}function Gt(t){return{i:t.i,x:t.x,y:t.y,w:t.w,h:t.h,minW:t.minW,maxW:t.maxW,minH:t.minH,maxH:t.maxH,moved:!!t.moved,static:!!t.static,isDraggable:t.isDraggable,isResizable:t.isResizable,resizeHandles:t.resizeHandles,constraints:t.constraints,isBounded:t.isBounded}}function Ee(t){let e=new Array(t.length);for(let n=0;n<t.length;n++){let r=t[n];r!==void 0&&(e[n]=Gt(r))}return e}function ta(t,e){let n=new Array(t.length);for(let r=0;r<t.length;r++){let o=t[r];o!==void 0&&(e.i===o.i?n[r]=e:n[r]=o)}return n}function Ir(t,e,n){let r=ae(t,e);return r?(r=n(Gt(r)),[ta(t,r),r]):[[...t],null]}function _n(t,e){let n=Ye(t);for(let r=0;r<t.length;r++){let o=t[r];if(o!==void 0)if(o.x+o.w>e.cols&&(o.x=e.cols-o.w),o.x<0&&(o.x=0,o.w=e.cols),!o.static)n.push(o);else for(;se(n,o);)o.y++}return t}function re(t,e,n,r,o,a,s,i,l){if(e.static&&e.isDraggable!==!0)return[...t];if(e.y===r&&e.x===n)return[...t];let c=e.x,p=e.y;typeof n=="number"&&(e.x=n),typeof r=="number"&&(e.y=r),e.moved=!0;let d=Qs(t,s);(s==="vertical"&&typeof r=="number"?p>=r:s==="horizontal"&&typeof n=="number"&&c>=n)&&(d=d.reverse());let z=Nn(d,e),w=z.length>0;if(w&&l)return Ee(t);if(w&&a)return e.x=c,e.y=p,e.moved=!1,t;let k=[...t];for(let S=0;S<z.length;S++){let b=z[S];b!==void 0&&(b.moved||(b.static?k=Hr(k,b,e,o,s):k=Hr(k,e,b,o,s)))}return k}function Hr(t,e,n,r,o,a){let s=o==="horizontal",i=o==="vertical",l=e.static;if(r){r=!1;let d={x:s?Math.max(e.x-n.w,0):n.x,y:i?Math.max(e.y-n.h,0):n.y,w:n.w,h:n.h,i:"-1"},g=se(t,d),z=g!==void 0&&g.y+g.h>e.y,w=g!==void 0&&e.x+e.w>g.x;if(!g)return re(t,n,s?d.x:void 0,i?d.y:void 0,r,l,o);if(z&&i)return re(t,n,void 0,n.y+1,r,l,o);if(z&&o===null)return e.y=n.y,n.y=n.y+n.h,[...t];if(w&&s)return re(t,e,n.x,void 0,r,l,o)}let c=s?n.x+1:void 0,p=i?n.y+1:void 0;return c===void 0&&p===void 0?[...t]:re(t,n,c,p,r,l,o)}function ze(t,e,n){return Math.max(e,Math.min(n,t))}var ea={name:"gridBounds",constrainPosition(t,e,n,{cols:r,maxRows:o}){return{x:ze(e,0,Math.max(0,r-t.w)),y:ze(n,0,Math.max(0,o-t.h))}},constrainSize(t,e,n,r,{cols:o,maxRows:a}){let s=r==="w"||r==="nw"||r==="sw"?t.x+t.w:o-t.x,i=r==="n"||r==="nw"||r==="ne"?t.y+t.h:a-t.y;return{w:ze(e,1,Math.max(1,s)),h:ze(n,1,Math.max(1,i))}}},na={name:"minMaxSize",constrainSize(t,e,n){return{w:ze(e,t.minW??1,t.maxW??1/0),h:ze(n,t.minH??1,t.maxH??1/0)}}};var Tn=[ea,na];function Xe(t,e,n,r,o){let a={x:n,y:r};for(let s of t)s.constrainPosition&&(a=s.constrainPosition(e,a.x,a.y,o));if(e.constraints)for(let s of e.constraints)s.constrainPosition&&(a=s.constrainPosition(e,a.x,a.y,o));return a}function qr(t,e,n,r,o,a){let s={w:n,h:r};for(let i of t)i.constrainSize&&(s=i.constrainSize(e,s.w,s.h,o,a));if(e.constraints)for(let i of e.constraints)i.constrainSize&&(s=i.constrainSize(e,s.w,s.h,o,a));return s}function jn({top:t,left:e,width:n,height:r}){let o=`translate(${e}px,${t}px)`;return{transform:o,WebkitTransform:o,MozTransform:o,msTransform:o,OTransform:o,width:`${n}px`,height:`${r}px`,position:"absolute"}}function Yr({top:t,left:e,width:n,height:r}){return{top:`${t}px`,left:`${e}px`,width:`${n}px`,height:`${r}px`,position:"absolute"}}function Bn(t){return t*100+"%"}function ra(t,e,n,r){return t+n>r?e:n}function Xr(t,e,n){return t<0?e:n}function oa(t){return Math.max(0,t)}function un(t){return Math.max(0,t)}var Hn=(t,e,n)=>{let{left:r,height:o,width:a}=e,s=t.top-(o-t.height);return{left:r,width:a,height:Xr(s,t.height,o),top:un(s)}},An=(t,e,n)=>{let{top:r,left:o,height:a,width:s}=e;return{top:r,height:a,width:ra(t.left,t.width,s,n),left:oa(o)}},Wn=(t,e,n)=>{let{top:r,height:o,width:a}=e,s=t.left+t.width-a;return s<0?{height:o,width:t.left+t.width,top:un(r),left:0}:{height:o,width:a,top:un(r),left:s}},In=(t,e,n)=>{let{top:r,left:o,height:a,width:s}=e;return{width:s,left:o,height:Xr(r,t.height,a),top:un(r)}},sa=(t,e,n)=>Hn(t,An(t,e,n)),aa=(t,e,n)=>Hn(t,Wn(t,e)),ia=(t,e,n)=>In(t,An(t,e,n)),la=(t,e,n)=>In(t,Wn(t,e)),ca={n:Hn,ne:sa,e:An,se:ia,s:In,sw:la,w:Wn,nw:aa};function $r(t,e,n,r){let o=ca[t];return o?o(e,{...e,...n},r):n}var ua={type:"transform",scale:1,calcStyle(t){return jn(t)}};var Gr=ua,Fr={cols:12,rowHeight:150,margin:[10,10],containerPadding:null,maxRows:1/0},Ur={enabled:!0,bounded:!1,threshold:3},Vr={enabled:!0,handles:["se"]},Kr={enabled:!1,defaultItem:{w:1,h:1}};function qn(t,e,n,r,o){let a=r==="x"?"w":"h";e[r]+=1;let s=t.findIndex(l=>l.i===e.i),i=o??Ye(t).length>0;for(let l=s+1;l<t.length;l++){let c=t[l];if(c!==void 0&&!c.static){if(!i&&c.y>e.y+e.h)break;cn(e,c)&&qn(t,c,n+e[a],r,i)}}e[r]=n}function da(t,e,n,r){for(e.x=Math.max(e.x,0),e.y=Math.max(e.y,0),e.y=Math.min(r,e.y);e.y>0&&!se(t,e);)e.y--;let o;for(;(o=se(t,e))!==void 0;)qn(n,e,o.y+o.h,"y");return e.y=Math.max(e.y,0),e}function fa(t,e,n,r){for(e.x=Math.max(e.x,0),e.y=Math.max(e.y,0);e.x>0&&!se(t,e);)e.x--;let o;for(;(o=se(t,e))!==void 0;)if(qn(r,e,o.x+o.w,"x"),e.x+e.w>n)for(e.x=n-e.w,e.y++;e.x>0&&!se(t,e);)e.x--;return e.x=Math.max(e.x,0),e}var Zr={type:"vertical",allowOverlap:!1,compact(t,e){let n=Ye(t),r=qe(n),o=ln(t),a=new Array(t.length);for(let s=0;s<o.length;s++){let i=o[s];if(i===void 0)continue;let l=Gt(i);l.static||(l=da(n,l,o,r),r=Math.max(r,l.y+l.h),n.push(l));let c=t.indexOf(i);a[c]=l,l.moved=!1}return a}},Jr={type:"horizontal",allowOverlap:!1,compact(t,e){let n=Ye(t),r=Ln(t),o=new Array(t.length);for(let a=0;a<r.length;a++){let s=r[a];if(s===void 0)continue;let i=Gt(s);i.static||(i=fa(n,i,e,r),n.push(i));let l=t.indexOf(s);o[l]=i,i.moved=!1}return o}},Qr={type:null,allowOverlap:!1,compact(t,e){return Ee(t)}},pa={...Zr,allowOverlap:!0,compact(t,e){return Ee(t)}},ha={...Jr,allowOverlap:!0,compact(t,e){return Ee(t)}},ga={...Qr,allowOverlap:!0};function to(t,e=!1,n=!1){let r;return e?t==="vertical"?r=pa:t==="horizontal"?r=ha:r=ga:t==="vertical"?r=Zr:t==="horizontal"?r=Jr:r=Qr,n?{...r,preventCollision:n}:r}et();function ma(t){let e=typeof globalThis.getComputedStyle=="function"?globalThis.getComputedStyle(t):null;if(!e)return t.clientWidth;let n=o=>{let a=Number.parseFloat(o);return Number.isFinite(a)?a:0},r=Number.parseFloat(e.width);return Number.isFinite(r)?Math.max(0,r):Math.max(0,t.clientWidth-n(e.paddingLeft)-n(e.paddingRight))}function Yn(t={}){let{measureBeforeMount:e=!1,initialWidth:n=1280}=t,[r,o]=at(n),[a,s]=at(!e),i=q(null),l=q(null),c=U(()=>{let p=i.current;if(p){let d=Math.round(ma(p));o(g=>g===d?g:d),a||s(!0)}},[a]);return qt(()=>{let p=i.current;if(p){if(c(),typeof ResizeObserver<"u"){let d=null;return l.current=new ResizeObserver(g=>{let z=g[0];if(z){let w=Math.round(z.contentRect.width);d!==null&&cancelAnimationFrame(d),d=requestAnimationFrame(()=>{o(k=>k===w?k:w),d=null})}}),l.current.observe(p),()=>{d!==null&&cancelAnimationFrame(d),l.current&&(l.current.disconnect(),l.current=null)}}return()=>{l.current&&(l.current.disconnect(),l.current=null)}}},[c]),{width:r,mounted:a,containerRef:i,measureWidth:c}}et();et();var G=sn(me(),1);Ce();function uo(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var o=t.length;for(e=0;e<o;e++)t[e]&&(n=uo(t[e]))&&(r&&(r+=" "),r+=n)}else for(n in t)t[n]&&(r&&(r+=" "),r+=n);return r}function Xn(){for(var t,e,n=0,r="",o=arguments.length;n<o;n++)(t=arguments[n])&&(e=uo(t))&&(r&&(r+=" "),r+=e);return r}var $n=Xn;et();var gt=sn(me(),1);Ce();function Jn(t,e){for(let n=0,r=t.length;n<r;n++)if(e.apply(e,[t[n],n,t]))return t[n]}function fo(t){return typeof t=="function"||Object.prototype.toString.call(t)==="[object Function]"}function $e(t){return typeof t=="number"&&!isNaN(t)}function yt(t){return parseInt(t,10)}function Oe(t,e,n){if(t[e])return new Error(`Invalid prop ${e} passed to ${n} - do not set this, set it on the child.`)}var Gn=["Moz","Webkit","O","ms"];function va(t="transform"){var e,n;if(typeof window>"u")return"";let r=(n=(e=window.document)==null?void 0:e.documentElement)==null?void 0:n.style;if(!r||t in r)return"";for(let o=0;o<Gn.length;o++)if(yo(t,Gn[o])in r)return Gn[o];return""}function yo(t,e){return e?`${e}${wa(t)}`:t}function wa(t){let e="",n=!0;for(let r=0;r<t.length;r++)n?(e+=t[r].toUpperCase(),n=!1):t[r]==="-"?n=!0:e+=t[r];return e}var Sa=va(),Fn="";function xa(t,e){var n;Fn||(Fn=(n=Jn(["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"],function(o){return fo(t[o])}))!=null?n:"");let r=t[Fn];return fo(r)?!!r.call(t,e):!1}function po(t,e,n){let r=t;do{if(xa(r,e))return!0;if(r===n)return!1;r=r.parentNode}while(r);return!1}function Un(t,e,n,r){if(!t)return;let o={capture:!0,...r},a=n;t.addEventListener?t.addEventListener(e,a,o):t.attachEvent?t.attachEvent("on"+e,a):t["on"+e]=a}function ye(t,e,n,r){if(!t)return;let o={capture:!0,...r},a=n;t.removeEventListener?t.removeEventListener(e,a,o):t.detachEvent?t.detachEvent("on"+e,a):t["on"+e]=null}function Da(t){let e=t.clientHeight,n=t.ownerDocument.defaultView.getComputedStyle(t);return e+=yt(n.borderTopWidth),e+=yt(n.borderBottomWidth),e}function Ca(t){let e=t.clientWidth,n=t.ownerDocument.defaultView.getComputedStyle(t);return e+=yt(n.borderLeftWidth),e+=yt(n.borderRightWidth),e}function Ra(t){let e=t.clientHeight,n=t.ownerDocument.defaultView.getComputedStyle(t);return e-=yt(n.paddingTop),e-=yt(n.paddingBottom),e}function Ea(t){let e=t.clientWidth,n=t.ownerDocument.defaultView.getComputedStyle(t);return e-=yt(n.paddingLeft),e-=yt(n.paddingRight),e}function za(t,e,n){let o=e===e.ownerDocument.body?{left:0,top:0}:e.getBoundingClientRect(),a=(t.clientX+e.scrollLeft-o.left)/n,s=(t.clientY+e.scrollTop-o.top)/n;return{x:a,y:s}}function Oa(t,e){let n=bo(t,e,"px");return{[yo("transform",Sa)]:n}}function ka(t,e){return bo(t,e,"")}function bo({x:t,y:e},n,r){let o=`translate(${t}${r},${e}${r})`;if(n){let a=`${typeof n.x=="string"?n.x:n.x+r}`,s=`${typeof n.y=="string"?n.y:n.y+r}`;o=`translate(${a}, ${s})`+o}return o}function Pa(t,e){return t.targetTouches&&Jn(t.targetTouches,n=>e===n.identifier)||t.changedTouches&&Jn(t.changedTouches,n=>e===n.identifier)}function Ma(t){if(t.targetTouches&&t.targetTouches[0])return t.targetTouches[0].identifier;if(t.changedTouches&&t.changedTouches[0])return t.changedTouches[0].identifier}function Na(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0}function La(t,e){if(!t)return;let n=t.getElementById("react-draggable-style-el");if(!n){n=t.createElement("style"),n.type="text/css",n.id="react-draggable-style-el";let r=e??Na();r&&n.setAttribute("nonce",r),n.innerHTML=`.react-draggable-transparent-selection *::-moz-selection {all: inherit;}
4
+ `,n.innerHTML+=`.react-draggable-transparent-selection *::selection {all: inherit;}
5
+ `,t.getElementsByTagName("head")[0].appendChild(n)}t.body&&_a(t.body,"react-draggable-transparent-selection")}function ho(t){window.requestAnimationFrame?window.requestAnimationFrame(()=>{go(t)}):go(t)}function go(t){if(t)try{t.body&&Ta(t.body,"react-draggable-transparent-selection");let e=t.selection;if(e)e.empty();else{let n=(t.defaultView||window).getSelection();n&&n.type!=="Caret"&&n.removeAllRanges()}}catch{}}function _a(t,e){t.classList?t.classList.add(e):t.className.match(new RegExp(`(?:^|\\s)${e}(?!\\S)`))||(t.className+=` ${e}`)}function Ta(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(new RegExp(`(?:^|\\s)${e}(?!\\S)`,"g"),"")}function ja(t,e,n){if(!t.props.bounds)return[e,n];let{bounds:r}=t.props;r=typeof r=="string"?r:Aa(r);let o=Qn(t);if(typeof r=="string"){let{ownerDocument:a}=o,s=a.defaultView;if(!s)throw new Error("Cannot resolve the owner window of the draggable node.");let i;if(r==="parent"?i=o.parentNode:i=o.getRootNode().querySelector(r),!(i instanceof s.HTMLElement))throw new Error('Bounds selector "'+r+'" could not find an element.');let l=i,c=s.getComputedStyle(o),p=s.getComputedStyle(l);r={left:-o.offsetLeft+yt(p.paddingLeft)+yt(c.marginLeft),top:-o.offsetTop+yt(p.paddingTop)+yt(c.marginTop),right:Ea(l)-Ca(o)-o.offsetLeft+yt(p.paddingRight)-yt(c.marginRight),bottom:Ra(l)-Da(o)-o.offsetTop+yt(p.paddingBottom)-yt(c.marginBottom)}}return $e(r.right)&&(e=Math.min(e,r.right)),$e(r.bottom)&&(n=Math.min(n,r.bottom)),$e(r.left)&&(e=Math.max(e,r.left)),$e(r.top)&&(n=Math.max(n,r.top)),[e,n]}function mo(t,e,n){let r=Math.round(e/t[0])*t[0],o=Math.round(n/t[1])*t[1];return[r,o]}function Ba(t){return t.props.axis==="both"||t.props.axis==="x"}function Ha(t){return t.props.axis==="both"||t.props.axis==="y"}function Vn(t,e,n){let r=typeof e=="number"?Pa(t,e):null;if(typeof e=="number"&&!r)return null;let o=Qn(n),a=n.props.offsetParent||o.offsetParent||o.ownerDocument.body;return za(r||t,a,n.props.scale)}function Kn(t,e,n){let r=!$e(t.lastX),o=Qn(t);return r?{node:o,deltaX:0,deltaY:0,lastX:e,lastY:n,x:e,y:n}:{node:o,deltaX:e-t.lastX,deltaY:n-t.lastY,lastX:t.lastX,lastY:t.lastY,x:e,y:n}}function Zn(t,e){let n=t.props.scale;return{node:e.node,x:t.state.x+e.deltaX/n,y:t.state.y+e.deltaY/n,deltaX:e.deltaX/n,deltaY:e.deltaY/n,lastX:t.state.x,lastY:t.state.y}}function Aa(t){return{left:t.left,top:t.top,right:t.right,bottom:t.bottom}}function Qn(t){let e=t.findDOMNode();if(!e)throw new Error("<DraggableCore>: Unmounted during event!");return e}var Wa=typeof process<"u"&&process.env.DRAGGABLE_DEBUG?console.log.bind(console):function(){},Yt=Wa,Bt={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}},ie=Bt.mouse,Ft=class extends Be{constructor(){super(...arguments),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,this.touchIdentifier=null,this.mounted=!1,this.handleDragStart=t=>{if(this.props.onMouseDown(t),!this.props.allowAnyClick&&(typeof t.button=="number"&&t.button!==0||t.ctrlKey))return!1;let e=this.findDOMNode();if(!e||!e.ownerDocument||!e.ownerDocument.body)throw new Error("<DraggableCore> not mounted on DragStart!");let{ownerDocument:n}=e;if(this.props.disabled||!(t.target instanceof n.defaultView.Node)||this.props.handle&&!po(t.target,this.props.handle,e)||this.props.cancel&&po(t.target,this.props.cancel,e))return;t.type==="touchstart"&&!this.props.allowMobileScroll&&t.preventDefault();let r=Ma(t);this.touchIdentifier=r;let o=Vn(t,r,this);if(o==null)return;let{x:a,y:s}=o,i=Kn(this,a,s);Yt("DraggableCore: handleDragStart: %j",i),Yt("calling",this.props.onStart),!(this.props.onStart(t,i)===!1||this.mounted===!1)&&(this.props.enableUserSelectHack&&La(n,this.props.nonce),this.dragging=!0,this.lastX=a,this.lastY=s,Un(n,ie.move,this.handleDrag),Un(n,ie.stop,this.handleDragStop))},this.handleDrag=t=>{let e=Vn(t,this.touchIdentifier,this);if(e==null)return;let{x:n,y:r}=e;if(Array.isArray(this.props.grid)){let s=n-this.lastX,i=r-this.lastY;if([s,i]=mo(this.props.grid,s,i),!s&&!i)return;n=this.lastX+s,r=this.lastY+i}let o=Kn(this,n,r);if(Yt("DraggableCore: handleDrag: %j",o),this.props.onDrag(t,o)===!1||this.mounted===!1){try{this.handleDragStop(new MouseEvent("mouseup"))}catch{let s=document.createEvent("MouseEvents");s.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(s)}return}this.lastX=n,this.lastY=r},this.handleDragStop=t=>{if(!this.dragging)return;let e=Vn(t,this.touchIdentifier,this);if(e==null)return;let{x:n,y:r}=e;if(Array.isArray(this.props.grid)){let i=n-this.lastX||0,l=r-this.lastY||0;[i,l]=mo(this.props.grid,i,l),n=this.lastX+i,r=this.lastY+l}let o=Kn(this,n,r);if(this.props.onStop(t,o)===!1||this.mounted===!1)return!1;let s=this.findDOMNode();s&&this.props.enableUserSelectHack&&ho(s.ownerDocument),Yt("DraggableCore: handleDragStop: %j",o),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,s&&(Yt("DraggableCore: Removing handlers"),ye(s.ownerDocument,ie.move,this.handleDrag),ye(s.ownerDocument,ie.stop,this.handleDragStop))},this.onMouseDown=t=>(ie=Bt.mouse,this.handleDragStart(t)),this.onMouseUp=t=>(ie=Bt.mouse,this.handleDragStop(t)),this.onTouchStart=t=>(ie=Bt.touch,this.handleDragStart(t)),this.onTouchEnd=t=>(ie=Bt.touch,this.handleDragStop(t))}componentDidMount(){this.mounted=!0;let t=this.findDOMNode();t&&Un(t,Bt.touch.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;let t=this.findDOMNode();if(t){let{ownerDocument:e}=t;ye(e,Bt.mouse.move,this.handleDrag),ye(e,Bt.touch.move,this.handleDrag),ye(e,Bt.mouse.stop,this.handleDragStop),ye(e,Bt.touch.stop,this.handleDragStop),ye(t,Bt.touch.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&ho(e)}}findDOMNode(){var t;if((t=this.props)!=null&&t.nodeRef)return this.props.nodeRef.current;let e=Te;return typeof e.findDOMNode=="function"?e.findDOMNode(this):(Yt("react-draggable: ReactDOM.findDOMNode is not available in React 19+. You must provide a nodeRef prop. See: https://github.com/react-grid-layout/react-draggable#noderef"),null)}render(){return He(je.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}};Ft.displayName="DraggableCore";Ft.propTypes={allowAnyClick:gt.default.bool,allowMobileScroll:gt.default.bool,children:gt.default.node.isRequired,disabled:gt.default.bool,enableUserSelectHack:gt.default.bool,offsetParent:function(t,e){if(t[e]&&t[e].nodeType!==1)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:gt.default.arrayOf(gt.default.number),handle:gt.default.string,cancel:gt.default.string,nodeRef:gt.default.object,nonce:gt.default.string,onStart:gt.default.func,onDrag:gt.default.func,onStop:gt.default.func,onMouseDown:gt.default.func,scale:gt.default.number,className:Oe,style:Oe,transform:Oe};Ft.defaultProps={allowAnyClick:!1,allowMobileScroll:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1};var fn=class extends Be{constructor(t){super(t),this.onDragStart=(e,n)=>{if(Yt("Draggable: onDragStart: %j",n),this.props.onStart(e,Zn(this,n))===!1)return!1;this.setState({dragging:!0,dragged:!0})},this.onDrag=(e,n)=>{if(!this.state.dragging)return!1;Yt("Draggable: onDrag: %j",n);let r=Zn(this,n),o={x:r.x,y:r.y,slackX:0,slackY:0};if(this.props.bounds){let{x:s,y:i}=o;o.x+=this.state.slackX,o.y+=this.state.slackY;let[l,c]=ja(this,o.x,o.y);o.x=l,o.y=c,o.slackX=this.state.slackX+(s-o.x),o.slackY=this.state.slackY+(i-o.y),r.x=o.x,r.y=o.y,r.deltaX=o.x-this.state.x,r.deltaY=o.y-this.state.y}if(this.props.onDrag(e,r)===!1)return!1;this.setState(o)},this.onDragStop=(e,n)=>{if(!this.state.dragging||this.props.onStop(e,Zn(this,n))===!1)return!1;Yt("Draggable: onDragStop: %j",n);let o={dragging:!1,slackX:0,slackY:0};if(!!this.props.position){let{x:s,y:i}=this.props.position;o.x=s,o.y=i}this.setState(o)},this.state={dragging:!1,dragged:!1,x:t.position?t.position.x:t.defaultPosition.x,y:t.position?t.position.y:t.defaultPosition.y,prevPropsPosition:{...t.position},slackX:0,slackY:0,isElementSVG:!1},t.position&&!(t.onDrag||t.onStop)&&console.warn("A `position` was applied to this <Draggable>, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}static getDerivedStateFromProps({position:t},{prevPropsPosition:e}){return t&&(!e||t.x!==e.x||t.y!==e.y)?(Yt("Draggable: getDerivedStateFromProps %j",{position:t,prevPropsPosition:e}),{x:t.x,y:t.y,prevPropsPosition:{...t}}):null}componentDidMount(){typeof window.SVGElement<"u"&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.state.dragging&&this.setState({dragging:!1})}findDOMNode(){var t;if((t=this.props)!=null&&t.nodeRef)return this.props.nodeRef.current;let e=Te;return typeof e.findDOMNode=="function"?e.findDOMNode(this):null}render(){let{axis:t,bounds:e,children:n,defaultPosition:r,defaultClassName:o,defaultClassNameDragging:a,defaultClassNameDragged:s,position:i,positionOffset:l,scale:c,...p}=this.props,d={},g=null,w=!!!i||this.state.dragging,k=i||r,S={x:Ba(this)&&w?this.state.x:k.x,y:Ha(this)&&w?this.state.y:k.y};this.state.isElementSVG?g=ka(S,l):d=Oa(S,l);let b=je.only(n),K=Xn(b.props.className||"",o,{[a]:this.state.dragging,[s]:this.state.dragged});return Pn(Ft,{...p,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop},He(b,{className:K,style:{...b.props.style,...d},transform:g}))}};fn.displayName="Draggable";fn.propTypes={...Ft.propTypes,axis:G.default.oneOf(["both","x","y","none"]),bounds:G.default.oneOfType([G.default.shape({left:G.default.number,right:G.default.number,top:G.default.number,bottom:G.default.number}),G.default.string,G.default.oneOf([!1])]),defaultClassName:G.default.string,defaultClassNameDragging:G.default.string,defaultClassNameDragged:G.default.string,defaultPosition:G.default.shape({x:G.default.number,y:G.default.number}),positionOffset:G.default.shape({x:G.default.oneOfType([G.default.number,G.default.string]),y:G.default.oneOfType([G.default.number,G.default.string])}),position:G.default.shape({x:G.default.number,y:G.default.number}),className:Oe,style:Oe,transform:Oe};fn.defaultProps={...Ft.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1};var Uo=sn(Yo(),1);var Xo=globalThis.React,rc=Xo.Fragment,ce=(t,e,n)=>Xo.createElement(t,n===void 0?e:{...e,key:n}),$o=ce;var we=sn(no(),1);function vr(t){let{children:e,cols:n,containerWidth:r,margin:o,containerPadding:a,rowHeight:s,maxRows:i,isDraggable:l,isResizable:c,isBounded:p,static:d,useCSSTransforms:g=!0,usePercentages:z=!1,transformScale:w=1,positionStrategy:k,dragThreshold:S=0,droppingPosition:b,className:K="",style:Z,handle:it="",cancel:ut="",x:lt,y:ot,w:nt,h:ct,minW:Rt=1,maxW:At=1/0,minH:C=1,maxH:R=1/0,i:Y,resizeHandles:Ot,resizeHandle:xt,constraints:Et=Tn,layoutItem:ue,layout:de=[],onDragStart:Lt,onDrag:Vt,onDragStop:Kt,onResizeStart:fe,onResize:pe,onResizeStop:he}=t,[f,m]=at(!1),[P,y]=at(!1),x=q(null),D=q({left:0,top:0}),j=q({top:0,left:0,width:0,height:0}),F=q(void 0),A=q(de);A.current=de;let st=q(null),M=q(null),L=q(!1),pt=q({x:0,y:0}),X=q(!1),H=Ct(()=>({cols:n,containerPadding:a,containerWidth:r,margin:o,maxRows:i,rowHeight:s}),[n,a,r,o,i,s]),$=Ct(()=>({cols:n,maxRows:i,containerWidth:r,containerHeight:0,rowHeight:s,margin:o,layout:[]}),[n,i,r,s,o]),ht=U(()=>({...$,layout:A.current}),[$]),_t=Ct(()=>ue??{i:Y,x:lt,y:ot,w:nt,h:ct,minW:Rt,maxW:At,minH:C,maxH:R},[ue,Y,lt,ot,nt,ct,Rt,At,C,R]),Ve=U(_=>{if(k?.calcStyle)return k.calcStyle(_);if(g)return jn(_);let B=Yr(_);return z?{...B,left:Bn(_.left/r),width:Bn(_.width/r)}:B},[k,g,z,r]),Wt=U((_,{node:B})=>{if(!Lt)return;let{offsetParent:rt}=B;if(!rt)return;let W=rt.getBoundingClientRect(),dt=B.getBoundingClientRect(),wt=dt.left/w,Dt=W.left/w,St=dt.top/w,kt=W.top/w,Pt;if(k?.calcDragPosition){let O=_;Pt=k.calcDragPosition(O.clientX,O.clientY,O.clientX-dt.left,O.clientY-dt.top)}else Pt={left:wt-Dt+rt.scrollLeft,top:St-kt+rt.scrollTop};if(D.current=Pt,S>0){let O=_;pt.current={x:O.clientX,y:O.clientY},L.current=!0,X.current=!1,m(!0);return}m(!0);let te=Ie(H,Pt.top,Pt.left),{x:ee,y:h}=Xe(Et,_t,te.x,te.y,ht());Lt(Y,ee,h,{e:_,node:B,newPosition:Pt})},[Lt,w,H,k,S,Et,_t,ht,Y]),Se=U((_,{node:B,deltaX:rt,deltaY:W})=>{if(!Vt||!f)return;let dt=_;if(L.current&&!X.current){let ee=dt.clientX-pt.current.x,h=dt.clientY-pt.current.y;if(Math.hypot(ee,h)<S)return;if(X.current=!0,L.current=!1,Lt){let v=Ie(H,D.current.top,D.current.left),{x:N,y:I}=Xe(Et,_t,v.x,v.y,ht());Lt(Y,N,I,{e:_,node:B,newPosition:D.current})}}let wt=D.current.top+W,Dt=D.current.left+rt;if(p){let{offsetParent:ee}=B;if(ee){let h=ee.clientHeight-jt(ct,s,o[1]);wt=Ae(wt,0,h);let O=oe(H),v=r-jt(nt,O,o[0]);Dt=Ae(Dt,0,v)}}let St={top:wt,left:Dt};D.current=St;let kt=Ie(H,wt,Dt),{x:Pt,y:te}=Xe(Et,_t,kt.x,kt.y,ht());Vt(Y,Pt,te,{e:_,node:B,newPosition:St})},[Vt,Lt,f,S,p,ct,s,o,H,r,nt,Y,Et,_t,ht]),Zt=U((_,{node:B})=>{if(!Kt||!f)return;let rt=L.current;if(L.current=!1,X.current=!1,pt.current={x:0,y:0},rt){m(!1),D.current={left:0,top:0};return}let{left:W,top:dt}=D.current,wt={top:dt,left:W};m(!1),D.current={left:0,top:0};let Dt=Ie(H,dt,W),{x:St,y:kt}=Xe(Et,_t,Dt.x,Dt.y,ht());Kt(Y,St,kt,{e:_,node:B,newPosition:wt})},[Kt,f,H,Et,_t,ht,Y]);st.current=Wt,M.current=Se;let Tt=U((_,{node:B,size:rt,handle:W},dt,wt)=>{let Dt=wt==="onResizeStart"?fe:wt==="onResize"?pe:he;if(!Dt)return;let St;B?St=$r(W,dt,rt,r):St={...rt,top:dt.top,left:dt.left},j.current=St;let kt=Wr(H,St.width,St.height),{w:Pt,h:te}=qr(Et,_t,kt.w,kt.h,W,ht());Dt(Y,Pt,te,{e:_.nativeEvent??_,node:B,size:St,handle:W})},[fe,pe,he,r,H,Y,Et,_t,ht]),xe=U((_,B)=>{y(!0);let rt=We(H,lt,ot,nt,ct),W={...B,handle:B.handle};Tt(_,W,rt,"onResizeStart")},[Tt,H,lt,ot,nt,ct]),De=U((_,B)=>{let rt=We(H,lt,ot,nt,ct),W={...B,handle:B.handle};Tt(_,W,rt,"onResize")},[Tt,H,lt,ot,nt,ct]),Jt=U((_,B)=>{y(!1),j.current={top:0,left:0,width:0,height:0};let rt=We(H,lt,ot,nt,ct),W={...B,handle:B.handle};Tt(_,W,rt,"onResizeStop")},[Tt,H,lt,ot,nt,ct]);qt(()=>{if(!b)return;let _=x.current;if(!_)return;let B=F.current||{left:0,top:0},rt=f&&(b.left!==B.left||b.top!==B.top);if(f){if(rt){let W=b.left-D.current.left,dt=b.top-D.current.top,wt={node:_,deltaX:W,deltaY:dt,lastX:D.current.left,lastY:D.current.top,x:b.left,y:b.top};M.current?.(b.e,wt)}}else{let W={node:_,deltaX:b.left,deltaY:b.top,lastX:0,lastY:0,x:b.left,y:b.top};st.current?.(b.e,W)}F.current=b},[b,f,Y]);let It=We(H,lt,ot,nt,ct,f?D.current:null,P?j.current:null),Ne=u.Children.only(e),Le=oe(H),Ke=[jt(Rt,Le,o[0]),jt(C,s,o[1])],Ze=[jt(At,Le,o[0]),jt(R,s,o[1])],zt=Ne.props,Rn=zt.className,Je=zt.style,Qt=u.cloneElement(Ne,{ref:x,className:$n("react-grid-item",Rn,K,{static:d,resizing:P,"react-draggable":l,"react-draggable-dragging":f,dropping:!!b,cssTransforms:g}),style:{...Z,...Je,...Ve(It)}}),Qe=xt;return Qt=ce(Uo.Resizable,{draggableOpts:{disabled:!c},className:c?void 0:"react-resizable-hide",width:It.width,height:It.height,minConstraints:Ke,maxConstraints:Ze,onResizeStart:xe,onResize:De,onResizeStop:Jt,transformScale:w,resizeHandles:Ot,handle:Qe,children:Qt}),Qt=ce(Ft,{disabled:!l,onStart:Wt,onDrag:Se,onStop:Zt,handle:it,cancel:".react-resizable-handle"+(ut?","+ut:""),scale:w,nodeRef:x,children:Qt}),Qt}var Ut=()=>{},Go="react-grid-layout",Vo=!1;try{Vo=/firefox/i.test(navigator.userAgent)}catch{}function Yi(t,e){let n=u.Children.toArray(t),r=u.Children.toArray(e);if(n.length!==r.length)return!1;for(let o=0;o<n.length;o++){let a=n[o],s=r[o];if(a?.key!==s?.key)return!1}return!0}function Fo(t,e,n,r){let o=[],a=new Set;u.Children.forEach(e,i=>{if(!u.isValidElement(i)||i.key===null)return;let l=String(i.key);a.add(l);let c=t.find(p=>p.i===l);if(c)o.push(Gt(c));else{let d=i.props["data-grid"];d?o.push({i:l,x:d.x??0,y:d.y??0,w:d.w??1,h:d.h??1,minW:d.minW,maxW:d.maxW,minH:d.minH,maxH:d.maxH,static:d.static,isDraggable:d.isDraggable,isResizable:d.isResizable,resizeHandles:d.resizeHandles,isBounded:d.isBounded}):o.push({i:l,x:0,y:qe(o),w:1,h:1})}});let s=_n(o,{cols:n});return r.compact(s,n)}function Ue(t){let{children:e,width:n,gridConfig:r,dragConfig:o,resizeConfig:a,dropConfig:s,positionStrategy:i=Gr,compactor:l,constraints:c=Tn,layout:p=[],droppingItem:d,autoSize:g=!0,className:z="",style:w={},innerRef:k,onLayoutChange:S=Ut,onDragStart:b=Ut,onDrag:K=Ut,onDragStop:Z=Ut,onResizeStart:it=Ut,onResize:ut=Ut,onResizeStop:lt=Ut,onDrop:ot=Ut,onDropDragOver:nt=Ut}=t,ct=Ct(()=>({...Fr,...r}),[r]),Rt=Ct(()=>({...Ur,...o}),[o]),At=Ct(()=>({...Vr,...a}),[a]),C=Ct(()=>({...Kr,...s}),[s]),{cols:R,rowHeight:Y,maxRows:Ot,margin:xt,containerPadding:Et}=ct,{enabled:ue,bounded:de,handle:Lt,cancel:Vt,threshold:Kt}=Rt,{enabled:fe,handles:pe,handleComponent:he}=At,{enabled:f,defaultItem:m,onDragOver:P}=C,y=l??to("vertical"),x=y.type,D=y.allowOverlap,j=y.preventCollision??!1,F=Ct(()=>d??{i:"__dropping-elem__",...m},[d,m]),A=i.type==="transform",st=i.scale,M=Et??xt,[L,pt]=at(!1),[X,H]=at(()=>Fo(p,e,R,y)),[$,ht]=at(null),[_t,Ve]=at(!1),[Wt,Se]=at(null),[Zt,Tt]=at(),xe=q(null),De=q(null),Jt=q(null),It=q(0),Ne=q(X),Le=q(p),Ke=q(e),Ze=q(x),zt=q(X);zt.current=X,qt(()=>{pt(!0),(0,we.deepEqual)(X,p)||S(X)},[]),qt(()=>{if($||Wt)return;let h=!(0,we.deepEqual)(p,Le.current),O=!Yi(e,Ke.current),v=x!==Ze.current;if(h||O||v){let I=Fo(h?p:X,e,R,y);(0,we.deepEqual)(I,X)||H(I)}Le.current=p,Ke.current=e,Ze.current=x},[p,e,R,x,y,$,Wt,X]),qt(()=>{if(!$&&!(0,we.deepEqual)(X,Ne.current)){Ne.current=X;let h=X.filter(O=>O.i!==F.i);S(h)}},[X,$,S,F.i]);let Rn=Ct(()=>{if(!g)return;let h=qe(X),O=M[1];return h*Y+(h-1)*xt[1]+O*2+"px"},[g,X,Y,xt,M]),Je=U((h,O,v,N)=>{let I=zt.current,T=ae(I,h);if(!T)return;let J={w:T.w,h:T.h,x:T.x,y:T.y,i:h};xe.current=Gt(T),Jt.current=I,ht(J),b(I,T,T,null,N.e,N.node)},[b]),Qt=U((h,O,v,N)=>{let I=zt.current,T=xe.current,J=ae(I,h);if(!J)return;let ft={w:J.w,h:J.h,x:J.x,y:J.y,i:h},Q=re(I,J,O,v,!0,j,x,R,D);K(Q,T,J,ft,N.e,N.node),H(y.compact(Q,R)),ht(ft)},[j,x,R,D,y,K]),Qe=U((h,O,v,N)=>{if(!$)return;let I=zt.current,T=xe.current,J=ae(I,h);if(!J)return;let ft=re(I,J,O,v,!0,j,x,R,D),Q=y.compact(ft,R);Z(Q,T,J,null,N.e,N.node);let mt=Jt.current;xe.current=null,Jt.current=null,ht(null),H(Q),mt&&!(0,we.deepEqual)(mt,Q)&&S(Q)},[$,j,x,R,D,y,Z,S]),_=U((h,O,v,N)=>{let I=zt.current,T=ae(I,h);T&&(De.current=Gt(T),Jt.current=I,Ve(!0),it(I,T,T,null,N.e,N.node))},[it]),B=U((h,O,v,N)=>{let I=zt.current,T=De.current,{handle:J}=N,ft=!1,Q,mt,[tn,$t]=Ir(I,h,tt=>(Q=tt.x,mt=tt.y,["sw","w","nw","n","ne"].includes(J)&&(["sw","nw","w"].includes(J)&&(Q=tt.x+(tt.w-O),O=tt.x!==Q&&Q<0?tt.w:O,Q=Q<0?0:Q),["ne","n","nw"].includes(J)&&(mt=tt.y+(tt.h-v),v=tt.y!==mt&&mt<0?tt.h:v,mt=mt<0?0:mt),ft=!0),j&&!D&&Nn(I,{...tt,w:O,h:v,x:Q??tt.x,y:mt??tt.y}).filter(nn=>nn.i!==tt.i).length>0&&(mt=tt.y,v=tt.h,Q=tt.x,O=tt.w,ft=!1),tt.w=O,tt.h=v,tt));if(!$t)return;let _e=tn;ft&&Q!==void 0&&mt!==void 0&&(_e=re(tn,$t,Q,mt,!0,j,x,R,D));let en={w:$t.w,h:$t.h,x:$t.x,y:$t.y,i:h,static:!0};ut(_e,T,$t,en,N.e,N.node),H(y.compact(_e,R)),ht(en)},[j,x,R,D,y,ut]),rt=U((h,O,v,N)=>{let I=zt.current,T=De.current,J=ae(I,h),ft=y.compact(I,R);lt(ft,T,J??null,null,N.e,N.node);let Q=Jt.current;De.current=null,Jt.current=null,ht(null),Ve(!1),H(ft),Q&&!(0,we.deepEqual)(Q,ft)&&S(ft)},[R,y,lt,S]),W=U(()=>{let h=zt.current;if(!h.some(N=>N.i===F.i)){Se(null),ht(null),Tt(void 0);return}let v=y.compact(h.filter(N=>N.i!==F.i),R);H(v),Se(null),ht(null),Tt(void 0)},[F.i,R,y]),dt=U(h=>{if(h.preventDefault(),h.stopPropagation(),Vo&&!h.nativeEvent.target?.classList.contains(Go))return!1;let O=P?P(h.nativeEvent):nt(h);if(O===!1)return Wt&&W(),!1;let{dragOffsetX:v=0,dragOffsetY:N=0,...I}=O??{},T={...F,...I},J=h.currentTarget.getBoundingClientRect(),ft={cols:R,margin:xt,maxRows:Ot,rowHeight:Y,containerWidth:n,containerPadding:M},Q=oe(ft),mt=jt(T.w,Q,xt[0]),tn=jt(T.h,Y,xt[1]),$t=mt/2,_e=tn/2,en=h.clientX-J.left+v-$t,tt=h.clientY-J.top+N-_e,En=Math.max(0,en),nn=Math.max(0,tt),rn={left:En/st,top:nn/st,e:h.nativeEvent};if(Wt)Zt&&(Zt.left!==rn.left||Zt.top!==rn.top)&&Tt(rn);else{let zn=Ar(ft,nn,En,T.w,T.h);Se(ce("div",{},T.i)),Tt(rn);let is=zt.current.filter(ls=>ls.i!==T.i);H([...is,{...T,x:zn.x,y:zn.y,static:!1,isDraggable:!0}])}},[Wt,Zt,F,P,nt,W,st,R,xt,Ot,Y,n,M]),wt=U(h=>{h.preventDefault(),h.stopPropagation(),It.current--,It.current<0&&(It.current=0),It.current===0&&W()},[W]),Dt=U(h=>{h.preventDefault(),h.stopPropagation(),It.current++},[]),St=U(h=>{h.preventDefault(),h.stopPropagation();let O=zt.current,v=O.find(N=>N.i===F.i);It.current=0,W(),ot(O,v,h.nativeEvent)},[F.i,W,ot]),kt=U((h,O)=>{if(!h||!h.key)return null;let v=ae(X,String(h.key));if(!v)return null;let N=typeof v.isDraggable=="boolean"?v.isDraggable:!v.static&&ue,I=typeof v.isResizable=="boolean"?v.isResizable:!v.static&&fe,T=v.resizeHandles||[...pe],J=N&&de&&v.isBounded!==!1,ft=he;return ce(vr,{containerWidth:n,cols:R,margin:xt,containerPadding:M,maxRows:Ot,rowHeight:Y,cancel:Vt,handle:Lt,onDragStart:Je,onDrag:Qt,onDragStop:Qe,onResizeStart:_,onResize:B,onResizeStop:rt,isDraggable:N,isResizable:I,isBounded:J,useCSSTransforms:A&&L,usePercentages:!L,transformScale:st,positionStrategy:i,dragThreshold:Kt,w:v.w,h:v.h,x:v.x,y:v.y,i:v.i,minH:v.minH,minW:v.minW,maxH:v.maxH,maxW:v.maxW,static:v.static,droppingPosition:O?Zt:void 0,resizeHandles:T,resizeHandle:ft,constraints:c,layoutItem:v,layout:X,children:h},v.i)},[X,n,R,xt,M,Ot,Y,Vt,Lt,Je,Qt,Qe,_,B,rt,ue,fe,de,A,L,st,i,Kt,Zt,pe,he,c]),Pt=()=>$?ce(vr,{w:$.w,h:$.h,x:$.x,y:$.y,i:$.i,className:`react-grid-placeholder ${_t?"placeholder-resizing":""}`,containerWidth:n,cols:R,margin:xt,containerPadding:M,maxRows:Ot,rowHeight:Y,isDraggable:!1,isResizable:!1,isBounded:!1,useCSSTransforms:A,transformScale:st,constraints:c,layout:X,children:ce("div",{})}):null,te=$n(Go,z),ee={height:Rn,...w};return $o("div",{ref:k,className:te,style:ee,onDrop:f?St:void 0,onDragLeave:f?wt:void 0,onDragEnter:f?Dt:void 0,onDragOver:f?dt:void 0,children:[u.Children.map(e,h=>u.isValidElement(h)?kt(h):null),f&&Wt&&kt(Wt,!0),Pt()]})}et();var Nt=(...t)=>t.filter(Boolean).join(" ");var $i=({type:t="info",title:e,message:n,onDismiss:r,className:o})=>u.createElement("div",{className:Nt("ks-alert",`ks-alert-${t}`,o),role:"alert"},u.createElement("div",{className:"ks-alert-body"},u.createElement("div",{className:"ks-alert-content"},e&&u.createElement("p",{className:"ks-alert-title"},e),u.createElement("p",{className:e?"ks-alert-message-titled":"ks-alert-message"},n)),r&&u.createElement("button",{type:"button",className:"ks-alert-dismiss","aria-label":"Dismiss",onClick:r},"\xD7"))),Ko=$i;et();var Gi={primary:"ks-button-primary",secondary:"ks-button-secondary",danger:"ks-button-danger"},Fi={sm:"ks-button-sm",md:"ks-button-md",lg:"ks-button-lg"},Ui=({variant:t="primary",size:e="md",className:n,children:r,...o})=>{let a=o.href?"a":"button";return u.createElement(a,{...o,className:Nt("ks-button",Gi[t],Fi[e],n)},r)},wr=Ui;et();var Vi=({as:t="input",disabled:e,className:n,...r})=>u.createElement(t,{...r,disabled:e,className:Nt("ks-input",e&&"ks-input-disabled",n)}),Sr=Vi;et();var Dn=(t,e)=>({className:n,children:r,...o})=>u.createElement(t,{...o,className:Nt(e,n)},r),xr=Dn("label","ks-label"),Tc=Dn("p","ks-hint"),jc=Dn("p","ks-error"),Bc=Dn("span","ks-required");et();var Ki=({as:t="div",className:e,children:n,...r})=>u.createElement(t,{...r,className:Nt("ks-panel",e)},n),Zo=Ki;et();var Zi=({title:t,subtitle:e,action:n,spacing:r="md",className:o,children:a})=>u.createElement("div",{className:Nt(`ks-section-${r}`,o)},t&&u.createElement("div",{className:"ks-section-header"},u.createElement("div",null,u.createElement("h2",{className:"ks-section-title"},t),e&&u.createElement("p",{className:"ks-section-subtitle"},e)),n&&u.createElement("a",{href:n.href,className:"ks-section-action"},n.label)),a),Jo=Zi;et();var Ji="Your change was not saved because the server could not be reached.",Qo=({base:t,token:e,fetch:n,version:r,layout:o,onLayout:a,onError:s})=>{let i=r??o?.version,l=o,c=Promise.resolve(),p=async(d,g,z)=>{let w=await n(t+d,{method:g,headers:{"Content-Type":"application/json","X-CSRF-Token":e},body:z&&JSON.stringify({...z,version:i})}).catch(()=>null);if(!w)return s(Ji),l&&a({...l});let k=await w.json().catch(()=>({}));s(w.ok?null:k.error);let S=await(await n(t+"/layout",{headers:{Accept:"application/json"}})).json();i=S.version,l=S,a(S)};return(d,g,z)=>c=c.then(()=>p(d,g,z))};var Qi=(t,e,n)=>{let[r,o]=at(n),[a,s]=at(null),i=Ct(()=>Qo({base:t,token:e,fetch:(...l)=>window.fetch(...l),layout:n,onLayout:o,onError:s}),[t,e]);return{layout:r,error:a,send:i}},ts=Qi;var es=(t,e)=>t("/blocks","POST",{type:e}),ns=(t,e,{x:n,y:r})=>t("/blocks","POST",{type:e,x:n,y:r}),Dr=(t,e)=>t("/blocks","PATCH",{layout:e.map(({i:n,x:r,y:o,w:a,h:s})=>({id:n,x:r,y:o,w:a,h:s}))}),rs=(t,e,n)=>t(`/blocks/${e}`,"PATCH",{content:n}),os=(t,e)=>t(`/blocks/${e}`,"DELETE"),ss=(t,e)=>t.map(({id:n,x:r,y:o,w:a,h:s,type:i})=>{let l=e.find(d=>d.key===i)??{},c={minW:l.min_width,maxW:l.max_width,minH:l.min_height,maxH:l.max_height},p=Object.fromEntries(Object.entries(c).filter(([,d])=>d!=null));return{i:n,x:r,y:o,w:a,h:s,...p,...l.resizable===!1&&{isResizable:!1},...l.fixed&&{isDraggable:!1}}});var tl={columns:12,row_height:60,gap:10},el=["e","s","se"],Cn=(t,e)=>t.find(n=>n.key===e),nl=(t,e)=>Cn(t,e)?.name??`Unknown block type (${e})`,rl=(t,e)=>t.filter(n=>n.name.toLowerCase().includes(e.trim().toLowerCase())),ol=t=>t.reduce((e,n)=>{let r=n.group??"";return(e.find(a=>a.name===r)??e[e.push({name:r,types:[]})-1]).types.push(n),e},[]),sl=(t,e)=>{let n=document.createElement("div");return n.dataset.blockContent=t,n.innerHTML=e,n},al=({id:t,name:e,html:n})=>{let r=q(null),[o,a]=at(!1);return qt(()=>{let s=document.querySelector(`[data-block-content="${t}"]`)??(n?sl(t,n):null);s&&s.parentElement!==r.current&&r.current.appendChild(s),a(!!s)},[t,n]),u.createElement(u.Fragment,null,o?null:e,u.createElement("div",{ref:r,className:"grow"}))},as=(t,e)=>t.once&&e.some(n=>n.type===t.key);function Cr({base:t,token:e,emptyMessage:n,...r}){let{layout:o,error:a,send:s}=ts(t,e,r),{block_types:i=[],blocks:l=[],grid:c={},contents:p={}}=o,{columns:d,row_height:g,gap:z}={...tl,...c},{width:w,containerRef:k,mounted:S}=Yn({measureBeforeMount:!0}),b=ss(l,i),K=q(null),[Z,it]=at(""),[ut,lt]=at(null),ot=l.find(C=>C.id===ut),nt=Cn(i,ot?.type)?.fields??[],ct=C=>R=>{K.current=C,R.dataTransfer.setData("text/plain",C.key)},Rt={enabled:!0,onDragOver:()=>K.current?{w:K.current.width,h:K.current.height}:!1},At=(C,R)=>{K.current&&ns(s,K.current.key,R),K.current=null};return u.createElement("div",{className:"lg:grid lg:grid-cols-[16rem_minmax(0,1fr)] lg:gap-6"},u.createElement(Jo,{title:"Blocks",spacing:"sm"},u.createElement(xr,{htmlFor:"ks-blocks-search"},"Search blocks"),u.createElement(Sr,{id:"ks-blocks-search",type:"search",value:Z,onChange:C=>it(C.target.value),className:"mb-2"}),i.length===0?u.createElement("p",null,"There are no blocks to add."):ol(rl(i,Z)).map(C=>u.createElement(u.Fragment,{key:C.name},C.name&&u.createElement("h3",{className:"ks-section-title"},C.name),u.createElement("ul",null,C.types.map(R=>u.createElement("li",{key:R.key,"data-block-type":R.key,className:"flex items-center justify-between gap-2 py-1",draggable:"true",onDragStart:ct(R)},u.createElement("span",null,R.name,R.description&&u.createElement("span",{className:"ks-section-subtitle block"},R.description)),u.createElement(wr,{variant:"secondary",size:"sm",type:"button",disabled:as(R,l),onClick:()=>es(s,R.key)},as(R,l)?"Added":"Add"))))))),u.createElement(Zo,{"data-block-grid-panel":!0},a&&u.createElement(Ko,{type:"error",message:a,className:"mb-3"}),l.length===0&&u.createElement("p",null,n),nt.length>0&&u.createElement("div",{"data-block-fields":!0,className:"mb-3"},nt.map(C=>u.createElement("div",{key:C.key,className:"mb-2"},u.createElement(xr,{htmlFor:`ks-block-field-${C.key}`},C.label),u.createElement(Sr,{key:`${ut}-${C.key}`,id:`ks-block-field-${C.key}`,type:"text",defaultValue:ot.content?.[C.key]??"",onBlur:R=>rs(s,ut,{...ot.content,[C.key]:R.target.value})})))),u.createElement("div",{ref:k,"data-block-grid":!0,style:{overflow:"hidden",visibility:S?"visible":"hidden"}},u.createElement(Ue,{width:w,layout:b,gridConfig:{cols:d,rowHeight:g,margin:[z,z]},resizeConfig:{enabled:!0,handles:el},dragConfig:{handle:"[data-block-handle]",cancel:"[data-remove-block]"},dropConfig:Rt,onDrop:At,onDragStop:C=>Dr(s,C),onResizeStop:C=>Dr(s,C)},l.map(C=>u.createElement("div",{key:C.id,"data-block":C.id,onClick:()=>lt(C.id),className:"ks-panel p-3 flex items-start justify-between gap-2"},!Cn(i,C.type)?.fixed&&u.createElement("span",{"data-block-handle":!0,className:"ks-block-handle","aria-hidden":"true"},"\u283F"),u.createElement(al,{id:C.id,name:nl(i,C.type),html:p[C.id]}),!Cn(i,C.type)?.fixed&&u.createElement(wr,{variant:"secondary",size:"sm",type:"button","data-remove-block":!0,onClick:()=>os(s,C.id)},"Remove")))))))}function Rr({base:t,token:e,name:n,pages:r,block_types:o,blocks:a,version:s}){return u.createElement(jr,null,u.createElement("div",{className:"sm:hidden mb-4 flex items-center justify-between gap-3"},u.createElement("h1",{className:"ks-page-header-title"},n),u.createElement(Mn,{href:r,size:"sm"},"All pages")),u.createElement(Br,{title:n,actions:u.createElement(Mn,{href:r,"data-all-pages":!0},"All pages")}),u.createElement(Cr,{base:t,token:e,block_types:o,blocks:a,version:s,emptyMessage:"This page has no blocks yet."}))}Nr("alembic/page-builder",Rr);Tr(document,On);})();
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,32 @@
1
+ module Alembic
2
+ class ApplicationController < Alembic.base_controller.constantize
3
+ layout -> { Alembic.layout }
4
+ helper KeystoneUiHelper
5
+
6
+ rescue_from NotPublished, NotPermitted, Withdrawn, with: :refuse
7
+
8
+ helper_method :flow_start_path
9
+
10
+ private
11
+
12
+ def flow_start_path(slug)
13
+ alembic.flow_path(slug)
14
+ end
15
+
16
+ def admit(diagnostic)
17
+ Flow::Admission.of(diagnostic, permitted: permitted?(diagnostic))
18
+ end
19
+
20
+ def permitted?(diagnostic)
21
+ return false unless Alembic.visitor_authorization_method
22
+
23
+ send(Alembic.visitor_authorization_method, diagnostic)
24
+ end
25
+
26
+ def refuse(refusal)
27
+ return head :not_found unless Alembic.refusal_method
28
+
29
+ send(Alembic.refusal_method, refusal)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,104 @@
1
+ module Alembic
2
+ class FlowsController < ApplicationController
3
+ helper_method :flow_start_path, :flow_step_path, :previewing?, :step_form, :carries_answers?
4
+
5
+ def show
6
+ @diagnostic = flow
7
+ end
8
+
9
+ def start
10
+ redirect_to alembic.run_path(Flow::Run.start(flow))
11
+ end
12
+
13
+ def step
14
+ @guide = Runner.new(running_definition)
15
+ @progress = progress
16
+ @guide.run(@progress)
17
+ @answers = @progress.recorded
18
+ @question = @guide.next_step(@answers)
19
+ @drawing = @guide.drawing_at(@answers)
20
+ return render :step if @question
21
+
22
+ render_completion
23
+ end
24
+
25
+ def update
26
+ params[:back] ? progress.discard_last : record_submitted
27
+ redirect_to alembic.run_path(run)
28
+ end
29
+
30
+ private
31
+
32
+ def flow_start_path(slug)
33
+ alembic.flow_path(slug)
34
+ end
35
+
36
+ def flow_step_path(slug)
37
+ alembic.flow_step_path(slug)
38
+ end
39
+
40
+ def previewing?
41
+ false
42
+ end
43
+
44
+ def step_form
45
+ return { url: alembic.run_path(run), method: :patch } if run
46
+
47
+ { url: flow_step_path(@guide.slug), method: :get }
48
+ end
49
+
50
+ def carries_answers?
51
+ run.nil?
52
+ end
53
+
54
+ def render_completion
55
+ @answered = @guide.state_on_path(@answers)
56
+ @progress.finish(@answered)
57
+ @outputs = @progress.summary_of(@answered.transform_keys(&:to_s))
58
+ render :complete
59
+ end
60
+
61
+ def progress
62
+ return @progress ||= Flow::Progress.for(run.flow, run: run) if run
63
+
64
+ @progress ||= Flow::Progress.for(flow, answers: submitted_answers, definition: running_definition)
65
+ end
66
+
67
+ def running_definition
68
+ @running_definition ||= run ? run.pinned_definition : flowing_definition(flow)
69
+ end
70
+
71
+ def run
72
+ return unless params[:id]
73
+
74
+ @run ||= admitted_run
75
+ end
76
+
77
+ def admitted_run
78
+ found = Flow::Run.find(params[:id])
79
+
80
+ Flow::Admission.of_run(found, permitted: permitted?(found.flow))
81
+ end
82
+
83
+ def flow
84
+ @stored_flow ||= admit(Flow::Definition.find_by(slug: params[:slug]))
85
+ end
86
+
87
+ def flowing_definition(diagnostic)
88
+ diagnostic.live_definition
89
+ end
90
+
91
+ def submitted_answers
92
+ params.fetch(:answers, {}).permit(*@guide.steps.map(&:id)).to_h.symbolize_keys
93
+ end
94
+
95
+ def record_submitted
96
+ id, value = params.fetch(:answers, {}).permit(*asked).to_h.first
97
+ progress.record(id, value)
98
+ end
99
+
100
+ def asked
101
+ Runner.new(run.pinned_definition).steps.map(&:id)
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,16 @@
1
+ require "keystone_ui/react/mount_helper"
2
+ require "ks_blocks/content_helper"
3
+
4
+ module Alembic
5
+ module Manage
6
+ class BaseController < Alembic.base_controller.constantize
7
+ include AuthenticatesAdmin
8
+
9
+ layout -> { Alembic.admin_layout }
10
+
11
+ helper KeystoneUiHelper
12
+ helper KeystoneUi::React::MountHelper
13
+ helper KsBlocks::ContentHelper
14
+ end
15
+ end
16
+ end