@commercetools/nimbus 0.0.0-canary-20250916130207 → 0.0.0-canary-20250918091239

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 (78) hide show
  1. package/dist/chunks/icon-BHx0r3NL.cjs.js +2 -0
  2. package/dist/chunks/icon-BHx0r3NL.cjs.js.map +1 -0
  3. package/dist/chunks/icon-DHu0zrOb.es.js +14 -0
  4. package/dist/chunks/icon-DHu0zrOb.es.js.map +1 -0
  5. package/dist/chunks/icon.recipe-ClxbhW0Q.cjs.js +2 -0
  6. package/dist/chunks/icon.recipe-ClxbhW0Q.cjs.js.map +1 -0
  7. package/dist/chunks/icon.recipe-DjkjodUn.es.js +24 -0
  8. package/dist/chunks/icon.recipe-DjkjodUn.es.js.map +1 -0
  9. package/dist/chunks/inline-svg-DTleUhZq.es.js +21 -0
  10. package/dist/chunks/inline-svg-DTleUhZq.es.js.map +1 -0
  11. package/dist/chunks/inline-svg-DbvmiSw9.cjs.js +2 -0
  12. package/dist/chunks/inline-svg-DbvmiSw9.cjs.js.map +1 -0
  13. package/dist/chunks/{menu-bzi7WVh0.cjs.js → menu-CQYhHGbS.cjs.js} +2 -2
  14. package/dist/chunks/{menu-bzi7WVh0.cjs.js.map → menu-CQYhHGbS.cjs.js.map} +1 -1
  15. package/dist/chunks/{menu-DZVU5Z-r.es.js → menu-DnbrSKhK.es.js} +2 -2
  16. package/dist/chunks/{menu-DZVU5Z-r.es.js.map → menu-DnbrSKhK.es.js.map} +1 -1
  17. package/dist/chunks/rich-text-input-BbCjT_Nf.es.js +7916 -0
  18. package/dist/chunks/rich-text-input-BbCjT_Nf.es.js.map +1 -0
  19. package/dist/chunks/rich-text-input-BwrGY2EU.cjs.js +24 -0
  20. package/dist/chunks/rich-text-input-BwrGY2EU.cjs.js.map +1 -0
  21. package/dist/chunks/{split-button-BR8DktKd.es.js → split-button-ClVaxLZ7.es.js} +3 -3
  22. package/dist/chunks/{split-button-BR8DktKd.es.js.map → split-button-ClVaxLZ7.es.js.map} +1 -1
  23. package/dist/chunks/{split-button-1uPesHKO.cjs.js → split-button-D-3pT-LA.cjs.js} +2 -2
  24. package/dist/chunks/{split-button-1uPesHKO.cjs.js.map → split-button-D-3pT-LA.cjs.js.map} +1 -1
  25. package/dist/chunks/use-inline-svg-C2ko8Bcq.cjs.js +2 -0
  26. package/dist/chunks/use-inline-svg-C2ko8Bcq.cjs.js.map +1 -0
  27. package/dist/chunks/use-inline-svg-Cua0623E.es.js +47 -0
  28. package/dist/chunks/use-inline-svg-Cua0623E.es.js.map +1 -0
  29. package/dist/components/components.cjs +1 -1
  30. package/dist/components/components.es.js +79 -77
  31. package/dist/components/components.es.js.map +1 -1
  32. package/dist/components/constants.cjs +1 -1
  33. package/dist/components/constants.cjs.map +1 -1
  34. package/dist/components/constants.es.js +13 -122
  35. package/dist/components/constants.es.js.map +1 -1
  36. package/dist/components/hooks.cjs +1 -1
  37. package/dist/components/hooks.es.js +2 -5
  38. package/dist/components/icon.cjs +1 -1
  39. package/dist/components/icon.es.js +1 -1
  40. package/dist/components/inline-svg.cjs +2 -0
  41. package/dist/components/inline-svg.cjs.map +1 -0
  42. package/dist/components/inline-svg.es.js +5 -0
  43. package/dist/components/inline-svg.es.js.map +1 -0
  44. package/dist/components/rich-text-input.cjs +1 -1
  45. package/dist/components/rich-text-input.es.js +1 -1
  46. package/dist/components/split-button.cjs +1 -1
  47. package/dist/components/split-button.es.js +1 -1
  48. package/dist/components/utils.cjs +2 -1
  49. package/dist/components/utils.cjs.map +1 -1
  50. package/dist/components/utils.es.js +543 -65
  51. package/dist/components/utils.es.js.map +1 -1
  52. package/dist/components.d.ts +34 -0
  53. package/dist/constants.d.ts +4 -113
  54. package/dist/hooks.d.ts +7 -46
  55. package/dist/index.cjs +1 -1
  56. package/dist/index.cjs.map +1 -1
  57. package/dist/index.d.ts +41 -45
  58. package/dist/index.es.js +121 -119
  59. package/dist/index.es.js.map +1 -1
  60. package/dist/inline-svg.d.ts +139 -0
  61. package/dist/utils.d.ts +28 -148
  62. package/package.json +6 -5
  63. package/dist/chunks/icon-BoRbJStV.es.js +0 -31
  64. package/dist/chunks/icon-BoRbJStV.es.js.map +0 -1
  65. package/dist/chunks/icon-Cny8ZtnX.cjs.js +0 -2
  66. package/dist/chunks/icon-Cny8ZtnX.cjs.js.map +0 -1
  67. package/dist/chunks/rich-text-input-B3s6cy-T.cjs.js +0 -2
  68. package/dist/chunks/rich-text-input-B3s6cy-T.cjs.js.map +0 -1
  69. package/dist/chunks/rich-text-input-D4cP13Oo.es.js +0 -691
  70. package/dist/chunks/rich-text-input-D4cP13Oo.es.js.map +0 -1
  71. package/dist/chunks/slate-helpers-BwRHJO4o.es.js +0 -6919
  72. package/dist/chunks/slate-helpers-BwRHJO4o.es.js.map +0 -1
  73. package/dist/chunks/slate-helpers-CMAwCMk0.cjs.js +0 -24
  74. package/dist/chunks/slate-helpers-CMAwCMk0.cjs.js.map +0 -1
  75. package/dist/chunks/use-formatting-state-Denpy3Zo.cjs.js +0 -2
  76. package/dist/chunks/use-formatting-state-Denpy3Zo.cjs.js.map +0 -1
  77. package/dist/chunks/use-formatting-state-RJvSR-Zg.es.js +0 -247
  78. package/dist/chunks/use-formatting-state-RJvSR-Zg.es.js.map +0 -1
@@ -2,11 +2,11 @@ import { jsx as n, jsxs as c } from "react/jsx-runtime";
2
2
  import a from "react";
3
3
  import { B as T } from "./button-BXR4T980.es.js";
4
4
  import { I as O } from "./icon-button-CKidhzN0.es.js";
5
- import { I as j } from "./icon-BoRbJStV.es.js";
5
+ import { I as j } from "./icon-DHu0zrOb.es.js";
6
6
  import { createSlotRecipeContext as G } from "@chakra-ui/react";
7
7
  import { a as N } from "./index-BZioZQfA.es.js";
8
8
  import { KeyboardArrowDown as V } from "@commercetools/nimbus-icons";
