@walkeros/explorer 1.0.1 → 2.0.1

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 (154) hide show
  1. package/LICENSE +2 -2
  2. package/dist/{chunk-VWWAIDNX.mjs → chunk-YKT4D7MG.mjs} +201 -53
  3. package/dist/chunk-YKT4D7MG.mjs.map +1 -0
  4. package/dist/components/atoms/alert.d.ts +29 -0
  5. package/dist/components/atoms/alert.d.ts.map +1 -0
  6. package/dist/components/atoms/alert.js +19 -0
  7. package/dist/components/atoms/alert.js.map +1 -0
  8. package/dist/components/atoms/alert.stories.d.ts +7 -0
  9. package/dist/components/atoms/alert.stories.d.ts.map +1 -0
  10. package/dist/components/atoms/alert.stories.js +14 -0
  11. package/dist/components/atoms/alert.stories.js.map +1 -0
  12. package/dist/components/atoms/button.stories.d.ts +14 -0
  13. package/dist/components/atoms/button.stories.d.ts.map +1 -0
  14. package/dist/components/atoms/button.stories.js +25 -0
  15. package/dist/components/atoms/button.stories.js.map +1 -0
  16. package/dist/components/atoms/code.d.ts.map +1 -1
  17. package/dist/components/atoms/code.js +14 -2
  18. package/dist/components/atoms/code.js.map +1 -1
  19. package/dist/components/atoms/footer.stories.d.ts +14 -0
  20. package/dist/components/atoms/footer.stories.d.ts.map +1 -0
  21. package/dist/components/atoms/footer.stories.js +29 -0
  22. package/dist/components/atoms/footer.stories.js.map +1 -0
  23. package/dist/components/atoms/form-field.d.ts +28 -0
  24. package/dist/components/atoms/form-field.d.ts.map +1 -0
  25. package/dist/components/atoms/form-field.js +16 -0
  26. package/dist/components/atoms/form-field.js.map +1 -0
  27. package/dist/components/atoms/form-field.stories.d.ts +7 -0
  28. package/dist/components/atoms/form-field.stories.d.ts.map +1 -0
  29. package/dist/components/atoms/form-field.stories.js +16 -0
  30. package/dist/components/atoms/form-field.stories.js.map +1 -0
  31. package/dist/components/atoms/form-input.d.ts +43 -0
  32. package/dist/components/atoms/form-input.d.ts.map +1 -0
  33. package/dist/components/atoms/form-input.js +26 -0
  34. package/dist/components/atoms/form-input.js.map +1 -0
  35. package/dist/components/atoms/form-input.stories.d.ts +7 -0
  36. package/dist/components/atoms/form-input.stories.d.ts.map +1 -0
  37. package/dist/components/atoms/form-input.stories.js +17 -0
  38. package/dist/components/atoms/form-input.stories.js.map +1 -0
  39. package/dist/components/atoms/form-textarea.d.ts +41 -0
  40. package/dist/components/atoms/form-textarea.d.ts.map +1 -0
  41. package/dist/components/atoms/form-textarea.js +26 -0
  42. package/dist/components/atoms/form-textarea.js.map +1 -0
  43. package/dist/components/atoms/form-textarea.stories.d.ts +7 -0
  44. package/dist/components/atoms/form-textarea.stories.d.ts.map +1 -0
  45. package/dist/components/atoms/form-textarea.stories.js +17 -0
  46. package/dist/components/atoms/form-textarea.stories.js.map +1 -0
  47. package/dist/components/atoms/grid.stories.d.ts +18 -0
  48. package/dist/components/atoms/grid.stories.d.ts.map +1 -0
  49. package/dist/components/atoms/grid.stories.js +60 -0
  50. package/dist/components/atoms/grid.stories.js.map +1 -0
  51. package/dist/components/atoms/header.stories.d.ts +15 -0
  52. package/dist/components/atoms/header.stories.d.ts.map +1 -0
  53. package/dist/components/atoms/header.stories.js +37 -0
  54. package/dist/components/atoms/header.stories.js.map +1 -0
  55. package/dist/components/atoms/icons/icon.stories.d.ts +18 -0
  56. package/dist/components/atoms/icons/icon.stories.d.ts.map +1 -0
  57. package/dist/components/atoms/icons/icon.stories.js +37 -0
  58. package/dist/components/atoms/icons/icon.stories.js.map +1 -0
  59. package/dist/components/atoms/panel-hints.stories.d.ts +14 -0
  60. package/dist/components/atoms/panel-hints.stories.d.ts.map +1 -0
  61. package/dist/components/atoms/panel-hints.stories.js +35 -0
  62. package/dist/components/atoms/panel-hints.stories.js.map +1 -0
  63. package/dist/components/atoms/spinner.d.ts +17 -0
  64. package/dist/components/atoms/spinner.d.ts.map +1 -0
  65. package/dist/components/atoms/spinner.js +14 -0
  66. package/dist/components/atoms/spinner.js.map +1 -0
  67. package/dist/components/atoms/spinner.stories.d.ts +7 -0
  68. package/dist/components/atoms/spinner.stories.d.ts.map +1 -0
  69. package/dist/components/atoms/spinner.stories.js +9 -0
  70. package/dist/components/atoms/spinner.stories.js.map +1 -0
  71. package/dist/components/atoms/submit-button.d.ts +34 -0
  72. package/dist/components/atoms/submit-button.d.ts.map +1 -0
  73. package/dist/components/atoms/submit-button.js +18 -0
  74. package/dist/components/atoms/submit-button.js.map +1 -0
  75. package/dist/components/atoms/submit-button.stories.d.ts +7 -0
  76. package/dist/components/atoms/submit-button.stories.d.ts.map +1 -0
  77. package/dist/components/atoms/submit-button.stories.js +13 -0
  78. package/dist/components/atoms/submit-button.stories.js.map +1 -0
  79. package/dist/components/molecules/architecture-flow/ArchitectureFlow.stories.js +1 -1
  80. package/dist/components/molecules/architecture-flow/ArchitectureFlow.stories.js.map +1 -1
  81. package/dist/components/molecules/code-box.stories.d.ts +8 -0
  82. package/dist/components/molecules/code-box.stories.d.ts.map +1 -1
  83. package/dist/components/molecules/code-box.stories.js +36 -0
  84. package/dist/components/molecules/code-box.stories.js.map +1 -1
  85. package/dist/components/molecules/config-form-card.d.ts +50 -0
  86. package/dist/components/molecules/config-form-card.d.ts.map +1 -0
  87. package/dist/components/molecules/config-form-card.js +30 -0
  88. package/dist/components/molecules/config-form-card.js.map +1 -0
  89. package/dist/components/molecules/config-form-card.stories.d.ts +7 -0
  90. package/dist/components/molecules/config-form-card.stories.d.ts.map +1 -0
  91. package/dist/components/molecules/config-form-card.stories.js +21 -0
  92. package/dist/components/molecules/config-form-card.stories.js.map +1 -0
  93. package/dist/components/molecules/dropdown.d.ts +68 -0
  94. package/dist/components/molecules/dropdown.d.ts.map +1 -0
  95. package/dist/components/molecules/dropdown.js +47 -0
  96. package/dist/components/molecules/dropdown.js.map +1 -0
  97. package/dist/components/molecules/dropdown.stories.d.ts +7 -0
  98. package/dist/components/molecules/dropdown.stories.d.ts.map +1 -0
  99. package/dist/components/molecules/dropdown.stories.js +18 -0
  100. package/dist/components/molecules/dropdown.stories.js.map +1 -0
  101. package/dist/components/molecules/flow-deploy-panel.d.ts +31 -0
  102. package/dist/components/molecules/flow-deploy-panel.d.ts.map +1 -0
  103. package/dist/components/molecules/flow-deploy-panel.js +72 -0
  104. package/dist/components/molecules/flow-deploy-panel.js.map +1 -0
  105. package/dist/components/molecules/flow-deploy-panel.stories.d.ts +40 -0
  106. package/dist/components/molecules/flow-deploy-panel.stories.d.ts.map +1 -0
  107. package/dist/components/molecules/flow-deploy-panel.stories.js +145 -0
  108. package/dist/components/molecules/flow-deploy-panel.stories.js.map +1 -0
  109. package/dist/components/molecules/flow-map/FlowMap.stories.d.ts.map +1 -1
  110. package/dist/components/molecules/flow-map/FlowMap.stories.js +7 -1
  111. package/dist/components/molecules/flow-map/FlowMap.stories.js.map +1 -1
  112. package/dist/components/molecules/flow-selector.d.ts +19 -0
  113. package/dist/components/molecules/flow-selector.d.ts.map +1 -0
  114. package/dist/components/molecules/flow-selector.js +26 -0
  115. package/dist/components/molecules/flow-selector.js.map +1 -0
  116. package/dist/components/molecules/flow-selector.stories.d.ts +28 -0
  117. package/dist/components/molecules/flow-selector.stories.d.ts.map +1 -0
  118. package/dist/components/molecules/flow-selector.stories.js +66 -0
  119. package/dist/components/molecules/flow-selector.stories.js.map +1 -0
  120. package/dist/components/molecules/form-card.d.ts +28 -0
  121. package/dist/components/molecules/form-card.d.ts.map +1 -0
  122. package/dist/components/molecules/form-card.js +16 -0
  123. package/dist/components/molecules/form-card.js.map +1 -0
  124. package/dist/components/molecules/form-card.stories.d.ts +7 -0
  125. package/dist/components/molecules/form-card.stories.d.ts.map +1 -0
  126. package/dist/components/molecules/form-card.stories.js +16 -0
  127. package/dist/components/molecules/form-card.stories.js.map +1 -0
  128. package/dist/components/molecules/preview.d.ts.map +1 -1
  129. package/dist/components/molecules/preview.js +0 -1
  130. package/dist/components/molecules/preview.js.map +1 -1
  131. package/dist/components/molecules/split-button.d.ts +25 -0
  132. package/dist/components/molecules/split-button.d.ts.map +1 -0
  133. package/dist/components/molecules/split-button.js +37 -0
  134. package/dist/components/molecules/split-button.js.map +1 -0
  135. package/dist/components/molecules/split-button.stories.d.ts +32 -0
  136. package/dist/components/molecules/split-button.stories.d.ts.map +1 -0
  137. package/dist/components/molecules/split-button.stories.js +88 -0
  138. package/dist/components/molecules/split-button.stories.js.map +1 -0
  139. package/dist/hooks/useDropdown.d.ts +34 -0
  140. package/dist/hooks/useDropdown.d.ts.map +1 -0
  141. package/dist/hooks/useDropdown.js +66 -0
  142. package/dist/hooks/useDropdown.js.map +1 -0
  143. package/dist/index.d.cts +441 -2
  144. package/dist/index.d.ts +26 -0
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +14 -0
  147. package/dist/index.js.map +1 -1
  148. package/dist/index.mjs +663 -28
  149. package/dist/index.mjs.map +1 -1
  150. package/dist/{monaco-types-4FIH5OVX.mjs → monaco-types-OLSF6MIE.mjs} +2 -2
  151. package/dist/styles.css +579 -0
  152. package/package.json +5 -14
  153. package/dist/chunk-VWWAIDNX.mjs.map +0 -1
  154. /package/dist/{monaco-types-4FIH5OVX.mjs.map → monaco-types-OLSF6MIE.mjs.map} +0 -0
