@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.
- package/dist/chunks/icon-BHx0r3NL.cjs.js +2 -0
- package/dist/chunks/icon-BHx0r3NL.cjs.js.map +1 -0
- package/dist/chunks/icon-DHu0zrOb.es.js +14 -0
- package/dist/chunks/icon-DHu0zrOb.es.js.map +1 -0
- package/dist/chunks/icon.recipe-ClxbhW0Q.cjs.js +2 -0
- package/dist/chunks/icon.recipe-ClxbhW0Q.cjs.js.map +1 -0
- package/dist/chunks/icon.recipe-DjkjodUn.es.js +24 -0
- package/dist/chunks/icon.recipe-DjkjodUn.es.js.map +1 -0
- package/dist/chunks/inline-svg-DTleUhZq.es.js +21 -0
- package/dist/chunks/inline-svg-DTleUhZq.es.js.map +1 -0
- package/dist/chunks/inline-svg-DbvmiSw9.cjs.js +2 -0
- package/dist/chunks/inline-svg-DbvmiSw9.cjs.js.map +1 -0
- package/dist/chunks/{menu-bzi7WVh0.cjs.js → menu-CQYhHGbS.cjs.js} +2 -2
- package/dist/chunks/{menu-bzi7WVh0.cjs.js.map → menu-CQYhHGbS.cjs.js.map} +1 -1
- package/dist/chunks/{menu-DZVU5Z-r.es.js → menu-DnbrSKhK.es.js} +2 -2
- package/dist/chunks/{menu-DZVU5Z-r.es.js.map → menu-DnbrSKhK.es.js.map} +1 -1
- package/dist/chunks/rich-text-input-BbCjT_Nf.es.js +7916 -0
- package/dist/chunks/rich-text-input-BbCjT_Nf.es.js.map +1 -0
- package/dist/chunks/rich-text-input-BwrGY2EU.cjs.js +24 -0
- package/dist/chunks/rich-text-input-BwrGY2EU.cjs.js.map +1 -0
- package/dist/chunks/{split-button-BR8DktKd.es.js → split-button-ClVaxLZ7.es.js} +3 -3
- package/dist/chunks/{split-button-BR8DktKd.es.js.map → split-button-ClVaxLZ7.es.js.map} +1 -1
- package/dist/chunks/{split-button-1uPesHKO.cjs.js → split-button-D-3pT-LA.cjs.js} +2 -2
- package/dist/chunks/{split-button-1uPesHKO.cjs.js.map → split-button-D-3pT-LA.cjs.js.map} +1 -1
- package/dist/chunks/use-inline-svg-C2ko8Bcq.cjs.js +2 -0
- package/dist/chunks/use-inline-svg-C2ko8Bcq.cjs.js.map +1 -0
- package/dist/chunks/use-inline-svg-Cua0623E.es.js +47 -0
- package/dist/chunks/use-inline-svg-Cua0623E.es.js.map +1 -0
- package/dist/components/components.cjs +1 -1
- package/dist/components/components.es.js +79 -77
- package/dist/components/components.es.js.map +1 -1
- package/dist/components/constants.cjs +1 -1
- package/dist/components/constants.cjs.map +1 -1
- package/dist/components/constants.es.js +13 -122
- package/dist/components/constants.es.js.map +1 -1
- package/dist/components/hooks.cjs +1 -1
- package/dist/components/hooks.es.js +2 -5
- package/dist/components/icon.cjs +1 -1
- package/dist/components/icon.es.js +1 -1
- package/dist/components/inline-svg.cjs +2 -0
- package/dist/components/inline-svg.cjs.map +1 -0
- package/dist/components/inline-svg.es.js +5 -0
- package/dist/components/inline-svg.es.js.map +1 -0
- package/dist/components/rich-text-input.cjs +1 -1
- package/dist/components/rich-text-input.es.js +1 -1
- package/dist/components/split-button.cjs +1 -1
- package/dist/components/split-button.es.js +1 -1
- package/dist/components/utils.cjs +2 -1
- package/dist/components/utils.cjs.map +1 -1
- package/dist/components/utils.es.js +543 -65
- package/dist/components/utils.es.js.map +1 -1
- package/dist/components.d.ts +34 -0
- package/dist/constants.d.ts +4 -113
- package/dist/hooks.d.ts +7 -46
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +41 -45
- package/dist/index.es.js +121 -119
- package/dist/index.es.js.map +1 -1
- package/dist/inline-svg.d.ts +139 -0
- package/dist/utils.d.ts +28 -148
- package/package.json +6 -5
- package/dist/chunks/icon-BoRbJStV.es.js +0 -31
- package/dist/chunks/icon-BoRbJStV.es.js.map +0 -1
- package/dist/chunks/icon-Cny8ZtnX.cjs.js +0 -2
- package/dist/chunks/icon-Cny8ZtnX.cjs.js.map +0 -1
- package/dist/chunks/rich-text-input-B3s6cy-T.cjs.js +0 -2
- package/dist/chunks/rich-text-input-B3s6cy-T.cjs.js.map +0 -1
- package/dist/chunks/rich-text-input-D4cP13Oo.es.js +0 -691
- package/dist/chunks/rich-text-input-D4cP13Oo.es.js.map +0 -1
- package/dist/chunks/slate-helpers-BwRHJO4o.es.js +0 -6919
- package/dist/chunks/slate-helpers-BwRHJO4o.es.js.map +0 -1
- package/dist/chunks/slate-helpers-CMAwCMk0.cjs.js +0 -24
- package/dist/chunks/slate-helpers-CMAwCMk0.cjs.js.map +0 -1
- package/dist/chunks/use-formatting-state-Denpy3Zo.cjs.js +0 -2
- package/dist/chunks/use-formatting-state-Denpy3Zo.cjs.js.map +0 -1
- package/dist/chunks/use-formatting-state-RJvSR-Zg.es.js +0 -247
- 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-
|
|
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-
|
|
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-
|
|
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":"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"}
|
|
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-
|
|
2
|
-
//# sourceMappingURL=split-button-
|
|
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":"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"}
|
|
@@ -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"),
|
|
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
|
|
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
|
|
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-
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
import { T as ma } from "../chunks/
|
|
42
|
-
import { T as ia
|
|
43
|
-
import {
|
|
44
|
-
import {
|
|
45
|
-
import {
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
76
|
+
Qa as Flex,
|
|
76
77
|
Oo as FormField,
|
|
77
78
|
to as Grid,
|
|
78
79
|
g as Group,
|
|
79
|
-
|
|
80
|
+
Wa as Heading,
|
|
80
81
|
Vo as Icon,
|
|
81
|
-
|
|
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
|
-
|
|
89
|
+
Jo as LoadingSpinner,
|
|
88
90
|
q as MakeElementFocusable,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
+
$a as Menu,
|
|
92
|
+
oa as MultilineTextInput,
|
|
91
93
|
J as NimbusProvider,
|
|
92
94
|
eo as NumberInput,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
103
|
+
Xo as SplitButton,
|
|
102
104
|
X as Stack,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
pa as Switch,
|
|
106
|
+
Ya as Table,
|
|
107
|
+
ma as TagGroup,
|
|
106
108
|
w as Text,
|
|
107
109
|
oo as TextInput,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
120
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
|
|
164
|
-
|
|
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=
|
|
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/
|
|
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"}
|