@frontify/fondue-components 19.5.0 → 19.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/fondue-components.js +20 -18
  2. package/dist/fondue-components.js.map +1 -1
  3. package/dist/fondue-components10.js +3 -3
  4. package/dist/fondue-components11.js +3 -3
  5. package/dist/fondue-components12.js +2 -2
  6. package/dist/fondue-components13.js +3 -3
  7. package/dist/fondue-components14.js +2 -2
  8. package/dist/fondue-components15.js +2 -2
  9. package/dist/fondue-components16.js +19 -29
  10. package/dist/fondue-components16.js.map +1 -1
  11. package/dist/fondue-components17.js +1 -1
  12. package/dist/fondue-components18.js +1 -1
  13. package/dist/fondue-components19.js +1 -1
  14. package/dist/fondue-components20.js +2 -2
  15. package/dist/fondue-components21.js +2 -2
  16. package/dist/fondue-components22.js +6 -6
  17. package/dist/fondue-components23.js +1 -1
  18. package/dist/fondue-components24.js +2 -2
  19. package/dist/fondue-components25.js +4 -4
  20. package/dist/fondue-components26.js +135 -127
  21. package/dist/fondue-components26.js.map +1 -1
  22. package/dist/fondue-components27.js +127 -31
  23. package/dist/fondue-components27.js.map +1 -1
  24. package/dist/fondue-components28.js +33 -59
  25. package/dist/fondue-components28.js.map +1 -1
  26. package/dist/fondue-components29.js +58 -101
  27. package/dist/fondue-components29.js.map +1 -1
  28. package/dist/fondue-components3.js +1 -1
  29. package/dist/fondue-components30.js +101 -12
  30. package/dist/fondue-components30.js.map +1 -1
  31. package/dist/fondue-components31.js +12 -55
  32. package/dist/fondue-components31.js.map +1 -1
  33. package/dist/fondue-components32.js +55 -20
  34. package/dist/fondue-components32.js.map +1 -1
  35. package/dist/fondue-components33.js +20 -7
  36. package/dist/fondue-components33.js.map +1 -1
  37. package/dist/fondue-components34.js +7 -6
  38. package/dist/fondue-components34.js.map +1 -1
  39. package/dist/fondue-components35.js +7 -32
  40. package/dist/fondue-components35.js.map +1 -1
  41. package/dist/fondue-components36.js +32 -5
  42. package/dist/fondue-components36.js.map +1 -1
  43. package/dist/fondue-components37.js +5 -12
  44. package/dist/fondue-components37.js.map +1 -1
  45. package/dist/fondue-components38.js +10 -153
  46. package/dist/fondue-components38.js.map +1 -1
  47. package/dist/fondue-components39.js +59 -22
  48. package/dist/fondue-components39.js.map +1 -1
  49. package/dist/fondue-components4.js +29 -38
  50. package/dist/fondue-components4.js.map +1 -1
  51. package/dist/fondue-components40.js +17 -17
  52. package/dist/fondue-components40.js.map +1 -1
  53. package/dist/fondue-components41.js +112 -15
  54. package/dist/fondue-components41.js.map +1 -1
  55. package/dist/fondue-components42.js +19 -30
  56. package/dist/fondue-components42.js.map +1 -1
  57. package/dist/fondue-components43.js +32 -62
  58. package/dist/fondue-components43.js.map +1 -1
  59. package/dist/fondue-components44.js +53 -121
  60. package/dist/fondue-components44.js.map +1 -1
  61. package/dist/fondue-components45.js +129 -20
  62. package/dist/fondue-components45.js.map +1 -1
  63. package/dist/fondue-components46.js +21 -45
  64. package/dist/fondue-components46.js.map +1 -1
  65. package/dist/fondue-components47.js +53 -8
  66. package/dist/fondue-components47.js.map +1 -1
  67. package/dist/fondue-components48.js +8 -13
  68. package/dist/fondue-components48.js.map +1 -1
  69. package/dist/fondue-components49.js +13 -15
  70. package/dist/fondue-components49.js.map +1 -1
  71. package/dist/fondue-components5.js +2 -2
  72. package/dist/fondue-components50.js +14 -4
  73. package/dist/fondue-components50.js.map +1 -1
  74. package/dist/fondue-components51.js +5 -60
  75. package/dist/fondue-components51.js.map +1 -1
  76. package/dist/fondue-components52.js +59 -17
  77. package/dist/fondue-components52.js.map +1 -1
  78. package/dist/fondue-components53.js +18 -19
  79. package/dist/fondue-components53.js.map +1 -1
  80. package/dist/fondue-components54.js +18 -4
  81. package/dist/fondue-components54.js.map +1 -1
  82. package/dist/fondue-components55.js +3 -13
  83. package/dist/fondue-components55.js.map +1 -1
  84. package/dist/fondue-components56.js +13 -3
  85. package/dist/fondue-components56.js.map +1 -1
  86. package/dist/fondue-components57.js +3 -17
  87. package/dist/fondue-components57.js.map +1 -1
  88. package/dist/fondue-components58.js +19 -35
  89. package/dist/fondue-components58.js.map +1 -1
  90. package/dist/fondue-components59.js +8 -4
  91. package/dist/fondue-components59.js.map +1 -1
  92. package/dist/fondue-components6.js +4 -4
  93. package/dist/fondue-components60.js +35 -13
  94. package/dist/fondue-components60.js.map +1 -1
  95. package/dist/fondue-components61.js +1 -1
  96. package/dist/fondue-components62.js +12 -24
  97. package/dist/fondue-components62.js.map +1 -1
  98. package/dist/fondue-components63.js +4 -16
  99. package/dist/fondue-components63.js.map +1 -1
  100. package/dist/fondue-components64.js +23 -149
  101. package/dist/fondue-components64.js.map +1 -1
  102. package/dist/fondue-components65.js +17 -19
  103. package/dist/fondue-components65.js.map +1 -1
  104. package/dist/fondue-components66.js +148 -75
  105. package/dist/fondue-components66.js.map +1 -1
  106. package/dist/fondue-components67.js +19 -8
  107. package/dist/fondue-components67.js.map +1 -1
  108. package/dist/fondue-components68.js +77 -34
  109. package/dist/fondue-components68.js.map +1 -1
  110. package/dist/fondue-components69.js +8 -71
  111. package/dist/fondue-components69.js.map +1 -1
  112. package/dist/fondue-components7.js +2 -2
  113. package/dist/fondue-components70.js +34 -10
  114. package/dist/fondue-components70.js.map +1 -1
  115. package/dist/fondue-components71.js +70 -12
  116. package/dist/fondue-components71.js.map +1 -1
  117. package/dist/fondue-components72.js +10 -12
  118. package/dist/fondue-components72.js.map +1 -1
  119. package/dist/fondue-components73.js +12 -20
  120. package/dist/fondue-components73.js.map +1 -1
  121. package/dist/fondue-components74.js +13 -34
  122. package/dist/fondue-components74.js.map +1 -1
  123. package/dist/fondue-components75.js +20 -55
  124. package/dist/fondue-components75.js.map +1 -1
  125. package/dist/fondue-components76.js +34 -15
  126. package/dist/fondue-components76.js.map +1 -1
  127. package/dist/fondue-components77.js +9 -24
  128. package/dist/fondue-components77.js.map +1 -1
  129. package/dist/fondue-components78.js +55 -14
  130. package/dist/fondue-components78.js.map +1 -1
  131. package/dist/fondue-components79.js +14 -22
  132. package/dist/fondue-components79.js.map +1 -1
  133. package/dist/fondue-components8.js +5 -5
  134. package/dist/fondue-components80.js +25 -6
  135. package/dist/fondue-components80.js.map +1 -1
  136. package/dist/fondue-components81.js +13 -5
  137. package/dist/fondue-components81.js.map +1 -1
  138. package/dist/fondue-components82.js +23 -2
  139. package/dist/fondue-components82.js.map +1 -1
  140. package/dist/fondue-components83.js +5 -15
  141. package/dist/fondue-components83.js.map +1 -1
  142. package/dist/fondue-components84.js +4 -2
  143. package/dist/fondue-components84.js.map +1 -1
  144. package/dist/fondue-components85.js +4 -4
  145. package/dist/fondue-components85.js.map +1 -1
  146. package/dist/fondue-components86.js +4 -39
  147. package/dist/fondue-components86.js.map +1 -1
  148. package/dist/fondue-components87.js +5 -0
  149. package/dist/fondue-components87.js.map +1 -0
  150. package/dist/fondue-components88.js +20 -0
  151. package/dist/fondue-components88.js.map +1 -0
  152. package/dist/fondue-components89.js +43 -0
  153. package/dist/fondue-components89.js.map +1 -0
  154. package/dist/fondue-components9.js +4 -4
  155. package/dist/index.d.ts +74 -8
  156. package/dist/style.css +1 -1
  157. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components26.js","sources":["../src/components/Tabs/Tabs.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconDotsHorizontal } from '@frontify/fondue-icons';\nimport * as RadixTabs from '@radix-ui/react-tabs';\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ForwardedRef,\n type ReactNode,\n} from 'react';\n\nimport { useControllableState } from '#/hooks/useControllableState';\n\nimport { Button } from '../Button/Button';\nimport { Dropdown } from '../Dropdown/Dropdown';\n\nimport { useTabTriggers } from './hooks/useTabTriggers';\nimport styles from './styles/tabs.module.scss';\nimport { type TabTrigger } from './types';\n\nexport type TabsRootProps = {\n id?: string;\n children: ReactNode;\n /**\n * Define the padding of the dialog\n * @default \"compact\"\n */\n padding?: 'none' | 'tight' | 'compact' | 'comfortable' | 'spacious';\n /**\n * The default active tab\n * Used for uncontrolled components\n */\n defaultActiveTab?: string;\n /**\n * The controlled value of the active tab\n */\n activeTab?: string;\n /**\n * The height of the tabs\n * @default 'medium'\n */\n size?: 'medium' | 'large';\n /**\n * Event handler called when the active tab changes\n */\n onActiveTabChange?: (value: string) => void;\n /**\n * Select the used variant\n * “default 'default'\n */\n variant?: 'default' | 'pill';\n};\n\nconst TabConfigContext = createContext<{\n value: string;\n disabled?: boolean;\n}>({\n value: '',\n disabled: false,\n});\nTabConfigContext.displayName = 'TabConfigContext';\n\nconst TabTriggerContext = createContext<{\n addTrigger: (trigger: TabTrigger) => void;\n}>({\n addTrigger: () => {},\n});\nTabTriggerContext.displayName = 'TabTriggerContext';\n\nexport const TabsRoot = (\n {\n padding = 'compact',\n activeTab: propsActiveTab,\n defaultActiveTab,\n size = 'medium',\n onActiveTabChange,\n children,\n variant = 'default',\n ...props\n }: TabsRootProps,\n ref: ForwardedRef<HTMLDivElement>,\n) => {\n const [activeTab, setActiveTab] = useControllableState({\n prop: propsActiveTab,\n defaultProp: defaultActiveTab,\n onChange: onActiveTabChange,\n });\n\n const handleSetActiveTab = useCallback(\n (value: string) => {\n setActiveTab(value);\n },\n [setActiveTab],\n );\n\n const { triggerListRef, activeIndicatorRef, triggers, triggersOutOfView, addTrigger } = useTabTriggers({\n activeTab,\n });\n\n const contextValue = useMemo(() => ({ addTrigger }), [addTrigger]);\n\n return (\n <TabTriggerContext.Provider value={contextValue}>\n <RadixTabs.Root\n ref={ref}\n className={styles.root}\n onValueChange={handleSetActiveTab}\n value={activeTab ?? triggers[0]?.value}\n data-tabs-content-padding={padding}\n data-tabs-variant={variant}\n {...props}\n >\n <div className={styles.triggerListWrapper}>\n <RadixTabs.List ref={triggerListRef} data-size={size} className={styles.triggerList}>\n {triggers.map((trigger) => (\n <RadixTabs.Trigger\n {...trigger.props}\n key={trigger.value}\n value={trigger.value}\n disabled={trigger.disabled}\n className={styles.trigger}\n ref={trigger.ref}\n >\n {trigger.element}\n </RadixTabs.Trigger>\n ))}\n </RadixTabs.List>\n <Dropdown.Root>\n {triggersOutOfView.length > 0 && (\n <Dropdown.Trigger data-test-id=\"overflow-items-dropdown-trigger\">\n <Button emphasis=\"default\" aspect=\"square\" size=\"small\">\n <IconDotsHorizontal size={16} />\n </Button>\n </Dropdown.Trigger>\n )}\n <Dropdown.Content align=\"end\" data-test-id=\"overflow-items-dropdown-content\">\n {triggersOutOfView.map((trigger) => (\n <Dropdown.Item\n {...trigger.props}\n disabled={trigger.disabled}\n onSelect={() => handleSetActiveTab(trigger.value)}\n key={trigger.value}\n >\n {trigger.element}\n </Dropdown.Item>\n ))}\n </Dropdown.Content>\n </Dropdown.Root>\n <span\n data-test-id=\"active-tab-indicator\"\n ref={activeIndicatorRef}\n className={styles.activeIndicator}\n />\n </div>\n {children}\n </RadixTabs.Root>\n </TabTriggerContext.Provider>\n );\n};\nTabsRoot.displayName = 'Tabs.Root';\n\ntype TabsTabProps = {\n children: ReactNode;\n value: string;\n disabled?: boolean;\n};\n\nexport const TabsTab = ({ children, value, disabled }: TabsTabProps) => {\n const contextValue = useMemo(() => ({ value, disabled }), [value, disabled]);\n\n return <TabConfigContext.Provider value={contextValue}>{children}</TabConfigContext.Provider>;\n};\nTabsTab.displayName = 'Tabs.Tab';\n\ntype TabsTriggerProps = {\n children: ReactNode;\n};\n\nexport const TabsTrigger = ({ children, ...props }: TabsTriggerProps, ref: ForwardedRef<HTMLButtonElement>) => {\n const { value, disabled } = useContext(TabConfigContext);\n\n const { addTrigger } = useContext(TabTriggerContext);\n\n const localRef = useRef<HTMLButtonElement>(null);\n const previousElement = useRef<ReactNode>();\n\n useEffect(() => {\n addTrigger({\n ref: localRef || ref,\n value: value ?? '',\n disabled,\n props,\n element: children,\n previousElement: previousElement.current,\n });\n previousElement.current = children;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n return null;\n};\nTabsTrigger.displayName = 'Tabs.Trigger';\n\ntype TabsContentProps = {\n children: ReactNode;\n asChild?: boolean;\n};\n\nexport const TabsContent = ({ children, ...itemProps }: TabsContentProps, ref: ForwardedRef<HTMLDivElement>) => {\n const { value } = useContext(TabConfigContext);\n\n return (\n <RadixTabs.Content ref={ref} {...itemProps} className={styles.content} value={value ?? ''}>\n {children}\n </RadixTabs.Content>\n );\n};\nTabsContent.displayName = 'Tabs.Content';\n\nexport const Tabs = {\n Root: forwardRef<HTMLDivElement, TabsRootProps>(TabsRoot),\n Tab: forwardRef<HTMLDivElement, TabsTabProps>(TabsTab),\n Trigger: forwardRef<HTMLButtonElement, TabsTriggerProps>(TabsTrigger),\n Content: forwardRef<HTMLDivElement, TabsContentProps>(TabsContent),\n};\n"],"names":["TabConfigContext","createContext","TabTriggerContext","TabsRoot","padding","propsActiveTab","defaultActiveTab","size","onActiveTabChange","children","variant","props","ref","activeTab","setActiveTab","useControllableState","handleSetActiveTab","useCallback","value","triggerListRef","activeIndicatorRef","triggers","triggersOutOfView","addTrigger","useTabTriggers","contextValue","useMemo","jsx","jsxs","RadixTabs","styles","_a","trigger","createElement","Dropdown","Button","IconDotsHorizontal","TabsTab","disabled","TabsTrigger","useContext","localRef","useRef","previousElement","useEffect","TabsContent","itemProps","Tabs","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"fondue-components26.js","sources":["../src/components/Tag/Tag.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconCross, IconPlus } from '@frontify/fondue-icons';\nimport { Children, isValidElement, useState, type MouseEvent, type ReactNode } from 'react';\n\nimport styles from './styles/tag.module.scss';\n\ntype TagStyle = 'default' | 'positive' | 'highlight' | 'warning' | 'negative';\n\ntype TagEmphasis = 'strong' | 'weak';\n\ntype TagSize = 'default' | 'small';\n\ntype TagProps = {\n /**\n * @default 'strong'\n */\n emphasis?: TagEmphasis;\n /**\n * @default 'default'\n */\n variant?: TagStyle;\n /**\n * @default 'default'\n */\n size?: TagSize;\n /**\n * @default false\n */\n disabled?: boolean;\n /**\n * Click handler\n */\n onClick?: (event?: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Click handler on dismiss - providing this will show the dismiss button\n */\n onDismiss?: (event?: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Click handler on add click - providing this will show the add button\n */\n onAddClick?: (event?: MouseEvent<HTMLButtonElement>) => void;\n title?: string;\n 'aria-label'?: string;\n 'data-test-id'?: string;\n children: ReactNode;\n};\n\nexport type TagHoverContentProps = {\n children: ReactNode;\n};\n\nexport type TagSecondaryContentProps = {\n children: ReactNode;\n};\n\nconst TagRoot = ({\n 'aria-label': ariaLabel,\n 'data-test-id': dataTestId = 'tag',\n children,\n disabled = false,\n emphasis = 'strong',\n onAddClick,\n onClick,\n onDismiss,\n size = 'default',\n title,\n variant,\n}: TagProps) => {\n const [isHover, setIsHover] = useState(false);\n\n // Extract hover content from slots\n let extractedHoverContent: ReactNode = null;\n const processedChildren = Children.map(children, (child) => {\n if (isValidElement(child) && child.type === TagHoverContent) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n extractedHoverContent = child.props.children;\n return null;\n }\n return child;\n });\n\n const commonProps = {\n 'data-addable': !!onAddClick,\n 'data-component': 'tag',\n 'data-disabled': disabled,\n 'data-dismissable': !!onDismiss,\n 'data-emphasis': emphasis,\n 'data-size': size,\n 'data-variant': variant,\n className: styles.root,\n };\n\n return (\n <div {...commonProps}>\n <TagMainContent\n aria-label={ariaLabel || title}\n disabled={disabled}\n hoverContent={extractedHoverContent}\n isHover={isHover}\n onClick={onClick}\n onMouseEnter={() => setIsHover(true)}\n onMouseLeave={() => setIsHover(false)}\n title={title}\n data-test-id={dataTestId}\n >\n {processedChildren}\n </TagMainContent>\n <TagActionButtons\n aria-label={ariaLabel || title}\n disabled={disabled}\n onAddClick={onAddClick}\n onDismiss={onDismiss}\n />\n </div>\n );\n};\nTagRoot.displayName = 'Tag';\n\nconst TagMainContent = ({\n 'aria-label': ariaLabel,\n 'data-test-id': dataTestId,\n children,\n disabled = false,\n hoverContent,\n isHover = false,\n onClick,\n onMouseEnter,\n onMouseLeave,\n title,\n}: {\n 'aria-label'?: string;\n 'data-test-id'?: string;\n children: ReactNode;\n disabled?: boolean;\n hoverContent?: ReactNode;\n isHover?: boolean;\n onClick?: (event?: MouseEvent<HTMLButtonElement>) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n title?: string;\n}) => {\n // Process children to handle secondary content slots in their natural position\n let secondaryIndex = 0;\n const processedChildren = Children.map(children, (child) => {\n if (isValidElement(child) && child.type === TagSecondaryContent) {\n const currentIndex = secondaryIndex++;\n return (\n <div className={styles.secondaryContent} key={`secondary-${currentIndex}`}>\n {/* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */}\n {child.props.children}\n </div>\n );\n }\n return child;\n });\n\n const content = hoverContent ? (\n <div data-hover={isHover}>\n <div>{hoverContent}</div>\n <div>{processedChildren}</div>\n </div>\n ) : (\n processedChildren\n );\n\n if (onClick) {\n return (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n title={title}\n className={styles.mainContent}\n onClick={disabled ? undefined : onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n disabled={disabled}\n data-test-id={dataTestId}\n >\n {content}\n </button>\n );\n }\n\n return (\n <div\n className={styles.mainContent}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n data-test-id={dataTestId}\n >\n {content}\n </div>\n );\n};\n\ntype TagActionButtonsProps = {\n /**\n * @default false\n */\n disabled?: boolean;\n /**\n * Click handler on dismiss\n */\n onDismiss?: (event?: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Click handler on add click\n */\n onAddClick?: (event?: MouseEvent<HTMLButtonElement>) => void;\n 'aria-label'?: string;\n};\n\nconst TagActionButtons = ({ 'aria-label': ariaLabel, disabled, onAddClick, onDismiss }: TagActionButtonsProps) => {\n return (\n <>\n {onAddClick && (\n <button\n type=\"button\"\n aria-label={`Add ${ariaLabel || ''}`}\n className={styles.actionButton}\n disabled={disabled}\n onClick={onAddClick}\n >\n <IconPlus size=\"16\" />\n </button>\n )}\n {onDismiss && (\n <button\n type=\"button\"\n aria-label={`Dismiss ${ariaLabel || ''}`}\n className={styles.actionButton}\n disabled={disabled}\n onClick={onDismiss}\n >\n <IconCross size=\"16\" />\n </button>\n )}\n </>\n );\n};\n\nexport const TagHoverContent = ({ children }: TagHoverContentProps) => {\n return <>{children}</>;\n};\nTagHoverContent.displayName = 'Tag.HoverContent';\n\nexport const TagSecondaryContent = ({ children }: TagSecondaryContentProps) => {\n return <>{children}</>;\n};\nTagSecondaryContent.displayName = 'Tag.SecondaryContent';\n\nexport const Tag = TagRoot as typeof TagRoot & {\n HoverContent: typeof TagHoverContent;\n SecondaryContent: typeof TagSecondaryContent;\n displayName?: string;\n};\nTag.HoverContent = TagHoverContent;\nTag.SecondaryContent = TagSecondaryContent;\n"],"names":["TagRoot","ariaLabel","dataTestId","children","disabled","emphasis","onAddClick","onClick","onDismiss","size","title","variant","isHover","setIsHover","useState","extractedHoverContent","processedChildren","Children","child","isValidElement","TagHoverContent","commonProps","styles","jsxs","jsx","TagMainContent","TagActionButtons","hoverContent","onMouseEnter","onMouseLeave","secondaryIndex","TagSecondaryContent","currentIndex","content","Fragment","IconPlus","IconCross","Tag"],"mappings":"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"}
@@ -1,36 +1,132 @@
1
- import { jsx as p } from "react/jsx-runtime";
2
- import { forwardRef as l } from "react";
3
- import { cn as c } from "./fondue-components37.js";
4
- import t from "./fondue-components77.js";
5
- const x = l(
6
- ({
7
- children: e,
8
- as: r = "span",
9
- size: m = "medium",
10
- weight: a = "default",
11
- color: s = "default",
12
- boxColor: o,
13
- className: i,
14
- ...d
15
- }, f) => /* @__PURE__ */ p(
16
- r,
1
+ import { jsx as a, jsxs as b } from "react/jsx-runtime";
2
+ import { createContext as E, forwardRef as l, useContext as f, useRef as w, useEffect as O, useMemo as I, useCallback as q, createElement as z } from "react";
3
+ import { IconDotsHorizontal as B } from "@frontify/fondue-icons";
4
+ import * as c from "@radix-ui/react-tabs";
5
+ import { useControllableState as H } from "./fondue-components64.js";
6
+ import { Button as M } from "./fondue-components6.js";
7
+ import { Dropdown as d } from "./fondue-components11.js";
8
+ import { useTabTriggers as W } from "./fondue-components78.js";
9
+ import n from "./fondue-components79.js";
10
+ const m = E({
11
+ value: "",
12
+ disabled: !1
13
+ });
14
+ m.displayName = "TabConfigContext";
15
+ const v = E({
16
+ addTrigger: () => {
17
+ }
18
+ });
19
+ v.displayName = "TabTriggerContext";
20
+ const L = ({
21
+ padding: t = "compact",
22
+ activeTab: o,
23
+ defaultActiveTab: s,
24
+ size: r = "medium",
25
+ onActiveTabChange: u,
26
+ children: p,
27
+ variant: T = "default",
28
+ ...i
29
+ }, S) => {
30
+ var y;
31
+ const [g, C] = H({
32
+ prop: o,
33
+ defaultProp: s,
34
+ onChange: u
35
+ }), x = q(
36
+ (e) => {
37
+ C(e);
38
+ },
39
+ [C]
40
+ ), { triggerListRef: j, activeIndicatorRef: A, triggers: N, triggersOutOfView: h, addTrigger: R } = W({
41
+ activeTab: g
42
+ }), D = I(() => ({ addTrigger: R }), [R]);
43
+ return /* @__PURE__ */ a(v.Provider, { value: D, children: /* @__PURE__ */ b(
44
+ c.Root,
17
45
  {
18
- "data-test-id": "text",
19
- className: c([
20
- t.root,
21
- t[`size-${m}`],
22
- t[`weight-${a}`],
23
- t[o ? `color-box-${o}` : `color-${s}`],
24
- i
25
- ]),
26
- ref: f,
27
- ...d,
28
- children: e
46
+ ref: S,
47
+ className: n.root,
48
+ onValueChange: x,
49
+ value: g ?? ((y = N[0]) == null ? void 0 : y.value),
50
+ "data-tabs-content-padding": t,
51
+ "data-tabs-variant": T,
52
+ ...i,
53
+ children: [
54
+ /* @__PURE__ */ b("div", { className: n.triggerListWrapper, children: [
55
+ /* @__PURE__ */ a(c.List, { ref: j, "data-size": r, className: n.triggerList, children: N.map((e) => /* @__PURE__ */ z(
56
+ c.Trigger,
57
+ {
58
+ ...e.props,
59
+ key: e.value,
60
+ value: e.value,
61
+ disabled: e.disabled,
62
+ className: n.trigger,
63
+ ref: e.ref
64
+ },
65
+ e.element
66
+ )) }),
67
+ /* @__PURE__ */ b(d.Root, { children: [
68
+ h.length > 0 && /* @__PURE__ */ a(d.Trigger, { "data-test-id": "overflow-items-dropdown-trigger", children: /* @__PURE__ */ a(M, { emphasis: "default", aspect: "square", size: "small", children: /* @__PURE__ */ a(B, { size: 16 }) }) }),
69
+ /* @__PURE__ */ a(d.Content, { align: "end", "data-test-id": "overflow-items-dropdown-content", children: h.map((e) => /* @__PURE__ */ z(
70
+ d.Item,
71
+ {
72
+ ...e.props,
73
+ disabled: e.disabled,
74
+ onSelect: () => x(e.value),
75
+ key: e.value
76
+ },
77
+ e.element
78
+ )) })
79
+ ] }),
80
+ /* @__PURE__ */ a(
81
+ "span",
82
+ {
83
+ "data-test-id": "active-tab-indicator",
84
+ ref: A,
85
+ className: n.activeIndicator
86
+ }
87
+ )
88
+ ] }),
89
+ p
90
+ ]
29
91
  }
30
- )
31
- );
32
- x.displayName = "FondueText";
92
+ ) });
93
+ };
94
+ L.displayName = "Tabs.Root";
95
+ const V = ({ children: t, value: o, disabled: s }) => {
96
+ const r = I(() => ({ value: o, disabled: s }), [o, s]);
97
+ return /* @__PURE__ */ a(m.Provider, { value: r, children: t });
98
+ };
99
+ V.displayName = "Tabs.Tab";
100
+ const k = ({ children: t, ...o }, s) => {
101
+ const { value: r, disabled: u } = f(m), { addTrigger: p } = f(v), T = w(null), i = w();
102
+ return O(() => {
103
+ p({
104
+ ref: T || s,
105
+ value: r ?? "",
106
+ disabled: u,
107
+ props: o,
108
+ element: t,
109
+ previousElement: i.current
110
+ }), i.current = t;
111
+ }, [t]), null;
112
+ };
113
+ k.displayName = "Tabs.Trigger";
114
+ const P = ({ children: t, ...o }, s) => {
115
+ const { value: r } = f(m);
116
+ return /* @__PURE__ */ a(c.Content, { ref: s, ...o, className: n.content, value: r ?? "", children: t });
117
+ };
118
+ P.displayName = "Tabs.Content";
119
+ const Z = {
120
+ Root: l(L),
121
+ Tab: l(V),
122
+ Trigger: l(k),
123
+ Content: l(P)
124
+ };
33
125
  export {
34
- x as Text
126
+ Z as Tabs,
127
+ P as TabsContent,
128
+ L as TabsRoot,
129
+ V as TabsTab,
130
+ k as TabsTrigger
35
131
  };
36
132
  //# sourceMappingURL=fondue-components27.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components27.js","sources":["../src/components/Text/Text.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type ReactNode, forwardRef, type ForwardedRef, type HTMLAttributeAnchorTarget } from 'react';\n\nimport { type CommonAriaProps } from '#/helpers/aria';\nimport { cn } from '#/utilities/styleUtilities';\n\nimport styles from './styles/text.module.scss';\n\ntype TextWeight = 'default' | 'strong' | 'x-strong';\ntype TextSize = 'x-small' | 'small' | 'medium' | 'large';\ntype TextColor = 'default' | 'weak' | 'x-weak' | 'disabled' | 'negative' | 'positive' | 'warning' | 'interactive';\ntype BoxColor = 'neutral' | 'selected' | 'disabled' | 'positive' | 'negative' | 'warning';\n\ntype TagType = 'a' | 'abbr' | 'address' | 'em' | 'label' | 'li' | 'span' | 'strong' | 'time' | 'p';\n\nexport type TextProps<TTag extends TagType = 'span'> = CommonAriaProps &\n TagProps<TTag> & {\n /**\n * Id of the element\n */\n id?: string;\n /**\n * Size of the text\n *\n * @default 'medium'\n */\n size?: TextSize;\n /**\n * Weight of the font\n *\n * @default 'default'\n */\n weight?: TextWeight;\n /**\n * The html element used to render\n *\n * @default 'span'\n */\n as?: TTag;\n /**\n * Color of the text\n *\n * @default 'default'\n */\n color?: TextColor;\n /**\n * The texts color when used within a box\n *\n * @description optional color prop that uses the inverse box color when accessibility contrast is needed\n **/\n boxColor?: BoxColor;\n className?: string;\n children?: ReactNode;\n };\n\ntype TagPropMap = {\n a: { href?: string; target: HTMLAttributeAnchorTarget; rel?: string; title?: string };\n abbr: { title?: string };\n address: object;\n em: object;\n label: { for?: string };\n li: { value?: string };\n p: object;\n span: object;\n strong: object;\n time: { dateTime?: string };\n};\ntype TagProps<TTag extends TagType> = TagPropMap[TTag];\n\ntype TextElementMap = {\n a: HTMLAnchorElement;\n abbr: HTMLElement;\n address: HTMLElement;\n em: HTMLElement;\n label: HTMLLabelElement;\n li: HTMLLIElement;\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n strong: HTMLElement;\n time: HTMLTimeElement;\n};\ntype TextElementType<TTag extends TagType> = TextElementMap[TTag];\n\nexport const Text = forwardRef(\n (\n {\n children,\n as: Tag = 'span',\n size = 'medium',\n weight = 'default',\n color = 'default',\n boxColor,\n className,\n ...props\n },\n ref,\n ) => (\n <Tag\n data-test-id=\"text\"\n className={cn([\n styles.root,\n styles[`size-${size}`],\n styles[`weight-${weight}`],\n styles[boxColor ? `color-box-${boxColor}` : `color-${color}`],\n className,\n ])}\n // @ts-expect-error ref can not be inferred properly by TS\n ref={ref}\n {...props}\n >\n {children}\n </Tag>\n ),\n) as (<TTag extends TagType = 'span'>(\n props: TextProps<TTag> & { ref?: ForwardedRef<TextElementType<TTag>> },\n) => JSX.Element) & { displayName: string };\n\nText.displayName = 'FondueText';\n"],"names":["Text","forwardRef","children","Tag","size","weight","color","boxColor","className","props","ref","jsx","cn","styles"],"mappings":";;;;AAoFO,MAAMA,IAAOC;AAAA,EAChB,CACI;AAAA,IACI,UAAAC;AAAA,IACA,IAAIC,IAAM;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,QAAAC,IAAS;AAAA,IACT,OAAAC,IAAQ;AAAA,IACR,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAEPC,MAEA,gBAAAC;AAAA,IAACR;AAAA,IAAA;AAAA,MACG,gBAAa;AAAA,MACb,WAAWS,EAAG;AAAA,QACVC,EAAO;AAAA,QACPA,EAAO,QAAQT,CAAI,EAAE;AAAA,QACrBS,EAAO,UAAUR,CAAM,EAAE;AAAA,QACzBQ,EAAON,IAAW,aAAaA,CAAQ,KAAK,SAASD,CAAK,EAAE;AAAA,QAC5DE;AAAA,MAAA,CACH;AAAA,MAED,KAAAE;AAAA,MACC,GAAGD;AAAA,MAEH,UAAAP;AAAA,IAAA;AAAA,EAAA;AAGb;AAIAF,EAAK,cAAc;"}
1
+ {"version":3,"file":"fondue-components27.js","sources":["../src/components/Tabs/Tabs.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconDotsHorizontal } from '@frontify/fondue-icons';\nimport * as RadixTabs from '@radix-ui/react-tabs';\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ForwardedRef,\n type ReactNode,\n} from 'react';\n\nimport { useControllableState } from '#/hooks/useControllableState';\n\nimport { Button } from '../Button/Button';\nimport { Dropdown } from '../Dropdown/Dropdown';\n\nimport { useTabTriggers } from './hooks/useTabTriggers';\nimport styles from './styles/tabs.module.scss';\nimport { type TabTrigger } from './types';\n\nexport type TabsRootProps = {\n id?: string;\n children: ReactNode;\n /**\n * Define the padding of the dialog\n * @default \"compact\"\n */\n padding?: 'none' | 'tight' | 'compact' | 'comfortable' | 'spacious';\n /**\n * The default active tab\n * Used for uncontrolled components\n */\n defaultActiveTab?: string;\n /**\n * The controlled value of the active tab\n */\n activeTab?: string;\n /**\n * The height of the tabs\n * @default 'medium'\n */\n size?: 'medium' | 'large';\n /**\n * Event handler called when the active tab changes\n */\n onActiveTabChange?: (value: string) => void;\n /**\n * Select the used variant\n * “default 'default'\n */\n variant?: 'default' | 'pill';\n};\n\nconst TabConfigContext = createContext<{\n value: string;\n disabled?: boolean;\n}>({\n value: '',\n disabled: false,\n});\nTabConfigContext.displayName = 'TabConfigContext';\n\nconst TabTriggerContext = createContext<{\n addTrigger: (trigger: TabTrigger) => void;\n}>({\n addTrigger: () => {},\n});\nTabTriggerContext.displayName = 'TabTriggerContext';\n\nexport const TabsRoot = (\n {\n padding = 'compact',\n activeTab: propsActiveTab,\n defaultActiveTab,\n size = 'medium',\n onActiveTabChange,\n children,\n variant = 'default',\n ...props\n }: TabsRootProps,\n ref: ForwardedRef<HTMLDivElement>,\n) => {\n const [activeTab, setActiveTab] = useControllableState({\n prop: propsActiveTab,\n defaultProp: defaultActiveTab,\n onChange: onActiveTabChange,\n });\n\n const handleSetActiveTab = useCallback(\n (value: string) => {\n setActiveTab(value);\n },\n [setActiveTab],\n );\n\n const { triggerListRef, activeIndicatorRef, triggers, triggersOutOfView, addTrigger } = useTabTriggers({\n activeTab,\n });\n\n const contextValue = useMemo(() => ({ addTrigger }), [addTrigger]);\n\n return (\n <TabTriggerContext.Provider value={contextValue}>\n <RadixTabs.Root\n ref={ref}\n className={styles.root}\n onValueChange={handleSetActiveTab}\n value={activeTab ?? triggers[0]?.value}\n data-tabs-content-padding={padding}\n data-tabs-variant={variant}\n {...props}\n >\n <div className={styles.triggerListWrapper}>\n <RadixTabs.List ref={triggerListRef} data-size={size} className={styles.triggerList}>\n {triggers.map((trigger) => (\n <RadixTabs.Trigger\n {...trigger.props}\n key={trigger.value}\n value={trigger.value}\n disabled={trigger.disabled}\n className={styles.trigger}\n ref={trigger.ref}\n >\n {trigger.element}\n </RadixTabs.Trigger>\n ))}\n </RadixTabs.List>\n <Dropdown.Root>\n {triggersOutOfView.length > 0 && (\n <Dropdown.Trigger data-test-id=\"overflow-items-dropdown-trigger\">\n <Button emphasis=\"default\" aspect=\"square\" size=\"small\">\n <IconDotsHorizontal size={16} />\n </Button>\n </Dropdown.Trigger>\n )}\n <Dropdown.Content align=\"end\" data-test-id=\"overflow-items-dropdown-content\">\n {triggersOutOfView.map((trigger) => (\n <Dropdown.Item\n {...trigger.props}\n disabled={trigger.disabled}\n onSelect={() => handleSetActiveTab(trigger.value)}\n key={trigger.value}\n >\n {trigger.element}\n </Dropdown.Item>\n ))}\n </Dropdown.Content>\n </Dropdown.Root>\n <span\n data-test-id=\"active-tab-indicator\"\n ref={activeIndicatorRef}\n className={styles.activeIndicator}\n />\n </div>\n {children}\n </RadixTabs.Root>\n </TabTriggerContext.Provider>\n );\n};\nTabsRoot.displayName = 'Tabs.Root';\n\ntype TabsTabProps = {\n children: ReactNode;\n value: string;\n disabled?: boolean;\n};\n\nexport const TabsTab = ({ children, value, disabled }: TabsTabProps) => {\n const contextValue = useMemo(() => ({ value, disabled }), [value, disabled]);\n\n return <TabConfigContext.Provider value={contextValue}>{children}</TabConfigContext.Provider>;\n};\nTabsTab.displayName = 'Tabs.Tab';\n\ntype TabsTriggerProps = {\n children: ReactNode;\n};\n\nexport const TabsTrigger = ({ children, ...props }: TabsTriggerProps, ref: ForwardedRef<HTMLButtonElement>) => {\n const { value, disabled } = useContext(TabConfigContext);\n\n const { addTrigger } = useContext(TabTriggerContext);\n\n const localRef = useRef<HTMLButtonElement>(null);\n const previousElement = useRef<ReactNode>();\n\n useEffect(() => {\n addTrigger({\n ref: localRef || ref,\n value: value ?? '',\n disabled,\n props,\n element: children,\n previousElement: previousElement.current,\n });\n previousElement.current = children;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n return null;\n};\nTabsTrigger.displayName = 'Tabs.Trigger';\n\ntype TabsContentProps = {\n children: ReactNode;\n asChild?: boolean;\n};\n\nexport const TabsContent = ({ children, ...itemProps }: TabsContentProps, ref: ForwardedRef<HTMLDivElement>) => {\n const { value } = useContext(TabConfigContext);\n\n return (\n <RadixTabs.Content ref={ref} {...itemProps} className={styles.content} value={value ?? ''}>\n {children}\n </RadixTabs.Content>\n );\n};\nTabsContent.displayName = 'Tabs.Content';\n\nexport const Tabs = {\n Root: forwardRef<HTMLDivElement, TabsRootProps>(TabsRoot),\n Tab: forwardRef<HTMLDivElement, TabsTabProps>(TabsTab),\n Trigger: forwardRef<HTMLButtonElement, TabsTriggerProps>(TabsTrigger),\n Content: forwardRef<HTMLDivElement, TabsContentProps>(TabsContent),\n};\n"],"names":["TabConfigContext","createContext","TabTriggerContext","TabsRoot","padding","propsActiveTab","defaultActiveTab","size","onActiveTabChange","children","variant","props","ref","activeTab","setActiveTab","useControllableState","handleSetActiveTab","useCallback","value","triggerListRef","activeIndicatorRef","triggers","triggersOutOfView","addTrigger","useTabTriggers","contextValue","useMemo","jsx","jsxs","RadixTabs","styles","_a","trigger","createElement","Dropdown","Button","IconDotsHorizontal","TabsTab","disabled","TabsTrigger","useContext","localRef","useRef","previousElement","useEffect","TabsContent","itemProps","Tabs","forwardRef"],"mappings":"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"}
@@ -1,62 +1,36 @@
1
- import { jsxs as w, jsx as l } from "react/jsx-runtime";
2
- import { IconCheckMark as N, IconExclamationMarkTriangle as S } from "@frontify/fondue-icons";
3
- import { forwardRef as n, useRef as T } from "react";
4
- import { cn as m } from "./fondue-components37.js";
5
- import t from "./fondue-components78.js";
6
- const f = ({
7
- children: c,
8
- className: i,
9
- status: e = "neutral",
10
- "data-test-id": r = "fondue-text-input",
11
- "aria-errormessage": g,
12
- ...a
13
- }, R) => {
14
- const d = T(!1);
15
- return /* @__PURE__ */ w("div", { className: m(t.root, i), "data-status": e, "data-test-id": r, children: [
16
- e === "loading" ? /* @__PURE__ */ l("div", { className: t.loadingStatus, "data-test-id": `${r}-loader` }) : null,
17
- /* @__PURE__ */ l(
18
- "input",
19
- {
20
- onMouseDown: (o) => {
21
- d.current = !0, o.currentTarget.dataset.showFocusRing = "false";
22
- },
23
- type: "text",
24
- ...a,
25
- onFocus: (o) => {
26
- var s;
27
- d.current || (o.target.dataset.showFocusRing = "true"), (s = a.onFocus) == null || s.call(a, o);
28
- },
29
- onBlur: (o) => {
30
- var s;
31
- o.target.dataset.showFocusRing = "false", d.current = !1, (s = a.onBlur) == null || s.call(a, o);
32
- },
33
- ref: R,
34
- className: t.input,
35
- "aria-invalid": e === "error",
36
- "aria-errormessage": e === "error" ? g : void 0
37
- }
38
- ),
39
- e === "success" ? /* @__PURE__ */ l(N, { size: 16, className: t.iconSuccess, "data-test-id": `${r}-success-icon` }) : null,
40
- e === "error" ? /* @__PURE__ */ l(
41
- S,
42
- {
43
- size: 16,
44
- className: t.iconError,
45
- "data-test-id": `${r}-error-icon`
46
- }
47
- ) : null,
48
- c
49
- ] });
50
- };
51
- f.displayName = "TextField.Root";
52
- const u = ({ name: c, className: i, ...e }, r) => /* @__PURE__ */ l("div", { "data-slot": !0, "data-name": c, ...e, ref: r, className: m(t.slot, i) });
53
- u.displayName = "TextField.Slot";
54
- const x = n(f), h = n(u), F = x;
55
- F.Root = x;
56
- F.Slot = h;
1
+ import { jsx as p } from "react/jsx-runtime";
2
+ import { forwardRef as l } from "react";
3
+ import { cn as c } from "./fondue-components38.js";
4
+ import t from "./fondue-components80.js";
5
+ const x = l(
6
+ ({
7
+ children: e,
8
+ as: r = "span",
9
+ size: m = "medium",
10
+ weight: a = "default",
11
+ color: s = "default",
12
+ boxColor: o,
13
+ className: i,
14
+ ...d
15
+ }, f) => /* @__PURE__ */ p(
16
+ r,
17
+ {
18
+ "data-test-id": "text",
19
+ className: c([
20
+ t.root,
21
+ t[`size-${m}`],
22
+ t[`weight-${a}`],
23
+ t[o ? `color-box-${o}` : `color-${s}`],
24
+ i
25
+ ]),
26
+ ref: f,
27
+ ...d,
28
+ children: e
29
+ }
30
+ )
31
+ );
32
+ x.displayName = "FondueText";
57
33
  export {
58
- f as TextFieldRoot,
59
- u as TextFieldSlot,
60
- F as TextInput
34
+ x as Text
61
35
  };
62
36
  //# sourceMappingURL=fondue-components28.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components28.js","sources":["../src/components/TextInput/TextInput.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconCheckMark, IconExclamationMarkTriangle } from '@frontify/fondue-icons';\nimport {\n type FocusEvent,\n forwardRef,\n useRef,\n type ChangeEvent,\n type ForwardedRef,\n type KeyboardEvent,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\n\nimport { cn } from '#/utilities/styleUtilities';\n\nimport styles from './styles/text.module.scss';\n\nexport type TextInputProps = {\n id?: string;\n name?: string;\n /**\n * The place where the input slots are placed\n */\n children?: ReactNode;\n /**\n * The default value of the text input\n * Used for uncontrolled components\n */\n defaultValue?: string | number;\n /**\n * The controlled value of the text input\n */\n value?: string | number;\n /**\n * Type of the text input\n * @default \"text\"\n */\n type?: 'date' | 'email' | 'hidden' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'time' | 'url';\n /**\n * The placeholder in the text input\n */\n placeholder?: string;\n /**\n * Disable the text input\n * @default false\n */\n disabled?: boolean;\n /**\n * Make the text input required in form\n * @default false\n */\n required?: boolean;\n /**\n * Make the text input spell-checkable\n * @default true\n */\n spellCheck?: boolean;\n /**\n * Make the text input read-only\n * @default false\n */\n readOnly?: boolean;\n /**\n * Set the type of input so autocomplete can help the user\n * @default \"on\"\n */\n autoComplete?: string;\n /**\n * The maximum length of the text input\n */\n maxLength?: number;\n /**\n * Status of the text input\n * @default \"neutral\"\n */\n status?: 'neutral' | 'success' | 'error' | 'loading';\n className?: string;\n /**\n * Event handler called when the text input value changes\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the text input is blurred\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the text input is focused\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when a key is pressed\n */\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when a key is released\n */\n onKeyUp?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the text inside of text input is selected\n */\n onSelect?: (event: SyntheticEvent<HTMLInputElement>) => void;\n 'data-test-id'?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-errormessage'?: string;\n};\n\nexport const TextFieldRoot = (\n {\n children,\n className,\n status = 'neutral',\n 'data-test-id': dataTestId = 'fondue-text-input',\n 'aria-errormessage': ariaErrormessage,\n ...inputProps\n }: TextInputProps,\n ref: ForwardedRef<HTMLInputElement>,\n) => {\n const wasClicked = useRef(false);\n\n return (\n <div className={cn(styles.root, className)} data-status={status} data-test-id={dataTestId}>\n {status === 'loading' ? (\n <div className={styles.loadingStatus} data-test-id={`${dataTestId}-loader`} />\n ) : null}\n <input\n onMouseDown={(mouseEvent) => {\n wasClicked.current = true;\n mouseEvent.currentTarget.dataset.showFocusRing = 'false';\n }}\n type=\"text\"\n {...inputProps}\n onFocus={(focusEvent) => {\n if (!wasClicked.current) {\n focusEvent.target.dataset.showFocusRing = 'true';\n }\n inputProps.onFocus?.(focusEvent);\n }}\n onBlur={(blurEvent) => {\n blurEvent.target.dataset.showFocusRing = 'false';\n wasClicked.current = false;\n inputProps.onBlur?.(blurEvent);\n }}\n ref={ref}\n className={styles.input}\n aria-invalid={status === 'error'}\n aria-errormessage={status === 'error' ? ariaErrormessage : undefined}\n />\n\n {status === 'success' ? (\n <IconCheckMark size={16} className={styles.iconSuccess} data-test-id={`${dataTestId}-success-icon`} />\n ) : null}\n\n {status === 'error' ? (\n <IconExclamationMarkTriangle\n size={16}\n className={styles.iconError}\n data-test-id={`${dataTestId}-error-icon`}\n />\n ) : null}\n\n {children}\n </div>\n );\n};\nTextFieldRoot.displayName = 'TextField.Root';\n\nexport type TextFieldSlotProps = {\n children: ReactNode;\n name?: 'left' | 'right';\n className?: string;\n};\n\nexport const TextFieldSlot = (\n { name, className, ...slotProps }: TextFieldSlotProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) => {\n return <div data-slot data-name={name} {...slotProps} ref={forwardedRef} className={cn(styles.slot, className)} />;\n};\n\nTextFieldSlot.displayName = 'TextField.Slot';\n\nconst ForwardedRefTextFieldRoot = forwardRef<HTMLInputElement, TextInputProps>(TextFieldRoot);\nconst ForwardedRefTextFieldSlot = forwardRef<HTMLDivElement, TextFieldSlotProps>(TextFieldSlot);\n// @ts-expect-error We support both single component (without slots) and compound components (with slots)\nexport const TextInput: typeof TextFieldRoot & {\n Root: typeof ForwardedRefTextFieldRoot;\n Slot: typeof ForwardedRefTextFieldSlot;\n} = ForwardedRefTextFieldRoot;\nTextInput.Root = ForwardedRefTextFieldRoot;\nTextInput.Slot = ForwardedRefTextFieldSlot;\n"],"names":["TextFieldRoot","children","className","status","dataTestId","ariaErrormessage","inputProps","ref","wasClicked","useRef","jsxs","cn","styles","jsx","mouseEvent","focusEvent","_a","blurEvent","IconCheckMark","IconExclamationMarkTriangle","TextFieldSlot","name","slotProps","forwardedRef","ForwardedRefTextFieldRoot","forwardRef","ForwardedRefTextFieldSlot","TextInput"],"mappings":";;;;;AA6GO,MAAMA,IAAgB,CACzB;AAAA,EACI,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,gBAAgBC,IAAa;AAAA,EAC7B,qBAAqBC;AAAA,EACrB,GAAGC;AACP,GACAC,MACC;AACD,QAAMC,IAAaC,EAAO,EAAK;AAE/B,SACI,gBAAAC,EAAC,OAAA,EAAI,WAAWC,EAAGC,EAAO,MAAMV,CAAS,GAAG,eAAaC,GAAQ,gBAAcC,GAC1E,UAAA;AAAA,IAAAD,MAAW,YACR,gBAAAU,EAAC,OAAA,EAAI,WAAWD,EAAO,eAAe,gBAAc,GAAGR,CAAU,UAAA,CAAW,IAC5E;AAAA,IACJ,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,aAAa,CAACC,MAAe;AACzB,UAAAN,EAAW,UAAU,IACrBM,EAAW,cAAc,QAAQ,gBAAgB;AAAA,QACrD;AAAA,QACA,MAAK;AAAA,QACJ,GAAGR;AAAA,QACJ,SAAS,CAACS,MAAe;;AACrB,UAAKP,EAAW,YACZO,EAAW,OAAO,QAAQ,gBAAgB,UAE9CC,IAAAV,EAAW,YAAX,QAAAU,EAAA,KAAAV,GAAqBS;AAAA,QACzB;AAAA,QACA,QAAQ,CAACE,MAAc;;AACnB,UAAAA,EAAU,OAAO,QAAQ,gBAAgB,SACzCT,EAAW,UAAU,KACrBQ,IAAAV,EAAW,WAAX,QAAAU,EAAA,KAAAV,GAAoBW;AAAA,QACxB;AAAA,QACA,KAAAV;AAAA,QACA,WAAWK,EAAO;AAAA,QAClB,gBAAcT,MAAW;AAAA,QACzB,qBAAmBA,MAAW,UAAUE,IAAmB;AAAA,MAAA;AAAA,IAAA;AAAA,IAG9DF,MAAW,YACR,gBAAAU,EAACK,GAAA,EAAc,MAAM,IAAI,WAAWN,EAAO,aAAa,gBAAc,GAAGR,CAAU,iBAAiB,IACpG;AAAA,IAEHD,MAAW,UACR,gBAAAU;AAAA,MAACM;AAAA,MAAA;AAAA,QACG,MAAM;AAAA,QACN,WAAWP,EAAO;AAAA,QAClB,gBAAc,GAAGR,CAAU;AAAA,MAAA;AAAA,IAAA,IAE/B;AAAA,IAEHH;AAAA,EAAA,GACL;AAER;AACAD,EAAc,cAAc;AAQrB,MAAMoB,IAAgB,CACzB,EAAE,MAAAC,GAAM,WAAAnB,GAAW,GAAGoB,EAAA,GACtBC,MAEO,gBAAAV,EAAC,OAAA,EAAI,aAAS,IAAC,aAAWQ,GAAO,GAAGC,GAAW,KAAKC,GAAc,WAAWZ,EAAGC,EAAO,MAAMV,CAAS,GAAG;AAGpHkB,EAAc,cAAc;AAE5B,MAAMI,IAA4BC,EAA6CzB,CAAa,GACtF0B,IAA4BD,EAA+CL,CAAa,GAEjFO,IAGTH;AACJG,EAAU,OAAOH;AACjBG,EAAU,OAAOD;"}
1
+ {"version":3,"file":"fondue-components28.js","sources":["../src/components/Text/Text.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type ReactNode, forwardRef, type ForwardedRef, type HTMLAttributeAnchorTarget } from 'react';\n\nimport { type CommonAriaProps } from '#/helpers/aria';\nimport { cn } from '#/utilities/styleUtilities';\n\nimport styles from './styles/text.module.scss';\n\ntype TextWeight = 'default' | 'strong' | 'x-strong';\ntype TextSize = 'x-small' | 'small' | 'medium' | 'large';\ntype TextColor = 'default' | 'weak' | 'x-weak' | 'disabled' | 'negative' | 'positive' | 'warning' | 'interactive';\ntype BoxColor = 'neutral' | 'selected' | 'disabled' | 'positive' | 'negative' | 'warning';\n\ntype TagType = 'a' | 'abbr' | 'address' | 'em' | 'label' | 'li' | 'span' | 'strong' | 'time' | 'p';\n\nexport type TextProps<TTag extends TagType = 'span'> = CommonAriaProps &\n TagProps<TTag> & {\n /**\n * Id of the element\n */\n id?: string;\n /**\n * Size of the text\n *\n * @default 'medium'\n */\n size?: TextSize;\n /**\n * Weight of the font\n *\n * @default 'default'\n */\n weight?: TextWeight;\n /**\n * The html element used to render\n *\n * @default 'span'\n */\n as?: TTag;\n /**\n * Color of the text\n *\n * @default 'default'\n */\n color?: TextColor;\n /**\n * The texts color when used within a box\n *\n * @description optional color prop that uses the inverse box color when accessibility contrast is needed\n **/\n boxColor?: BoxColor;\n className?: string;\n children?: ReactNode;\n };\n\ntype TagPropMap = {\n a: { href?: string; target: HTMLAttributeAnchorTarget; rel?: string; title?: string };\n abbr: { title?: string };\n address: object;\n em: object;\n label: { for?: string };\n li: { value?: string };\n p: object;\n span: object;\n strong: object;\n time: { dateTime?: string };\n};\ntype TagProps<TTag extends TagType> = TagPropMap[TTag];\n\ntype TextElementMap = {\n a: HTMLAnchorElement;\n abbr: HTMLElement;\n address: HTMLElement;\n em: HTMLElement;\n label: HTMLLabelElement;\n li: HTMLLIElement;\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n strong: HTMLElement;\n time: HTMLTimeElement;\n};\ntype TextElementType<TTag extends TagType> = TextElementMap[TTag];\n\nexport const Text = forwardRef(\n (\n {\n children,\n as: Tag = 'span',\n size = 'medium',\n weight = 'default',\n color = 'default',\n boxColor,\n className,\n ...props\n },\n ref,\n ) => (\n <Tag\n data-test-id=\"text\"\n className={cn([\n styles.root,\n styles[`size-${size}`],\n styles[`weight-${weight}`],\n styles[boxColor ? `color-box-${boxColor}` : `color-${color}`],\n className,\n ])}\n // @ts-expect-error ref can not be inferred properly by TS\n ref={ref}\n {...props}\n >\n {children}\n </Tag>\n ),\n) as (<TTag extends TagType = 'span'>(\n props: TextProps<TTag> & { ref?: ForwardedRef<TextElementType<TTag>> },\n) => JSX.Element) & { displayName: string };\n\nText.displayName = 'FondueText';\n"],"names":["Text","forwardRef","children","Tag","size","weight","color","boxColor","className","props","ref","jsx","cn","styles"],"mappings":";;;;AAoFO,MAAMA,IAAOC;AAAA,EAChB,CACI;AAAA,IACI,UAAAC;AAAA,IACA,IAAIC,IAAM;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,QAAAC,IAAS;AAAA,IACT,OAAAC,IAAQ;AAAA,IACR,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAEPC,MAEA,gBAAAC;AAAA,IAACR;AAAA,IAAA;AAAA,MACG,gBAAa;AAAA,MACb,WAAWS,EAAG;AAAA,QACVC,EAAO;AAAA,QACPA,EAAO,QAAQT,CAAI,EAAE;AAAA,QACrBS,EAAO,UAAUR,CAAM,EAAE;AAAA,QACzBQ,EAAON,IAAW,aAAaA,CAAQ,KAAK,SAASD,CAAK,EAAE;AAAA,QAC5DE;AAAA,MAAA,CACH;AAAA,MAED,KAAAE;AAAA,MACC,GAAGD;AAAA,MAEH,UAAAP;AAAA,IAAA;AAAA,EAAA;AAGb;AAIAF,EAAK,cAAc;"}
@@ -1,105 +1,62 @@
1
- import { jsxs as v, jsx as o } from "react/jsx-runtime";
2
- import { IconCheckMark as $, IconExclamationMarkTriangle as b, IconCross as q } from "@frontify/fondue-icons";
3
- import { useRef as z, useState as x, useEffect as F } from "react";
4
- import l from "./fondue-components79.js";
5
- const Q = ({
6
- "data-test-id": B = "fondue-textarea",
7
- autocomplete: D,
8
- autosize: I,
9
- clearable: i,
10
- decorator: d,
11
- defaultValue: u,
12
- disabled: n,
13
- extraActions: c,
14
- focusOnMount: w,
15
- minRows: R = 1,
16
- maxRows: N,
17
- onEnterPressed: m,
18
- readOnly: r,
19
- resizable: S,
20
- selectable: y = !0,
21
- status: s = "default",
22
- value: f,
23
- ...t
24
- }) => {
25
- const k = z(null), h = z(!1), [C, g] = x(f ?? u ?? ""), T = (c == null ? void 0 : c.length) !== void 0 || i || ["success", "error"].includes(s), K = () => {
26
- g("");
27
- }, j = (a) => {
28
- var e;
29
- a.key === "Enter" && (m == null || m(a)), (e = t.onKeyDown) == null || e.call(t, a);
30
- };
31
- return F(() => {
32
- g(f ?? u ?? "");
33
- }, [u, f]), F(() => {
34
- var a;
35
- w && ((a = k.current) == null || a.focus());
36
- }, [w]), /* @__PURE__ */ v(
37
- "div",
38
- {
39
- className: l.root,
40
- "data-autosize": I,
41
- "data-clearable": i,
42
- "data-disabled": n || r,
43
- "data-has-decorator": !!d,
44
- "data-has-tools": T,
45
- "data-replicated-value": C,
46
- "data-resizable": S,
47
- "data-status": s,
48
- "data-max-rows": !!N,
49
- style: { "--max-rows": `${N}` },
50
- children: [
51
- d ? /* @__PURE__ */ o("div", { className: l.decorator, children: d }) : null,
52
- /* @__PURE__ */ o(
53
- "textarea",
54
- {
55
- ...t,
56
- onMouseDown: (a) => {
57
- h.current = !0, a.currentTarget.dataset.showFocusRing = "false";
58
- },
59
- onFocus: (a) => {
60
- var e;
61
- h.current || (a.target.dataset.showFocusRing = "true"), (e = t.onFocus) == null || e.call(t, a);
62
- },
63
- onBlur: (a) => {
64
- var e;
65
- a.target.dataset.showFocusRing = "false", h.current = !1, (e = t.onBlur) == null || e.call(t, a);
66
- },
67
- autoComplete: D ? "on" : "off",
68
- className: l.textarea,
69
- disabled: n,
70
- onKeyDown: j,
71
- onInput: (a) => g(a.currentTarget.value),
72
- onSelect: (a) => {
73
- y || (a.currentTarget.selectionStart = a.currentTarget.selectionEnd);
74
- },
75
- readOnly: r,
76
- ref: k,
77
- rows: R,
78
- value: C
79
- }
80
- ),
81
- s === "loading" && /* @__PURE__ */ o("div", { className: l.loadingStatus, "data-test-id": `${B}-loader` }),
82
- T && /* @__PURE__ */ v("div", { className: l.tools, children: [
83
- s === "success" && /* @__PURE__ */ o("div", { className: l.success, children: /* @__PURE__ */ o($, { size: 20 }) }),
84
- s === "error" && /* @__PURE__ */ o("div", { className: l[s], children: /* @__PURE__ */ o(b, { size: 20 }) }),
85
- c == null ? void 0 : c.map(({ icon: a, title: e, callback: M }) => /* @__PURE__ */ o(
86
- "button",
87
- {
88
- className: l.toolsButton,
89
- disabled: n || r,
90
- onClick: M,
91
- title: e,
92
- children: a
93
- },
94
- e
95
- )),
96
- i && /* @__PURE__ */ o("button", { className: l.toolsButton, onClick: K, disabled: n || r, children: /* @__PURE__ */ o(q, { size: 20, fill: "currentColor" }) })
97
- ] })
98
- ]
99
- }
100
- );
1
+ import { jsxs as w, jsx as l } from "react/jsx-runtime";
2
+ import { IconCheckMark as N, IconExclamationMarkTriangle as S } from "@frontify/fondue-icons";
3
+ import { forwardRef as n, useRef as T } from "react";
4
+ import { cn as m } from "./fondue-components38.js";
5
+ import t from "./fondue-components81.js";
6
+ const f = ({
7
+ children: c,
8
+ className: i,
9
+ status: e = "neutral",
10
+ "data-test-id": r = "fondue-text-input",
11
+ "aria-errormessage": g,
12
+ ...a
13
+ }, R) => {
14
+ const d = T(!1);
15
+ return /* @__PURE__ */ w("div", { className: m(t.root, i), "data-status": e, "data-test-id": r, children: [
16
+ e === "loading" ? /* @__PURE__ */ l("div", { className: t.loadingStatus, "data-test-id": `${r}-loader` }) : null,
17
+ /* @__PURE__ */ l(
18
+ "input",
19
+ {
20
+ onMouseDown: (o) => {
21
+ d.current = !0, o.currentTarget.dataset.showFocusRing = "false";
22
+ },
23
+ type: "text",
24
+ ...a,
25
+ onFocus: (o) => {
26
+ var s;
27
+ d.current || (o.target.dataset.showFocusRing = "true"), (s = a.onFocus) == null || s.call(a, o);
28
+ },
29
+ onBlur: (o) => {
30
+ var s;
31
+ o.target.dataset.showFocusRing = "false", d.current = !1, (s = a.onBlur) == null || s.call(a, o);
32
+ },
33
+ ref: R,
34
+ className: t.input,
35
+ "aria-invalid": e === "error",
36
+ "aria-errormessage": e === "error" ? g : void 0
37
+ }
38
+ ),
39
+ e === "success" ? /* @__PURE__ */ l(N, { size: 16, className: t.iconSuccess, "data-test-id": `${r}-success-icon` }) : null,
40
+ e === "error" ? /* @__PURE__ */ l(
41
+ S,
42
+ {
43
+ size: 16,
44
+ className: t.iconError,
45
+ "data-test-id": `${r}-error-icon`
46
+ }
47
+ ) : null,
48
+ c
49
+ ] });
101
50
  };
51
+ f.displayName = "TextField.Root";
52
+ const u = ({ name: c, className: i, ...e }, r) => /* @__PURE__ */ l("div", { "data-slot": !0, "data-name": c, ...e, ref: r, className: m(t.slot, i) });
53
+ u.displayName = "TextField.Slot";
54
+ const x = n(f), h = n(u), F = x;
55
+ F.Root = x;
56
+ F.Slot = h;
102
57
  export {
103
- Q as Textarea
58
+ f as TextFieldRoot,
59
+ u as TextFieldSlot,
60
+ F as TextInput
104
61
  };
105
62
  //# sourceMappingURL=fondue-components29.js.map