package/dist/index.mjs CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  loadPackageTypes,
6
6
  loadTypeLibraryFromURL,
7
7
  registerWalkerOSTypes
8
- } from "./chunk-VWWAIDNX.mjs";
8
+ } from "./chunk-YKT4D7MG.mjs";
9
9
 
10
10
  // src/components/demos/MappingDemo.tsx
11
11
  import { useState as useState6, useCallback as useCallback5, useEffect as useEffect4 } from "react";
@@ -851,6 +851,7 @@ function Code({
851
851
  sticky = true,
852
852
  ide = false
853
853
  }) {
854
+ const [isMounted, setIsMounted] = useState3(false);
854
855
  const [monacoTheme, setMonacoTheme] = useState3("vs-light");
855
856
  const decorationsCleanupRef = useRef3(null);
856
857
  const monacoRef = useRef3(null);
@@ -888,6 +889,7 @@ function Code({
888
889
  registerDataElbStyles();
889
890
  }, []);
890
891
  const getDataTheme = useCallback2(() => {
892
+ if (typeof document === "undefined") return null;
891
893
  if (containerRef.current) {
892
894
  const closest = containerRef.current.closest("[data-theme]");
893
895
  if (closest) {
@@ -897,6 +899,10 @@ function Code({
897
899
  return document.documentElement.getAttribute("data-theme");
898
900
  }, []);
899
901
  useEffect2(() => {
902
+ setIsMounted(true);
903
+ }, []);
904
+ useEffect2(() => {
905
+ if (!isMounted) return;
900
906
  const checkTheme = () => {
901
907
  const dataTheme = getDataTheme();
902
908
  const isDark = dataTheme === "dark" || dataTheme === null && window.matchMedia("(prefers-color-scheme: dark)").matches;
@@ -920,7 +926,7 @@ function Code({
920
926
  observer.disconnect();
921
927
  mediaQuery.removeEventListener("change", handleChange2);
922
928
  };
923
- }, [getDataTheme]);
929
+ }, [isMounted, getDataTheme]);
924
930
  useEffect2(() => {
925
931
  const editor = editorRef.current;
926
932
  const container = containerRef.current;
@@ -950,7 +956,7 @@ function Code({
950
956
  registerFormatters(monaco);
951
957
  if (packages && packages.length > 0) {
952
958
  registerWalkerOSTypes(monaco);
953
- const { loadPackageTypes: loadPackageTypes2 } = await import("./monaco-types-4FIH5OVX.mjs");
959
+ const { loadPackageTypes: loadPackageTypes2 } = await import("./monaco-types-OLSF6MIE.mjs");
954
960
  for (const pkg of packages) {
955
961
  if (pkg !== "@walkeros/core") {
956
962
  await loadPackageTypes2(monaco, { package: pkg }).catch(() => {
@@ -1936,7 +1942,6 @@ function Preview({
1936
1942
  config: {
1937
1943
  settings: {
1938
1944
  pageview: false,
1939
- session: false,
1940
1945
  prefix: "data-elb",
1941
1946
  elb: "elb",
1942
1947
  elbLayer: "elbLayer",
@@ -12547,6 +12552,8 @@ var isArbitrarySize = (value) => getIsArbitraryValue(value, isLabelSize, isNever
12547
12552
  var isArbitraryValue = (value) => arbitraryValueRegex.test(value);
12548
12553
  var isArbitraryLength = (value) => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
12549
12554
  var isArbitraryNumber = (value) => getIsArbitraryValue(value, isLabelNumber, isNumber);
12555
+ var isArbitraryWeight = (value) => getIsArbitraryValue(value, isLabelWeight, isAny);
12556
+ var isArbitraryFamilyName = (value) => getIsArbitraryValue(value, isLabelFamilyName, isNever);
12550
12557
  var isArbitraryPosition = (value) => getIsArbitraryValue(value, isLabelPosition, isNever);
12551
12558
  var isArbitraryImage = (value) => getIsArbitraryValue(value, isLabelImage, isImage);
12552
12559
  var isArbitraryShadow = (value) => getIsArbitraryValue(value, isLabelShadow, isShadow);
@@ -12557,6 +12564,7 @@ var isArbitraryVariablePosition = (value) => getIsArbitraryVariable(value, isLab
12557
12564
  var isArbitraryVariableSize = (value) => getIsArbitraryVariable(value, isLabelSize);
12558
12565
  var isArbitraryVariableImage = (value) => getIsArbitraryVariable(value, isLabelImage);
12559
12566
  var isArbitraryVariableShadow = (value) => getIsArbitraryVariable(value, isLabelShadow, true);
12567
+ var isArbitraryVariableWeight = (value) => getIsArbitraryVariable(value, isLabelWeight, true);
12560
12568
  var getIsArbitraryValue = (value, testLabel, testValue) => {
12561
12569
  const result = arbitraryValueRegex.exec(value);
12562
12570
  if (result) {
@@ -12583,6 +12591,7 @@ var isLabelSize = (label) => label === "length" || label === "size" || label ===
12583
12591
  var isLabelLength = (label) => label === "length";
12584
12592
  var isLabelNumber = (label) => label === "number";
12585
12593
  var isLabelFamilyName = (label) => label === "family-name";
12594
+ var isLabelWeight = (label) => label === "number" || label === "weight";
12586
12595
  var isLabelShadow = (label) => label === "shadow";
12587
12596
  var getDefaultConfig = () => {
12588
12597
  const themeColor = fromTheme("color");
@@ -13384,7 +13393,7 @@ var getDefaultConfig = () => {
13384
13393
  * @see https://tailwindcss.com/docs/font-weight
13385
13394
  */
13386
13395
  "font-weight": [{
13387
- font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]
13396
+ font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]
13388
13397
  }],
13389
13398
  /**
13390
13399
  * Font Stretch
@@ -13398,7 +13407,7 @@ var getDefaultConfig = () => {
13398
13407
  * @see https://tailwindcss.com/docs/font-family
13399
13408
  */
13400
13409
  "font-family": [{
13401
- font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]
13410
+ font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]
13402
13411
  }],
13403
13412
  /**
13404
13413
  * Font Variant Numeric
@@ -16601,6 +16610,525 @@ function PropertyTable({ schema, className }) {
16601
16610
  ] });
16602
16611
  }
16603
16612
 
16613
+ // src/components/molecules/form-card.tsx
16614
+ import { jsx as jsx92, jsxs as jsxs69 } from "react/jsx-runtime";
16615
+ function FormCard({
16616
+ children,
16617
+ title,
16618
+ subtitle,
16619
+ footer,
16620
+ maxWidth = "md",
16621
+ className = ""
16622
+ }) {
16623
+ return /* @__PURE__ */ jsxs69(
16624
+ "div",
16625
+ {
16626
+ className: `elb-form-card elb-form-card--${maxWidth} ${className}`.trim(),
16627
+ children: [
16628
+ (title || subtitle) && /* @__PURE__ */ jsxs69("div", { className: "elb-form-card__header", children: [
16629
+ title && /* @__PURE__ */ jsx92("h1", { className: "elb-form-card__title", children: title }),
16630
+ subtitle && /* @__PURE__ */ jsx92("p", { className: "elb-form-card__subtitle", children: subtitle })
16631
+ ] }),
16632
+ /* @__PURE__ */ jsx92("div", { className: "elb-form-card__content", children }),
16633
+ footer && /* @__PURE__ */ jsx92("div", { className: "elb-form-card__footer", children: footer })
16634
+ ]
16635
+ }
16636
+ );
16637
+ }
16638
+
16639
+ // src/components/molecules/dropdown.tsx
16640
+ import { jsx as jsx93, jsxs as jsxs70 } from "react/jsx-runtime";
16641
+ function Dropdown({
16642
+ trigger,
16643
+ isOpen,
16644
+ onToggle,
16645
+ children,
16646
+ align = "left",
16647
+ ariaLabel,
16648
+ className = ""
16649
+ }) {
16650
+ return /* @__PURE__ */ jsxs70("div", { className: `elb-dropdown ${className}`.trim(), children: [
16651
+ /* @__PURE__ */ jsx93(
16652
+ "div",
16653
+ {
16654
+ className: "elb-dropdown__trigger",
16655
+ onClick: onToggle,
16656
+ role: "button",
16657
+ tabIndex: 0,
16658
+ "aria-haspopup": "menu",
16659
+ "aria-expanded": isOpen,
16660
+ "aria-label": ariaLabel,
16661
+ onKeyDown: (e) => {
16662
+ if (e.key === "Enter" || e.key === " ") {
16663
+ e.preventDefault();
16664
+ onToggle();
16665
+ }
16666
+ },
16667
+ children: trigger
16668
+ }
16669
+ ),
16670
+ isOpen && /* @__PURE__ */ jsx93(
16671
+ "div",
16672
+ {
16673
+ className: `elb-dropdown__panel elb-dropdown__panel--${align}`,
16674
+ role: "menu",
16675
+ children
16676
+ }
16677
+ )
16678
+ ] });
16679
+ }
16680
+ function DropdownItem({
16681
+ children,
16682
+ onClick,
16683
+ disabled = false,
16684
+ variant = "default",
16685
+ className = ""
16686
+ }) {
16687
+ return /* @__PURE__ */ jsx93(
16688
+ "button",
16689
+ {
16690
+ type: "button",
16691
+ role: "menuitem",
16692
+ className: `elb-dropdown__item elb-dropdown__item--${variant} ${disabled ? "elb-dropdown__item--disabled" : ""} ${className}`.trim(),
16693
+ onClick,
16694
+ disabled,
16695
+ children
16696
+ }
16697
+ );
16698
+ }
16699
+ function DropdownDivider({ className = "" }) {
16700
+ return /* @__PURE__ */ jsx93(
16701
+ "div",
16702
+ {
16703
+ className: `elb-dropdown__divider ${className}`.trim(),
16704
+ role: "separator"
16705
+ }
16706
+ );
16707
+ }
16708
+
16709
+ // src/components/atoms/form-textarea.tsx
16710
+ import { useId } from "react";
16711
+
16712
+ // src/components/atoms/form-field.tsx
16713
+ import { jsx as jsx94, jsxs as jsxs71 } from "react/jsx-runtime";
16714
+ function FormField({
16715
+ children,
16716
+ label,
16717
+ htmlFor,
16718
+ error,
16719
+ required,
16720
+ className = ""
16721
+ }) {
16722
+ return /* @__PURE__ */ jsxs71(
16723
+ "div",
16724
+ {
16725
+ className: `elb-form-field ${error ? "elb-form-field--error" : ""} ${className}`.trim(),
16726
+ children: [
16727
+ label && /* @__PURE__ */ jsxs71("label", { htmlFor, className: "elb-form-field__label", children: [
16728
+ label,
16729
+ required && /* @__PURE__ */ jsx94("span", { className: "elb-form-field__required", "aria-hidden": "true", children: "*" })
16730
+ ] }),
16731
+ /* @__PURE__ */ jsx94("div", { className: "elb-form-field__input", children }),
16732
+ error && /* @__PURE__ */ jsx94("div", { className: "elb-form-field__error", role: "alert", children: error })
16733
+ ]
16734
+ }
16735
+ );
16736
+ }
16737
+
16738
+ // src/components/atoms/form-textarea.tsx
16739
+ import { jsx as jsx95 } from "react/jsx-runtime";
16740
+ function FormTextarea({
16741
+ value,
16742
+ onChange,
16743
+ label,
16744
+ rows = 5,
16745
+ placeholder,
16746
+ disabled = false,
16747
+ spellCheck = true,
16748
+ required = false,
16749
+ error,
16750
+ id,
16751
+ className = ""
16752
+ }) {
16753
+ const generatedId = useId();
16754
+ const textareaId = id ?? generatedId;
16755
+ const hasError = Boolean(error);
16756
+ const errorMessage = typeof error === "string" ? error : void 0;
16757
+ return /* @__PURE__ */ jsx95(
16758
+ FormField,
16759
+ {
16760
+ label,
16761
+ htmlFor: textareaId,
16762
+ error: errorMessage,
16763
+ required,
16764
+ className,
16765
+ children: /* @__PURE__ */ jsx95(
16766
+ "textarea",
16767
+ {
16768
+ id: textareaId,
16769
+ value,
16770
+ onChange: (e) => onChange(e.target.value),
16771
+ rows,
16772
+ placeholder,
16773
+ disabled,
16774
+ spellCheck,
16775
+ required,
16776
+ className: `elb-form-textarea ${hasError ? "elb-form-textarea--error" : ""}`,
16777
+ "aria-invalid": hasError
16778
+ }
16779
+ )
16780
+ }
16781
+ );
16782
+ }
16783
+
16784
+ // src/components/atoms/spinner.tsx
16785
+ import { jsx as jsx96 } from "react/jsx-runtime";
16786
+ function Spinner({ size = "md", className = "" }) {
16787
+ return /* @__PURE__ */ jsx96(
16788
+ "span",
16789
+ {
16790
+ className: `elb-spinner elb-spinner--${size} ${className}`.trim(),
16791
+ role: "status",
16792
+ "aria-label": "Loading"
16793
+ }
16794
+ );
16795
+ }
16796
+
16797
+ // src/components/atoms/submit-button.tsx
16798
+ import { Fragment as Fragment12, jsx as jsx97, jsxs as jsxs72 } from "react/jsx-runtime";
16799
+ function SubmitButton({
16800
+ children,
16801
+ loadingText,
16802
+ loading = false,
16803
+ disabled = false,
16804
+ variant = "primary",
16805
+ fullWidth = false,
16806
+ type = "submit",
16807
+ onClick,
16808
+ className = ""
16809
+ }) {
16810
+ const isDisabled = disabled || loading;
16811
+ return /* @__PURE__ */ jsx97(
16812
+ "button",
16813
+ {
16814
+ type,
16815
+ disabled: isDisabled,
16816
+ onClick,
16817
+ className: `elb-submit-button elb-submit-button--${variant} ${fullWidth ? "elb-submit-button--full-width" : ""} ${loading ? "elb-submit-button--loading" : ""} ${className}`.trim(),
16818
+ children: loading ? /* @__PURE__ */ jsxs72(Fragment12, { children: [
16819
+ /* @__PURE__ */ jsx97(Spinner, { size: "sm", className: "elb-submit-button__spinner" }),
16820
+ /* @__PURE__ */ jsx97("span", { children: loadingText ?? children })
16821
+ ] }) : children
16822
+ }
16823
+ );
16824
+ }
16825
+
16826
+ // src/components/atoms/alert.tsx
16827
+ import { jsx as jsx98, jsxs as jsxs73 } from "react/jsx-runtime";
16828
+ function Alert({
16829
+ children,
16830
+ title,
16831
+ variant,
16832
+ role = variant === "error" ? "alert" : "status",
16833
+ className = ""
16834
+ }) {
16835
+ return /* @__PURE__ */ jsxs73(
16836
+ "div",
16837
+ {
16838
+ className: `elb-alert elb-alert--${variant} ${className}`.trim(),
16839
+ role,
16840
+ children: [
16841
+ title && /* @__PURE__ */ jsx98("div", { className: "elb-alert__title", children: title }),
16842
+ /* @__PURE__ */ jsx98("div", { className: "elb-alert__content", children })
16843
+ ]
16844
+ }
16845
+ );
16846
+ }
16847
+
16848
+ // src/components/molecules/config-form-card.tsx
16849
+ import { jsx as jsx99, jsxs as jsxs74 } from "react/jsx-runtime";
16850
+ function ConfigFormCard({
16851
+ config,
16852
+ onConfigChange,
16853
+ onSubmit,
16854
+ loading = false,
16855
+ error = null,
16856
+ title = "Configuration",
16857
+ label = "Configuration (JSON)",
16858
+ submitText = "Submit",
16859
+ loadingText = "Processing...",
16860
+ rows = 20,
16861
+ maxWidth = "lg",
16862
+ className = ""
16863
+ }) {
16864
+ return /* @__PURE__ */ jsx99(FormCard, { title, maxWidth, className, children: /* @__PURE__ */ jsxs74("form", { onSubmit, children: [
16865
+ /* @__PURE__ */ jsx99(
16866
+ FormTextarea,
16867
+ {
16868
+ label,
16869
+ value: config,
16870
+ onChange: onConfigChange,
16871
+ rows,
16872
+ disabled: loading,
16873
+ spellCheck: false,
16874
+ error: !!error
16875
+ }
16876
+ ),
16877
+ error && /* @__PURE__ */ jsx99(Alert, { variant: "error", children: error }),
16878
+ /* @__PURE__ */ jsx99(SubmitButton, { loading, loadingText, fullWidth: true, children: submitText })
16879
+ ] }) });
16880
+ }
16881
+
16882
+ // src/components/molecules/split-button.tsx
16883
+ import { useState as useState40, useRef as useRef17, useEffect as useEffect28, useCallback as useCallback19 } from "react";
16884
+ import { Fragment as Fragment13, jsx as jsx100, jsxs as jsxs75 } from "react/jsx-runtime";
16885
+ function SplitButton({
16886
+ children,
16887
+ onClick,
16888
+ actions = [],
16889
+ variant = "primary",
16890
+ loading = false,
16891
+ loadingText,
16892
+ disabled = false,
16893
+ className = ""
16894
+ }) {
16895
+ const [open, setOpen] = useState40(false);
16896
+ const ref = useRef17(null);
16897
+ const isDisabled = disabled || loading;
16898
+ const handleClickOutside = useCallback19((e) => {
16899
+ if (ref.current && !ref.current.contains(e.target)) {
16900
+ setOpen(false);
16901
+ }
16902
+ }, []);
16903
+ const handleKeyDown = useCallback19((e) => {
16904
+ if (e.key === "Escape") setOpen(false);
16905
+ }, []);
16906
+ useEffect28(() => {
16907
+ if (open) {
16908
+ document.addEventListener("mousedown", handleClickOutside);
16909
+ document.addEventListener("keydown", handleKeyDown);
16910
+ return () => {
16911
+ document.removeEventListener("mousedown", handleClickOutside);
16912
+ document.removeEventListener("keydown", handleKeyDown);
16913
+ };
16914
+ }
16915
+ }, [open, handleClickOutside, handleKeyDown]);
16916
+ return /* @__PURE__ */ jsxs75(
16917
+ "div",
16918
+ {
16919
+ ref,
16920
+ className: `elb-split-button elb-split-button--${variant} ${className}`,
16921
+ children: [
16922
+ /* @__PURE__ */ jsx100(
16923
+ "button",
16924
+ {
16925
+ type: "button",
16926
+ className: "elb-split-button__primary",
16927
+ onClick,
16928
+ disabled: isDisabled,
16929
+ children: loading ? loadingText ?? children : children
16930
+ }
16931
+ ),
16932
+ actions.length > 0 && /* @__PURE__ */ jsxs75(Fragment13, { children: [
16933
+ /* @__PURE__ */ jsx100(
16934
+ "button",
16935
+ {
16936
+ type: "button",
16937
+ className: "elb-split-button__toggle",
16938
+ onClick: () => setOpen(!open),
16939
+ disabled: isDisabled,
16940
+ "aria-label": "More actions",
16941
+ "aria-expanded": open,
16942
+ children: /* @__PURE__ */ jsx100(
16943
+ "svg",
16944
+ {
16945
+ className: "elb-split-button__arrow",
16946
+ width: "10",
16947
+ height: "6",
16948
+ viewBox: "0 0 10 6",
16949
+ fill: "currentColor",
16950
+ children: /* @__PURE__ */ jsx100(
16951
+ "path",
16952
+ {
16953
+ d: "M1 1l4 4 4-4",
16954
+ stroke: "currentColor",
16955
+ strokeWidth: "1.5",
16956
+ fill: "none"
16957
+ }
16958
+ )
16959
+ }
16960
+ )
16961
+ }
16962
+ ),
16963
+ open && /* @__PURE__ */ jsx100("div", { className: "elb-split-button__dropdown", children: actions.map((action) => /* @__PURE__ */ jsx100(
16964
+ "button",
16965
+ {
16966
+ type: "button",
16967
+ className: "elb-split-button__action",
16968
+ disabled: action.disabled,
16969
+ onClick: () => {
16970
+ setOpen(false);
16971
+ action.onClick();
16972
+ },
16973
+ children: action.label
16974
+ },
16975
+ action.key
16976
+ )) })
16977
+ ] })
16978
+ ]
16979
+ }
16980
+ );
16981
+ }
16982
+
16983
+ // src/components/molecules/flow-selector.tsx
16984
+ import { jsx as jsx101, jsxs as jsxs76 } from "react/jsx-runtime";
16985
+ var STATUS_DOT = {
16986
+ active: "elb-flow-selector__dot--active",
16987
+ published: "elb-flow-selector__dot--active",
16988
+ bundling: "elb-flow-selector__dot--deploying",
16989
+ deploying: "elb-flow-selector__dot--deploying",
16990
+ failed: "elb-flow-selector__dot--failed"
16991
+ };
16992
+ function FlowSelector({
16993
+ flows,
16994
+ selectedFlow,
16995
+ onSelectFlow,
16996
+ className = ""
16997
+ }) {
16998
+ if (flows.length <= 1) return null;
16999
+ return /* @__PURE__ */ jsx101("div", { className: `elb-flow-selector ${className}`, role: "tablist", children: flows.map((flow) => {
17000
+ const isSelected = flow.name === selectedFlow;
17001
+ const dotClass = flow.deploymentStatus ? STATUS_DOT[flow.deploymentStatus] ?? "" : "";
17002
+ return /* @__PURE__ */ jsxs76(
17003
+ "button",
17004
+ {
17005
+ type: "button",
17006
+ role: "tab",
17007
+ "aria-selected": isSelected,
17008
+ className: `elb-flow-selector__tab ${isSelected ? "elb-flow-selector__tab--selected" : ""}`,
17009
+ onClick: () => onSelectFlow(flow.name),
17010
+ children: [
17011
+ /* @__PURE__ */ jsx101("span", { className: `elb-flow-selector__dot ${dotClass}` }),
17012
+ /* @__PURE__ */ jsx101("span", { className: "elb-flow-selector__name", children: flow.name }),
17013
+ flow.platform && /* @__PURE__ */ jsx101("span", { className: "elb-flow-selector__platform", children: flow.platform })
17014
+ ]
17015
+ },
17016
+ flow.name
17017
+ );
17018
+ }) });
17019
+ }
17020
+
17021
+ // src/components/molecules/flow-deploy-panel.tsx
17022
+ import { Fragment as Fragment14, jsx as jsx102, jsxs as jsxs77 } from "react/jsx-runtime";
17023
+ function statusLabel(status) {
17024
+ switch (status) {
17025
+ case "active":
17026
+ return "Active";
17027
+ case "published":
17028
+ return "Published";
17029
+ case "bundling":
17030
+ case "deploying":
17031
+ return "Deploying...";
17032
+ case "failed":
17033
+ return "Failed";
17034
+ default:
17035
+ return status;
17036
+ }
17037
+ }
17038
+ function statusDotClass(status) {
17039
+ switch (status) {
17040
+ case "active":
17041
+ case "published":
17042
+ return "elb-flow-deploy-panel__dot--active";
17043
+ case "bundling":
17044
+ case "deploying":
17045
+ return "elb-flow-deploy-panel__dot--deploying";
17046
+ case "failed":
17047
+ return "elb-flow-deploy-panel__dot--failed";
17048
+ default:
17049
+ return "";
17050
+ }
17051
+ }
17052
+ function primaryLabel(deployment, flowName, multipleFlows) {
17053
+ const name = multipleFlows ? ` "${flowName}"` : "";
17054
+ if (!deployment) return `Deploy${name}`;
17055
+ switch (deployment.status) {
17056
+ case "failed":
17057
+ return `Retry${name}`;
17058
+ case "active":
17059
+ case "published":
17060
+ return `Redeploy${name}`;
17061
+ default:
17062
+ return `Deploy${name}`;
17063
+ }
17064
+ }
17065
+ function FlowDeployPanel({
17066
+ flowName,
17067
+ platform,
17068
+ deployment,
17069
+ deploying = false,
17070
+ error,
17071
+ hasUnsavedChanges = false,
17072
+ multipleFlows = false,
17073
+ onDeploy,
17074
+ onDeleteDeployment,
17075
+ onDownloadFlow,
17076
+ onBundle,
17077
+ className = ""
17078
+ }) {
17079
+ const isDeploying = deploying || deployment?.status === "bundling" || deployment?.status === "deploying";
17080
+ const bundleExt = platform === "server" ? ".mjs" : ".js";
17081
+ const actions = [
17082
+ {
17083
+ key: "download",
17084
+ label: "Download Flow (.json)",
17085
+ onClick: onDownloadFlow
17086
+ },
17087
+ { key: "bundle", label: `Bundle (${bundleExt})`, onClick: onBundle }
17088
+ ];
17089
+ return /* @__PURE__ */ jsxs77("div", { className: `elb-flow-deploy-panel ${className}`, children: [
17090
+ /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__status", children: deployment ? /* @__PURE__ */ jsxs77(Fragment14, { children: [
17091
+ /* @__PURE__ */ jsx102(
17092
+ "span",
17093
+ {
17094
+ className: `elb-flow-deploy-panel__dot ${statusDotClass(deployment.status)}`
17095
+ }
17096
+ ),
17097
+ /* @__PURE__ */ jsx102("span", { className: "elb-flow-deploy-panel__status-text", children: statusLabel(deployment.status) }),
17098
+ deployment.createdAt && /* @__PURE__ */ jsx102("span", { className: "elb-flow-deploy-panel__time", children: new Date(deployment.createdAt).toLocaleString() })
17099
+ ] }) : /* @__PURE__ */ jsxs77(Fragment14, { children: [
17100
+ /* @__PURE__ */ jsx102("span", { className: "elb-flow-deploy-panel__dot" }),
17101
+ /* @__PURE__ */ jsx102("span", { className: "elb-flow-deploy-panel__status-text", children: "Not deployed" })
17102
+ ] }) }),
17103
+ hasUnsavedChanges && deployment && (deployment.status === "active" || deployment.status === "published") && /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__warning", children: "Config changed since last deploy" }),
17104
+ deployment?.publicUrl && /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__endpoint", children: /* @__PURE__ */ jsx102("code", { className: "elb-flow-deploy-panel__url", children: deployment.publicUrl }) }),
17105
+ deployment?.containerUrl && /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__endpoint", children: /* @__PURE__ */ jsx102("code", { className: "elb-flow-deploy-panel__url", children: deployment.containerUrl }) }),
17106
+ (error || deployment?.errorMessage) && /* @__PURE__ */ jsx102("div", { className: "elb-flow-deploy-panel__error", children: error || deployment?.errorMessage }),
17107
+ /* @__PURE__ */ jsxs77("div", { className: "elb-flow-deploy-panel__actions", children: [
17108
+ /* @__PURE__ */ jsx102(
17109
+ SplitButton,
17110
+ {
17111
+ onClick: onDeploy,
17112
+ actions,
17113
+ loading: isDeploying,
17114
+ loadingText: "Deploying...",
17115
+ disabled: isDeploying,
17116
+ children: primaryLabel(deployment, flowName, multipleFlows)
17117
+ }
17118
+ ),
17119
+ deployment && deployment.status !== "bundling" && deployment.status !== "deploying" && /* @__PURE__ */ jsx102(
17120
+ "button",
17121
+ {
17122
+ type: "button",
17123
+ className: "elb-flow-deploy-panel__delete",
17124
+ onClick: onDeleteDeployment,
17125
+ children: "Delete deployment"
17126
+ }
17127
+ )
17128
+ ] })
17129
+ ] });
17130
+ }
17131
+
16604
17132
  // src/schemas/config-structures/destination-config.ts
16605
17133
  var DESTINATION_CONFIG_STRUCTURE = {
16606
17134
  type: "object",
@@ -16687,13 +17215,13 @@ var DESTINATION_CONFIG_STRUCTURE = {
16687
17215
  };
16688
17216
 
16689
17217
  // src/components/atoms/footer.tsx
16690
- import { jsx as jsx92 } from "react/jsx-runtime";
17218
+ import { jsx as jsx103 } from "react/jsx-runtime";
16691
17219
  function Footer({ children, className = "" }) {
16692
- return /* @__PURE__ */ jsx92("div", { className: `elb-explorer-footer ${className}`, children });
17220
+ return /* @__PURE__ */ jsx103("div", { className: `elb-explorer-footer ${className}`, children });
16693
17221
  }
16694
17222
 
16695
17223
  // src/components/atoms/button-link.tsx
16696
- import { jsx as jsx93 } from "react/jsx-runtime";
17224
+ import { jsx as jsx104 } from "react/jsx-runtime";
16697
17225
  function ButtonLink({
16698
17226
  variant = "default",
16699
17227
  size = "md",
@@ -16706,9 +17234,9 @@ function ButtonLink({
16706
17234
  const baseClass = "elb-button-link";
16707
17235
  const classes = `${baseClass} ${baseClass}-${variant} ${baseClass}-${size} ${className}`.trim();
16708
17236
  if (href && !disabled) {
16709
- return /* @__PURE__ */ jsx93("a", { href, className: classes, children });
17237
+ return /* @__PURE__ */ jsx104("a", { href, className: classes, children });
16710
17238
  }
16711
- return /* @__PURE__ */ jsx93(
17239
+ return /* @__PURE__ */ jsx104(
16712
17240
  "button",
16713
17241
  {
16714
17242
  type: "button",
@@ -16721,21 +17249,70 @@ function ButtonLink({
16721
17249
  }
16722
17250
 
16723
17251
  // src/components/atoms/panel-hints.tsx
16724
- import { jsx as jsx94, jsxs as jsxs69 } from "react/jsx-runtime";
17252
+ import { jsx as jsx105, jsxs as jsxs78 } from "react/jsx-runtime";
16725
17253
  function PanelHints({
16726
17254
  title = "Common patterns",
16727
17255
  hints,
16728
17256
  className = ""
16729
17257
  }) {
16730
- return /* @__PURE__ */ jsxs69("div", { className: `elb-panel-hints ${className}`, children: [
16731
- title && /* @__PURE__ */ jsx94("div", { className: "elb-panel-hints-title", children: title }),
16732
- /* @__PURE__ */ jsx94("ul", { className: "elb-panel-hints-list", children: hints.map((hint, index) => /* @__PURE__ */ jsxs69("li", { className: "elb-panel-hints-item", children: [
16733
- /* @__PURE__ */ jsx94("code", { className: "elb-panel-hints-code", children: hint.code }),
16734
- /* @__PURE__ */ jsx94("span", { className: "elb-panel-hints-desc", children: hint.description })
17258
+ return /* @__PURE__ */ jsxs78("div", { className: `elb-panel-hints ${className}`, children: [
17259
+ title && /* @__PURE__ */ jsx105("div", { className: "elb-panel-hints-title", children: title }),
17260
+ /* @__PURE__ */ jsx105("ul", { className: "elb-panel-hints-list", children: hints.map((hint, index) => /* @__PURE__ */ jsxs78("li", { className: "elb-panel-hints-item", children: [
17261
+ /* @__PURE__ */ jsx105("code", { className: "elb-panel-hints-code", children: hint.code }),
17262
+ /* @__PURE__ */ jsx105("span", { className: "elb-panel-hints-desc", children: hint.description })
16735
17263
  ] }, index)) })
16736
17264
  ] });
16737
17265
  }
16738
17266
 
17267
+ // src/components/atoms/form-input.tsx
17268
+ import { useId as useId2 } from "react";
17269
+ import { jsx as jsx106 } from "react/jsx-runtime";
17270
+ function FormInput({
17271
+ value,
17272
+ onChange,
17273
+ label,
17274
+ type = "text",
17275
+ placeholder,
17276
+ disabled = false,
17277
+ autoFocus = false,
17278
+ autoComplete,
17279
+ required = false,
17280
+ error,
17281
+ id,
17282
+ className = ""
17283
+ }) {
17284
+ const generatedId = useId2();
17285
+ const inputId = id ?? generatedId;
17286
+ const hasError = Boolean(error);
17287
+ const errorMessage = typeof error === "string" ? error : void 0;
17288
+ return /* @__PURE__ */ jsx106(
17289
+ FormField,
17290
+ {
17291
+ label,
17292
+ htmlFor: inputId,
17293
+ error: errorMessage,
17294
+ required,
17295
+ className,
17296
+ children: /* @__PURE__ */ jsx106(
17297
+ "input",
17298
+ {
17299
+ id: inputId,
17300
+ type,
17301
+ value,
17302
+ onChange: (e) => onChange(e.target.value),
17303
+ placeholder,
17304
+ disabled,
17305
+ autoFocus,
17306
+ autoComplete,
17307
+ required,
17308
+ className: `elb-form-input ${hasError ? "elb-form-input--error" : ""}`,
17309
+ "aria-invalid": hasError
17310
+ }
17311
+ )
17312
+ }
17313
+ );
17314
+ }
17315
+
16739
17316
  // src/components/atoms/icons/icons.tsx
16740
17317
  addIcon("walkeros:piwik-pro", {
16741
17318
  body: '<g fill="none" fill-rule="evenodd"><path fill="#231F20" d="M0 0h90v90H0z"/><path d="M50.792 57.21v.044H37.99v8.675c0 3.38-2.652 6.07-6.006 6.07a5.917 5.917 0 0 1-4.243-1.77 6.073 6.073 0 0 1-1.74-4.3v-38.88C26 23.67 28.65 21 31.983 21H50.79v.022c9.58.4 17.209 8.341 17.209 18.104 0 9.764-7.628 17.704-17.209 18.083h.001Zm-2.148-25.29H37.99v14.57h10.872c3.88-.112 6.993-3.337 6.993-7.274a7.347 7.347 0 0 0-2.114-5.16 7.16 7.16 0 0 0-5.098-2.134Z" fill="#FFF" fill-rule="nonzero"/></g>',
@@ -16744,12 +17321,12 @@ addIcon("walkeros:piwik-pro", {
16744
17321
  });
16745
17322
 
16746
17323
  // node_modules/@mdx-js/react/lib/index.js
16747
- import React25 from "react";
17324
+ import React28 from "react";
16748
17325
  var emptyComponents = {};
16749
- var MDXContext = React25.createContext(emptyComponents);
17326
+ var MDXContext = React28.createContext(emptyComponents);
16750
17327
  function useMDXComponents(components) {
16751
- const contextComponents = React25.useContext(MDXContext);
16752
- return React25.useMemo(
17328
+ const contextComponents = React28.useContext(MDXContext);
17329
+ return React28.useMemo(
16753
17330
  function() {
16754
17331
  if (typeof components === "function") {
16755
17332
  return components(contextComponents);
@@ -16766,7 +17343,7 @@ function MDXProvider(properties) {
16766
17343
  } else {
16767
17344
  allComponents = useMDXComponents(properties.components);
16768
17345
  }
16769
- return React25.createElement(
17346
+ return React28.createElement(
16770
17347
  MDXContext.Provider,
16771
17348
  { value: allComponents },
16772
17349
  properties.children
@@ -16775,7 +17352,7 @@ function MDXProvider(properties) {
16775
17352
 
16776
17353
  // src/components/atoms/mdx-code.tsx
16777
17354
  import { Children } from "react";
16778
- import { jsx as jsx95 } from "react/jsx-runtime";
17355
+ import { jsx as jsx107 } from "react/jsx-runtime";
16779
17356
  var MDXCode = ({
16780
17357
  className,
16781
17358
  children
@@ -16789,7 +17366,7 @@ var MDXCode = ({
16789
17366
  return false;
16790
17367
  });
16791
17368
  if (!hasClassName || !hasNewlines) {
16792
- return /* @__PURE__ */ jsx95("code", { className: "elb-code-inline", children });
17369
+ return /* @__PURE__ */ jsx107("code", { className: "elb-code-inline", children });
16793
17370
  }
16794
17371
  const mdxLanguage = className.replace(/^language-/, "");
16795
17372
  const languageMap = {
@@ -16804,7 +17381,7 @@ var MDXCode = ({
16804
17381
  };
16805
17382
  const monacoLanguage = languageMap[mdxLanguage] || mdxLanguage;
16806
17383
  const code = childrenArray.map((child) => typeof child === "string" ? child : "").join("").trim();
16807
- return /* @__PURE__ */ jsx95(
17384
+ return /* @__PURE__ */ jsx107(
16808
17385
  CodeBox,
16809
17386
  {
16810
17387
  code,
@@ -16818,7 +17395,7 @@ var MDXCode = ({
16818
17395
  };
16819
17396
 
16820
17397
  // src/providers/MDXProvider.tsx
16821
- import { jsx as jsx96 } from "react/jsx-runtime";
17398
+ import { jsx as jsx108 } from "react/jsx-runtime";
16822
17399
  var MDXProvider2 = ({ children }) => {
16823
17400
  const components = {
16824
17401
  // Markdown element mappings
@@ -16830,9 +17407,53 @@ var MDXProvider2 = ({ children }) => {
16830
17407
  DestinationInitDemo,
16831
17408
  DestinationDemo
16832
17409
  };
16833
- return /* @__PURE__ */ jsx96(MDXProvider, { components, children });
17410
+ return /* @__PURE__ */ jsx108(MDXProvider, { components, children });
16834
17411
  };
17412
+
17413
+ // src/hooks/useDropdown.ts
17414
+ import { useState as useState41, useRef as useRef18, useEffect as useEffect29, useCallback as useCallback20 } from "react";
17415
+ function useDropdown() {
17416
+ const [isOpen, setIsOpen] = useState41(false);
17417
+ const containerRef = useRef18(null);
17418
+ const toggle = useCallback20(() => {
17419
+ setIsOpen((prev) => !prev);
17420
+ }, []);
17421
+ const open = useCallback20(() => {
17422
+ setIsOpen(true);
17423
+ }, []);
17424
+ const close = useCallback20(() => {
17425
+ setIsOpen(false);
17426
+ }, []);
17427
+ useEffect29(() => {
17428
+ if (!isOpen) return;
17429
+ function handleClickOutside(event) {
17430
+ if (containerRef.current && !containerRef.current.contains(event.target)) {
17431
+ setIsOpen(false);
17432
+ }
17433
+ }
17434
+ document.addEventListener("mousedown", handleClickOutside);
17435
+ return () => document.removeEventListener("mousedown", handleClickOutside);
17436
+ }, [isOpen]);
17437
+ useEffect29(() => {
17438
+ if (!isOpen) return;
17439
+ function handleEscape(event) {
17440
+ if (event.key === "Escape") {
17441
+ setIsOpen(false);
17442
+ }
17443
+ }
17444
+ document.addEventListener("keydown", handleEscape);
17445
+ return () => document.removeEventListener("keydown", handleEscape);
17446
+ }, [isOpen]);
17447
+ return {
17448
+ isOpen,
17449
+ toggle,
17450
+ open,
17451
+ close,
17452
+ containerRef
17453
+ };
17454
+ }
16835
17455
  export {
17456
+ Alert,
16836
17457
  ArchitectureFlow,
16837
17458
  Box,
16838
17459
  BrowserBox,
@@ -16844,13 +17465,23 @@ export {
16844
17465
  CodeSnippet,
16845
17466
  CollectorBox,
16846
17467
  ConfigEditor,
17468
+ ConfigFormCard,
16847
17469
  DESTINATION_CONFIG_STRUCTURE,
16848
17470
  DestinationDemo,
16849
17471
  DestinationInitDemo as DestinationInit,
16850
17472
  DestinationInitDemo,
16851
17473
  DestinationDemo as DestinationPush,
17474
+ Dropdown,
17475
+ DropdownDivider,
17476
+ DropdownItem,
17477
+ FlowDeployPanel,
16852
17478
  FlowMap,
17479
+ FlowSelector,
16853
17480
  Footer,
17481
+ FormCard,
17482
+ FormField,
17483
+ FormInput,
17484
+ FormTextarea,
16854
17485
  Grid,
16855
17486
  Header,
16856
17487
  Icon,
@@ -16866,6 +17497,9 @@ export {
16866
17497
  Preview,
16867
17498
  PromotionPlayground,
16868
17499
  PropertyTable,
17500
+ Spinner,
17501
+ SplitButton,
17502
+ SubmitButton,
16869
17503
  captureDestinationPush,
16870
17504
  cn,
16871
17505
  createCaptureFn,
@@ -16882,6 +17516,7 @@ export {
16882
17516
  registerAllThemes,
16883
17517
  registerLighthouseTheme,
16884
17518
  registerPalenightTheme,
16885
- registerWalkerOSTypes
17519
+ registerWalkerOSTypes,
17520
+ useDropdown
16886
17521
  };
16887
17522
  //# sourceMappingURL=index.mjs.map