@kushagradhawan/kookie-ui 0.1.37 → 0.1.39
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/components.css +130 -74
- package/dist/cjs/components/_internal/base-button.props.d.ts +1 -1
- package/dist/cjs/components/_internal/base-button.props.js +1 -1
- package/dist/cjs/components/_internal/base-button.props.js.map +2 -2
- package/dist/cjs/components/_internal/base-checkbox.props.d.ts +1 -1
- package/dist/cjs/components/_internal/base-checkbox.props.js +1 -1
- package/dist/cjs/components/_internal/base-checkbox.props.js.map +2 -2
- package/dist/cjs/components/avatar.props.d.ts +1 -1
- package/dist/cjs/components/avatar.props.js +1 -1
- package/dist/cjs/components/avatar.props.js.map +2 -2
- package/dist/cjs/components/button.d.ts +40 -2
- package/dist/cjs/components/button.d.ts.map +1 -1
- package/dist/cjs/components/button.js +1 -1
- package/dist/cjs/components/button.js.map +3 -3
- package/dist/cjs/components/chatbar.d.ts.map +1 -1
- package/dist/cjs/components/chatbar.js +1 -1
- package/dist/cjs/components/chatbar.js.map +2 -2
- package/dist/cjs/components/checkbox-cards.props.d.ts +2 -2
- package/dist/cjs/components/checkbox-cards.props.js +1 -1
- package/dist/cjs/components/checkbox-cards.props.js.map +2 -2
- package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-group.js +1 -1
- package/dist/cjs/components/checkbox-group.js.map +3 -3
- package/dist/cjs/components/checkbox-group.props.d.ts +1 -1
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +3 -3
- package/dist/cjs/components/flex.props.d.ts +3 -3
- package/dist/cjs/components/grid.props.d.ts +3 -3
- package/dist/cjs/components/radio-cards.props.d.ts +2 -2
- package/dist/cjs/components/radio-cards.props.js +1 -1
- package/dist/cjs/components/radio-cards.props.js.map +2 -2
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +3 -3
- package/dist/cjs/components/shell.d.ts.map +1 -1
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +3 -3
- package/dist/cjs/components/sidebar.d.ts +7 -1
- package/dist/cjs/components/sidebar.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +3 -3
- package/dist/cjs/components/sidebar.props.d.ts +6 -0
- package/dist/cjs/components/sidebar.props.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.props.js +1 -1
- package/dist/cjs/components/sidebar.props.js.map +3 -3
- package/dist/cjs/components/table.props.d.ts +7 -7
- package/dist/cjs/components/text-field.props.d.ts +4 -4
- package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
- package/dist/cjs/hooks/index.d.ts +1 -0
- package/dist/cjs/hooks/index.d.ts.map +1 -1
- package/dist/cjs/hooks/index.js +1 -1
- package/dist/cjs/hooks/index.js.map +3 -3
- package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts +9 -0
- package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -0
- package/dist/cjs/hooks/use-body-pointer-events-cleanup.js +2 -0
- package/dist/cjs/hooks/use-body-pointer-events-cleanup.js.map +7 -0
- package/dist/cjs/props/gap.props.d.ts +3 -3
- package/dist/cjs/props/gap.props.js +1 -1
- package/dist/cjs/props/gap.props.js.map +2 -2
- package/dist/cjs/props/layout.props.d.ts +7 -7
- package/dist/cjs/props/margin.props.d.ts +7 -7
- package/dist/cjs/props/margin.props.js +1 -1
- package/dist/cjs/props/margin.props.js.map +2 -2
- package/dist/cjs/props/padding.props.d.ts +7 -7
- package/dist/cjs/props/padding.props.js +1 -1
- package/dist/cjs/props/padding.props.js.map +2 -2
- package/dist/esm/components/_internal/base-button.props.d.ts +1 -1
- package/dist/esm/components/_internal/base-button.props.js +1 -1
- package/dist/esm/components/_internal/base-button.props.js.map +2 -2
- package/dist/esm/components/_internal/base-checkbox.props.d.ts +1 -1
- package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
- package/dist/esm/components/_internal/base-checkbox.props.js.map +2 -2
- package/dist/esm/components/avatar.props.d.ts +1 -1
- package/dist/esm/components/avatar.props.js +1 -1
- package/dist/esm/components/avatar.props.js.map +2 -2
- package/dist/esm/components/button.d.ts +40 -2
- package/dist/esm/components/button.d.ts.map +1 -1
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/button.js.map +3 -3
- package/dist/esm/components/chatbar.d.ts.map +1 -1
- package/dist/esm/components/chatbar.js +1 -1
- package/dist/esm/components/chatbar.js.map +2 -2
- package/dist/esm/components/checkbox-cards.props.d.ts +2 -2
- package/dist/esm/components/checkbox-cards.props.js +1 -1
- package/dist/esm/components/checkbox-cards.props.js.map +2 -2
- package/dist/esm/components/checkbox-group.d.ts.map +1 -1
- package/dist/esm/components/checkbox-group.js +1 -1
- package/dist/esm/components/checkbox-group.js.map +3 -3
- package/dist/esm/components/checkbox-group.props.d.ts +1 -1
- package/dist/esm/components/dialog.d.ts.map +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dialog.js.map +3 -3
- package/dist/esm/components/flex.props.d.ts +3 -3
- package/dist/esm/components/grid.props.d.ts +3 -3
- package/dist/esm/components/radio-cards.props.d.ts +2 -2
- package/dist/esm/components/radio-cards.props.js +1 -1
- package/dist/esm/components/radio-cards.props.js.map +2 -2
- package/dist/esm/components/select.d.ts.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/select.js.map +3 -3
- package/dist/esm/components/shell.d.ts.map +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/shell.js.map +3 -3
- package/dist/esm/components/sidebar.d.ts +7 -1
- package/dist/esm/components/sidebar.d.ts.map +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/sidebar.js.map +3 -3
- package/dist/esm/components/sidebar.props.d.ts +6 -0
- package/dist/esm/components/sidebar.props.d.ts.map +1 -1
- package/dist/esm/components/sidebar.props.js +1 -1
- package/dist/esm/components/sidebar.props.js.map +3 -3
- package/dist/esm/components/table.props.d.ts +7 -7
- package/dist/esm/components/text-field.props.d.ts +4 -4
- package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
- package/dist/esm/hooks/index.d.ts +1 -0
- package/dist/esm/hooks/index.d.ts.map +1 -1
- package/dist/esm/hooks/index.js +1 -1
- package/dist/esm/hooks/index.js.map +3 -3
- package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts +9 -0
- package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -0
- package/dist/esm/hooks/use-body-pointer-events-cleanup.js +2 -0
- package/dist/esm/hooks/use-body-pointer-events-cleanup.js.map +7 -0
- package/dist/esm/props/gap.props.d.ts +3 -3
- package/dist/esm/props/gap.props.js +1 -1
- package/dist/esm/props/gap.props.js.map +2 -2
- package/dist/esm/props/layout.props.d.ts +7 -7
- package/dist/esm/props/margin.props.d.ts +7 -7
- package/dist/esm/props/margin.props.js +1 -1
- package/dist/esm/props/margin.props.js.map +2 -2
- package/dist/esm/props/padding.props.d.ts +7 -7
- package/dist/esm/props/padding.props.js +1 -1
- package/dist/esm/props/padding.props.js.map +2 -2
- package/layout/tokens.css +3 -0
- package/layout/utilities.css +1806 -42
- package/layout.css +1809 -42
- package/package.json +1 -1
- package/src/components/_internal/base-button.css +179 -73
- package/src/components/_internal/base-button.props.ts +1 -1
- package/src/components/_internal/base-checkbox.props.ts +1 -1
- package/src/components/avatar.props.tsx +1 -1
- package/src/components/button.css +13 -21
- package/src/components/button.tsx +79 -2
- package/src/components/chatbar.tsx +5 -2
- package/src/components/checkbox-cards.props.tsx +1 -1
- package/src/components/checkbox-group.tsx +14 -6
- package/src/components/dialog.tsx +4 -0
- package/src/components/radio-cards.props.tsx +1 -1
- package/src/components/select.css +9 -0
- package/src/components/select.tsx +11 -1
- package/src/components/shell.tsx +34 -3
- package/src/components/sidebar.css +15 -3
- package/src/components/sidebar.props.tsx +3 -0
- package/src/components/sidebar.tsx +27 -0
- package/src/hooks/index.ts +2 -1
- package/src/hooks/use-body-pointer-events-cleanup.ts +81 -0
- package/src/props/gap.props.ts +1 -1
- package/src/props/margin.props.ts +1 -1
- package/src/props/padding.props.ts +1 -1
- package/src/styles/tokens/blur.css +3 -0
- package/src/styles/tokens/constants.css +38 -35
- package/src/styles/tokens/radius.css +3 -0
- package/src/styles/tokens/shadow.css +64 -89
- package/src/styles/tokens/space.css +3 -0
- package/src/styles/tokens/transition.css +25 -12
- package/src/styles/utilities/gap.css +27 -0
- package/src/styles/utilities/margin.css +205 -7
- package/src/styles/utilities/padding.css +69 -0
- package/styles.css +1973 -144
- package/tokens/base.css +34 -25
- package/tokens.css +37 -28
- package/utilities.css +1806 -42
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/_internal/base-button.props.ts"],
|
|
4
|
-
"sourcesContent": ["import { asChildPropDef } from '../../props/as-child.prop.js';\nimport { accentColorPropDef } from '../../props/color.prop.js';\nimport { highContrastPropDef } from '../../props/high-contrast.prop.js';\nimport { radiusPropDef } from '../../props/radius.prop.js';\n\nimport type { PropDef } from '../../props/prop-def.js';\n\n/**\n * Available button sizes for responsive design\n * Size 1: 24px - Compact for toolbars and dense interfaces\n * Size 2: 32px - Standard for most interface contexts\n * Size 3: 40px - Large for important actions and mobile touch targets\n * Size 4: 48px - Extra large for hero sections and maximum impact\n */\nconst sizes = ['1', '2', '3', '4'] as const;\n\n/**\n * Available button variants for different visual contexts\n * - classic: Premium, sophisticated appearance\n * - solid: Primary actions that should be noticed first\n * - soft: Content-heavy interfaces, natural integration\n * - surface: Elevated appearance with subtle depth\n * - outline: Secondary actions that support primary actions\n * - ghost: Utility functions that don't compete for attention\n */\nconst variants = ['classic', 'solid', 'soft', 'surface', 'outline', 'ghost'] as const;\n\n/**\n * Available panel background options (deprecated)\n * @deprecated Use `materials` instead\n */\nconst panelBackgrounds = ['solid', 'translucent'] as const;\n\n/**\n * Available material options for visual rendering\n * - solid: Opaque backgrounds and borders\n * - translucent: Elevated effects with depth and visual separation\n */\nconst materials = ['solid', 'translucent'] as const;\n\n/**\n * Base button prop definitions that define the component's API\n * \n * These props are used by all button variants (Button, IconButton, etc.)\n * to ensure consistent behavior and styling across the design system.\n * \n * Key features:\n * - Responsive sizing with mobile-first approach\n * - Six visual variants for different interface contexts\n * - Comprehensive color system with semantic meanings\n * - Loading states with automatic accessibility\n * - Material system for visual depth and elevation\n * - Polymorphic rendering support via asChild\n * \n * @example\n * ```tsx\n * // Basic button with default props\n * <BaseButton>Click me</BaseButton>\n * \n * // Button with custom size and variant\n * <BaseButton size=\"3\" variant=\"solid\">Primary Action</BaseButton>\n * \n * // Button with loading state\n * <BaseButton loading>Processing...</BaseButton>\n * \n * // Button with material and high contrast\n * <BaseButton material=\"translucent\" highContrast>Elevated Button</BaseButton>\n * ```\n */\nconst baseButtonPropDefs = {\n ...asChildPropDef,\n /**\n * Button size for responsive design and interface density\n * Supports responsive objects: { initial: '1', sm: '2', md: '3', lg: '4' }\n */\n size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },\n /**\n * Visual variant that determines the button's appearance and context\n */\n variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'solid' },\n ...accentColorPropDef,\n ...highContrastPropDef,\n ...radiusPropDef,\n /**\n * Loading state that shows a spinner and disables interaction\n * Automatically sets disabled=true and provides accessibility announcements\n */\n loading: { type: 'boolean', className: 'rt-loading', default: false },\n /**\n * Full width mode that expands the button to fill its container\n * Useful for mobile layouts and form submissions\n */\n fullWidth: { type: 'boolean', className: 'rt-full-width', default: false },\n /**\n * Material type for visual rendering and depth effects\n * Controls how the button renders its visual elements\n */\n material: { type: 'enum', values: materials, default: undefined },\n /**\n * Panel background type (deprecated)\n * @deprecated Use `material` prop instead. This prop will be removed in a future version.\n */\n panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },\n /**\n * Flush mode that removes visual padding for seamless text integration\n * Only effective with ghost variant\n */\n flush: { type: 'boolean', default: false },\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n loading: PropDef<boolean>;\n fullWidth: PropDef<boolean>;\n material: PropDef<(typeof materials)[number] | undefined>;\n panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;\n flush: PropDef<boolean>;\n};\n\nexport { baseButtonPropDefs };\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,kBAAAA,MAAsB,+BAC/B,OAAS,sBAAAC,MAA0B,4BACnC,OAAS,uBAAAC,MAA2B,oCACpC,OAAS,iBAAAC,MAAqB,6BAW9B,MAAMC,EAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAW3BC,EAAW,CAAC,UAAW,QAAS,OAAQ,UAAW,UAAW,
|
|
4
|
+
"sourcesContent": ["import { asChildPropDef } from '../../props/as-child.prop.js';\nimport { accentColorPropDef } from '../../props/color.prop.js';\nimport { highContrastPropDef } from '../../props/high-contrast.prop.js';\nimport { radiusPropDef } from '../../props/radius.prop.js';\n\nimport type { PropDef } from '../../props/prop-def.js';\n\n/**\n * Available button sizes for responsive design\n * Size 1: 24px - Compact for toolbars and dense interfaces\n * Size 2: 32px - Standard for most interface contexts\n * Size 3: 40px - Large for important actions and mobile touch targets\n * Size 4: 48px - Extra large for hero sections and maximum impact\n */\nconst sizes = ['1', '2', '3', '4'] as const;\n\n/**\n * Available button variants for different visual contexts\n * - classic: Premium, sophisticated appearance\n * - solid: Primary actions that should be noticed first\n * - soft: Content-heavy interfaces, natural integration\n * - surface: Elevated appearance with subtle depth\n * - outline: Secondary actions that support primary actions\n * - ghost: Utility functions that don't compete for attention\n */\nconst variants = ['classic', 'solid', 'soft', 'surface', 'outline', 'ghost', 'override'] as const;\n\n/**\n * Available panel background options (deprecated)\n * @deprecated Use `materials` instead\n */\nconst panelBackgrounds = ['solid', 'translucent'] as const;\n\n/**\n * Available material options for visual rendering\n * - solid: Opaque backgrounds and borders\n * - translucent: Elevated effects with depth and visual separation\n */\nconst materials = ['solid', 'translucent'] as const;\n\n/**\n * Base button prop definitions that define the component's API\n * \n * These props are used by all button variants (Button, IconButton, etc.)\n * to ensure consistent behavior and styling across the design system.\n * \n * Key features:\n * - Responsive sizing with mobile-first approach\n * - Six visual variants for different interface contexts\n * - Comprehensive color system with semantic meanings\n * - Loading states with automatic accessibility\n * - Material system for visual depth and elevation\n * - Polymorphic rendering support via asChild\n * \n * @example\n * ```tsx\n * // Basic button with default props\n * <BaseButton>Click me</BaseButton>\n * \n * // Button with custom size and variant\n * <BaseButton size=\"3\" variant=\"solid\">Primary Action</BaseButton>\n * \n * // Button with loading state\n * <BaseButton loading>Processing...</BaseButton>\n * \n * // Button with material and high contrast\n * <BaseButton material=\"translucent\" highContrast>Elevated Button</BaseButton>\n * ```\n */\nconst baseButtonPropDefs = {\n ...asChildPropDef,\n /**\n * Button size for responsive design and interface density\n * Supports responsive objects: { initial: '1', sm: '2', md: '3', lg: '4' }\n */\n size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },\n /**\n * Visual variant that determines the button's appearance and context\n */\n variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'solid' },\n ...accentColorPropDef,\n ...highContrastPropDef,\n ...radiusPropDef,\n /**\n * Loading state that shows a spinner and disables interaction\n * Automatically sets disabled=true and provides accessibility announcements\n */\n loading: { type: 'boolean', className: 'rt-loading', default: false },\n /**\n * Full width mode that expands the button to fill its container\n * Useful for mobile layouts and form submissions\n */\n fullWidth: { type: 'boolean', className: 'rt-full-width', default: false },\n /**\n * Material type for visual rendering and depth effects\n * Controls how the button renders its visual elements\n */\n material: { type: 'enum', values: materials, default: undefined },\n /**\n * Panel background type (deprecated)\n * @deprecated Use `material` prop instead. This prop will be removed in a future version.\n */\n panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },\n /**\n * Flush mode that removes visual padding for seamless text integration\n * Only effective with ghost variant\n */\n flush: { type: 'boolean', default: false },\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n loading: PropDef<boolean>;\n fullWidth: PropDef<boolean>;\n material: PropDef<(typeof materials)[number] | undefined>;\n panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;\n flush: PropDef<boolean>;\n};\n\nexport { baseButtonPropDefs };\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,kBAAAA,MAAsB,+BAC/B,OAAS,sBAAAC,MAA0B,4BACnC,OAAS,uBAAAC,MAA2B,oCACpC,OAAS,iBAAAC,MAAqB,6BAW9B,MAAMC,EAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAW3BC,EAAW,CAAC,UAAW,QAAS,OAAQ,UAAW,UAAW,QAAS,UAAU,EAMjFC,EAAmB,CAAC,QAAS,aAAa,EAO1CC,EAAY,CAAC,QAAS,aAAa,EA+BnCC,EAAqB,CACzB,GAAGR,EAKH,KAAM,CAAE,KAAM,OAAQ,UAAW,YAAa,OAAQI,EAAO,QAAS,IAAK,WAAY,EAAK,EAI5F,QAAS,CAAE,KAAM,OAAQ,UAAW,aAAc,OAAQC,EAAU,QAAS,OAAQ,EACrF,GAAGJ,EACH,GAAGC,EACH,GAAGC,EAKH,QAAS,CAAE,KAAM,UAAW,UAAW,aAAc,QAAS,EAAM,EAKpE,UAAW,CAAE,KAAM,UAAW,UAAW,gBAAiB,QAAS,EAAM,EAKzE,SAAU,CAAE,KAAM,OAAQ,OAAQI,EAAW,QAAS,MAAU,EAKhE,gBAAiB,CAAE,KAAM,OAAQ,OAAQD,EAAkB,QAAS,MAAU,EAK9E,MAAO,CAAE,KAAM,UAAW,QAAS,EAAM,CAC3C",
|
|
6
6
|
"names": ["asChildPropDef", "accentColorPropDef", "highContrastPropDef", "radiusPropDef", "sizes", "variants", "panelBackgrounds", "materials", "baseButtonPropDefs"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{colorPropDef as e}from"../../props/color.prop.js";import{highContrastPropDef as s}from"../../props/high-contrast.prop.js";const t=["1","2","3"],a=["classic","solid","soft","outline","surface"],r=["solid","translucent"],o={size:{type:"enum",className:"rt-r-size",values:t,default:"2",responsive:!0},variant:{type:"enum",className:"rt-variant",values:a,default:"solid"},material:{type:"enum",values:r,default:void 0},...e,...s};export{o as baseCheckboxPropDefs};
|
|
1
|
+
import{colorPropDef as e}from"../../props/color.prop.js";import{highContrastPropDef as s}from"../../props/high-contrast.prop.js";const t=["1","2","3","4","5","6","7","8","9","10","11","12"],a=["classic","solid","soft","outline","surface"],r=["solid","translucent"],o={size:{type:"enum",className:"rt-r-size",values:t,default:"2",responsive:!0},variant:{type:"enum",className:"rt-variant",values:a,default:"solid"},material:{type:"enum",values:r,default:void 0},...e,...s};export{o as baseCheckboxPropDefs};
|
|
2
2
|
//# sourceMappingURL=base-checkbox.props.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/_internal/base-checkbox.props.ts"],
|
|
4
|
-
"sourcesContent": ["import { colorPropDef } from '../../props/color.prop.js';\nimport { highContrastPropDef } from '../../props/high-contrast.prop.js';\n\nimport type { PropDef } from '../../props/prop-def.js';\n\nconst sizes = ['1', '2', '3'] as const;\nconst variants = ['classic', 'solid', 'soft', 'outline', 'surface'] as const;\nconst materials = ['solid', 'translucent'] as const;\n\nconst baseCheckboxPropDefs = {\n size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'solid' },\n material: { type: 'enum', values: materials, default: undefined },\n ...colorPropDef,\n ...highContrastPropDef,\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n material: PropDef<(typeof materials)[number] | undefined>;\n};\n\nexport { baseCheckboxPropDefs };\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,gBAAAA,MAAoB,4BAC7B,OAAS,uBAAAC,MAA2B,oCAIpC,MAAMC,EAAQ,CAAC,IAAK,IAAK,
|
|
4
|
+
"sourcesContent": ["import { colorPropDef } from '../../props/color.prop.js';\nimport { highContrastPropDef } from '../../props/high-contrast.prop.js';\n\nimport type { PropDef } from '../../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] as const;\nconst variants = ['classic', 'solid', 'soft', 'outline', 'surface'] as const;\nconst materials = ['solid', 'translucent'] as const;\n\nconst baseCheckboxPropDefs = {\n size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'solid' },\n material: { type: 'enum', values: materials, default: undefined },\n ...colorPropDef,\n ...highContrastPropDef,\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n material: PropDef<(typeof materials)[number] | undefined>;\n};\n\nexport { baseCheckboxPropDefs };\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,gBAAAA,MAAoB,4BAC7B,OAAS,uBAAAC,MAA2B,oCAIpC,MAAMC,EAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,IAAI,EACtEC,EAAW,CAAC,UAAW,QAAS,OAAQ,UAAW,SAAS,EAC5DC,EAAY,CAAC,QAAS,aAAa,EAEnCC,EAAuB,CAC3B,KAAM,CAAE,KAAM,OAAQ,UAAW,YAAa,OAAQH,EAAO,QAAS,IAAK,WAAY,EAAK,EAC5F,QAAS,CAAE,KAAM,OAAQ,UAAW,aAAc,OAAQC,EAAU,QAAS,OAAQ,EACrF,SAAU,CAAE,KAAM,OAAQ,OAAQC,EAAW,QAAS,MAAU,EAChE,GAAGJ,EACH,GAAGC,CACL",
|
|
6
6
|
"names": ["colorPropDef", "highContrastPropDef", "sizes", "variants", "materials", "baseCheckboxPropDefs"]
|
|
7
7
|
}
|
|
@@ -34,7 +34,7 @@ declare const avatarPropDefs: {
|
|
|
34
34
|
size: {
|
|
35
35
|
type: "enum";
|
|
36
36
|
className: string;
|
|
37
|
-
values: readonly ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
37
|
+
values: readonly ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"];
|
|
38
38
|
default: "3";
|
|
39
39
|
responsive: true;
|
|
40
40
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asChildPropDef as e}from"../props/as-child.prop.js";import{accentColorPropDef as a}from"../props/color.prop.js";import{highContrastPropDef as t}from"../props/high-contrast.prop.js";import{radiusPropDef as r}from"../props/radius.prop.js";const s=["1","2","3","4","5","6","7","8","9"],o=["classic","solid","soft","surface","outline"],n=["solid","translucent"],p=["solid","translucent"],f={...e,size:{type:"enum",className:"rt-r-size",values:s,default:"3",responsive:!0},variant:{type:"enum",className:"rt-variant",values:o,default:"soft"},...a,...t,...r,fallback:{type:"ReactNode",required:!0},material:{type:"enum",values:p,default:void 0},panelBackground:{type:"enum",values:n,default:void 0}};export{f as avatarPropDefs};
|
|
1
|
+
import{asChildPropDef as e}from"../props/as-child.prop.js";import{accentColorPropDef as a}from"../props/color.prop.js";import{highContrastPropDef as t}from"../props/high-contrast.prop.js";import{radiusPropDef as r}from"../props/radius.prop.js";const s=["1","2","3","4","5","6","7","8","9","10","11","12"],o=["classic","solid","soft","surface","outline"],n=["solid","translucent"],p=["solid","translucent"],f={...e,size:{type:"enum",className:"rt-r-size",values:s,default:"3",responsive:!0},variant:{type:"enum",className:"rt-variant",values:o,default:"soft"},...a,...t,...r,fallback:{type:"ReactNode",required:!0},material:{type:"enum",values:p,default:void 0},panelBackground:{type:"enum",values:n,default:void 0}};export{f as avatarPropDefs};
|
|
2
2
|
//# sourceMappingURL=avatar.props.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/avatar.props.tsx"],
|
|
4
|
-
"sourcesContent": ["import { asChildPropDef } from '../props/as-child.prop.js';\nimport { accentColorPropDef } from '../props/color.prop.js';\nimport { highContrastPropDef } from '../props/high-contrast.prop.js';\nimport { radiusPropDef } from '../props/radius.prop.js';\n\nimport type { PropDef } from '../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] as const;\nconst variants = ['classic', 'solid', 'soft', 'surface', 'outline'] as const;\nconst panelBackgrounds = ['solid', 'translucent'] as const;\nconst materials = ['solid', 'translucent'] as const;\n\nconst avatarPropDefs = {\n ...asChildPropDef,\n size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '3', responsive: true },\n variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'soft' },\n ...accentColorPropDef,\n ...highContrastPropDef,\n ...radiusPropDef,\n fallback: { type: 'ReactNode', required: true },\n material: { type: 'enum', values: materials, default: undefined },\n /**\n * @deprecated Use `material` prop instead. This prop will be removed in a future version.\n */\n panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n fallback: PropDef<React.ReactNode>;\n material: PropDef<(typeof materials)[number] | undefined>;\n panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;\n};\n\nexport { avatarPropDefs };\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,kBAAAA,MAAsB,4BAC/B,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,uBAAAC,MAA2B,iCACpC,OAAS,iBAAAC,MAAqB,0BAI9B,MAAMC,EAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,
|
|
4
|
+
"sourcesContent": ["import { asChildPropDef } from '../props/as-child.prop.js';\nimport { accentColorPropDef } from '../props/color.prop.js';\nimport { highContrastPropDef } from '../props/high-contrast.prop.js';\nimport { radiusPropDef } from '../props/radius.prop.js';\n\nimport type { PropDef } from '../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] as const;\nconst variants = ['classic', 'solid', 'soft', 'surface', 'outline'] as const;\nconst panelBackgrounds = ['solid', 'translucent'] as const;\nconst materials = ['solid', 'translucent'] as const;\n\nconst avatarPropDefs = {\n ...asChildPropDef,\n size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '3', responsive: true },\n variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'soft' },\n ...accentColorPropDef,\n ...highContrastPropDef,\n ...radiusPropDef,\n fallback: { type: 'ReactNode', required: true },\n material: { type: 'enum', values: materials, default: undefined },\n /**\n * @deprecated Use `material` prop instead. This prop will be removed in a future version.\n */\n panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n fallback: PropDef<React.ReactNode>;\n material: PropDef<(typeof materials)[number] | undefined>;\n panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;\n};\n\nexport { avatarPropDefs };\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,kBAAAA,MAAsB,4BAC/B,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,uBAAAC,MAA2B,iCACpC,OAAS,iBAAAC,MAAqB,0BAI9B,MAAMC,EAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,IAAI,EACtEC,EAAW,CAAC,UAAW,QAAS,OAAQ,UAAW,SAAS,EAC5DC,EAAmB,CAAC,QAAS,aAAa,EAC1CC,EAAY,CAAC,QAAS,aAAa,EAEnCC,EAAiB,CACrB,GAAGR,EACH,KAAM,CAAE,KAAM,OAAQ,UAAW,YAAa,OAAQI,EAAO,QAAS,IAAK,WAAY,EAAK,EAC5F,QAAS,CAAE,KAAM,OAAQ,UAAW,aAAc,OAAQC,EAAU,QAAS,MAAO,EACpF,GAAGJ,EACH,GAAGC,EACH,GAAGC,EACH,SAAU,CAAE,KAAM,YAAa,SAAU,EAAK,EAC9C,SAAU,CAAE,KAAM,OAAQ,OAAQI,EAAW,QAAS,MAAU,EAIhE,gBAAiB,CAAE,KAAM,OAAQ,OAAQD,EAAkB,QAAS,MAAU,CAChF",
|
|
6
6
|
"names": ["asChildPropDef", "accentColorPropDef", "highContrastPropDef", "radiusPropDef", "sizes", "variants", "panelBackgrounds", "materials", "avatarPropDefs"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { BaseButton } from './_internal/base-button.js';
|
|
3
3
|
import type { BaseButtonProps } from './_internal/base-button.js';
|
|
4
|
+
/**
|
|
5
|
+
* Styles that can be overridden for a particular interaction state
|
|
6
|
+
*/
|
|
7
|
+
interface ButtonOverrideStateStyles {
|
|
8
|
+
color?: string;
|
|
9
|
+
background?: string;
|
|
10
|
+
backgroundColor?: string;
|
|
11
|
+
boxShadow?: string;
|
|
12
|
+
filter?: string;
|
|
13
|
+
outline?: string;
|
|
14
|
+
outlineOffset?: string;
|
|
15
|
+
opacity?: string | number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Full set of override styles keyed by interaction state
|
|
19
|
+
*/
|
|
20
|
+
interface ButtonOverrideStyles {
|
|
21
|
+
/** Default/idle state styles */
|
|
22
|
+
normal?: ButtonOverrideStateStyles;
|
|
23
|
+
/** Hover state styles */
|
|
24
|
+
hover?: ButtonOverrideStateStyles;
|
|
25
|
+
/** Active (mouse down) state styles */
|
|
26
|
+
active?: ButtonOverrideStateStyles;
|
|
27
|
+
/** Toggle pressed state styles (data-state="on") */
|
|
28
|
+
pressed?: ButtonOverrideStateStyles;
|
|
29
|
+
/** Open state styles (e.g., when used as a trigger) */
|
|
30
|
+
open?: ButtonOverrideStateStyles;
|
|
31
|
+
/** Disabled state styles */
|
|
32
|
+
disabled?: ButtonOverrideStateStyles;
|
|
33
|
+
/** Focus-visible outline styles */
|
|
34
|
+
focus?: Pick<ButtonOverrideStateStyles, 'outline' | 'outlineOffset'>;
|
|
35
|
+
}
|
|
4
36
|
type ButtonElement = React.ElementRef<typeof BaseButton>;
|
|
5
37
|
/**
|
|
6
38
|
* Tooltip configuration props that can be passed to Button
|
|
@@ -22,7 +54,13 @@ interface ButtonTooltipProps {
|
|
|
22
54
|
* Core Button props excluding the 'as' prop for polymorphic behavior
|
|
23
55
|
* Combines BaseButton props with tooltip functionality
|
|
24
56
|
*/
|
|
25
|
-
type ButtonOwnProps = Omit<BaseButtonProps, 'as'> & ButtonTooltipProps
|
|
57
|
+
type ButtonOwnProps = Omit<BaseButtonProps, 'as'> & ButtonTooltipProps & {
|
|
58
|
+
/**
|
|
59
|
+
* When using variant="override", provide token-based styles per state.
|
|
60
|
+
* We propagate these into CSS variables consumed by the override variant.
|
|
61
|
+
*/
|
|
62
|
+
overrideStyles?: ButtonOverrideStyles;
|
|
63
|
+
};
|
|
26
64
|
/**
|
|
27
65
|
* Polymorphic Button props that support rendering as different HTML elements
|
|
28
66
|
* @template C - The element type to render as (defaults to 'button')
|
|
@@ -65,5 +103,5 @@ declare const Button: ButtonComponent & {
|
|
|
65
103
|
displayName?: string;
|
|
66
104
|
};
|
|
67
105
|
export { Button };
|
|
68
|
-
export type { ButtonProps };
|
|
106
|
+
export type { ButtonProps, ButtonOverrideStyles, ButtonOverrideStateStyles };
|
|
69
107
|
//# sourceMappingURL=button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,KAAK,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAEzD;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,yDAAyD;IACzD,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClD,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1C,yDAAyD;IACzD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED;;;GAGG;AACH,KAAK,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE;;GAEG;AACH,UAAU,yBAAyB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,UAAU,oBAAoB;IAC5B,gCAAgC;IAChC,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,yBAAyB;IACzB,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,uCAAuC;IACvC,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,oDAAoD;IACpD,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,uDAAuD;IACvD,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,mCAAmC;IACnC,KAAK,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;CACtE;AAED,KAAK,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAEzD;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,yDAAyD;IACzD,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClD,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1C,yDAAyD;IACzD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED;;;GAGG;AACH,KAAK,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAC/C,kBAAkB,GAAG;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC,CAAC;AAEJ;;;GAGG;AACH,KAAK,WAAW,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,QAAQ,IAAI,cAAc,GAAG;IAC1E,0DAA0D;IAC1D,EAAE,CAAC,EAAE,CAAC,CAAC;CACR,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,MAAM,cAAc,CAAC,CAAC;AAElE;;;GAGG;AACH,KAAK,eAAe,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,QAAQ,EAC5D,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,QAAA,MAAM,MAAM,EAyFP,eAAe,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAIhD,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as i from"react";import S from"classnames";import{BaseButton as R}from"./_internal/base-button.js";import{Tooltip as P}from"./tooltip.js";const f=i.forwardRef(({className:b,tooltip:s,tooltipSide:B="top",tooltipAlign:m="center",tooltipDelayDuration:y,tooltipDisableHoverableContent:g,overrideStyles:e,...u},v)=>{const a=i.useId(),l=!!s,O=i.useMemo(()=>l?{"aria-describedby":a}:{},[l,a]),d=i.useMemo(()=>{if(!e)return;const p={},o=(n,t)=>{t!==void 0&&(p[n]=t)},r=(n,t)=>{t&&(o(`--button-override-${n}color`,t.color),o(`--button-override-${n}background`,t.background),o(`--button-override-${n}background-color`,t.backgroundColor),o(`--button-override-${n}box-shadow`,t.boxShadow),o(`--button-override-${n}filter`,t.filter),o(`--button-override-${n}outline`,t.outline),o(`--button-override-${n}outline-offset`,t.outlineOffset),o(`--button-override-${n}opacity`,t.opacity))};return r("",e.normal),r("hover-",e.hover),r("active-",e.active),r("pressed-",e.pressed),r("open-",e.open),r("disabled-",e.disabled),e.focus&&(o("--button-override-focus-outline",e.focus.outline),o("--button-override-focus-outline-offset",e.focus.outlineOffset)),p},[e]),c=i.createElement(R,{...u,...O,ref:v,className:S("rt-Button",b),style:d?{...d,...u.style}:u.style});return s?i.createElement(P,{content:s,side:B,align:m,delayDuration:y,disableHoverableContent:g,id:a},c):c});f.displayName="Button";export{f as Button};
|
|
2
2
|
//# sourceMappingURL=button.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/button.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { BaseButton } from './_internal/base-button.js';\nimport { Tooltip } from './tooltip.js';\nimport type { BaseButtonProps } from './_internal/base-button.js';\n\ntype ButtonElement = React.ElementRef<typeof BaseButton>;\n\n/**\n * Tooltip configuration props that can be passed to Button\n * These props are forwarded to the underlying Tooltip component\n */\ninterface ButtonTooltipProps {\n /** Content to display in the tooltip on hover/focus */\n tooltip?: React.ReactNode;\n /** Side of the button where the tooltip should appear */\n tooltipSide?: 'top' | 'right' | 'bottom' | 'left';\n /** Alignment of the tooltip relative to the button */\n tooltipAlign?: 'start' | 'center' | 'end';\n /** Delay before showing the tooltip (in milliseconds) */\n tooltipDelayDuration?: number;\n /** Whether to disable hoverable content behavior */\n tooltipDisableHoverableContent?: boolean;\n}\n\n/**\n * Core Button props excluding the 'as' prop for polymorphic behavior\n * Combines BaseButton props with tooltip functionality\n */\ntype ButtonOwnProps = Omit<BaseButtonProps, 'as'> &
|
|
5
|
-
"mappings": "AAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aAEvB,OAAS,cAAAC,MAAkB,6BAC3B,OAAS,WAAAC,MAAe,
|
|
6
|
-
"names": ["React", "classNames", "BaseButton", "Tooltip", "Button", "className", "tooltip", "tooltipSide", "tooltipAlign", "tooltipDelayDuration", "tooltipDisableHoverableContent", "props", "forwardedRef", "tooltipId", "hasTooltip", "tooltipAccessibilityProps", "button"]
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { BaseButton } from './_internal/base-button.js';\nimport { Tooltip } from './tooltip.js';\nimport type { BaseButtonProps } from './_internal/base-button.js';\n\n/**\n * Styles that can be overridden for a particular interaction state\n */\ninterface ButtonOverrideStateStyles {\n color?: string;\n background?: string;\n backgroundColor?: string;\n boxShadow?: string;\n filter?: string;\n outline?: string;\n outlineOffset?: string;\n opacity?: string | number;\n}\n\n/**\n * Full set of override styles keyed by interaction state\n */\ninterface ButtonOverrideStyles {\n /** Default/idle state styles */\n normal?: ButtonOverrideStateStyles;\n /** Hover state styles */\n hover?: ButtonOverrideStateStyles;\n /** Active (mouse down) state styles */\n active?: ButtonOverrideStateStyles;\n /** Toggle pressed state styles (data-state=\"on\") */\n pressed?: ButtonOverrideStateStyles;\n /** Open state styles (e.g., when used as a trigger) */\n open?: ButtonOverrideStateStyles;\n /** Disabled state styles */\n disabled?: ButtonOverrideStateStyles;\n /** Focus-visible outline styles */\n focus?: Pick<ButtonOverrideStateStyles, 'outline' | 'outlineOffset'>;\n}\n\ntype ButtonElement = React.ElementRef<typeof BaseButton>;\n\n/**\n * Tooltip configuration props that can be passed to Button\n * These props are forwarded to the underlying Tooltip component\n */\ninterface ButtonTooltipProps {\n /** Content to display in the tooltip on hover/focus */\n tooltip?: React.ReactNode;\n /** Side of the button where the tooltip should appear */\n tooltipSide?: 'top' | 'right' | 'bottom' | 'left';\n /** Alignment of the tooltip relative to the button */\n tooltipAlign?: 'start' | 'center' | 'end';\n /** Delay before showing the tooltip (in milliseconds) */\n tooltipDelayDuration?: number;\n /** Whether to disable hoverable content behavior */\n tooltipDisableHoverableContent?: boolean;\n}\n\n/**\n * Core Button props excluding the 'as' prop for polymorphic behavior\n * Combines BaseButton props with tooltip functionality\n */\ntype ButtonOwnProps = Omit<BaseButtonProps, 'as'> &\n ButtonTooltipProps & {\n /**\n * When using variant=\"override\", provide token-based styles per state.\n * We propagate these into CSS variables consumed by the override variant.\n */\n overrideStyles?: ButtonOverrideStyles;\n };\n\n/**\n * Polymorphic Button props that support rendering as different HTML elements\n * @template C - The element type to render as (defaults to 'button')\n */\ntype ButtonProps<C extends React.ElementType = 'button'> = ButtonOwnProps & {\n /** Element type to render as (e.g., 'a', 'span', etc.) */\n as?: C;\n} & Omit<React.ComponentPropsWithoutRef<C>, keyof ButtonOwnProps>;\n\n/**\n * Button component type that supports polymorphic rendering\n * @template C - The element type to render as\n */\ntype ButtonComponent = <C extends React.ElementType = 'button'>(\n props: ButtonProps<C> & { ref?: React.ForwardedRef<ButtonElement> },\n) => React.ReactElement | null;\n\n/**\n * Button component for triggering actions throughout your interface\n *\n * The Button component is the primary interactive element in the Kookie User Interface.\n * It provides six visual variants, four sizes, comprehensive color options, and built-in\n * tooltip support. The component automatically handles icon sizing, supports responsive\n * layouts, and provides accessibility compliance out of the box.\n *\n * @example\n * ```tsx\n * // Basic button\n * <Button>Click me</Button>\n *\n * // Button with variant and size\n * <Button variant=\"solid\" size=\"3\">Primary Action</Button>\n *\n * // Button with tooltip\n * <Button tooltip=\"Save your progress\">Save</Button>\n *\n * // Polymorphic button as link\n * <Button as=\"a\" href=\"/dashboard\">Go to Dashboard</Button>\n * ```\n */\nconst Button = React.forwardRef(\n (\n {\n className,\n tooltip,\n tooltipSide = 'top',\n tooltipAlign = 'center',\n tooltipDelayDuration,\n tooltipDisableHoverableContent,\n overrideStyles,\n ...props\n }: ButtonProps,\n forwardedRef: React.ForwardedRef<ButtonElement>,\n ) => {\n // Generate unique ID for tooltip accessibility\n const tooltipId = React.useId();\n const hasTooltip = Boolean(tooltip);\n\n // Prepare accessibility props for tooltip integration\n const tooltipAccessibilityProps = React.useMemo(\n () => (hasTooltip ? { 'aria-describedby': tooltipId } : {}),\n [hasTooltip, tooltipId],\n );\n\n // Create the base button element with tooltip accessibility props\n // Map overrideStyles to CSS variables consumed by the override variant rules\n const overrideVars = React.useMemo(() => {\n if (!overrideStyles) return undefined;\n const vars: Record<string, string | number> = {};\n const setVar = (key: string, value: string | number | undefined) => {\n if (value !== undefined) vars[key] = value;\n };\n const apply = (prefix: string, s?: ButtonOverrideStateStyles) => {\n if (!s) return;\n setVar(`--button-override-${prefix}color`, s.color);\n setVar(`--button-override-${prefix}background`, s.background);\n setVar(`--button-override-${prefix}background-color`, s.backgroundColor);\n setVar(`--button-override-${prefix}box-shadow`, s.boxShadow);\n setVar(`--button-override-${prefix}filter`, s.filter);\n setVar(`--button-override-${prefix}outline`, s.outline);\n setVar(`--button-override-${prefix}outline-offset`, s.outlineOffset);\n setVar(`--button-override-${prefix}opacity`, s.opacity as any);\n };\n\n apply('', overrideStyles.normal);\n apply('hover-', overrideStyles.hover);\n apply('active-', overrideStyles.active);\n apply('pressed-', overrideStyles.pressed);\n apply('open-', overrideStyles.open);\n apply('disabled-', overrideStyles.disabled);\n\n if (overrideStyles.focus) {\n setVar('--button-override-focus-outline', overrideStyles.focus.outline);\n setVar('--button-override-focus-outline-offset', overrideStyles.focus.outlineOffset);\n }\n\n return vars as unknown as React.CSSProperties;\n }, [overrideStyles]);\n\n const button = (\n <BaseButton\n {...props}\n {...tooltipAccessibilityProps}\n ref={forwardedRef}\n className={classNames('rt-Button', className)}\n style={overrideVars ? { ...overrideVars, ...(props as any).style } : (props as any).style}\n />\n );\n\n // If no tooltip is provided, return the button as-is for better performance\n if (!tooltip) {\n return button;\n }\n\n // Wrap with Tooltip when tooltip content is provided\n // This creates a compound component that handles both button and tooltip functionality\n return (\n <Tooltip\n content={tooltip}\n side={tooltipSide}\n align={tooltipAlign}\n delayDuration={tooltipDelayDuration}\n disableHoverableContent={tooltipDisableHoverableContent}\n id={tooltipId}\n >\n {button}\n </Tooltip>\n );\n },\n) as ButtonComponent & { displayName?: string };\n\nButton.displayName = 'Button';\n\nexport { Button };\nexport type { ButtonProps, ButtonOverrideStyles, ButtonOverrideStateStyles };\n"],
|
|
5
|
+
"mappings": "AAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aAEvB,OAAS,cAAAC,MAAkB,6BAC3B,OAAS,WAAAC,MAAe,eA6GxB,MAAMC,EAASJ,EAAM,WACnB,CACE,CACE,UAAAK,EACA,QAAAC,EACA,YAAAC,EAAc,MACd,aAAAC,EAAe,SACf,qBAAAC,EACA,+BAAAC,EACA,eAAAC,EACA,GAAGC,CACL,EACAC,IACG,CAEH,MAAMC,EAAYd,EAAM,MAAM,EACxBe,EAAa,EAAQT,EAGrBU,EAA4BhB,EAAM,QACtC,IAAOe,EAAa,CAAE,mBAAoBD,CAAU,EAAI,CAAC,EACzD,CAACC,EAAYD,CAAS,CACxB,EAIMG,EAAejB,EAAM,QAAQ,IAAM,CACvC,GAAI,CAACW,EAAgB,OACrB,MAAMO,EAAwC,CAAC,EACzCC,EAAS,CAACC,EAAaC,IAAuC,CAC9DA,IAAU,SAAWH,EAAKE,CAAG,EAAIC,EACvC,EACMC,EAAQ,CAACC,EAAgBC,IAAkC,CAC1DA,IACLL,EAAO,qBAAqBI,CAAM,QAASC,EAAE,KAAK,EAClDL,EAAO,qBAAqBI,CAAM,aAAcC,EAAE,UAAU,EAC5DL,EAAO,qBAAqBI,CAAM,mBAAoBC,EAAE,eAAe,EACvEL,EAAO,qBAAqBI,CAAM,aAAcC,EAAE,SAAS,EAC3DL,EAAO,qBAAqBI,CAAM,SAAUC,EAAE,MAAM,EACpDL,EAAO,qBAAqBI,CAAM,UAAWC,EAAE,OAAO,EACtDL,EAAO,qBAAqBI,CAAM,iBAAkBC,EAAE,aAAa,EACnEL,EAAO,qBAAqBI,CAAM,UAAWC,EAAE,OAAc,EAC/D,EAEA,OAAAF,EAAM,GAAIX,EAAe,MAAM,EAC/BW,EAAM,SAAUX,EAAe,KAAK,EACpCW,EAAM,UAAWX,EAAe,MAAM,EACtCW,EAAM,WAAYX,EAAe,OAAO,EACxCW,EAAM,QAASX,EAAe,IAAI,EAClCW,EAAM,YAAaX,EAAe,QAAQ,EAEtCA,EAAe,QACjBQ,EAAO,kCAAmCR,EAAe,MAAM,OAAO,EACtEQ,EAAO,yCAA0CR,EAAe,MAAM,aAAa,GAG9EO,CACT,EAAG,CAACP,CAAc,CAAC,EAEbc,EACJzB,EAAA,cAACE,EAAA,CACE,GAAGU,EACH,GAAGI,EACJ,IAAKH,EACL,UAAWZ,EAAW,YAAaI,CAAS,EAC5C,MAAOY,EAAe,CAAE,GAAGA,EAAc,GAAIL,EAAc,KAAM,EAAKA,EAAc,MACtF,EAIF,OAAKN,EAOHN,EAAA,cAACG,EAAA,CACC,QAASG,EACT,KAAMC,EACN,MAAOC,EACP,cAAeC,EACf,wBAAyBC,EACzB,GAAII,GAEHW,CACH,EAfOA,CAiBX,CACF,EAEArB,EAAO,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "BaseButton", "Tooltip", "Button", "className", "tooltip", "tooltipSide", "tooltipAlign", "tooltipDelayDuration", "tooltipDisableHoverableContent", "overrideStyles", "props", "forwardedRef", "tooltipId", "hasTooltip", "tooltipAccessibilityProps", "overrideVars", "vars", "setVar", "key", "value", "apply", "prefix", "s", "button"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbar.d.ts","sourceRoot":"","sources":["../../../src/components/chatbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AASpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAMzF,KAAK,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AACvD,KAAK,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAGjD,4CAA4C;AAC5C,KAAK,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAChE;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAyDD;;;;;;;;;;;;;;GAcG;AACH,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAExC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,iBAAiB,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAElF,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAE/D,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACjE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,KAAK,IAAI,CAAC;IAE/F;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,UAAU,SACR,SAAQ,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,CAAC,EAC7D,oBAAoB;CAAG;AAE3B,QAAA,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"chatbar.d.ts","sourceRoot":"","sources":["../../../src/components/chatbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as e from"react";import M from"classnames";import{IconButton as ge}from"./icon-button.js";import{CloseIcon as We,FileTextIcon as Ve}from"./icons.js";import{Flex as re}from"./flex.js";import{ScrollArea as Be}from"./scroll-area.js";import{Slot as D}from"./slot.js";import{Card as ve}from"./card.js";import{Text as fe}from"./text.js";import{useDropzone as Ue}from"react-dropzone";const xe=typeof window<"u"?e.useLayoutEffect:e.useEffect,Ae=e.createContext(null),k=()=>{const l=e.useContext(Ae);if(!l)throw new Error("Chatbar context not found. Wrap parts in <Chatbar.Root>.");return l},Re=e.forwardRef((l,r)=>{const{className:s,style:c,children:d,value:u,defaultValue:y="",onValueChange:p,open:m,defaultOpen:a=!1,onOpenChange:x,expandOn:T="both",minLines:A=1,maxLines:R=6,sendMode:P="whenDirty",disabled:j,readOnly:Y,onSubmit:H,size:O="2",variant:W,width:U,maxWidth:K,asChild:N,attachments:F,defaultAttachments:ae=[],onAttachmentsChange:$,accept:G,multiple:_=!0,maxAttachments:V,maxFileSize:S,paste:oe=!0,pasteAccept:B,clearOnSubmit:L=!0,onAttachmentReject:h,dropzone:z=!0,...ie}=l,J=u!=null,[le,ce]=e.useState(y),t=J?u:le,i=m!=null,[g,v]=e.useState(a),E=i?m:g,Q=e.useRef(null),me=e.useRef(null),q=F!=null,[X,Z]=e.useState(ae),I=q?F:X,ee=e.useRef(new Set),de=n=>Array.isArray(n)?n:typeof n=="string"?n.split(",").map(o=>o.trim()):[],te=de(G),Ce=de(B).length>0?de(B):te,ue=(n,o)=>{if(o.length===0)return!0;const f=n.type.toLowerCase(),w=n.name.toLowerCase();for(const b of o){const C=b.toLowerCase();if(C.includes("/")){const[se,he]=C.split("/"),[ne,je]=f.split("/");if(se==="*"||se===ne&&(he==="*"||he===je))return!0}else if(C.startsWith(".")&&w.endsWith(C))return!0}return!1},He=n=>{const o=[],f=[],w=typeof V=="number"?Math.max(V-I.length,0):1/0;for(const b of n){if(o.length>=w){f.push({file:b,reason:"count"});continue}if(typeof S=="number"&&b.size>S){f.push({file:b,reason:"size"});continue}if(!ue(b,te)){f.push({file:b,reason:"type"});continue}const C=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,se=/\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(b.name),ne=(b.type||"").toLowerCase().startsWith("image/")||se?URL.createObjectURL(b):void 0;ne&&ee.current.add(ne),o.push({id:C,name:b.name,size:b.size,type:b.type,file:b,url:ne,status:"idle"})}return{accepted:o,rejected:f}},pe=n=>{const{accepted:o,rejected:f}=He(n);if(o.length>0){const w=I.concat(o);q||Z(w),$?.(w)}f.length>0&&h?.(f)},Fe=n=>{const o=C=>Ce.length===0?ue(C,te):ue(C,Ce),f=[],w=[],b=typeof V=="number"?Math.max(V-I.length,0):1/0;for(const C of n){if(f.length>=b){w.push({file:C,reason:"count"});continue}if(typeof S=="number"&&C.size>S){w.push({file:C,reason:"size"});continue}if(!o(C)){w.push({file:C,reason:"type"});continue}f.push(C)}f.length>0&&pe(f),w.length>0&&h?.(w)};e.useEffect(()=>{const n=new Set(I.map(o=>o.url).filter(Boolean));for(const o of Array.from(ee.current))n.has(o)||(URL.revokeObjectURL(o),ee.current.delete(o))},[I]),e.useEffect(()=>()=>{for(const n of Array.from(ee.current))URL.revokeObjectURL(n);ee.current.clear()},[]);const ze=N?D:"div",Ie=e.useCallback(n=>{const o=n.relatedTarget,f=Q.current;f&&(o&&f.contains(o)||(t?.trim?.()??"").length===0&&(i||v(!1),x?.(!1)))},[i,x,t]),{getRootProps:De,getInputProps:ke,isDragActive:ye}=Ue({onDrop:(n,o)=>{if(n.length>0&&pe(n),o.length>0&&h){const f=o.map(({file:w,errors:b})=>{const C=b[0]?.code==="file-too-large"?"size":b[0]?.code==="file-invalid-type"?"type":"count";return{file:w,reason:C}});h(f)}},accept:te.length>0?te.reduce((n,o)=>(o.includes("/")?n[o]=[]:o.startsWith(".")&&(n[o]=[]),n),{}):void 0,multiple:_,maxSize:S,noClick:!0,noKeyboard:!0,disabled:!z||j});return e.createElement(Ae.Provider,{value:{open:E,setOpen:n=>{i||v(n),x?.(n)},isOpenControlled:i,value:t,setValue:n=>{J||ce(n),p?.(n)},isValueControlled:J,size:O,expandOn:T,minLines:A,maxLines:R,sendMode:P,disabled:j,readOnly:Y,onSubmit:H,rootRef:Q,textareaRef:me,attachments:I,setAttachments:n=>{q||Z(n),$?.(n)},isAttachmentsControlled:q,accept:G,multiple:_,maxAttachments:V,maxFileSize:S,paste:oe,pasteAccept:B,clearOnSubmit:L,onAttachmentReject:h,dropzone:z,appendFiles:pe,appendFilesFromPaste:Fe}},e.createElement(ze,{...ie,ref:n=>{typeof r=="function"?r(n):r&&(r.current=n),Q.current=n},className:M("rt-ChatbarRoot",`rt-r-size-${O}`,s),style:{position:"relative",width:U,maxWidth:K,...c},"data-state":E?"open":"closed","data-disabled":j?"":void 0,"data-readonly":Y?"":void 0,"data-drop-active":z&&ye?"":void 0,"aria-expanded":E,onBlurCapture:Ie},z&&e.createElement("input",{...ke()}),e.createElement("div",{...z?De():{},style:{width:"100%",height:"100%"}},e.createElement(ve,{className:"rt-ChatbarCard",size:Math.min(3,Number(O)+1).toString(),variant:W,style:{position:"relative"}},e.createElement("div",{className:"rt-ChatbarGrid"},d),z&&ye&&e.createElement("div",{className:"rt-ChatbarDropOverlay"},e.createElement("div",{className:"rt-ChatbarDropContent"},e.createElement(fe,{color:"gray",size:O,weight:"medium"},"Drop files here to attach")))))))});Re.displayName="Chatbar.Root";const Pe=e.forwardRef((l,r)=>{const{className:s,style:c,asChild:d,onFocus:u,onInput:y,onChange:p,onPaste:m,onKeyDown:a,submitOnEnter:x=!1,rows:T,...A}=l,R=k(),{open:P,minLines:j,maxLines:Y,expandOn:H,disabled:O,readOnly:W,setOpen:U,setValue:K,textareaRef:N,value:F,isValueControlled:ae,sendMode:$,paste:G,appendFilesFromPaste:_,size:V}=R,S=e.useRef(0),oe=e.useRef(0),B=e.useRef(0),L=e.useCallback(()=>{const t=N.current;if(!t)return;const i=window.getComputedStyle(t),g=parseFloat(i.lineHeight)||20,v=parseFloat(i.paddingTop)||0,E=parseFloat(i.paddingBottom)||0;S.current=g,oe.current=v+E,B.current=Math.ceil(1*g)+v+E},[N]),h=e.useCallback(t=>{const i=N.current;if(!i)return;i.style.height="auto",S.current===0&&L();const g=S.current,v=oe.current,E=t??P,Q=E?j:1,me=E?Y:1,q=Math.ceil(Q*g)+v,X=Math.ceil(me*g)+v,Z=Math.max(i.scrollHeight,q),I=Math.min(Z,X);i.style.height=`${I}px`,Z>X?(i.style.overflowY="auto",i.style.maxHeight=`${X}px`):(i.style.overflowY="hidden",i.style.maxHeight="none")},[P,j,Y,N,L]);xe(()=>{h()},[h,F,P]),xe(()=>{L(),h()},[L,h,V]),e.useEffect(()=>{const t=N.current;if(!t||typeof ResizeObserver>"u")return;let i=S.current;const g=new ResizeObserver(()=>{const v=window.getComputedStyle(t),E=parseFloat(v.lineHeight)||20;E!==i&&(i=E,L(),requestAnimationFrame(()=>h()))});return g.observe(t),()=>g.disconnect()},[N,L,h]),e.useEffect(()=>{},[]);const z=e.useCallback(t=>{O||W||((H==="focus"||H==="both")&&!P&&U(!0),u?.(t))},[O,W,H,P,U,u]),ie=e.useCallback(t=>{const i=t.currentTarget,g=i.value;K(g),(H==="overflow"||H==="both")&&!P&&(i.style.height="auto",B.current===0&&L(),i.scrollHeight>B.current+1&&(U(!0),h(!0),requestAnimationFrame(()=>h(!0)))),requestAnimationFrame(()=>h()),p?.(t)},[H,P,U,K,p,h,L]),J=e.useCallback(t=>{if(G){const g=Array.from(t.clipboardData?.items??[]).filter(v=>v.kind==="file").map(v=>v.getAsFile()).filter(v=>!!v);g.length>0&&_(g)}setTimeout(()=>{P?h():h(!0)},0),m?.(t)},[G,P,h,m,_]),le=e.useCallback(t=>{if(!x){a?.(t);return}if(t.key==="Enter"&&!t.shiftKey&&!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.nativeEvent.isComposing){if(O||W){a?.(t);return}if($==="never"){a?.(t);return}const g=F.trim().length>0||R.attachments.length>0;if($==="whenDirty"&&!g){a?.(t);return}t.preventDefault(),R.onSubmit?.({value:F,attachments:R.attachments}),R.clearOnSubmit&&(ae||K(""),R.setAttachments([]))}a?.(t)},[x,O,W,$,F,ae,K,R,a]),ce=d?D:"textarea";return e.createElement("div",{className:M("rt-ChatbarField","rt-ChatbarTextarea",s)},e.createElement(ce,{...A,ref:t=>{typeof r=="function"?r(t):r&&(r.current=t),N.current=t},className:"rt-ChatbarInput",value:F,onInput:y,onChange:ie,onFocus:z,onPaste:J,onKeyDown:le,disabled:O,readOnly:W,rows:P?j:1,spellCheck:A.spellCheck??!0,autoCorrect:A.autoCorrect??"on",style:c}))});Pe.displayName="Chatbar.Textarea";const we=e.forwardRef((l,r)=>{const{children:s,asChild:c,style:d,className:u,...y}=l;return k().open?null:e.createElement(c?D:"div",{...y,ref:r,className:M("rt-ChatbarInlineStart",u),style:d},s)});we.displayName="Chatbar.InlineStart";const Te=e.forwardRef((l,r)=>{const{children:s,asChild:c,style:d,className:u,...y}=l;return k().open?null:e.createElement(c?D:"div",{...y,ref:r,className:M("rt-ChatbarInlineEnd",u),style:d},s)});Te.displayName="Chatbar.InlineEnd";const Ee=e.forwardRef((l,r)=>{const{asChild:s,forceMount:c,renderAttachment:d,className:u,style:y,...p}=l,m=k();return!(m.attachments.length>0)&&!c?null:e.createElement(s?D:"div",{...p,ref:r,className:M("rt-ChatbarAttachmentsRow",u),style:y,role:"list","aria-label":p["aria-label"]??"Attachments"},e.createElement(Be,{className:"rt-ChatbarScrollArea",scrollbars:"horizontal",size:"1"},e.createElement(re,{align:"center",gap:"2",style:{minWidth:"fit-content"}},m.attachments.map(T=>e.createElement(be,{key:T.id,attachment:T,asChild:!!d},d?.(T))))))});Ee.displayName="Chatbar.AttachmentsRow";const be=e.forwardRef((l,r)=>{const{attachment:s,asChild:c,className:d,style:u,children:y,...p}=l,m=k(),a=c?D:"div",x=!!s.url&&s.type.startsWith("image/");return e.createElement(a,{...p,ref:r,className:M("rt-ChatbarAttachment",d),style:u,role:"listitem","data-kind":x?"image":"file",title:s.name},y??e.createElement(ve,{size:m.size,variant:"soft"},e.createElement(re,{align:"center",gap:"3",pr:x?void 0:"6"},e.createElement("div",{className:"rt-ChatbarAttachmentPreview","aria-hidden":!0},x?e.createElement("img",{className:"rt-ChatbarAttachmentImage",src:s.url,alt:""}):e.createElement(Ve,null)),!x&&e.createElement(re,{direction:"column",gap:"0",style:{minWidth:0}},e.createElement(fe,{size:m.size,weight:"medium",style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},s.name),e.createElement(fe,{size:"1",color:"gray"},Math.ceil(s.size/1024)," KB")),e.createElement(ge,{className:"rt-ChatbarAttachmentRemove","aria-label":`Remove ${s.name}`,size:"1",variant:"classic",highContrast:!0,color:"gray",onClick:()=>m.setAttachments(m.attachments.filter(T=>T.id!==s.id))},e.createElement(We,null)))))});be.displayName="Chatbar.Attachment";const Se=e.forwardRef((l,r)=>{const{asChild:s,accept:c,multiple:d,className:u,style:y,...p}=l,m=k(),a=e.useRef(null),x=s?D:"button",T=(Array.isArray(c)?c:c?.split(",")??[]).join(",");return e.createElement(e.Fragment,null,e.createElement(x,{...p,ref:r,className:M("rt-ChatbarAttachTrigger",u),style:y,type:p.type??"button","aria-label":p["aria-label"]??"Add attachments",onClick:A=>{a.current&&a.current.click(),p.onClick?.(A)}}),e.createElement("input",{ref:a,type:"file",accept:T,multiple:d??m.multiple,tabIndex:-1,style:{display:"none"},onChange:A=>{const R=Array.from(A.currentTarget.files??[]);R.length>0&&m.appendFiles(R),A.currentTarget.value=""}}))});Se.displayName="Chatbar.AttachTrigger";const Me=e.forwardRef((l,r)=>{const{asChild:s,children:c,className:d,style:u,...y}=l;return k().open?e.createElement(s?D:"div",{...y,ref:r,className:M("rt-ChatbarRow",d),style:u},e.createElement(re,{align:"center",justify:"between",width:"100%"},c)):null});Me.displayName="Chatbar.Row";const Oe=e.forwardRef((l,r)=>{const{className:s,style:c,...d}=l;return e.createElement("div",{...d,ref:r,className:M("rt-ChatbarRowStart",s),style:c})});Oe.displayName="Chatbar.RowStart";const Le=e.forwardRef((l,r)=>{const{className:s,style:c,...d}=l;return e.createElement("div",{...d,ref:r,className:M("rt-ChatbarRowEnd",s),style:c})});Le.displayName="Chatbar.RowEnd";const Ne=e.forwardRef((l,r)=>{const{asChild:s,clearOnSend:c=!0,disabled:d,children:u,className:y,style:p,...m}=l,a=k(),T=a.value.trim().length>0||a.attachments.length>0,A=a.sendMode==="always"||a.sendMode==="whenDirty"&&T;if(a.sendMode==="never")return null;const R=P=>{a.disabled||a.readOnly||(a.onSubmit?.({value:a.value,attachments:a.attachments}),c&&(a.isValueControlled||a.setValue(""),a.clearOnSubmit&&a.setAttachments([])),m.onClick?.(P))};return e.createElement(ge,{...m,ref:r,size:a.size,variant:a.open?"solid":"ghost",disabled:d||a.disabled||a.readOnly,className:M("rt-ChatbarSend",y),style:{opacity:A?1:0,pointerEvents:A?"auto":"none",...p},asChild:s,onClick:R,"aria-label":m["aria-label"]??"Send"},u??"Send")});Ne.displayName="Chatbar.Send";export{Se as AttachTrigger,be as Attachment,Ee as AttachmentsRow,Te as InlineEnd,we as InlineStart,Re as Root,Me as Row,Le as RowEnd,Oe as RowStart,Ne as Send,Pe as Textarea};
|
|
1
|
+
import*as e from"react";import M from"classnames";import{IconButton as ge}from"./icon-button.js";import{CloseIcon as We,FileTextIcon as Ve}from"./icons.js";import{Flex as re}from"./flex.js";import{ScrollArea as Be}from"./scroll-area.js";import{Slot as I}from"./slot.js";import{Card as ve}from"./card.js";import{Text as fe}from"./text.js";import{useDropzone as Ue}from"react-dropzone";const xe=typeof window<"u"?e.useLayoutEffect:e.useEffect,Ae=e.createContext(null),D=()=>{const l=e.useContext(Ae);if(!l)throw new Error("Chatbar context not found. Wrap parts in <Chatbar.Root>.");return l},Re=e.forwardRef((l,r)=>{const{className:s,style:c,children:d,value:u,defaultValue:y="",onValueChange:p,open:m,defaultOpen:a=!1,onOpenChange:x,expandOn:T="both",minLines:A=1,maxLines:R=6,sendMode:P="whenDirty",disabled:k,readOnly:Y,onSubmit:H,size:O="2",variant:j,width:U,maxWidth:K,asChild:N,attachments:W,defaultAttachments:ae=[],onAttachmentsChange:$,accept:G,multiple:_=!0,maxAttachments:V,maxFileSize:S,paste:oe=!0,pasteAccept:B,clearOnSubmit:L=!0,onAttachmentReject:h,dropzone:F=!0,...ie}=l,J=u!=null,[le,ce]=e.useState(y),t=J?u:le,i=m!=null,[g,v]=e.useState(a),E=i?m:g,Q=e.useRef(null),me=e.useRef(null),q="attachments"in l,[X,Z]=e.useState(ae),z=q?W??[]:X,ee=e.useRef(new Set),de=n=>Array.isArray(n)?n:typeof n=="string"?n.split(",").map(o=>o.trim()):[],te=de(G),Ce=de(B).length>0?de(B):te,ue=(n,o)=>{if(o.length===0)return!0;const f=n.type.toLowerCase(),w=n.name.toLowerCase();for(const b of o){const C=b.toLowerCase();if(C.includes("/")){const[se,he]=C.split("/"),[ne,je]=f.split("/");if(se==="*"||se===ne&&(he==="*"||he===je))return!0}else if(C.startsWith(".")&&w.endsWith(C))return!0}return!1},He=n=>{const o=[],f=[],w=typeof V=="number"?Math.max(V-z.length,0):1/0;for(const b of n){if(o.length>=w){f.push({file:b,reason:"count"});continue}if(typeof S=="number"&&b.size>S){f.push({file:b,reason:"size"});continue}if(!ue(b,te)){f.push({file:b,reason:"type"});continue}const C=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,se=/\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(b.name),ne=(b.type||"").toLowerCase().startsWith("image/")||se?URL.createObjectURL(b):void 0;ne&&ee.current.add(ne),o.push({id:C,name:b.name,size:b.size,type:b.type,file:b,url:ne,status:"idle"})}return{accepted:o,rejected:f}},pe=n=>{const{accepted:o,rejected:f}=He(n);if(o.length>0){const w=z.concat(o);q||Z(w),$?.(w)}f.length>0&&h?.(f)},Fe=n=>{const o=C=>Ce.length===0?ue(C,te):ue(C,Ce),f=[],w=[],b=typeof V=="number"?Math.max(V-z.length,0):1/0;for(const C of n){if(f.length>=b){w.push({file:C,reason:"count"});continue}if(typeof S=="number"&&C.size>S){w.push({file:C,reason:"size"});continue}if(!o(C)){w.push({file:C,reason:"type"});continue}f.push(C)}f.length>0&&pe(f),w.length>0&&h?.(w)};e.useEffect(()=>{const n=new Set(z.map(o=>o.url).filter(Boolean));for(const o of Array.from(ee.current))n.has(o)||(URL.revokeObjectURL(o),ee.current.delete(o))},[z]),e.useEffect(()=>()=>{for(const n of Array.from(ee.current))URL.revokeObjectURL(n);ee.current.clear()},[]);const ze=N?I:"div",Ie=e.useCallback(n=>{const o=n.relatedTarget,f=Q.current;f&&(o&&f.contains(o)||(t?.trim?.()??"").length===0&&(i||v(!1),x?.(!1)))},[i,x,t]),{getRootProps:De,getInputProps:ke,isDragActive:ye}=Ue({onDrop:(n,o)=>{if(n.length>0&&pe(n),o.length>0&&h){const f=o.map(({file:w,errors:b})=>{const C=b[0]?.code==="file-too-large"?"size":b[0]?.code==="file-invalid-type"?"type":"count";return{file:w,reason:C}});h(f)}},accept:te.length>0?te.reduce((n,o)=>(o.includes("/")?n[o]=[]:o.startsWith(".")&&(n[o]=[]),n),{}):void 0,multiple:_,maxSize:S,noClick:!0,noKeyboard:!0,disabled:!F||k});return e.createElement(Ae.Provider,{value:{open:E,setOpen:n=>{i||v(n),x?.(n)},isOpenControlled:i,value:t,setValue:n=>{J||ce(n),p?.(n)},isValueControlled:J,size:O,expandOn:T,minLines:A,maxLines:R,sendMode:P,disabled:k,readOnly:Y,onSubmit:H,rootRef:Q,textareaRef:me,attachments:z,setAttachments:n=>{q||Z(n),$?.(n)},isAttachmentsControlled:q,accept:G,multiple:_,maxAttachments:V,maxFileSize:S,paste:oe,pasteAccept:B,clearOnSubmit:L,onAttachmentReject:h,dropzone:F,appendFiles:pe,appendFilesFromPaste:Fe}},e.createElement(ze,{...ie,ref:n=>{typeof r=="function"?r(n):r&&(r.current=n),Q.current=n},className:M("rt-ChatbarRoot",`rt-r-size-${O}`,s),style:{position:"relative",width:U,maxWidth:K,...c},"data-state":E?"open":"closed","data-disabled":k?"":void 0,"data-readonly":Y?"":void 0,"data-drop-active":F&&ye?"":void 0,"aria-expanded":E,onBlurCapture:Ie},F&&e.createElement("input",{...ke()}),e.createElement("div",{...F?De():{},style:{width:"100%",height:"100%"}},e.createElement(ve,{className:"rt-ChatbarCard",size:Math.min(3,Number(O)+1).toString(),variant:j,style:{position:"relative"}},e.createElement("div",{className:"rt-ChatbarGrid"},d),F&&ye&&e.createElement("div",{className:"rt-ChatbarDropOverlay"},e.createElement("div",{className:"rt-ChatbarDropContent"},e.createElement(fe,{color:"gray",size:O,weight:"medium"},"Drop files here to attach")))))))});Re.displayName="Chatbar.Root";const Pe=e.forwardRef((l,r)=>{const{className:s,style:c,asChild:d,onFocus:u,onInput:y,onChange:p,onPaste:m,onKeyDown:a,submitOnEnter:x=!1,rows:T,...A}=l,R=D(),{open:P,minLines:k,maxLines:Y,expandOn:H,disabled:O,readOnly:j,setOpen:U,setValue:K,textareaRef:N,value:W,isValueControlled:ae,sendMode:$,paste:G,appendFilesFromPaste:_,size:V}=R,S=e.useRef(0),oe=e.useRef(0),B=e.useRef(0),L=e.useCallback(()=>{const t=N.current;if(!t)return;const i=window.getComputedStyle(t),g=parseFloat(i.lineHeight)||20,v=parseFloat(i.paddingTop)||0,E=parseFloat(i.paddingBottom)||0;S.current=g,oe.current=v+E,B.current=Math.ceil(1*g)+v+E},[N]),h=e.useCallback(t=>{const i=N.current;if(!i)return;i.style.height="auto",S.current===0&&L();const g=S.current,v=oe.current,E=t??P,Q=E?k:1,me=E?Y:1,q=Math.ceil(Q*g)+v,X=Math.ceil(me*g)+v,Z=Math.max(i.scrollHeight,q),z=Math.min(Z,X);i.style.height=`${z}px`,Z>X?(i.style.overflowY="auto",i.style.maxHeight=`${X}px`):(i.style.overflowY="hidden",i.style.maxHeight="none")},[P,k,Y,N,L]);xe(()=>{h()},[h,W,P]),xe(()=>{L(),h()},[L,h,V]),e.useEffect(()=>{const t=N.current;if(!t||typeof ResizeObserver>"u")return;let i=S.current;const g=new ResizeObserver(()=>{const v=window.getComputedStyle(t),E=parseFloat(v.lineHeight)||20;E!==i&&(i=E,L(),requestAnimationFrame(()=>h()))});return g.observe(t),()=>g.disconnect()},[N,L,h]),e.useEffect(()=>{},[]);const F=e.useCallback(t=>{O||j||((H==="focus"||H==="both")&&!P&&U(!0),u?.(t))},[O,j,H,P,U,u]),ie=e.useCallback(t=>{const i=t.currentTarget,g=i.value;K(g),(H==="overflow"||H==="both")&&!P&&(i.style.height="auto",B.current===0&&L(),i.scrollHeight>B.current+1&&(U(!0),h(!0),requestAnimationFrame(()=>h(!0)))),requestAnimationFrame(()=>h()),p?.(t)},[H,P,U,K,p,h,L]),J=e.useCallback(t=>{if(G){const g=Array.from(t.clipboardData?.items??[]).filter(v=>v.kind==="file").map(v=>v.getAsFile()).filter(v=>!!v);g.length>0&&_(g)}setTimeout(()=>{P?h():h(!0)},0),m?.(t)},[G,P,h,m,_]),le=e.useCallback(t=>{if(!x){a?.(t);return}if(t.key==="Enter"&&!t.shiftKey&&!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.nativeEvent.isComposing){if(O||j){a?.(t);return}if($==="never"){a?.(t);return}const g=W.trim().length>0||R.attachments.length>0;if($==="whenDirty"&&!g){a?.(t);return}t.preventDefault(),R.onSubmit?.({value:W,attachments:R.attachments}),R.clearOnSubmit&&(ae||K(""),R.setAttachments([]))}a?.(t)},[x,O,j,$,W,ae,K,R,a]),ce=d?I:"textarea";return e.createElement("div",{className:M("rt-ChatbarField","rt-ChatbarTextarea",s)},e.createElement(ce,{...A,ref:t=>{typeof r=="function"?r(t):r&&(r.current=t),N.current=t},className:"rt-ChatbarInput",value:W,onInput:y,onChange:ie,onFocus:F,onPaste:J,onKeyDown:le,disabled:O,readOnly:j,rows:P?k:1,spellCheck:A.spellCheck??!0,autoCorrect:A.autoCorrect??"on",style:c}))});Pe.displayName="Chatbar.Textarea";const we=e.forwardRef((l,r)=>{const{children:s,asChild:c,style:d,className:u,...y}=l;return D().open?null:e.createElement(c?I:"div",{...y,ref:r,className:M("rt-ChatbarInlineStart",u),style:d},s)});we.displayName="Chatbar.InlineStart";const Te=e.forwardRef((l,r)=>{const{children:s,asChild:c,style:d,className:u,...y}=l;return D().open?null:e.createElement(c?I:"div",{...y,ref:r,className:M("rt-ChatbarInlineEnd",u),style:d},s)});Te.displayName="Chatbar.InlineEnd";const Ee=e.forwardRef((l,r)=>{const{asChild:s,forceMount:c,renderAttachment:d,className:u,style:y,...p}=l,m=D();return!(m.attachments.length>0)&&!c?null:e.createElement(s?I:"div",{...p,ref:r,className:M("rt-ChatbarAttachmentsRow",u),style:y,role:"list","aria-label":p["aria-label"]??"Attachments"},e.createElement(Be,{className:"rt-ChatbarScrollArea",scrollbars:"horizontal",size:"1"},e.createElement(re,{align:"center",gap:"2",style:{minWidth:"fit-content"}},m.attachments.map(T=>e.createElement(be,{key:T.id,attachment:T,asChild:!!d},d?.(T))))))});Ee.displayName="Chatbar.AttachmentsRow";const be=e.forwardRef((l,r)=>{const{attachment:s,asChild:c,className:d,style:u,children:y,...p}=l,m=D(),a=c?I:"div",x=!!s.url&&s.type.startsWith("image/");return e.createElement(a,{...p,ref:r,className:M("rt-ChatbarAttachment",d),style:u,role:"listitem","data-kind":x?"image":"file",title:s.name},y??e.createElement(ve,{size:m.size,variant:"soft"},e.createElement(re,{align:"center",gap:"3",pr:x?void 0:"6"},e.createElement("div",{className:"rt-ChatbarAttachmentPreview","aria-hidden":!0},x?e.createElement("img",{className:"rt-ChatbarAttachmentImage",src:s.url,alt:""}):e.createElement(Ve,null)),!x&&e.createElement(re,{direction:"column",gap:"0",style:{minWidth:0}},e.createElement(fe,{size:m.size,weight:"medium",style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},s.name),e.createElement(fe,{size:"1",color:"gray"},Math.ceil(s.size/1024)," KB")),e.createElement(ge,{className:"rt-ChatbarAttachmentRemove","aria-label":`Remove ${s.name}`,size:"1",variant:"classic",highContrast:!0,color:"gray",onClick:()=>m.setAttachments(m.attachments.filter(T=>T.id!==s.id))},e.createElement(We,null)))))});be.displayName="Chatbar.Attachment";const Se=e.forwardRef((l,r)=>{const{asChild:s,accept:c,multiple:d,className:u,style:y,...p}=l,m=D(),a=e.useRef(null),x=s?I:"button",T=(Array.isArray(c)?c:c?.split(",")??[]).join(",");return e.createElement(e.Fragment,null,e.createElement(x,{...p,ref:r,className:M("rt-ChatbarAttachTrigger",u),style:y,type:p.type??"button","aria-label":p["aria-label"]??"Add attachments",onClick:A=>{a.current&&a.current.click(),p.onClick?.(A)}}),e.createElement("input",{ref:a,type:"file",accept:T,multiple:d??m.multiple,tabIndex:-1,style:{display:"none"},onChange:A=>{const R=Array.from(A.currentTarget.files??[]);R.length>0&&m.appendFiles(R),A.currentTarget.value=""}}))});Se.displayName="Chatbar.AttachTrigger";const Me=e.forwardRef((l,r)=>{const{asChild:s,children:c,className:d,style:u,...y}=l;return D().open?e.createElement(s?I:"div",{...y,ref:r,className:M("rt-ChatbarRow",d),style:u},e.createElement(re,{align:"center",justify:"between",width:"100%"},c)):null});Me.displayName="Chatbar.Row";const Oe=e.forwardRef((l,r)=>{const{className:s,style:c,...d}=l;return e.createElement("div",{...d,ref:r,className:M("rt-ChatbarRowStart",s),style:c})});Oe.displayName="Chatbar.RowStart";const Le=e.forwardRef((l,r)=>{const{className:s,style:c,...d}=l;return e.createElement("div",{...d,ref:r,className:M("rt-ChatbarRowEnd",s),style:c})});Le.displayName="Chatbar.RowEnd";const Ne=e.forwardRef((l,r)=>{const{asChild:s,clearOnSend:c=!0,disabled:d,children:u,className:y,style:p,...m}=l,a=D(),T=a.value.trim().length>0||a.attachments.length>0,A=a.sendMode==="always"||a.sendMode==="whenDirty"&&T;if(a.sendMode==="never")return null;const R=P=>{a.disabled||a.readOnly||(a.onSubmit?.({value:a.value,attachments:a.attachments}),c&&(a.isValueControlled||a.setValue(""),a.clearOnSubmit&&a.setAttachments([])),m.onClick?.(P))};return e.createElement(ge,{...m,ref:r,size:a.size,variant:a.open?"solid":"ghost",disabled:d||a.disabled||a.readOnly,className:M("rt-ChatbarSend",y),style:{opacity:A?1:0,pointerEvents:A?"auto":"none",...p},asChild:s,onClick:R,"aria-label":m["aria-label"]??"Send"},u??"Send")});Ne.displayName="Chatbar.Send";export{Se as AttachTrigger,be as Attachment,Ee as AttachmentsRow,Te as InlineEnd,we as InlineStart,Re as Root,Me as Row,Le as RowEnd,Oe as RowStart,Ne as Send,Pe as Textarea};
|
|
2
2
|
//# sourceMappingURL=chatbar.js.map
|