9
- import { M as d } from "./menu-DZVU5Z-r.es.js";
9
+ import { M as d } from "./menu-DnbrSKhK.es.js";
10
10
  const { withProvider: _, withContext: u } = /* @__PURE__ */ G({
11
11
  recipe: N
12
12
  }), z = /* @__PURE__ */ _("div", "root"), K = /* @__PURE__ */ u("div", "buttonGroup"), L = /* @__PURE__ */ u("button", "primaryButton"), W = /* @__PURE__ */ u("button", "dropdownTrigger"), k = (m) => {
@@ -98,4 +98,4 @@ k.displayName = "SplitButton";
98
98
  export {
99
99
  k as S
100
100
  };
101
- //# sourceMappingURL=split-button-BR8DktKd.es.js.map
101
+ //# sourceMappingURL=split-button-ClVaxLZ7.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"split-button-BR8DktKd.es.js","sources":["../../src/components/split-button/split-button.slots.tsx","../../src/components/split-button/split-button.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-object-type */\nimport {\n createSlotRecipeContext,\n type HTMLChakraProps,\n type RecipeVariantProps,\n} from \"@chakra-ui/react\";\nimport { splitButtonSlotRecipe } from \"./split-button.recipe\";\n\nconst { withProvider, withContext } = createSlotRecipeContext({\n recipe: splitButtonSlotRecipe,\n});\n\n// Root Container\nexport interface SplitButtonRootSlotProps\n extends HTMLChakraProps<\n \"div\",\n RecipeVariantProps<typeof splitButtonSlotRecipe>\n > {}\nexport const SplitButtonRootSlot = withProvider<\n HTMLDivElement,\n SplitButtonRootSlotProps\n>(\"div\", \"root\");\n\n// Button Group Container\nexport interface SplitButtonButtonGroupSlotProps\n extends HTMLChakraProps<\"div\"> {}\nexport const SplitButtonButtonGroupSlot = withContext<\n HTMLDivElement,\n SplitButtonButtonGroupSlotProps\n>(\"div\", \"buttonGroup\");\n\n// Primary Action Button\nexport interface SplitButtonPrimaryButtonSlotProps\n extends HTMLChakraProps<\"button\"> {}\nexport const SplitButtonPrimaryButtonSlot = withContext<\n HTMLButtonElement,\n SplitButtonPrimaryButtonSlotProps\n>(\"button\", \"primaryButton\");\n\n// Dropdown Trigger Button\nexport interface SplitButtonTriggerSlotProps\n extends HTMLChakraProps<\"button\"> {}\nexport const SplitButtonTriggerSlot = withContext<\n HTMLButtonElement,\n SplitButtonTriggerSlotProps\n>(\"button\", \"dropdownTrigger\");\n","import React from \"react\";\nimport { Button } from \"@/components/button\";\nimport { IconButton } from \"@/components/icon-button\";\nimport { Menu } from \"@/components/menu\";\nimport { Icon } from \"@/components/icon\";\nimport type { SplitButtonProps } from \"./split-button.types\";\nimport {\n SplitButtonRootSlot,\n SplitButtonButtonGroupSlot,\n SplitButtonPrimaryButtonSlot,\n SplitButtonTriggerSlot,\n} from \"./split-button.slots\";\nimport { KeyboardArrowDown } from \"@commercetools/nimbus-icons\";\n\n// Re-export types\nexport type * from \"./split-button.types\";\n\n/**\n * # SplitButton\n *\n * A split-button component that combines a primary action button with a dropdown menu.\n *\n * Shows a primary action button + dropdown trigger. The primary button automatically\n * executes the first enabled Menu.Item action, while the dropdown trigger opens a menu\n * with all available options.\n *\n * Use with Menu.Item, Menu.Section, and Divider components for content.\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n const {\n size = \"md\",\n variant = \"solid\",\n tone,\n isDisabled = false,\n \"aria-label\": ariaLabel,\n onAction,\n isOpen,\n defaultOpen,\n onOpenChange,\n icon,\n } = props;\n\n const buttonProps = { size, variant, tone };\n\n /**\n * CORE CONCEPT: In split button mode, we need to populate the primary button\n * with content from a Menu.Item (specified by defaultAction prop).\n *\n * Why this complexity exists:\n * - Users define actions as <Menu.Item id=\"save\">Save Document</Menu.Item>\n * - We need to extract \"Save Document\" text to show on the primary button\n * - Menu.Items can be nested inside Menu.Section components\n * - We need to handle disabled states and fallbacks\n */\n\n // Type guards for safe prop access\n interface MenuItemProps {\n id: string;\n children: React.ReactNode;\n isDisabled?: boolean;\n isCritical?: boolean;\n }\n\n interface ComponentWithChildren {\n children: React.ReactNode;\n }\n\n // Check if element is a Menu.Item with required props\n const isMenuItemWithId = (\n element: React.ReactNode\n ): element is React.ReactElement<MenuItemProps> => {\n if (!React.isValidElement(element) || !element.props) return false;\n const props = element.props as Record<string, unknown>;\n return \"id\" in props && typeof props.id === \"string\";\n };\n\n // Check if element has children prop\n const hasChildren = (\n element: React.ReactNode\n ): element is React.ReactElement<ComponentWithChildren> => {\n if (!React.isValidElement(element) || !element.props) return false;\n const props = element.props as Record<string, unknown>;\n return \"children\" in props;\n };\n\n // All children are menu items\n const menuItems = props.children;\n\n /**\n * Check if there are any actionable (enabled) Menu.Items in the children.\n * This is used to determine if the dropdown trigger should be disabled.\n */\n const hasActionableMenuItems = (children: React.ReactNode): boolean => {\n let hasActionable = false;\n\n React.Children.forEach(children, (child) => {\n if (hasActionable) return;\n\n // Check if this is an enabled Menu.Item\n if (isMenuItemWithId(child) && !child.props.isDisabled) {\n hasActionable = true;\n return;\n }\n\n // Recurse into Menu.Section or any component with children\n if (hasChildren(child)) {\n hasActionable = hasActionableMenuItems(child.props.children);\n }\n });\n\n return hasActionable;\n };\n\n /**\n * Find the primary Menu.Item using the same logic as the original PrimaryActionDropdown.\n * Selects the first enabled Menu.Item, or falls back to the first Menu.Item if all are disabled.\n */\n const findPrimaryMenuItem = () => {\n const allMenuItems: Array<{\n content: React.ReactNode;\n isDisabled: boolean;\n actionId: string | null;\n }> = [];\n\n // Recursively collect all Menu.Items from children (including nested ones)\n const collectMenuItems = (children: React.ReactNode): void => {\n React.Children.forEach(children, (child) => {\n if (isMenuItemWithId(child)) {\n allMenuItems.push({\n content: child.props.children,\n isDisabled: child.props.isDisabled || false,\n actionId: child.props.id,\n });\n }\n\n // Recurse into Menu.Section or any component with children\n if (hasChildren(child)) {\n collectMenuItems(child.props.children);\n }\n });\n };\n\n collectMenuItems(menuItems);\n\n // Find first enabled Menu.Item, or fallback to first Menu.Item\n const primaryMenuItem =\n allMenuItems.find((item) => !item.isDisabled) || allMenuItems[0];\n\n return (\n primaryMenuItem || {\n // TODO: Localize this\n content: \"No actions available\",\n isDisabled: true,\n actionId: null,\n }\n );\n };\n\n // Check if there are any actionable menu items for dropdown functionality\n const hasActionableItems = hasActionableMenuItems(menuItems);\n\n // Get the primary button content using smart selection\n const buttonContent = findPrimaryMenuItem();\n\n const executePrimaryAction = () => {\n if (!buttonContent.isDisabled && buttonContent.actionId && onAction) {\n onAction(buttonContent.actionId);\n }\n };\n\n const isPrimaryDisabled = isDisabled || buttonContent.isDisabled;\n const isDropdownTriggerDisabled = isDisabled || !hasActionableItems;\n\n return (\n <SplitButtonRootSlot variant={variant} data-mode=\"split\">\n <SplitButtonButtonGroupSlot>\n {/* Primary Action Button */}\n <SplitButtonPrimaryButtonSlot asChild>\n <Button\n {...buttonProps}\n isDisabled={isPrimaryDisabled}\n onPress={executePrimaryAction}\n >\n {icon && <Icon>{icon}</Icon>}\n {buttonContent.content}\n </Button>\n </SplitButtonPrimaryButtonSlot>\n\n {/* Menu Trigger and Dropdown */}\n <Menu.Root\n trigger=\"press\"\n isOpen={isOpen}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n placement=\"bottom end\"\n selectionMode=\"none\"\n onAction={onAction ? (key) => onAction(String(key)) : undefined}\n >\n <Menu.Trigger asChild>\n <SplitButtonTriggerSlot asChild>\n <IconButton\n {...buttonProps}\n aria-label={ariaLabel}\n isDisabled={isDropdownTriggerDisabled}\n >\n <KeyboardArrowDown />\n </IconButton>\n </SplitButtonTriggerSlot>\n </Menu.Trigger>\n\n <Menu.Content>{menuItems}</Menu.Content>\n </Menu.Root>\n </SplitButtonButtonGroupSlot>\n </SplitButtonRootSlot>\n );\n};\n\nSplitButton.displayName = \"SplitButton\";\n\n// Export for internal use by react-docgen\nexport { SplitButton as _SplitButton };\n"],"names":["withProvider","withContext","createSlotRecipeContext","splitButtonSlotRecipe","SplitButtonRootSlot","SplitButtonButtonGroupSlot","SplitButtonPrimaryButtonSlot","SplitButtonTriggerSlot","SplitButton","props","size","variant","tone","isDisabled","ariaLabel","onAction","isOpen","defaultOpen","onOpenChange","icon","buttonProps","isMenuItemWithId","element","React","hasChildren","menuItems","hasActionableMenuItems","children","hasActionable","child","findPrimaryMenuItem","allMenuItems","collectMenuItems","item","hasActionableItems","buttonContent","executePrimaryAction","isPrimaryDisabled","isDropdownTriggerDisabled","jsx","jsxs","Button","Icon","Menu","key","IconButton","KeyboardArrowDown"],"mappings":";;;;;;;;;AAQA,MAAM,EAAE,cAAAA,GAAc,aAAAC,EAAA,IAAgB,gBAAAC,EAAwB;AAAA,EAC5D,QAAQC;AACV,CAAC,GAQYC,IAAsB,gBAAAJ,EAGjC,OAAO,MAAM,GAKFK,IAA6B,gBAAAJ,EAGxC,OAAO,aAAa,GAKTK,IAA+B,gBAAAL,EAG1C,UAAU,eAAe,GAKdM,IAAyB,gBAAAN,EAGpC,UAAU,iBAAiB,GCjBhBO,IAAc,CAACC,MAA4B;AACtD,QAAM;AAAA,IACJ,MAAAC,IAAO;AAAA,IACP,SAAAC,IAAU;AAAA,IACV,MAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,cAAcC;AAAA,IACd,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,MAAAC;AAAA,EAAA,IACEV,GAEEW,IAAc,EAAE,MAAAV,GAAM,SAAAC,GAAS,MAAAC,EAAA,GA0B/BS,IAAmB,CACvBC,MACiD;AACjD,QAAI,CAACC,EAAM,eAAeD,CAAO,KAAK,CAACA,EAAQ,MAAO,QAAO;AAC7D,UAAMb,IAAQa,EAAQ;AACtB,WAAO,QAAQb,KAAS,OAAOA,EAAM,MAAO;AAAA,EAC9C,GAGMe,IAAc,CAClBF,MAEI,CAACC,EAAM,eAAeD,CAAO,KAAK,CAACA,EAAQ,QAAc,KAEtD,cADOA,EAAQ,OAKlBG,IAAYhB,EAAM,UAMlBiB,IAAyB,CAACC,MAAuC;AACrE,QAAIC,IAAgB;AAEpBL,WAAAA,EAAM,SAAS,QAAQI,GAAU,CAACE,MAAU;AAC1C,UAAI,CAAAD,GAGJ;AAAA,YAAIP,EAAiBQ,CAAK,KAAK,CAACA,EAAM,MAAM,YAAY;AACtD,UAAAD,IAAgB;AAChB;AAAA,QACF;AAGA,QAAIJ,EAAYK,CAAK,MACnBD,IAAgBF,EAAuBG,EAAM,MAAM,QAAQ;AAAA;AAAA,IAE/D,CAAC,GAEMD;AAAA,EACT,GAMME,IAAsB,MAAM;AAChC,UAAMC,IAID,CAAA,GAGCC,IAAmB,CAACL,MAAoC;AAC5DJ,MAAAA,EAAM,SAAS,QAAQI,GAAU,CAACE,MAAU;AAC1C,QAAIR,EAAiBQ,CAAK,KACxBE,EAAa,KAAK;AAAA,UAChB,SAASF,EAAM,MAAM;AAAA,UACrB,YAAYA,EAAM,MAAM,cAAc;AAAA,UACtC,UAAUA,EAAM,MAAM;AAAA,QAAA,CACvB,GAICL,EAAYK,CAAK,KACnBG,EAAiBH,EAAM,MAAM,QAAQ;AAAA,MAEzC,CAAC;AAAA,IACH;AAEA,WAAAG,EAAiBP,CAAS,GAIxBM,EAAa,KAAK,CAACE,MAAS,CAACA,EAAK,UAAU,KAAKF,EAAa,CAAC,KAG5C;AAAA;AAAA,MAEjB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,IAAA;AAAA,EAGhB,GAGMG,IAAqBR,EAAuBD,CAAS,GAGrDU,IAAgBL,EAAA,GAEhBM,IAAuB,MAAM;AACjC,IAAI,CAACD,EAAc,cAAcA,EAAc,YAAYpB,KACzDA,EAASoB,EAAc,QAAQ;AAAA,EAEnC,GAEME,IAAoBxB,KAAcsB,EAAc,YAChDG,IAA4BzB,KAAc,CAACqB;AAEjD,2BACG9B,GAAA,EAAoB,SAAAO,GAAkB,aAAU,SAC/C,4BAACN,GAAA,EAEC,UAAA;AAAA,IAAA,gBAAAkC,EAACjC,GAAA,EAA6B,SAAO,IACnC,UAAA,gBAAAkC;AAAA,MAACC;AAAA,MAAA;AAAA,QACE,GAAGrB;AAAA,QACJ,YAAYiB;AAAA,QACZ,SAASD;AAAA,QAER,UAAA;AAAA,UAAAjB,KAAQ,gBAAAoB,EAACG,KAAM,UAAAvB,EAAA,CAAK;AAAA,UACpBgB,EAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEnB;AAAA,IAGA,gBAAAK;AAAA,MAACG,EAAK;AAAA,MAAL;AAAA,QACC,SAAQ;AAAA,QACR,QAAA3B;AAAA,QACA,aAAAC;AAAA,QACA,cAAAC;AAAA,QACA,WAAU;AAAA,QACV,eAAc;AAAA,QACd,UAAUH,IAAW,CAAC6B,MAAQ7B,EAAS,OAAO6B,CAAG,CAAC,IAAI;AAAA,QAEtD,UAAA;AAAA,UAAA,gBAAAL,EAACI,EAAK,SAAL,EAAa,SAAO,IACnB,UAAA,gBAAAJ,EAAChC,GAAA,EAAuB,SAAO,IAC7B,UAAA,gBAAAgC;AAAA,YAACM;AAAA,YAAA;AAAA,cACE,GAAGzB;AAAA,cACJ,cAAYN;AAAA,cACZ,YAAYwB;AAAA,cAEZ,4BAACQ,GAAA,CAAA,CAAkB;AAAA,YAAA;AAAA,UAAA,GAEvB,EAAA,CACF;AAAA,UAEA,gBAAAP,EAACI,EAAK,SAAL,EAAc,UAAAlB,EAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAC3B,EAAA,CACF,EAAA,CACF;AAEJ;AAEAjB,EAAY,cAAc;"}
1
+ {"version":3,"file":"split-button-ClVaxLZ7.es.js","sources":["../../src/components/split-button/split-button.slots.tsx","../../src/components/split-button/split-button.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-object-type */\nimport {\n createSlotRecipeContext,\n type HTMLChakraProps,\n type RecipeVariantProps,\n} from \"@chakra-ui/react\";\nimport { splitButtonSlotRecipe } from \"./split-button.recipe\";\n\nconst { withProvider, withContext } = createSlotRecipeContext({\n recipe: splitButtonSlotRecipe,\n});\n\n// Root Container\nexport interface SplitButtonRootSlotProps\n extends HTMLChakraProps<\n \"div\",\n RecipeVariantProps<typeof splitButtonSlotRecipe>\n > {}\nexport const SplitButtonRootSlot = withProvider<\n HTMLDivElement,\n SplitButtonRootSlotProps\n>(\"div\", \"root\");\n\n// Button Group Container\nexport interface SplitButtonButtonGroupSlotProps\n extends HTMLChakraProps<\"div\"> {}\nexport const SplitButtonButtonGroupSlot = withContext<\n HTMLDivElement,\n SplitButtonButtonGroupSlotProps\n>(\"div\", \"buttonGroup\");\n\n// Primary Action Button\nexport interface SplitButtonPrimaryButtonSlotProps\n extends HTMLChakraProps<\"button\"> {}\nexport const SplitButtonPrimaryButtonSlot = withContext<\n HTMLButtonElement,\n SplitButtonPrimaryButtonSlotProps\n>(\"button\", \"primaryButton\");\n\n// Dropdown Trigger Button\nexport interface SplitButtonTriggerSlotProps\n extends HTMLChakraProps<\"button\"> {}\nexport const SplitButtonTriggerSlot = withContext<\n HTMLButtonElement,\n SplitButtonTriggerSlotProps\n>(\"button\", \"dropdownTrigger\");\n","import React from \"react\";\nimport { Button } from \"@/components/button\";\nimport { IconButton } from \"@/components/icon-button\";\nimport { Menu } from \"@/components/menu\";\nimport { Icon } from \"@/components/icon\";\nimport type { SplitButtonProps } from \"./split-button.types\";\nimport {\n SplitButtonRootSlot,\n SplitButtonButtonGroupSlot,\n SplitButtonPrimaryButtonSlot,\n SplitButtonTriggerSlot,\n} from \"./split-button.slots\";\nimport { KeyboardArrowDown } from \"@commercetools/nimbus-icons\";\n\n// Re-export types\nexport type * from \"./split-button.types\";\n\n/**\n * # SplitButton\n *\n * A split-button component that combines a primary action button with a dropdown menu.\n *\n * Shows a primary action button + dropdown trigger. The primary button automatically\n * executes the first enabled Menu.Item action, while the dropdown trigger opens a menu\n * with all available options.\n *\n * Use with Menu.Item, Menu.Section, and Divider components for content.\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n const {\n size = \"md\",\n variant = \"solid\",\n tone,\n isDisabled = false,\n \"aria-label\": ariaLabel,\n onAction,\n isOpen,\n defaultOpen,\n onOpenChange,\n icon,\n } = props;\n\n const buttonProps = { size, variant, tone };\n\n /**\n * CORE CONCEPT: In split button mode, we need to populate the primary button\n * with content from a Menu.Item (specified by defaultAction prop).\n *\n * Why this complexity exists:\n * - Users define actions as <Menu.Item id=\"save\">Save Document</Menu.Item>\n * - We need to extract \"Save Document\" text to show on the primary button\n * - Menu.Items can be nested inside Menu.Section components\n * - We need to handle disabled states and fallbacks\n */\n\n // Type guards for safe prop access\n interface MenuItemProps {\n id: string;\n children: React.ReactNode;\n isDisabled?: boolean;\n isCritical?: boolean;\n }\n\n interface ComponentWithChildren {\n children: React.ReactNode;\n }\n\n // Check if element is a Menu.Item with required props\n const isMenuItemWithId = (\n element: React.ReactNode\n ): element is React.ReactElement<MenuItemProps> => {\n if (!React.isValidElement(element) || !element.props) return false;\n const props = element.props as Record<string, unknown>;\n return \"id\" in props && typeof props.id === \"string\";\n };\n\n // Check if element has children prop\n const hasChildren = (\n element: React.ReactNode\n ): element is React.ReactElement<ComponentWithChildren> => {\n if (!React.isValidElement(element) || !element.props) return false;\n const props = element.props as Record<string, unknown>;\n return \"children\" in props;\n };\n\n // All children are menu items\n const menuItems = props.children;\n\n /**\n * Check if there are any actionable (enabled) Menu.Items in the children.\n * This is used to determine if the dropdown trigger should be disabled.\n */\n const hasActionableMenuItems = (children: React.ReactNode): boolean => {\n let hasActionable = false;\n\n React.Children.forEach(children, (child) => {\n if (hasActionable) return;\n\n // Check if this is an enabled Menu.Item\n if (isMenuItemWithId(child) && !child.props.isDisabled) {\n hasActionable = true;\n return;\n }\n\n // Recurse into Menu.Section or any component with children\n if (hasChildren(child)) {\n hasActionable = hasActionableMenuItems(child.props.children);\n }\n });\n\n return hasActionable;\n };\n\n /**\n * Find the primary Menu.Item using the same logic as the original PrimaryActionDropdown.\n * Selects the first enabled Menu.Item, or falls back to the first Menu.Item if all are disabled.\n */\n const findPrimaryMenuItem = () => {\n const allMenuItems: Array<{\n content: React.ReactNode;\n isDisabled: boolean;\n actionId: string | null;\n }> = [];\n\n // Recursively collect all Menu.Items from children (including nested ones)\n const collectMenuItems = (children: React.ReactNode): void => {\n React.Children.forEach(children, (child) => {\n if (isMenuItemWithId(child)) {\n allMenuItems.push({\n content: child.props.children,\n isDisabled: child.props.isDisabled || false,\n actionId: child.props.id,\n });\n }\n\n // Recurse into Menu.Section or any component with children\n if (hasChildren(child)) {\n collectMenuItems(child.props.children);\n }\n });\n };\n\n collectMenuItems(menuItems);\n\n // Find first enabled Menu.Item, or fallback to first Menu.Item\n const primaryMenuItem =\n allMenuItems.find((item) => !item.isDisabled) || allMenuItems[0];\n\n return (\n primaryMenuItem || {\n // TODO: Localize this\n content: \"No actions available\",\n isDisabled: true,\n actionId: null,\n }\n );\n };\n\n // Check if there are any actionable menu items for dropdown functionality\n const hasActionableItems = hasActionableMenuItems(menuItems);\n\n // Get the primary button content using smart selection\n const buttonContent = findPrimaryMenuItem();\n\n const executePrimaryAction = () => {\n if (!buttonContent.isDisabled && buttonContent.actionId && onAction) {\n onAction(buttonContent.actionId);\n }\n };\n\n const isPrimaryDisabled = isDisabled || buttonContent.isDisabled;\n const isDropdownTriggerDisabled = isDisabled || !hasActionableItems;\n\n return (\n <SplitButtonRootSlot variant={variant} data-mode=\"split\">\n <SplitButtonButtonGroupSlot>\n {/* Primary Action Button */}\n <SplitButtonPrimaryButtonSlot asChild>\n <Button\n {...buttonProps}\n isDisabled={isPrimaryDisabled}\n onPress={executePrimaryAction}\n >\n {icon && <Icon>{icon}</Icon>}\n {buttonContent.content}\n </Button>\n </SplitButtonPrimaryButtonSlot>\n\n {/* Menu Trigger and Dropdown */}\n <Menu.Root\n trigger=\"press\"\n isOpen={isOpen}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n placement=\"bottom end\"\n selectionMode=\"none\"\n onAction={onAction ? (key) => onAction(String(key)) : undefined}\n >\n <Menu.Trigger asChild>\n <SplitButtonTriggerSlot asChild>\n <IconButton\n {...buttonProps}\n aria-label={ariaLabel}\n isDisabled={isDropdownTriggerDisabled}\n >\n <KeyboardArrowDown />\n </IconButton>\n </SplitButtonTriggerSlot>\n </Menu.Trigger>\n\n <Menu.Content>{menuItems}</Menu.Content>\n </Menu.Root>\n </SplitButtonButtonGroupSlot>\n </SplitButtonRootSlot>\n );\n};\n\nSplitButton.displayName = \"SplitButton\";\n\n// Export for internal use by react-docgen\nexport { SplitButton as _SplitButton };\n"],"names":["withProvider","withContext","createSlotRecipeContext","splitButtonSlotRecipe","SplitButtonRootSlot","SplitButtonButtonGroupSlot","SplitButtonPrimaryButtonSlot","SplitButtonTriggerSlot","SplitButton","props","size","variant","tone","isDisabled","ariaLabel","onAction","isOpen","defaultOpen","onOpenChange","icon","buttonProps","isMenuItemWithId","element","React","hasChildren","menuItems","hasActionableMenuItems","children","hasActionable","child","findPrimaryMenuItem","allMenuItems","collectMenuItems","item","hasActionableItems","buttonContent","executePrimaryAction","isPrimaryDisabled","isDropdownTriggerDisabled","jsx","jsxs","Button","Icon","Menu","key","IconButton","KeyboardArrowDown"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("react/jsx-runtime"),c=require("react"),R=require("./button-BooV4ncX.cjs.js"),E=require("./icon-button-CFLScvMi.cjs.js"),T=require("./icon-Cny8ZtnX.cjs.js"),O=require("@chakra-ui/react"),G=require("./index-QBeUpHcK.cjs.js"),N=require("@commercetools/nimbus-icons"),u=require("./menu-bzi7WVh0.cjs.js"),{withProvider:V,withContext:d}=O.createSlotRecipeContext({recipe:G.splitButtonSlotRecipe}),z=V("div","root"),K=d("div","buttonGroup"),L=d("button","primaryButton"),W=d("button","dropdownTrigger"),D=p=>{const{size:S="md",variant:b="solid",tone:g,isDisabled:h=!1,"aria-label":j,onAction:r,isOpen:C,defaultOpen:M,onOpenChange:y,icon:m}=p,f={size:S,variant:b,tone:g},I=t=>{if(!c.isValidElement(t)||!t.props)return!1;const n=t.props;return"id"in n&&typeof n.id=="string"},x=t=>!c.isValidElement(t)||!t.props?!1:"children"in t.props,a=p.children,B=t=>{let n=!1;return c.Children.forEach(t,s=>{if(!n){if(I(s)&&!s.props.isDisabled){n=!0;return}x(s)&&(n=B(s.props.children))}}),n},q=()=>{const t=[],n=l=>{c.Children.forEach(l,o=>{I(o)&&t.push({content:o.props.children,isDisabled:o.props.isDisabled||!1,actionId:o.props.id}),x(o)&&n(o.props.children)})};return n(a),t.find(l=>!l.isDisabled)||t[0]||{content:"No actions available",isDisabled:!0,actionId:null}},A=B(a),i=q(),P=()=>{!i.isDisabled&&i.actionId&&r&&r(i.actionId)},v=h||i.isDisabled,w=h||!A;return e.jsx(z,{variant:b,"data-mode":"split",children:e.jsxs(K,{children:[e.jsx(L,{asChild:!0,children:e.jsxs(R.Button,{...f,isDisabled:v,onPress:P,children:[m&&e.jsx(T.Icon,{children:m}),i.content]})}),e.jsxs(u.Menu.Root,{trigger:"press",isOpen:C,defaultOpen:M,onOpenChange:y,placement:"bottom end",selectionMode:"none",onAction:r?t=>r(String(t)):void 0,children:[e.jsx(u.Menu.Trigger,{asChild:!0,children:e.jsx(W,{asChild:!0,children:e.jsx(E.IconButton,{...f,"aria-label":j,isDisabled:w,children:e.jsx(N.KeyboardArrowDown,{})})})}),e.jsx(u.Menu.Content,{children:a})]})]})})};D.displayName="SplitButton";exports.SplitButton=D;
2
- //# sourceMappingURL=split-button-1uPesHKO.cjs.js.map
1
+ "use strict";const e=require("react/jsx-runtime"),c=require("react"),R=require("./button-BooV4ncX.cjs.js"),E=require("./icon-button-CFLScvMi.cjs.js"),T=require("./icon-BHx0r3NL.cjs.js"),O=require("@chakra-ui/react"),G=require("./index-QBeUpHcK.cjs.js"),N=require("@commercetools/nimbus-icons"),u=require("./menu-CQYhHGbS.cjs.js"),{withProvider:V,withContext:d}=O.createSlotRecipeContext({recipe:G.splitButtonSlotRecipe}),z=V("div","root"),K=d("div","buttonGroup"),L=d("button","primaryButton"),W=d("button","dropdownTrigger"),D=p=>{const{size:S="md",variant:b="solid",tone:g,isDisabled:h=!1,"aria-label":j,onAction:r,isOpen:C,defaultOpen:M,onOpenChange:y,icon:m}=p,f={size:S,variant:b,tone:g},I=t=>{if(!c.isValidElement(t)||!t.props)return!1;const n=t.props;return"id"in n&&typeof n.id=="string"},x=t=>!c.isValidElement(t)||!t.props?!1:"children"in t.props,a=p.children,B=t=>{let n=!1;return c.Children.forEach(t,s=>{if(!n){if(I(s)&&!s.props.isDisabled){n=!0;return}x(s)&&(n=B(s.props.children))}}),n},q=()=>{const t=[],n=l=>{c.Children.forEach(l,o=>{I(o)&&t.push({content:o.props.children,isDisabled:o.props.isDisabled||!1,actionId:o.props.id}),x(o)&&n(o.props.children)})};return n(a),t.find(l=>!l.isDisabled)||t[0]||{content:"No actions available",isDisabled:!0,actionId:null}},A=B(a),i=q(),P=()=>{!i.isDisabled&&i.actionId&&r&&r(i.actionId)},v=h||i.isDisabled,w=h||!A;return e.jsx(z,{variant:b,"data-mode":"split",children:e.jsxs(K,{children:[e.jsx(L,{asChild:!0,children:e.jsxs(R.Button,{...f,isDisabled:v,onPress:P,children:[m&&e.jsx(T.Icon,{children:m}),i.content]})}),e.jsxs(u.Menu.Root,{trigger:"press",isOpen:C,defaultOpen:M,onOpenChange:y,placement:"bottom end",selectionMode:"none",onAction:r?t=>r(String(t)):void 0,children:[e.jsx(u.Menu.Trigger,{asChild:!0,children:e.jsx(W,{asChild:!0,children:e.jsx(E.IconButton,{...f,"aria-label":j,isDisabled:w,children:e.jsx(N.KeyboardArrowDown,{})})})}),e.jsx(u.Menu.Content,{children:a})]})]})})};D.displayName="SplitButton";exports.SplitButton=D;
2
+ //# sourceMappingURL=split-button-D-3pT-LA.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"split-button-1uPesHKO.cjs.js","sources":["../../src/components/split-button/split-button.slots.tsx","../../src/components/split-button/split-button.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-object-type */\nimport {\n createSlotRecipeContext,\n type HTMLChakraProps,\n type RecipeVariantProps,\n} from \"@chakra-ui/react\";\nimport { splitButtonSlotRecipe } from \"./split-button.recipe\";\n\nconst { withProvider, withContext } = createSlotRecipeContext({\n recipe: splitButtonSlotRecipe,\n});\n\n// Root Container\nexport interface SplitButtonRootSlotProps\n extends HTMLChakraProps<\n \"div\",\n RecipeVariantProps<typeof splitButtonSlotRecipe>\n > {}\nexport const SplitButtonRootSlot = withProvider<\n HTMLDivElement,\n SplitButtonRootSlotProps\n>(\"div\", \"root\");\n\n// Button Group Container\nexport interface SplitButtonButtonGroupSlotProps\n extends HTMLChakraProps<\"div\"> {}\nexport const SplitButtonButtonGroupSlot = withContext<\n HTMLDivElement,\n SplitButtonButtonGroupSlotProps\n>(\"div\", \"buttonGroup\");\n\n// Primary Action Button\nexport interface SplitButtonPrimaryButtonSlotProps\n extends HTMLChakraProps<\"button\"> {}\nexport const SplitButtonPrimaryButtonSlot = withContext<\n HTMLButtonElement,\n SplitButtonPrimaryButtonSlotProps\n>(\"button\", \"primaryButton\");\n\n// Dropdown Trigger Button\nexport interface SplitButtonTriggerSlotProps\n extends HTMLChakraProps<\"button\"> {}\nexport const SplitButtonTriggerSlot = withContext<\n HTMLButtonElement,\n SplitButtonTriggerSlotProps\n>(\"button\", \"dropdownTrigger\");\n","import React from \"react\";\nimport { Button } from \"@/components/button\";\nimport { IconButton } from \"@/components/icon-button\";\nimport { Menu } from \"@/components/menu\";\nimport { Icon } from \"@/components/icon\";\nimport type { SplitButtonProps } from \"./split-button.types\";\nimport {\n SplitButtonRootSlot,\n SplitButtonButtonGroupSlot,\n SplitButtonPrimaryButtonSlot,\n SplitButtonTriggerSlot,\n} from \"./split-button.slots\";\nimport { KeyboardArrowDown } from \"@commercetools/nimbus-icons\";\n\n// Re-export types\nexport type * from \"./split-button.types\";\n\n/**\n * # SplitButton\n *\n * A split-button component that combines a primary action button with a dropdown menu.\n *\n * Shows a primary action button + dropdown trigger. The primary button automatically\n * executes the first enabled Menu.Item action, while the dropdown trigger opens a menu\n * with all available options.\n *\n * Use with Menu.Item, Menu.Section, and Divider components for content.\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n const {\n size = \"md\",\n variant = \"solid\",\n tone,\n isDisabled = false,\n \"aria-label\": ariaLabel,\n onAction,\n isOpen,\n defaultOpen,\n onOpenChange,\n icon,\n } = props;\n\n const buttonProps = { size, variant, tone };\n\n /**\n * CORE CONCEPT: In split button mode, we need to populate the primary button\n * with content from a Menu.Item (specified by defaultAction prop).\n *\n * Why this complexity exists:\n * - Users define actions as <Menu.Item id=\"save\">Save Document</Menu.Item>\n * - We need to extract \"Save Document\" text to show on the primary button\n * - Menu.Items can be nested inside Menu.Section components\n * - We need to handle disabled states and fallbacks\n */\n\n // Type guards for safe prop access\n interface MenuItemProps {\n id: string;\n children: React.ReactNode;\n isDisabled?: boolean;\n isCritical?: boolean;\n }\n\n interface ComponentWithChildren {\n children: React.ReactNode;\n }\n\n // Check if element is a Menu.Item with required props\n const isMenuItemWithId = (\n element: React.ReactNode\n ): element is React.ReactElement<MenuItemProps> => {\n if (!React.isValidElement(element) || !element.props) return false;\n const props = element.props as Record<string, unknown>;\n return \"id\" in props && typeof props.id === \"string\";\n };\n\n // Check if element has children prop\n const hasChildren = (\n element: React.ReactNode\n ): element is React.ReactElement<ComponentWithChildren> => {\n if (!React.isValidElement(element) || !element.props) return false;\n const props = element.props as Record<string, unknown>;\n return \"children\" in props;\n };\n\n // All children are menu items\n const menuItems = props.children;\n\n /**\n * Check if there are any actionable (enabled) Menu.Items in the children.\n * This is used to determine if the dropdown trigger should be disabled.\n */\n const hasActionableMenuItems = (children: React.ReactNode): boolean => {\n let hasActionable = false;\n\n React.Children.forEach(children, (child) => {\n if (hasActionable) return;\n\n // Check if this is an enabled Menu.Item\n if (isMenuItemWithId(child) && !child.props.isDisabled) {\n hasActionable = true;\n return;\n }\n\n // Recurse into Menu.Section or any component with children\n if (hasChildren(child)) {\n hasActionable = hasActionableMenuItems(child.props.children);\n }\n });\n\n return hasActionable;\n };\n\n /**\n * Find the primary Menu.Item using the same logic as the original PrimaryActionDropdown.\n * Selects the first enabled Menu.Item, or falls back to the first Menu.Item if all are disabled.\n */\n const findPrimaryMenuItem = () => {\n const allMenuItems: Array<{\n content: React.ReactNode;\n isDisabled: boolean;\n actionId: string | null;\n }> = [];\n\n // Recursively collect all Menu.Items from children (including nested ones)\n const collectMenuItems = (children: React.ReactNode): void => {\n React.Children.forEach(children, (child) => {\n if (isMenuItemWithId(child)) {\n allMenuItems.push({\n content: child.props.children,\n isDisabled: child.props.isDisabled || false,\n actionId: child.props.id,\n });\n }\n\n // Recurse into Menu.Section or any component with children\n if (hasChildren(child)) {\n collectMenuItems(child.props.children);\n }\n });\n };\n\n collectMenuItems(menuItems);\n\n // Find first enabled Menu.Item, or fallback to first Menu.Item\n const primaryMenuItem =\n allMenuItems.find((item) => !item.isDisabled) || allMenuItems[0];\n\n return (\n primaryMenuItem || {\n // TODO: Localize this\n content: \"No actions available\",\n isDisabled: true,\n actionId: null,\n }\n );\n };\n\n // Check if there are any actionable menu items for dropdown functionality\n const hasActionableItems = hasActionableMenuItems(menuItems);\n\n // Get the primary button content using smart selection\n const buttonContent = findPrimaryMenuItem();\n\n const executePrimaryAction = () => {\n if (!buttonContent.isDisabled && buttonContent.actionId && onAction) {\n onAction(buttonContent.actionId);\n }\n };\n\n const isPrimaryDisabled = isDisabled || buttonContent.isDisabled;\n const isDropdownTriggerDisabled = isDisabled || !hasActionableItems;\n\n return (\n <SplitButtonRootSlot variant={variant} data-mode=\"split\">\n <SplitButtonButtonGroupSlot>\n {/* Primary Action Button */}\n <SplitButtonPrimaryButtonSlot asChild>\n <Button\n {...buttonProps}\n isDisabled={isPrimaryDisabled}\n onPress={executePrimaryAction}\n >\n {icon && <Icon>{icon}</Icon>}\n {buttonContent.content}\n </Button>\n </SplitButtonPrimaryButtonSlot>\n\n {/* Menu Trigger and Dropdown */}\n <Menu.Root\n trigger=\"press\"\n isOpen={isOpen}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n placement=\"bottom end\"\n selectionMode=\"none\"\n onAction={onAction ? (key) => onAction(String(key)) : undefined}\n >\n <Menu.Trigger asChild>\n <SplitButtonTriggerSlot asChild>\n <IconButton\n {...buttonProps}\n aria-label={ariaLabel}\n isDisabled={isDropdownTriggerDisabled}\n >\n <KeyboardArrowDown />\n </IconButton>\n </SplitButtonTriggerSlot>\n </Menu.Trigger>\n\n <Menu.Content>{menuItems}</Menu.Content>\n </Menu.Root>\n </SplitButtonButtonGroupSlot>\n </SplitButtonRootSlot>\n );\n};\n\nSplitButton.displayName = \"SplitButton\";\n\n// Export for internal use by react-docgen\nexport { SplitButton as _SplitButton };\n"],"names":["withProvider","withContext","createSlotRecipeContext","splitButtonSlotRecipe","SplitButtonRootSlot","SplitButtonButtonGroupSlot","SplitButtonPrimaryButtonSlot","SplitButtonTriggerSlot","SplitButton","props","size","variant","tone","isDisabled","ariaLabel","onAction","isOpen","defaultOpen","onOpenChange","icon","buttonProps","isMenuItemWithId","element","React","hasChildren","menuItems","hasActionableMenuItems","children","hasActionable","child","findPrimaryMenuItem","allMenuItems","collectMenuItems","item","hasActionableItems","buttonContent","executePrimaryAction","isPrimaryDisabled","isDropdownTriggerDisabled","jsx","jsxs","Button","Icon","Menu","key","IconButton","KeyboardArrowDown"],"mappings":"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"}
1
+ {"version":3,"file":"split-button-D-3pT-LA.cjs.js","sources":["../../src/components/split-button/split-button.slots.tsx","../../src/components/split-button/split-button.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-object-type */\nimport {\n createSlotRecipeContext,\n type HTMLChakraProps,\n type RecipeVariantProps,\n} from \"@chakra-ui/react\";\nimport { splitButtonSlotRecipe } from \"./split-button.recipe\";\n\nconst { withProvider, withContext } = createSlotRecipeContext({\n recipe: splitButtonSlotRecipe,\n});\n\n// Root Container\nexport interface SplitButtonRootSlotProps\n extends HTMLChakraProps<\n \"div\",\n RecipeVariantProps<typeof splitButtonSlotRecipe>\n > {}\nexport const SplitButtonRootSlot = withProvider<\n HTMLDivElement,\n SplitButtonRootSlotProps\n>(\"div\", \"root\");\n\n// Button Group Container\nexport interface SplitButtonButtonGroupSlotProps\n extends HTMLChakraProps<\"div\"> {}\nexport const SplitButtonButtonGroupSlot = withContext<\n HTMLDivElement,\n SplitButtonButtonGroupSlotProps\n>(\"div\", \"buttonGroup\");\n\n// Primary Action Button\nexport interface SplitButtonPrimaryButtonSlotProps\n extends HTMLChakraProps<\"button\"> {}\nexport const SplitButtonPrimaryButtonSlot = withContext<\n HTMLButtonElement,\n SplitButtonPrimaryButtonSlotProps\n>(\"button\", \"primaryButton\");\n\n// Dropdown Trigger Button\nexport interface SplitButtonTriggerSlotProps\n extends HTMLChakraProps<\"button\"> {}\nexport const SplitButtonTriggerSlot = withContext<\n HTMLButtonElement,\n SplitButtonTriggerSlotProps\n>(\"button\", \"dropdownTrigger\");\n","import React from \"react\";\nimport { Button } from \"@/components/button\";\nimport { IconButton } from \"@/components/icon-button\";\nimport { Menu } from \"@/components/menu\";\nimport { Icon } from \"@/components/icon\";\nimport type { SplitButtonProps } from \"./split-button.types\";\nimport {\n SplitButtonRootSlot,\n SplitButtonButtonGroupSlot,\n SplitButtonPrimaryButtonSlot,\n SplitButtonTriggerSlot,\n} from \"./split-button.slots\";\nimport { KeyboardArrowDown } from \"@commercetools/nimbus-icons\";\n\n// Re-export types\nexport type * from \"./split-button.types\";\n\n/**\n * # SplitButton\n *\n * A split-button component that combines a primary action button with a dropdown menu.\n *\n * Shows a primary action button + dropdown trigger. The primary button automatically\n * executes the first enabled Menu.Item action, while the dropdown trigger opens a menu\n * with all available options.\n *\n * Use with Menu.Item, Menu.Section, and Divider components for content.\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n const {\n size = \"md\",\n variant = \"solid\",\n tone,\n isDisabled = false,\n \"aria-label\": ariaLabel,\n onAction,\n isOpen,\n defaultOpen,\n onOpenChange,\n icon,\n } = props;\n\n const buttonProps = { size, variant, tone };\n\n /**\n * CORE CONCEPT: In split button mode, we need to populate the primary button\n * with content from a Menu.Item (specified by defaultAction prop).\n *\n * Why this complexity exists:\n * - Users define actions as <Menu.Item id=\"save\">Save Document</Menu.Item>\n * - We need to extract \"Save Document\" text to show on the primary button\n * - Menu.Items can be nested inside Menu.Section components\n * - We need to handle disabled states and fallbacks\n */\n\n // Type guards for safe prop access\n interface MenuItemProps {\n id: string;\n children: React.ReactNode;\n isDisabled?: boolean;\n isCritical?: boolean;\n }\n\n interface ComponentWithChildren {\n children: React.ReactNode;\n }\n\n // Check if element is a Menu.Item with required props\n const isMenuItemWithId = (\n element: React.ReactNode\n ): element is React.ReactElement<MenuItemProps> => {\n if (!React.isValidElement(element) || !element.props) return false;\n const props = element.props as Record<string, unknown>;\n return \"id\" in props && typeof props.id === \"string\";\n };\n\n // Check if element has children prop\n const hasChildren = (\n element: React.ReactNode\n ): element is React.ReactElement<ComponentWithChildren> => {\n if (!React.isValidElement(element) || !element.props) return false;\n const props = element.props as Record<string, unknown>;\n return \"children\" in props;\n };\n\n // All children are menu items\n const menuItems = props.children;\n\n /**\n * Check if there are any actionable (enabled) Menu.Items in the children.\n * This is used to determine if the dropdown trigger should be disabled.\n */\n const hasActionableMenuItems = (children: React.ReactNode): boolean => {\n let hasActionable = false;\n\n React.Children.forEach(children, (child) => {\n if (hasActionable) return;\n\n // Check if this is an enabled Menu.Item\n if (isMenuItemWithId(child) && !child.props.isDisabled) {\n hasActionable = true;\n return;\n }\n\n // Recurse into Menu.Section or any component with children\n if (hasChildren(child)) {\n hasActionable = hasActionableMenuItems(child.props.children);\n }\n });\n\n return hasActionable;\n };\n\n /**\n * Find the primary Menu.Item using the same logic as the original PrimaryActionDropdown.\n * Selects the first enabled Menu.Item, or falls back to the first Menu.Item if all are disabled.\n */\n const findPrimaryMenuItem = () => {\n const allMenuItems: Array<{\n content: React.ReactNode;\n isDisabled: boolean;\n actionId: string | null;\n }> = [];\n\n // Recursively collect all Menu.Items from children (including nested ones)\n const collectMenuItems = (children: React.ReactNode): void => {\n React.Children.forEach(children, (child) => {\n if (isMenuItemWithId(child)) {\n allMenuItems.push({\n content: child.props.children,\n isDisabled: child.props.isDisabled || false,\n actionId: child.props.id,\n });\n }\n\n // Recurse into Menu.Section or any component with children\n if (hasChildren(child)) {\n collectMenuItems(child.props.children);\n }\n });\n };\n\n collectMenuItems(menuItems);\n\n // Find first enabled Menu.Item, or fallback to first Menu.Item\n const primaryMenuItem =\n allMenuItems.find((item) => !item.isDisabled) || allMenuItems[0];\n\n return (\n primaryMenuItem || {\n // TODO: Localize this\n content: \"No actions available\",\n isDisabled: true,\n actionId: null,\n }\n );\n };\n\n // Check if there are any actionable menu items for dropdown functionality\n const hasActionableItems = hasActionableMenuItems(menuItems);\n\n // Get the primary button content using smart selection\n const buttonContent = findPrimaryMenuItem();\n\n const executePrimaryAction = () => {\n if (!buttonContent.isDisabled && buttonContent.actionId && onAction) {\n onAction(buttonContent.actionId);\n }\n };\n\n const isPrimaryDisabled = isDisabled || buttonContent.isDisabled;\n const isDropdownTriggerDisabled = isDisabled || !hasActionableItems;\n\n return (\n <SplitButtonRootSlot variant={variant} data-mode=\"split\">\n <SplitButtonButtonGroupSlot>\n {/* Primary Action Button */}\n <SplitButtonPrimaryButtonSlot asChild>\n <Button\n {...buttonProps}\n isDisabled={isPrimaryDisabled}\n onPress={executePrimaryAction}\n >\n {icon && <Icon>{icon}</Icon>}\n {buttonContent.content}\n </Button>\n </SplitButtonPrimaryButtonSlot>\n\n {/* Menu Trigger and Dropdown */}\n <Menu.Root\n trigger=\"press\"\n isOpen={isOpen}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n placement=\"bottom end\"\n selectionMode=\"none\"\n onAction={onAction ? (key) => onAction(String(key)) : undefined}\n >\n <Menu.Trigger asChild>\n <SplitButtonTriggerSlot asChild>\n <IconButton\n {...buttonProps}\n aria-label={ariaLabel}\n isDisabled={isDropdownTriggerDisabled}\n >\n <KeyboardArrowDown />\n </IconButton>\n </SplitButtonTriggerSlot>\n </Menu.Trigger>\n\n <Menu.Content>{menuItems}</Menu.Content>\n </Menu.Root>\n </SplitButtonButtonGroupSlot>\n </SplitButtonRootSlot>\n );\n};\n\nSplitButton.displayName = \"SplitButton\";\n\n// Export for internal use by react-docgen\nexport { SplitButton as _SplitButton };\n"],"names":["withProvider","withContext","createSlotRecipeContext","splitButtonSlotRecipe","SplitButtonRootSlot","SplitButtonButtonGroupSlot","SplitButtonPrimaryButtonSlot","SplitButtonTriggerSlot","SplitButton","props","size","variant","tone","isDisabled","ariaLabel","onAction","isOpen","defaultOpen","onOpenChange","icon","buttonProps","isMenuItemWithId","element","React","hasChildren","menuItems","hasActionableMenuItems","children","hasActionable","child","findPrimaryMenuItem","allMenuItems","collectMenuItems","item","hasActionableItems","buttonContent","executePrimaryAction","isPrimaryDisabled","isDropdownTriggerDisabled","jsx","jsxs","Button","Icon","Menu","key","IconButton","KeyboardArrowDown"],"mappings":"0UAQM,CAAE,aAAAA,EAAc,YAAAC,CAAA,EAAgBC,0BAAwB,CAC5D,OAAQC,EAAAA,qBACV,CAAC,EAQYC,EAAsBJ,EAGjC,MAAO,MAAM,EAKFK,EAA6BJ,EAGxC,MAAO,aAAa,EAKTK,EAA+BL,EAG1C,SAAU,eAAe,EAKdM,EAAyBN,EAGpC,SAAU,iBAAiB,ECjBhBO,EAAeC,GAA4B,CACtD,KAAM,CACJ,KAAAC,EAAO,KACP,QAAAC,EAAU,QACV,KAAAC,EACA,WAAAC,EAAa,GACb,aAAcC,EACd,SAAAC,EACA,OAAAC,EACA,YAAAC,EACA,aAAAC,EAAA,KACAC,CAAA,EACEV,EAEEW,EAAc,CAAE,KAAAV,EAAM,QAAAC,EAAS,KAAAC,CAAA,EA0B/BS,EACJC,GACiD,CACjD,GAAI,CAACC,EAAM,eAAeD,CAAO,GAAK,CAACA,EAAQ,MAAO,MAAO,GAC7D,MAAMb,EAAQa,EAAQ,MACtB,MAAO,OAAQb,GAAS,OAAOA,EAAM,IAAO,QAC9C,EAGMe,EACJF,GAEI,CAACC,EAAM,eAAeD,CAAO,GAAK,CAACA,EAAQ,MAAc,GAEtD,aADOA,EAAQ,MAKlBG,EAAYhB,EAAM,SAMlBiB,EAA0BC,GAAuC,CACrE,IAAIC,EAAgB,GAEpB,OAAAL,EAAM,SAAS,QAAQI,EAAWE,GAAU,CAC1C,GAAI,CAAAD,EAGJ,IAAIP,EAAiBQ,CAAK,GAAK,CAACA,EAAM,MAAM,WAAY,CACtDD,EAAgB,GAChB,MACF,CAGIJ,EAAYK,CAAK,IACnBD,EAAgBF,EAAuBG,EAAM,MAAM,QAAQ,GAE/D,CAAC,EAEMD,CACT,EAMME,EAAsB,IAAM,CAChC,MAAMC,EAID,CAAA,EAGCC,EAAoBL,GAAoC,CAC5DJ,EAAM,SAAS,QAAQI,EAAWE,GAAU,CACtCR,EAAiBQ,CAAK,GACxBE,EAAa,KAAK,CAChB,QAASF,EAAM,MAAM,SACrB,WAAYA,EAAM,MAAM,YAAc,GACtC,SAAUA,EAAM,MAAM,EAAA,CACvB,EAICL,EAAYK,CAAK,GACnBG,EAAiBH,EAAM,MAAM,QAAQ,CAEzC,CAAC,CACH,EAEA,OAAAG,EAAiBP,CAAS,EAIxBM,EAAa,KAAME,GAAS,CAACA,EAAK,UAAU,GAAKF,EAAa,CAAC,GAG5C,CAEjB,QAAS,uBACT,WAAY,GACZ,SAAU,IAAA,CAGhB,EAGMG,EAAqBR,EAAuBD,CAAS,EAGrDU,EAAgBL,EAAA,EAEhBM,EAAuB,IAAM,CAC7B,CAACD,EAAc,YAAcA,EAAc,UAAYpB,GACzDA,EAASoB,EAAc,QAAQ,CAEnC,EAEME,EAAoBxB,GAAcsB,EAAc,WAChDG,EAA4BzB,GAAc,CAACqB,EAEjD,aACG9B,EAAA,CAAoB,QAAAO,EAAkB,YAAU,QAC/C,gBAACN,EAAA,CAEC,SAAA,CAAAkC,EAAAA,IAACjC,EAAA,CAA6B,QAAO,GACnC,SAAAkC,EAAAA,KAACC,EAAAA,OAAA,CACE,GAAGrB,EACJ,WAAYiB,EACZ,QAASD,EAER,SAAA,CAAAjB,GAAQoB,EAAAA,IAACG,EAAAA,MAAM,SAAAvB,CAAA,CAAK,EACpBgB,EAAc,OAAA,CAAA,CAAA,EAEnB,EAGAK,EAAAA,KAACG,EAAAA,KAAK,KAAL,CACC,QAAQ,QACR,OAAA3B,EACA,YAAAC,EACA,aAAAC,EACA,UAAU,aACV,cAAc,OACd,SAAUH,EAAY6B,GAAQ7B,EAAS,OAAO6B,CAAG,CAAC,EAAI,OAEtD,SAAA,CAAAL,EAAAA,IAACI,EAAAA,KAAK,QAAL,CAAa,QAAO,GACnB,SAAAJ,EAAAA,IAAChC,EAAA,CAAuB,QAAO,GAC7B,SAAAgC,EAAAA,IAACM,EAAAA,WAAA,CACE,GAAGzB,EACJ,aAAYN,EACZ,WAAYwB,EAEZ,eAACQ,EAAAA,kBAAA,CAAA,CAAkB,CAAA,CAAA,EAEvB,CAAA,CACF,EAEAP,EAAAA,IAACI,EAAAA,KAAK,QAAL,CAAc,SAAAlB,CAAA,CAAU,CAAA,CAAA,CAAA,CAC3B,CAAA,CACF,CAAA,CACF,CAEJ,EAEAjB,EAAY,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";const u=require("react"),i=require("../components/utils.cjs");function l(e){return u.useMemo(()=>{if(!i.canUseDOM())return{isValid:!0,svgAttributes:{},innerSvgContent:e};const n=i.sanitizeSvg(e,{allowStyles:!1,forbiddenAttributes:[],forbiddenTags:[]});if(!n)return console.warn("InlineSvg: Failed to sanitize SVG data"),{isValid:!1,svgAttributes:{},innerSvgContent:""};const t=new DOMParser().parseFromString(n,"image/svg+xml").querySelector("svg");if(!t)return console.warn("InlineSvg: No SVG element found in markup"),{isValid:!1,svgAttributes:{},innerSvgContent:""};const r={};for(const s of Array.from(t.attributes)){const o=s.name.replace(/-([a-z])/g,(S,a)=>a.toUpperCase());r[o]=s.value}return{isValid:!0,svgAttributes:r,innerSvgContent:t.innerHTML}},[e])}exports.useInlineSvg=l;
2
+ //# sourceMappingURL=use-inline-svg-C2ko8Bcq.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-inline-svg-C2ko8Bcq.cjs.js","sources":["../../src/components/inline-svg/hooks/use-inline-svg.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { sanitizeSvg, canUseDOM } from \"../utils\";\n\n/**\n * Hook for processing and sanitizing SVG data\n * @param data - Raw SVG markup as a string\n * @returns Processed SVG attributes, content, and sanitization status\n */\nexport function useInlineSvg(data: string) {\n // Process and sanitize SVG data in a single operation\n const processedSvg = useMemo(() => {\n if (!canUseDOM()) {\n return {\n isValid: true,\n svgAttributes: {},\n innerSvgContent: data,\n };\n }\n\n const sanitized = sanitizeSvg(data, {\n allowStyles: false,\n forbiddenAttributes: [],\n forbiddenTags: [],\n });\n\n if (!sanitized) {\n console.warn(\"InlineSvg: Failed to sanitize SVG data\");\n return {\n isValid: false,\n svgAttributes: {},\n innerSvgContent: \"\",\n };\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(sanitized, \"image/svg+xml\");\n const svgEl = doc.querySelector(\"svg\");\n\n if (!svgEl) {\n console.warn(\"InlineSvg: No SVG element found in markup\");\n return {\n isValid: false,\n svgAttributes: {},\n innerSvgContent: \"\",\n };\n }\n\n const attrs: Record<string, string> = {};\n\n // Preserve all attributes from the sanitized SVG element\n // Security: Only attributes that passed sanitization are included\n for (const attr of Array.from(svgEl.attributes)) {\n // Convert kebab-case to camelCase for React compatibility\n const reactAttrName = attr.name.replace(/-([a-z])/g, (_, letter) =>\n letter.toUpperCase()\n );\n attrs[reactAttrName] = attr.value;\n }\n\n return {\n isValid: true,\n svgAttributes: attrs,\n innerSvgContent: svgEl.innerHTML,\n };\n }, [data]);\n\n return processedSvg;\n}\n"],"names":["useInlineSvg","data","useMemo","canUseDOM","sanitized","sanitizeSvg","svgEl","attrs","attr","reactAttrName","_","letter"],"mappings":"2EAQO,SAASA,EAAaC,EAAc,CA0DzC,OAxDqBC,EAAAA,QAAQ,IAAM,CACjC,GAAI,CAACC,EAAAA,YACH,MAAO,CACL,QAAS,GACT,cAAe,CAAA,EACf,gBAAiBF,CAAA,EAIrB,MAAMG,EAAYC,EAAAA,YAAYJ,EAAM,CAClC,YAAa,GACb,oBAAqB,CAAA,EACrB,cAAe,CAAA,CAAC,CACjB,EAED,GAAI,CAACG,EACH,eAAQ,KAAK,wCAAwC,EAC9C,CACL,QAAS,GACT,cAAe,CAAA,EACf,gBAAiB,EAAA,EAMrB,MAAME,EAFS,IAAI,UAAA,EACA,gBAAgBF,EAAW,eAAe,EAC3C,cAAc,KAAK,EAErC,GAAI,CAACE,EACH,eAAQ,KAAK,2CAA2C,EACjD,CACL,QAAS,GACT,cAAe,CAAA,EACf,gBAAiB,EAAA,EAIrB,MAAMC,EAAgC,CAAA,EAItC,UAAWC,KAAQ,MAAM,KAAKF,EAAM,UAAU,EAAG,CAE/C,MAAMG,EAAgBD,EAAK,KAAK,QAAQ,YAAa,CAACE,EAAGC,IACvDA,EAAO,YAAA,CAAY,EAErBJ,EAAME,CAAa,EAAID,EAAK,KAC9B,CAEA,MAAO,CACL,QAAS,GACT,cAAeD,EACf,gBAAiBD,EAAM,SAAA,CAE3B,EAAG,CAACL,CAAI,CAAC,CAGX"}
@@ -0,0 +1,47 @@
1
+ import { useMemo as a } from "react";
2
+ import { canUseDOM as l, sanitizeSvg as g } from "../components/utils.es.js";
3
+ function m(e) {
4
+ return a(() => {
5
+ if (!l())
6
+ return {
7
+ isValid: !0,
8
+ svgAttributes: {},
9
+ innerSvgContent: e
10
+ };
11
+ const r = g(e, {
12
+ allowStyles: !1,
13
+ forbiddenAttributes: [],
14
+ forbiddenTags: []
15
+ });
16
+ if (!r)
17
+ return console.warn("InlineSvg: Failed to sanitize SVG data"), {
18
+ isValid: !1,
19
+ svgAttributes: {},
20
+ innerSvgContent: ""
21
+ };
22
+ const t = new DOMParser().parseFromString(r, "image/svg+xml").querySelector("svg");
23
+ if (!t)
24
+ return console.warn("InlineSvg: No SVG element found in markup"), {
25
+ isValid: !1,
26
+ svgAttributes: {},
27
+ innerSvgContent: ""
28
+ };
29
+ const n = {};
30
+ for (const s of Array.from(t.attributes)) {
31
+ const i = s.name.replace(
32
+ /-([a-z])/g,
33
+ (f, o) => o.toUpperCase()
34
+ );
35
+ n[i] = s.value;
36
+ }
37
+ return {
38
+ isValid: !0,
39
+ svgAttributes: n,
40
+ innerSvgContent: t.innerHTML
41
+ };
42
+ }, [e]);
43
+ }
44
+ export {
45
+ m as u
46
+ };
47
+ //# sourceMappingURL=use-inline-svg-Cua0623E.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-inline-svg-Cua0623E.es.js","sources":["../../src/components/inline-svg/hooks/use-inline-svg.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { sanitizeSvg, canUseDOM } from \"../utils\";\n\n/**\n * Hook for processing and sanitizing SVG data\n * @param data - Raw SVG markup as a string\n * @returns Processed SVG attributes, content, and sanitization status\n */\nexport function useInlineSvg(data: string) {\n // Process and sanitize SVG data in a single operation\n const processedSvg = useMemo(() => {\n if (!canUseDOM()) {\n return {\n isValid: true,\n svgAttributes: {},\n innerSvgContent: data,\n };\n }\n\n const sanitized = sanitizeSvg(data, {\n allowStyles: false,\n forbiddenAttributes: [],\n forbiddenTags: [],\n });\n\n if (!sanitized) {\n console.warn(\"InlineSvg: Failed to sanitize SVG data\");\n return {\n isValid: false,\n svgAttributes: {},\n innerSvgContent: \"\",\n };\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(sanitized, \"image/svg+xml\");\n const svgEl = doc.querySelector(\"svg\");\n\n if (!svgEl) {\n console.warn(\"InlineSvg: No SVG element found in markup\");\n return {\n isValid: false,\n svgAttributes: {},\n innerSvgContent: \"\",\n };\n }\n\n const attrs: Record<string, string> = {};\n\n // Preserve all attributes from the sanitized SVG element\n // Security: Only attributes that passed sanitization are included\n for (const attr of Array.from(svgEl.attributes)) {\n // Convert kebab-case to camelCase for React compatibility\n const reactAttrName = attr.name.replace(/-([a-z])/g, (_, letter) =>\n letter.toUpperCase()\n );\n attrs[reactAttrName] = attr.value;\n }\n\n return {\n isValid: true,\n svgAttributes: attrs,\n innerSvgContent: svgEl.innerHTML,\n };\n }, [data]);\n\n return processedSvg;\n}\n"],"names":["useInlineSvg","data","useMemo","canUseDOM","sanitized","sanitizeSvg","svgEl","attrs","attr","reactAttrName","_","letter"],"mappings":";;AAQO,SAASA,EAAaC,GAAc;AA0DzC,SAxDqBC,EAAQ,MAAM;AACjC,QAAI,CAACC;AACH,aAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe,CAAA;AAAA,QACf,iBAAiBF;AAAA,MAAA;AAIrB,UAAMG,IAAYC,EAAYJ,GAAM;AAAA,MAClC,aAAa;AAAA,MACb,qBAAqB,CAAA;AAAA,MACrB,eAAe,CAAA;AAAA,IAAC,CACjB;AAED,QAAI,CAACG;AACH,qBAAQ,KAAK,wCAAwC,GAC9C;AAAA,QACL,SAAS;AAAA,QACT,eAAe,CAAA;AAAA,QACf,iBAAiB;AAAA,MAAA;AAMrB,UAAME,IAFS,IAAI,UAAA,EACA,gBAAgBF,GAAW,eAAe,EAC3C,cAAc,KAAK;AAErC,QAAI,CAACE;AACH,qBAAQ,KAAK,2CAA2C,GACjD;AAAA,QACL,SAAS;AAAA,QACT,eAAe,CAAA;AAAA,QACf,iBAAiB;AAAA,MAAA;AAIrB,UAAMC,IAAgC,CAAA;AAItC,eAAWC,KAAQ,MAAM,KAAKF,EAAM,UAAU,GAAG;AAE/C,YAAMG,IAAgBD,EAAK,KAAK;AAAA,QAAQ;AAAA,QAAa,CAACE,GAAGC,MACvDA,EAAO,YAAA;AAAA,MAAY;AAErB,MAAAJ,EAAME,CAAa,IAAID,EAAK;AAAA,IAC9B;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,eAAeD;AAAA,MACf,iBAAiBD,EAAM;AAAA,IAAA;AAAA,EAE3B,GAAG,CAACL,CAAI,CAAC;AAGX;"}
@@ -1,2 +1,2 @@
1
- "use strict";const p=require("../chunks/avatar-C2KIWewd.cjs.js"),b=require("../chunks/box-CWni3A32.cjs.js"),g=require("../chunks/button-BooV4ncX.cjs.js"),T=require("../chunks/code-q31e3vT2.cjs.js"),a=require("../chunks/combobox-BNYcRoYl.cjs.js"),m=require("../chunks/dialog-CVa-E9-A.cjs.js"),q=require("../chunks/divider-Lm98hgn6.cjs.js"),_=require("../chunks/group-Buy-O6Mr.cjs.js"),I=require("../chunks/icon-button-CFLScvMi.cjs.js"),B=require("../chunks/icon-toggle-button-DJsMgc_N.cjs.js"),C=require("../chunks/image-CGOYoc2s.cjs.js"),R=require("../chunks/kbd-DFeaXiKY.cjs.js"),D=require("../chunks/link-DWa1zIUJ.cjs.js"),u=require("../chunks/list-DJC9BmoC.cjs.js"),F=require("../chunks/simple-grid-Cd2MJxSX.cjs.js"),x=require("../chunks/text-CCW9kDT_.cjs.js"),c=require("../chunks/tooltip-g8-hEdZp.cjs.js"),S=require("../chunks/make-element-focusable-bPAMXt4D.cjs.js"),A=require("../chunks/nimbus-provider-DU9neylH.cjs.js"),G=require("../chunks/checkbox-DDB06avu.cjs.js"),M=require("../chunks/stack-CIN13EDn.cjs.js"),k=require("../chunks/visually-hidden-Bh-G5QHv.cjs.js"),P=require("../chunks/text-input-BtBwAmoa.cjs.js"),O=require("../chunks/number-input-C6V-OoKY.cjs.js"),L=require("../chunks/grid-Chuw1xje.cjs.js"),i=require("../chunks/select-BAV0cdM5.cjs.js"),r=require("../chunks/accordion-PyQH8Q_y.cjs.js"),n=require("../chunks/alert-BhezYOzs.cjs.js"),H=require("../chunks/badge-CCrBksXu.cjs.js"),l=require("../chunks/card-DeWTV05B.cjs.js"),o=require("../chunks/form-field-DMiHuyrx.cjs.js"),h=require("../chunks/icon-Cny8ZtnX.cjs.js"),v=require("../chunks/loading-spinner-CSKBo1bM.cjs.js"),y=require("../chunks/password-input-BVDnOfvR.cjs.js"),f=require("../chunks/split-button-1uPesHKO.cjs.js"),w=require("../chunks/time-input-DP2ci38H.cjs.js"),E=require("../chunks/multiline-text-input-XDsu-5Ir.cjs.js"),d=require("../chunks/radio-input-CpWPWVHJ.cjs.js"),N=require("../chunks/switch-BjdhpPWV.cjs.js"),j=require("../chunks/tag-group-D6_THomO.cjs.js"),K=require("../chunks/toggle-button-D8qdeoHu.cjs.js"),s=require("../chunks/toggle-button-group-DX134q7m.cjs.js"),V=require("../chunks/date-input-DaemC1P1.cjs.js"),z=require("../chunks/calendar-Dyy7Fm8f.cjs.js"),J=require("../chunks/date-picker-Bqf7Y-W-.cjs.js"),Q=require("../chunks/progress-bar-EQdUUcCZ.cjs.js"),U=require("../chunks/range-calendar-jXa_w-79.cjs.js"),W=require("../chunks/date-range-picker-DHnuq-hT.cjs.js"),X=require("../chunks/toolbar-BfEvyuOt.cjs.js"),Y=require("../chunks/rich-text-input-B3s6cy-T.cjs.js"),e=require("../chunks/data-table-DFhiLq16.cjs.js"),Z=require("../chunks/pagination-DFmOo7da.cjs.js"),$=require("@chakra-ui/react/flex"),ee=require("@chakra-ui/react/heading"),te=require("@chakra-ui/react/table"),t=require("../chunks/menu-bzi7WVh0.cjs.js");exports.Avatar=p.Avatar;exports.Box=b.Box;exports.Button=g.Button;exports.Code=T.Code;exports.ComboBox=a.ComboBox;exports._ComboBoxOption=a.ComboBoxOption;exports._ComboBoxOptionGroup=a.ComboBoxOptionGroup;exports._ComboBoxRoot=a.ComboBoxRoot;exports.Dialog=m.Dialog;exports.Divider=q.Divider;exports.Group=_.Group;exports.IconButton=I.IconButton;exports.IconToggleButton=B.IconToggleButton;exports.Image=C.Image;exports.Kbd=R.Kbd;exports.Link=D.Link;exports.List=u.List;exports._ListIndicator=u.ListIndicator;exports._ListItem=u.ListItem;exports._ListRoot=u.ListRoot;exports.SimpleGrid=F.SimpleGrid;exports.Text=x.Text;exports.Tooltip=c.Tooltip;exports._TooltipContent=c.TooltipContent;exports._TooltipRoot=c.TooltipRoot;exports.MakeElementFocusable=S.MakeElementFocusable;exports.NimbusProvider=A.NimbusProvider;exports.Checkbox=G.Checkbox;exports.Stack=M.Stack;exports.VisuallyHidden=k.VisuallyHidden;exports.TextInput=P.TextInput;exports.NumberInput=O.NumberInput;exports.Grid=L.Grid;exports.Select=i.Select;exports._SelectOption=i.SelectOption;exports._SelectOptionGroup=i.SelectOptionGroup;exports._SelectOptions=i.SelectOptions;exports._SelectRoot=i.SelectRoot;exports.Accordion=r.Accordion;exports._AccordionContent=r.AccordionContent;exports._AccordionHeader=r.AccordionHeader;exports._AccordionHeaderRightContent=r.AccordionHeaderRightContentSlot;exports._AccordionItem=r.AccordionItem;exports._AccordionRoot=r.AccordionRoot;exports.Alert=n.Alert;exports._AlertActions=n.AlertActions;exports._AlertDescription=n.AlertDescription;exports._AlertDismissButton=n.AlertDismissButton;exports._AlertRoot=n.AlertRoot;exports._AlertTitle=n.AlertTitle;exports.Badge=H.Badge;exports.Card=l.Card;exports._CardContent=l.CardContent;exports._CardHeader=l.CardHeader;exports._CardRoot=l.CardRoot;exports.FormField=o.FormField;exports._FormFieldDescription=o.FormFieldDescription;exports._FormFieldError=o.FormFieldError;exports._FormFieldInfoBox=o.FormFieldInfoBox;exports._FormFieldInput=o.FormFieldInput;exports._FormFieldLabel=o.FormFieldLabel;exports._FormFieldRoot=o.FormFieldRoot;exports.Icon=h.Icon;exports.LoadingSpinner=v.LoadingSpinner;exports.PasswordInput=y.PasswordInput;exports.SplitButton=f.SplitButton;exports.TimeInput=w.TimeInput;exports.MultilineTextInput=E.MultilineTextInput;exports.RadioInput=d.RadioInput;exports._RadioInputOption=d.RadioInputOption;exports._RadioInputRoot=d.RadioInputRoot;exports.Switch=N.Switch;exports.TagGroup=j.TagGroup;exports.ToggleButton=K.ToggleButton;exports.ToggleButtonGroup=s.ToggleButtonGroup;exports._ToggleButtonGroupButton=s.ToggleButtonGroupButton;exports._ToggleButtonGroupRoot=s.ToggleButtonGroupRoot;exports.DateInput=V.DateInput;exports.Calendar=z.Calendar;exports.DatePicker=J.DatePicker;exports.ProgressBar=Q.ProgressBar;exports.RangeCalendar=U.RangeCalendar;exports.DateRangePicker=W.DateRangePicker;exports.Toolbar=X.Toolbar;exports.RichTextInput=Y.RichTextInput;exports.DataTable=e.DataTable;exports._DataTableBody=e.DataTableBody;exports._DataTableCell=e.DataTableCell;exports._DataTableColumn=e.DataTableColumn;exports._DataTableExpandButton=e.DataTableExpandButton;exports._DataTableFooter=e.DataTableFooter;exports._DataTableHeader=e.DataTableHeader;exports._DataTableNestedIcon=e.DataTableNestedIcon;exports._DataTableRoot=e.DataTableRoot;exports._DataTableRow=e.DataTableRow;exports._DataTableSelectionCell=e.DataTableSelectionCell;exports._DataTableTable=e.DataTableTable;exports.Pagination=Z.Pagination;exports.Menu=t.Menu;exports._MenuContent=t.MenuContent;exports._MenuItem=t.MenuItem;exports._MenuRoot=t.MenuRoot;exports._MenuSection=t.MenuSection;exports._MenuSubmenu=t.MenuSubmenu;exports._MenuSubmenuTrigger=t.MenuSubmenuTrigger;exports._MenuTrigger=t.MenuTrigger;
1
+ "use strict";const p=require("../chunks/avatar-C2KIWewd.cjs.js"),g=require("../chunks/box-CWni3A32.cjs.js"),b=require("../chunks/button-BooV4ncX.cjs.js"),T=require("../chunks/code-q31e3vT2.cjs.js"),a=require("../chunks/combobox-BNYcRoYl.cjs.js"),m=require("../chunks/dialog-CVa-E9-A.cjs.js"),q=require("../chunks/divider-Lm98hgn6.cjs.js"),_=require("../chunks/group-Buy-O6Mr.cjs.js"),I=require("../chunks/icon-button-CFLScvMi.cjs.js"),B=require("../chunks/icon-toggle-button-DJsMgc_N.cjs.js"),C=require("../chunks/image-CGOYoc2s.cjs.js"),R=require("../chunks/kbd-DFeaXiKY.cjs.js"),D=require("../chunks/link-DWa1zIUJ.cjs.js"),u=require("../chunks/list-DJC9BmoC.cjs.js"),F=require("../chunks/simple-grid-Cd2MJxSX.cjs.js"),S=require("../chunks/text-CCW9kDT_.cjs.js"),c=require("../chunks/tooltip-g8-hEdZp.cjs.js"),x=require("../chunks/make-element-focusable-bPAMXt4D.cjs.js"),A=require("../chunks/nimbus-provider-DU9neylH.cjs.js"),G=require("../chunks/checkbox-DDB06avu.cjs.js"),M=require("../chunks/stack-CIN13EDn.cjs.js"),k=require("../chunks/visually-hidden-Bh-G5QHv.cjs.js"),P=require("../chunks/text-input-BtBwAmoa.cjs.js"),O=require("../chunks/number-input-C6V-OoKY.cjs.js"),v=require("../chunks/grid-Chuw1xje.cjs.js"),i=require("../chunks/select-BAV0cdM5.cjs.js"),r=require("../chunks/accordion-PyQH8Q_y.cjs.js"),n=require("../chunks/alert-BhezYOzs.cjs.js"),L=require("../chunks/badge-CCrBksXu.cjs.js"),l=require("../chunks/card-DeWTV05B.cjs.js"),o=require("../chunks/form-field-DMiHuyrx.cjs.js"),H=require("../chunks/icon-BHx0r3NL.cjs.js"),h=require("../chunks/inline-svg-DbvmiSw9.cjs.js"),y=require("../chunks/loading-spinner-CSKBo1bM.cjs.js"),f=require("../chunks/password-input-BVDnOfvR.cjs.js"),w=require("../chunks/split-button-D-3pT-LA.cjs.js"),E=require("../chunks/time-input-DP2ci38H.cjs.js"),N=require("../chunks/multiline-text-input-XDsu-5Ir.cjs.js"),d=require("../chunks/radio-input-CpWPWVHJ.cjs.js"),j=require("../chunks/switch-BjdhpPWV.cjs.js"),K=require("../chunks/tag-group-D6_THomO.cjs.js"),V=require("../chunks/toggle-button-D8qdeoHu.cjs.js"),s=require("../chunks/toggle-button-group-DX134q7m.cjs.js"),z=require("../chunks/date-input-DaemC1P1.cjs.js"),J=require("../chunks/calendar-Dyy7Fm8f.cjs.js"),Q=require("../chunks/date-picker-Bqf7Y-W-.cjs.js"),U=require("../chunks/progress-bar-EQdUUcCZ.cjs.js"),W=require("../chunks/range-calendar-jXa_w-79.cjs.js"),X=require("../chunks/date-range-picker-DHnuq-hT.cjs.js"),Y=require("../chunks/toolbar-BfEvyuOt.cjs.js"),Z=require("../chunks/rich-text-input-BwrGY2EU.cjs.js"),e=require("../chunks/data-table-DFhiLq16.cjs.js"),$=require("../chunks/pagination-DFmOo7da.cjs.js"),ee=require("@chakra-ui/react/flex"),te=require("@chakra-ui/react/heading"),oe=require("@chakra-ui/react/table"),t=require("../chunks/menu-CQYhHGbS.cjs.js");exports.Avatar=p.Avatar;exports.Box=g.Box;exports.Button=b.Button;exports.Code=T.Code;exports.ComboBox=a.ComboBox;exports._ComboBoxOption=a.ComboBoxOption;exports._ComboBoxOptionGroup=a.ComboBoxOptionGroup;exports._ComboBoxRoot=a.ComboBoxRoot;exports.Dialog=m.Dialog;exports.Divider=q.Divider;exports.Group=_.Group;exports.IconButton=I.IconButton;exports.IconToggleButton=B.IconToggleButton;exports.Image=C.Image;exports.Kbd=R.Kbd;exports.Link=D.Link;exports.List=u.List;exports._ListIndicator=u.ListIndicator;exports._ListItem=u.ListItem;exports._ListRoot=u.ListRoot;exports.SimpleGrid=F.SimpleGrid;exports.Text=S.Text;exports.Tooltip=c.Tooltip;exports._TooltipContent=c.TooltipContent;exports._TooltipRoot=c.TooltipRoot;exports.MakeElementFocusable=x.MakeElementFocusable;exports.NimbusProvider=A.NimbusProvider;exports.Checkbox=G.Checkbox;exports.Stack=M.Stack;exports.VisuallyHidden=k.VisuallyHidden;exports.TextInput=P.TextInput;exports.NumberInput=O.NumberInput;exports.Grid=v.Grid;exports.Select=i.Select;exports._SelectOption=i.SelectOption;exports._SelectOptionGroup=i.SelectOptionGroup;exports._SelectOptions=i.SelectOptions;exports._SelectRoot=i.SelectRoot;exports.Accordion=r.Accordion;exports._AccordionContent=r.AccordionContent;exports._AccordionHeader=r.AccordionHeader;exports._AccordionHeaderRightContent=r.AccordionHeaderRightContentSlot;exports._AccordionItem=r.AccordionItem;exports._AccordionRoot=r.AccordionRoot;exports.Alert=n.Alert;exports._AlertActions=n.AlertActions;exports._AlertDescription=n.AlertDescription;exports._AlertDismissButton=n.AlertDismissButton;exports._AlertRoot=n.AlertRoot;exports._AlertTitle=n.AlertTitle;exports.Badge=L.Badge;exports.Card=l.Card;exports._CardContent=l.CardContent;exports._CardHeader=l.CardHeader;exports._CardRoot=l.CardRoot;exports.FormField=o.FormField;exports._FormFieldDescription=o.FormFieldDescription;exports._FormFieldError=o.FormFieldError;exports._FormFieldInfoBox=o.FormFieldInfoBox;exports._FormFieldInput=o.FormFieldInput;exports._FormFieldLabel=o.FormFieldLabel;exports._FormFieldRoot=o.FormFieldRoot;exports.Icon=H.Icon;exports.InlineSvg=h.InlineSvg;exports.LoadingSpinner=y.LoadingSpinner;exports.PasswordInput=f.PasswordInput;exports.SplitButton=w.SplitButton;exports.TimeInput=E.TimeInput;exports.MultilineTextInput=N.MultilineTextInput;exports.RadioInput=d.RadioInput;exports._RadioInputOption=d.RadioInputOption;exports._RadioInputRoot=d.RadioInputRoot;exports.Switch=j.Switch;exports.TagGroup=K.TagGroup;exports.ToggleButton=V.ToggleButton;exports.ToggleButtonGroup=s.ToggleButtonGroup;exports._ToggleButtonGroupButton=s.ToggleButtonGroupButton;exports._ToggleButtonGroupRoot=s.ToggleButtonGroupRoot;exports.DateInput=z.DateInput;exports.Calendar=J.Calendar;exports.DatePicker=Q.DatePicker;exports.ProgressBar=U.ProgressBar;exports.RangeCalendar=W.RangeCalendar;exports.DateRangePicker=X.DateRangePicker;exports.Toolbar=Y.Toolbar;exports.RichTextInput=Z.RichTextInput;exports.DataTable=e.DataTable;exports._DataTableBody=e.DataTableBody;exports._DataTableCell=e.DataTableCell;exports._DataTableColumn=e.DataTableColumn;exports._DataTableExpandButton=e.DataTableExpandButton;exports._DataTableFooter=e.DataTableFooter;exports._DataTableHeader=e.DataTableHeader;exports._DataTableNestedIcon=e.DataTableNestedIcon;exports._DataTableRoot=e.DataTableRoot;exports._DataTableRow=e.DataTableRow;exports._DataTableSelectionCell=e.DataTableSelectionCell;exports._DataTableTable=e.DataTableTable;exports.Pagination=$.Pagination;exports.Menu=t.Menu;exports._MenuContent=t.MenuContent;exports._MenuItem=t.MenuItem;exports._MenuRoot=t.MenuRoot;exports._MenuSection=t.MenuSection;exports._MenuSubmenu=t.MenuSubmenu;exports._MenuSubmenuTrigger=t.MenuSubmenuTrigger;exports._MenuTrigger=t.MenuTrigger;
2
2
  //# sourceMappingURL=components.cjs.map
@@ -6,7 +6,7 @@ import { C as i, c as l, b as f, a as _ } from "../chunks/combobox-7BYJqsr6.es.j
6
6
  import { D as u } from "../chunks/dialog-DTSuKnyk.es.js";
7
7
  import { D as T } from "../chunks/divider-C11VwZPX.es.js";
8
8
  import { G as g } from "../chunks/group-FqYM3Go1.es.js";
9
- import { I as C } from "../chunks/icon-button-CKidhzN0.es.js";
9
+ import { I as D } from "../chunks/icon-button-CKidhzN0.es.js";
10
10
  import { I as B } from "../chunks/icon-toggle-button-CfrW8nn2.es.js";
11
11
  import { I as S } from "../chunks/image-DRigLU80.es.js";
12
12
  import { K as A } from "../chunks/kbd-D10CDyIE.es.js";
@@ -25,90 +25,92 @@ import { N as eo } from "../chunks/number-input-86JlfGyD.es.js";
25
25
  import { G as to } from "../chunks/grid-De8qjf98.es.js";
26
26
  import { S as po, c as no, d as mo, b as xo, a as io } from "../chunks/select-BEko2rwu.es.js";
27
27
  import { A as fo, d as _o, c as uo, e as co, b as To, a as bo } from "../chunks/accordion-D06jBMOb.es.js";
28
- import { A as Do, d as Co, c as Io, e as Bo, a as Ro, b as So } from "../chunks/alert-L8PXimjc.es.js";
28
+ import { A as Io, d as Do, c as Co, e as Bo, a as Ro, b as So } from "../chunks/alert-L8PXimjc.es.js";
29
29
  import { B as Ao } from "../chunks/badge-CHmfeeRs.es.js";
30
30
  import { C as Go, c as Lo, b as Po, a as ko } from "../chunks/card-D9fWUQqs.es.js";
31
31
  import { F as Oo, d as ho, e as No, f as vo, c as wo, b as Eo, a as yo } from "../chunks/form-field-BF03DSg5.es.js";
32
- import { I as Vo } from "../chunks/icon-BoRbJStV.es.js";
33
- import { L as qo } from "../chunks/loading-spinner-D3xWum_0.es.js";
34
- import { P as Jo } from "../chunks/password-input-BizG9N1_.es.js";
35
- import { S as Uo } from "../chunks/split-button-BR8DktKd.es.js";
36
- import { T as Xo } from "../chunks/time-input-Dg7SfITo.es.js";
37
- import { M as Zo } from "../chunks/multiline-text-input-BxC-HBJS.es.js";
38
- import { R as oa, b as aa, a as ea } from "../chunks/radio-input-CSatNmXz.es.js";
39
- import { S as ta } from "../chunks/switch-D08_asL7.es.js";
40
- import { T as pa } from "../chunks/tag-group-C8xH9Mqk.es.js";
41
- import { T as ma } from "../chunks/toggle-button-DeqTwBN5.es.js";
42
- import { T as ia, b as la, a as fa } from "../chunks/toggle-button-group-DXmJCAH5.es.js";
43
- import { D as da } from "../chunks/date-input-DzpneTE3.es.js";
44
- import { C as ca } from "../chunks/calendar-DBk-sVXs.es.js";
45
- import { D as ba } from "../chunks/date-picker-Bmlxwhhp.es.js";
46
- import { P as Da } from "../chunks/progress-bar-8JDUwg7A.es.js";
47
- import { R as Ia } from "../chunks/range-calendar-6mWVLehI.es.js";
48
- import { D as Ra } from "../chunks/date-range-picker-b-Qkz44d.es.js";
49
- import { T as Fa } from "../chunks/toolbar-Dv9YKOSU.es.js";
50
- import { R as Ma } from "../chunks/rich-text-input-D4cP13Oo.es.js";
51
- import { D as La, e as Pa, g as ka, d as Ha, i as Oa, h as ha, c as Na, j as va, a as wa, f as Ea, k as ya, b as Ka } from "../chunks/data-table-6OCmas4y.es.js";
52
- import { P as ja } from "../chunks/pagination-D-PpTgDZ.es.js";
53
- import { Flex as za } from "@chakra-ui/react/flex";
54
- import { Heading as Qa } from "@chakra-ui/react/heading";
55
- import { Table as Wa } from "@chakra-ui/react/table";
56
- import { M as Ya, c as Za, d as $a, a as oe, e as ae, g as ee, f as re, b as te } from "../chunks/menu-DZVU5Z-r.es.js";
32
+ import { I as Vo } from "../chunks/icon-DHu0zrOb.es.js";
33
+ import { I as qo } from "../chunks/inline-svg-DTleUhZq.es.js";
34
+ import { L as Jo } from "../chunks/loading-spinner-D3xWum_0.es.js";
35
+ import { P as Uo } from "../chunks/password-input-BizG9N1_.es.js";
36
+ import { S as Xo } from "../chunks/split-button-ClVaxLZ7.es.js";
37
+ import { T as Zo } from "../chunks/time-input-Dg7SfITo.es.js";
38
+ import { M as oa } from "../chunks/multiline-text-input-BxC-HBJS.es.js";
39
+ import { R as ea, b as ra, a as ta } from "../chunks/radio-input-CSatNmXz.es.js";
40
+ import { S as pa } from "../chunks/switch-D08_asL7.es.js";
41
+ import { T as ma } from "../chunks/tag-group-C8xH9Mqk.es.js";
42
+ import { T as ia } from "../chunks/toggle-button-DeqTwBN5.es.js";
43
+ import { T as fa, b as _a, a as da } from "../chunks/toggle-button-group-DXmJCAH5.es.js";
44
+ import { D as ca } from "../chunks/date-input-DzpneTE3.es.js";
45
+ import { C as ba } from "../chunks/calendar-DBk-sVXs.es.js";
46
+ import { D as Ia } from "../chunks/date-picker-Bmlxwhhp.es.js";
47
+ import { P as Ca } from "../chunks/progress-bar-8JDUwg7A.es.js";
48
+ import { R as Ra } from "../chunks/range-calendar-6mWVLehI.es.js";
49
+ import { D as Fa } from "../chunks/date-range-picker-b-Qkz44d.es.js";
50
+ import { T as Ma } from "../chunks/toolbar-Dv9YKOSU.es.js";
51
+ import { R as La } from "../chunks/rich-text-input-BbCjT_Nf.es.js";
52
+ import { D as ka, e as Ha, g as Oa, d as ha, i as Na, h as va, c as wa, j as Ea, a as ya, f as Ka, k as Va, b as ja } from "../chunks/data-table-6OCmas4y.es.js";
53
+ import { P as za } from "../chunks/pagination-D-PpTgDZ.es.js";
54
+ import { Flex as Qa } from "@chakra-ui/react/flex";
55
+ import { Heading as Wa } from "@chakra-ui/react/heading";
56
+ import { Table as Ya } from "@chakra-ui/react/table";
57
+ import { M as $a, c as oe, d as ae, a as ee, e as re, g as te, f as se, b as pe } from "../chunks/menu-DnbrSKhK.es.js";
57
58
  export {
58
59
  fo as Accordion,
59
- Do as Alert,
60
+ Io as Alert,
60
61
  e as Avatar,
61
62
  Ao as Badge,
62
63
  t as Box,
63
64
  p as Button,
64
- ca as Calendar,
65
+ ba as Calendar,
65
66
  Go as Card,
66
67
  U as Checkbox,
67
68
  m as Code,
68
69
  i as ComboBox,
69
- La as DataTable,
70
- da as DateInput,
71
- ba as DatePicker,
72
- Ra as DateRangePicker,
70
+ ka as DataTable,
71
+ ca as DateInput,
72
+ Ia as DatePicker,
73
+ Fa as DateRangePicker,
73
74
  u as Dialog,
74
75
  T as Divider,
75
- za as Flex,
76
+ Qa as Flex,
76
77
  Oo as FormField,
77
78
  to as Grid,
78
79
  g as Group,
79
- Qa as Heading,
80
+ Wa as Heading,
80
81
  Vo as Icon,
81
- C as IconButton,
82
+ D as IconButton,
82
83
  B as IconToggleButton,
83
84
  S as Image,
85
+ qo as InlineSvg,
84
86
  A as Kbd,
85
87
  G as Link,
86
88
  P as List,
87
- qo as LoadingSpinner,
89
+ Jo as LoadingSpinner,
88
90
  q as MakeElementFocusable,
89
- Ya as Menu,
90
- Zo as MultilineTextInput,
91
+ $a as Menu,
92
+ oa as MultilineTextInput,
91
93
  J as NimbusProvider,
92
94
  eo as NumberInput,
93
- ja as Pagination,
94
- Jo as PasswordInput,
95
- Da as ProgressBar,
96
- oa as RadioInput,
97
- Ia as RangeCalendar,
98
- Ma as RichTextInput,
95
+ za as Pagination,
96
+ Uo as PasswordInput,
97
+ Ca as ProgressBar,
98
+ ea as RadioInput,
99
+ Ra as RangeCalendar,
100
+ La as RichTextInput,
99
101
  po as Select,
100
102
  N as SimpleGrid,
101
- Uo as SplitButton,
103
+ Xo as SplitButton,
102
104
  X as Stack,
103
- ta as Switch,
104
- Wa as Table,
105
- pa as TagGroup,
105
+ pa as Switch,
106
+ Ya as Table,
107
+ ma as TagGroup,
106
108
  w as Text,
107
109
  oo as TextInput,
108
- Xo as TimeInput,
109
- ma as ToggleButton,
110
- ia as ToggleButtonGroup,
111
- Fa as Toolbar,
110
+ Zo as TimeInput,
111
+ ia as ToggleButton,
112
+ fa as ToggleButtonGroup,
113
+ Ma as Toolbar,
112
114
  y as Tooltip,
113
115
  Z as VisuallyHidden,
114
116
  _o as _AccordionContent,
@@ -116,8 +118,8 @@ export {
116
118
  co as _AccordionHeaderRightContent,
117
119
  To as _AccordionItem,
118
120
  bo as _AccordionRoot,
119
- Co as _AlertActions,
120
- Io as _AlertDescription,
121
+ Do as _AlertActions,
122
+ Co as _AlertDescription,
121
123
  Bo as _AlertDismissButton,
122
124
  Ro as _AlertRoot,
123
125
  So as _AlertTitle,
@@ -127,17 +129,17 @@ export {
127
129
  l as _ComboBoxOption,
128
130
  f as _ComboBoxOptionGroup,
129
131
  _ as _ComboBoxRoot,
130
- Pa as _DataTableBody,
131
- ka as _DataTableCell,
132
- Ha as _DataTableColumn,
133
- Oa as _DataTableExpandButton,
134
- ha as _DataTableFooter,
135
- Na as _DataTableHeader,
136
- va as _DataTableNestedIcon,
137
- wa as _DataTableRoot,
138
- Ea as _DataTableRow,
139
- ya as _DataTableSelectionCell,
140
- Ka as _DataTableTable,
132
+ Ha as _DataTableBody,
133
+ Oa as _DataTableCell,
134
+ ha as _DataTableColumn,
135
+ Na as _DataTableExpandButton,
136
+ va as _DataTableFooter,
137
+ wa as _DataTableHeader,
138
+ Ea as _DataTableNestedIcon,
139
+ ya as _DataTableRoot,
140
+ Ka as _DataTableRow,
141
+ Va as _DataTableSelectionCell,
142
+ ja as _DataTableTable,
141
143
  ho as _FormFieldDescription,
142
144
  No as _FormFieldError,
143
145
  vo as _FormFieldInfoBox,
@@ -147,21 +149,21 @@ export {
147
149
  k as _ListIndicator,
148
150
  H as _ListItem,
149
151
  O as _ListRoot,
150
- Za as _MenuContent,
151
- $a as _MenuItem,
152
- oe as _MenuRoot,
153
- ae as _MenuSection,
154
- ee as _MenuSubmenu,
155
- re as _MenuSubmenuTrigger,
156
- te as _MenuTrigger,
157
- aa as _RadioInputOption,
158
- ea as _RadioInputRoot,
152
+ oe as _MenuContent,
153
+ ae as _MenuItem,
154
+ ee as _MenuRoot,
155
+ re as _MenuSection,
156
+ te as _MenuSubmenu,
157
+ se as _MenuSubmenuTrigger,
158
+ pe as _MenuTrigger,
159
+ ra as _RadioInputOption,
160
+ ta as _RadioInputRoot,
159
161
  no as _SelectOption,
160
162
  mo as _SelectOptionGroup,
161
163
  xo as _SelectOptions,
162
164
  io as _SelectRoot,
163
- la as _ToggleButtonGroupButton,
164
- fa as _ToggleButtonGroupRoot,
165
+ _a as _ToggleButtonGroupButton,
166
+ da as _ToggleButtonGroupRoot,
165
167
  K as _TooltipContent,
166
168
  V as _TooltipRoot
167
169
  };
@@ -1 +1 @@
1
- {"version":3,"file":"components.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"components.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";const t={"mod+b":"bold","mod+i":"italic","mod+u":"underline","mod+`":"code"},i={placeholder:"Start typing...",isDisabled:!1,isReadOnly:!1,autoFocus:!1},o={blockquote:"block-quote",p:"paragraph",pre:"code",h1:"heading-one",h2:"heading-two",h3:"heading-three",h4:"heading-four",h5:"heading-five",ul:"bulleted-list",ol:"numbered-list",li:"list-item",a:"link"},l={strong:"bold",b:"bold",em:"italic",i:"italic",u:"underline",code:"code",sup:"superscript",sub:"subscript",del:"strikethrough",s:"strikethrough"},e={STRIKETHROUGH:"strikethrough",CODE:"code",SUPERSCRIPT:"superscript",SUBSCRIPT:"subscript"},d=[e.STRIKETHROUGH,e.CODE],n=[e.SUPERSCRIPT,e.SUBSCRIPT],a={script:[e.SUPERSCRIPT,e.SUBSCRIPT]},s=[{id:"paragraph",label:"Paragraph",props:{textStyle:"md",fontWeight:"500"}},{id:"heading-one",label:"Heading 1",props:{textStyle:"2xl",fontWeight:"500"}},{id:"heading-two",label:"Heading 2",props:{textStyle:"xl",fontWeight:"500"}},{id:"heading-three",label:"Heading 3",props:{textStyle:"lg",fontWeight:"500"}},{id:"heading-four",label:"Heading 4",props:{textStyle:"md",fontWeight:"500"}},{id:"heading-five",label:"Heading 5",props:{textStyle:"xs",fontWeight:"500"}},{id:"block-quote",label:"Quote",props:{textStyle:"md",fontWeight:"400"}}],S=["heading-one","heading-two","heading-three","heading-four","heading-five","block-quote"];exports.BASIC_FORMATTING=d;exports.BLOCK_TAGS=o;exports.EDITOR_DEFAULTS=i;exports.FORMATTING_OPTIONS=e;exports.HOTKEYS=t;exports.MARK_TAGS=l;exports.MUTUALLY_EXCLUSIVE_GROUPS=a;exports.SCRIPT_FORMATTING=n;exports.blockTypes=S;exports.textStyles=s;
1
+ "use strict";const t=["script","style","iframe","embed","object","applet","link","base","meta"],e=["http:","https:","#","//"];exports.ALLOWED_PROTOCOLS=e;exports.DEFAULT_FORBIDDEN_TAGS=t;
2
2
  //# sourceMappingURL=constants.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs","sources":["../../src/components/rich-text-input/constants/editor-constants.ts","../../src/components/rich-text-input/constants/text-styles.ts"],"sourcesContent":["/**\n * Constants for the rich text editor component\n *\n * This file consolidates all the configuration constants used by the rich text editor.\n * Previously split across multiple files, now consolidated for better maintainability.\n */\n\n// Keyboard shortcuts for formatting\nexport const HOTKEYS = {\n \"mod+b\": \"bold\",\n \"mod+i\": \"italic\",\n \"mod+u\": \"underline\",\n \"mod+`\": \"code\",\n} as const;\n\n// Default configuration values\nexport const EDITOR_DEFAULTS = {\n placeholder: \"Start typing...\",\n isDisabled: false,\n isReadOnly: false,\n autoFocus: false,\n} as const;\n\n// HTML to Slate element mapping for serialization\nexport const BLOCK_TAGS = {\n blockquote: \"block-quote\",\n p: \"paragraph\",\n pre: \"code\",\n h1: \"heading-one\",\n h2: \"heading-two\",\n h3: \"heading-three\",\n h4: \"heading-four\",\n h5: \"heading-five\",\n ul: \"bulleted-list\",\n ol: \"numbered-list\",\n li: \"list-item\",\n a: \"link\",\n} as const;\n\nexport const MARK_TAGS = {\n strong: \"bold\",\n b: \"bold\",\n em: \"italic\",\n i: \"italic\",\n u: \"underline\",\n code: \"code\",\n sup: \"superscript\",\n sub: \"subscript\",\n del: \"strikethrough\",\n s: \"strikethrough\",\n} as const;\n\n// Formatting options for the \"More Options\" menu\nexport const FORMATTING_OPTIONS = {\n STRIKETHROUGH: \"strikethrough\",\n CODE: \"code\",\n SUPERSCRIPT: \"superscript\",\n SUBSCRIPT: \"subscript\",\n} as const;\n\nexport const BASIC_FORMATTING = [\n FORMATTING_OPTIONS.STRIKETHROUGH,\n FORMATTING_OPTIONS.CODE,\n] as const;\n\nexport const SCRIPT_FORMATTING = [\n FORMATTING_OPTIONS.SUPERSCRIPT,\n FORMATTING_OPTIONS.SUBSCRIPT,\n] as const;\n\n// Mutual exclusion groups - superscript and subscript cannot both be active\nexport const MUTUALLY_EXCLUSIVE_GROUPS = {\n script: [FORMATTING_OPTIONS.SUPERSCRIPT, FORMATTING_OPTIONS.SUBSCRIPT],\n} as const;\n\n// Type definitions\nexport type HotkeyType = typeof HOTKEYS;\nexport type HotkeyKey = keyof HotkeyType;\nexport type HotkeyValue = HotkeyType[HotkeyKey];\nexport type BlockTagKey = keyof typeof BLOCK_TAGS;\nexport type MarkTagKey = keyof typeof MARK_TAGS;\nexport type BlockTagValue = (typeof BLOCK_TAGS)[BlockTagKey];\nexport type MarkTagValue = (typeof MARK_TAGS)[MarkTagKey];\nexport type FormattingType =\n (typeof FORMATTING_OPTIONS)[keyof typeof FORMATTING_OPTIONS];\nexport type BasicFormattingType = (typeof BASIC_FORMATTING)[number];\nexport type ScriptFormattingType = (typeof SCRIPT_FORMATTING)[number];\n","/**\n * Text style definitions for rich text editor block formatting\n *\n * Used by:\n * - components/rich-text-toolbar.tsx: Renders text style dropdown menu with these options\n * - hooks/useToolbarState.ts: Manages current text style state and selection logic\n * - utils/text-style-utils.ts: Helper functions for text style operations\n * - utils/validation-utils.ts: Validates if block types are supported\n *\n * Purpose:\n * - Centralizes all available text styles and their visual properties\n * - Maps block type IDs to user-friendly labels and Chakra UI styling props\n * - Ensures consistent styling across the editor and UI controls\n */\nexport interface TextStyleDefinition {\n id: string;\n label: string;\n props: {\n textStyle: string;\n fontWeight: string;\n };\n}\n\nexport const textStyles: TextStyleDefinition[] = [\n {\n id: \"paragraph\",\n label: \"Paragraph\",\n props: {\n textStyle: \"md\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-one\",\n label: \"Heading 1\",\n props: {\n textStyle: \"2xl\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-two\",\n label: \"Heading 2\",\n props: {\n textStyle: \"xl\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-three\",\n label: \"Heading 3\",\n props: {\n textStyle: \"lg\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-four\",\n label: \"Heading 4\",\n props: {\n textStyle: \"md\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-five\",\n label: \"Heading 5\",\n props: {\n textStyle: \"xs\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"block-quote\",\n label: \"Quote\",\n props: {\n textStyle: \"md\",\n fontWeight: \"400\",\n },\n },\n];\n\n/**\n * Available block types for text style detection\n *\n * Used by:\n * - hooks/useToolbarState.ts: Detects currently active block type in editor\n * - Excludes \"paragraph\" as it's the default/fallback type\n */\nexport const blockTypes = [\n \"heading-one\",\n \"heading-two\",\n \"heading-three\",\n \"heading-four\",\n \"heading-five\",\n \"block-quote\",\n] as const;\n\nexport type BlockType = (typeof blockTypes)[number] | \"paragraph\";\n"],"names":["HOTKEYS","EDITOR_DEFAULTS","BLOCK_TAGS","MARK_TAGS","FORMATTING_OPTIONS","BASIC_FORMATTING","SCRIPT_FORMATTING","MUTUALLY_EXCLUSIVE_GROUPS","textStyles","blockTypes"],"mappings":"aAQO,MAAMA,EAAU,CACrB,QAAS,OACT,QAAS,SACT,QAAS,YACT,QAAS,MACX,EAGaC,EAAkB,CAC7B,YAAa,kBACb,WAAY,GACZ,WAAY,GACZ,UAAW,EACb,EAGaC,EAAa,CACxB,WAAY,cACZ,EAAG,YACH,IAAK,OACL,GAAI,cACJ,GAAI,cACJ,GAAI,gBACJ,GAAI,eACJ,GAAI,eACJ,GAAI,gBACJ,GAAI,gBACJ,GAAI,YACJ,EAAG,MACL,EAEaC,EAAY,CACvB,OAAQ,OACR,EAAG,OACH,GAAI,SACJ,EAAG,SACH,EAAG,YACH,KAAM,OACN,IAAK,cACL,IAAK,YACL,IAAK,gBACL,EAAG,eACL,EAGaC,EAAqB,CAChC,cAAe,gBACf,KAAM,OACN,YAAa,cACb,UAAW,WACb,EAEaC,EAAmB,CAC9BD,EAAmB,cACnBA,EAAmB,IACrB,EAEaE,EAAoB,CAC/BF,EAAmB,YACnBA,EAAmB,SACrB,EAGaG,EAA4B,CACvC,OAAQ,CAACH,EAAmB,YAAaA,EAAmB,SAAS,CACvE,EClDaI,EAAoC,CAC/C,CACE,GAAI,YACJ,MAAO,YACP,MAAO,CACL,UAAW,KACX,WAAY,KAAA,CACd,EAEF,CACE,GAAI,cACJ,MAAO,YACP,MAAO,CACL,UAAW,MACX,WAAY,KAAA,CACd,EAEF,CACE,GAAI,cACJ,MAAO,YACP,MAAO,CACL,UAAW,KACX,WAAY,KAAA,CACd,EAEF,CACE,GAAI,gBACJ,MAAO,YACP,MAAO,CACL,UAAW,KACX,WAAY,KAAA,CACd,EAEF,CACE,GAAI,eACJ,MAAO,YACP,MAAO,CACL,UAAW,KACX,WAAY,KAAA,CACd,EAEF,CACE,GAAI,eACJ,MAAO,YACP,MAAO,CACL,UAAW,KACX,WAAY,KAAA,CACd,EAEF,CACE,GAAI,cACJ,MAAO,QACP,MAAO,CACL,UAAW,KACX,WAAY,KAAA,CACd,CAEJ,EASaC,EAAa,CACxB,cACA,cACA,gBACA,eACA,eACA,aACF"}
1
+ {"version":3,"file":"constants.cjs","sources":["../../src/components/inline-svg/constants/sanitization.constants.ts"],"sourcesContent":["/**\n * Tags that are forbidden in SVG content for security reasons\n */\nexport const DEFAULT_FORBIDDEN_TAGS = [\n \"script\",\n \"style\",\n \"iframe\",\n \"embed\",\n \"object\",\n \"applet\",\n \"link\",\n \"base\",\n \"meta\",\n];\n\n/**\n * Protocols allowed in URL attributes\n */\nexport const ALLOWED_PROTOCOLS = [\"http:\", \"https:\", \"#\", \"//\"];\n"],"names":["DEFAULT_FORBIDDEN_TAGS","ALLOWED_PROTOCOLS"],"mappings":"aAGO,MAAMA,EAAyB,CACpC,SACA,QACA,SACA,QACA,SACA,SACA,OACA,OACA,MACF,EAKaC,EAAoB,CAAC,QAAS,SAAU,IAAK,IAAI"}