@frontify/fondue 12.0.0-beta.2 → 12.0.0-beta.4

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 (32) hide show
  1. package/dist/components/Button/Button.es.js +44 -43
  2. package/dist/components/Button/Button.es.js.map +1 -1
  3. package/dist/components/EditableText/EditableText.d.ts +2 -0
  4. package/dist/components/EditableText/EditableText.es.js +40 -40
  5. package/dist/components/EditableText/EditableText.es.js.map +1 -1
  6. package/dist/components/EditableText/lib/helper.d.ts +1 -0
  7. package/dist/components/EditableText/lib/helper.es.js +6 -5
  8. package/dist/components/EditableText/lib/helper.es.js.map +1 -1
  9. package/dist/components/OrderableList/OrderableList.es.js +34 -32
  10. package/dist/components/OrderableList/OrderableList.es.js.map +1 -1
  11. package/dist/components/RichTextEditor/RichTextEditor.es.js +46 -42
  12. package/dist/components/RichTextEditor/RichTextEditor.es.js.map +1 -1
  13. package/dist/components/RichTextEditor/helper.d.ts +1 -0
  14. package/dist/components/RichTextEditor/helper.es.js +8 -0
  15. package/dist/components/RichTextEditor/helper.es.js.map +1 -0
  16. package/dist/components/Switch/Switch.es.js +59 -42
  17. package/dist/components/Switch/Switch.es.js.map +1 -1
  18. package/dist/components/TextInput/TextInput.es.js +2 -2
  19. package/dist/components/TextInput/TextInput.es.js.map +1 -1
  20. package/dist/components/Tooltip/Tooltip.d.ts +3 -1
  21. package/dist/components/Tooltip/Tooltip.es.js +44 -39
  22. package/dist/components/Tooltip/Tooltip.es.js.map +1 -1
  23. package/dist/components/Tree/Node.es.js +37 -36
  24. package/dist/components/Tree/Node.es.js.map +1 -1
  25. package/dist/extractedThirdPartyStyles.css +8 -0
  26. package/dist/index.cjs.js +4 -4
  27. package/dist/index.cjs.js.map +1 -1
  28. package/dist/index.umd.js +4 -4
  29. package/dist/index.umd.js.map +1 -1
  30. package/dist/styles.css +1 -1
  31. package/package.json +1 -1
  32. package/tailwind.config.js +73 -72
@@ -1,11 +1,11 @@
1
- import i, { useEffect as y, useCallback as I } from "react";
2
- import { Plate as V } from "@udecode/plate";
3
- import { useMemoizedId as W } from "../../hooks/useMemoizedId.es.js";
4
- import { debounce as v } from "../../utilities/debounce.es.js";
5
- import { Toolbar as z } from "./components/Toolbar/Toolbar.es.js";
6
- import { RichTextEditorContext as G } from "./context/RichTextEditorContext.es.js";
7
- import { useEditorState as L } from "./hooks/useEditorState.es.js";
8
- import { useEditorResize as M } from "./hooks/useEditorResize.es.js";
1
+ import i, { useEffect as _, useCallback as v } from "react";
2
+ import { Plate as x } from "@udecode/plate";
3
+ import { useMemoizedId as I } from "../../hooks/useMemoizedId.es.js";
4
+ import { debounce as V } from "../../utilities/debounce.es.js";
5
+ import { Toolbar as W } from "./components/Toolbar/Toolbar.es.js";
6
+ import { RichTextEditorContext as w } from "./context/RichTextEditorContext.es.js";
7
+ import { useEditorState as z } from "./hooks/useEditorState.es.js";
8
+ import { useEditorResize as D } from "./hooks/useEditorResize.es.js";
9
9
  import "../../foundation/Icon/Generated/IconAdobeCreativeCloud.es.js";
10
10
  import "../../foundation/Icon/Generated/IconAdobeCreativeCloud12.es.js";
11
11
  import "../../foundation/Icon/Generated/IconAdobeCreativeCloud16.es.js";
@@ -1644,63 +1644,67 @@ import "../../foundation/Icon/Generated/IconWorkflowShapes24.es.js";
1644
1644
  import "../../foundation/Icon/Generated/IconWorkflowShapes32.es.js";
1645
1645
  import "../../foundation/Icon/IconsMap.es.js";
1646
1646
  import { TextStyles as u } from "./utils/textStyles.es.js";
1647
- import { PaddingSizes as T } from "./types.es.js";
1648
- import { defaultActions as w } from "./utils/actions.es.js";
1647
+ import { PaddingSizes as G } from "./types.es.js";
1648
+ import { defaultActions as L } from "./utils/actions.es.js";
1649
1649
  import "slate";
1650
- import { ON_SAVE_DELAY_IN_MS as D } from "./utils/constants.es.js";
1650
+ import { ON_SAVE_DELAY_IN_MS as M } from "./utils/constants.es.js";
1651
1651
  import { defaultDesignTokens as E } from "./utils/defaultDesignTokens.es.js";
1652
1652
  import { parseRawValue as J } from "./utils/parseRawValue.es.js";
1653
1653
  import { EditorPositioningWrapper as j } from "./EditorPositioningWrapper/index.es.js";
1654
1654
  import { getEditorConfig as F } from "./utils/editorConfig.es.js";
1655
1655
  import "./EditorActions/Plugins/index.es.js";
1656
1656
  import { GeneratePlugins as H } from "./EditorActions/GeneratePlugins.es.js";
1657
+ import { forceTabOutOfActiveElement as K } from "./helper.es.js";
1657
1658
  import { Position as Y } from "./EditorPositioningWrapper/types.es.js";
1658
- const WV = ({
1659
+ const Wx = ({
1659
1660
  id: P,
1660
1661
  value: g,
1661
- placeholder: N = "",
1662
- readonly: R = !1,
1663
- clear: b = !1,
1664
- designTokens: o = E,
1665
- actions: n = w,
1666
- onTextChange: a,
1667
- onBlur: f,
1668
- padding: A = T.None,
1669
- position: O = Y.FLOATING,
1662
+ placeholder: b = "",
1663
+ readonly: N = !1,
1664
+ clear: O = !1,
1665
+ designTokens: t = E,
1666
+ actions: n = L,
1667
+ onTextChange: f,
1668
+ onBlur: a,
1669
+ padding: A = G.None,
1670
+ position: R = Y.FLOATING,
1670
1671
  plugins: c
1671
1672
  }) => {
1672
- const r = W(P), { localValue: m } = L(r, b), { editorRef: S, editorWidth: l } = M(), h = {
1673
- placeholder: N,
1674
- readOnly: R,
1675
- onBlur: () => f && f(JSON.stringify(m.current)),
1676
- className: A
1673
+ const r = I(P), { localValue: m } = z(r, O), { editorRef: S, editorWidth: l } = D(), h = {
1674
+ placeholder: b,
1675
+ readOnly: N,
1676
+ onBlur: () => a && a(JSON.stringify(m.current)),
1677
+ className: A,
1678
+ onKeyDown: (o) => {
1679
+ o.code === "Tab" && K();
1680
+ }
1677
1681
  };
1678
- y(() => {
1679
- for (const t of Object.values(u).filter((x) => x !== u.ELEMENT_PARAGRAPH))
1680
- o[t] || (o[t] = E[t]);
1681
- }, [o]);
1682
- const s = v((t) => {
1683
- a && a(JSON.stringify(t));
1684
- }, D), C = I((t) => {
1685
- s(t), m.current = t;
1686
- }, [s, m]), d = j[O], p = H(r, c), e = p && n.length === 0 && c, _ = e ? p.create() : F();
1687
- return /* @__PURE__ */ i.createElement(G.Provider, {
1688
- value: { designTokens: o, PositioningWrapper: d }
1682
+ _(() => {
1683
+ for (const o of Object.values(u).filter((T) => T !== u.ELEMENT_PARAGRAPH))
1684
+ t[o] || (t[o] = E[o]);
1685
+ }, [t]);
1686
+ const s = V((o) => {
1687
+ f && f(JSON.stringify(o));
1688
+ }, M), y = v((o) => {
1689
+ s(o), m.current = o;
1690
+ }, [s, m]), d = j[R], p = H(r, c), e = p && n.length === 0 && c, C = e ? p.create() : F();
1691
+ return /* @__PURE__ */ i.createElement(w.Provider, {
1692
+ value: { designTokens: t, PositioningWrapper: d }
1689
1693
  }, /* @__PURE__ */ i.createElement(d.PlateWrapper, {
1690
1694
  ref: S
1691
- }, /* @__PURE__ */ i.createElement(V, {
1695
+ }, /* @__PURE__ */ i.createElement(x, {
1692
1696
  id: r,
1693
1697
  initialValue: J(g),
1694
- onChange: C,
1698
+ onChange: y,
1695
1699
  editableProps: h,
1696
- plugins: _
1697
- }, e && p.toolbar(l), !e && /* @__PURE__ */ i.createElement(z, {
1700
+ plugins: C
1701
+ }, e && p.toolbar(l), !e && /* @__PURE__ */ i.createElement(W, {
1698
1702
  editorId: r,
1699
1703
  actions: n,
1700
1704
  editorWidth: l
1701
1705
  }))));
1702
1706
  };
1703
1707
  export {
1704
- WV as RichTextEditor
1708
+ Wx as RichTextEditor
1705
1709
  };
1706
1710
  //# sourceMappingURL=RichTextEditor.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditor.es.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { FC, useCallback, useEffect } from 'react';\nimport { Plate, TNode } from '@udecode/plate';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { debounce } from '@utilities/debounce';\nimport { EditableProps } from 'slate-react/dist/components/editable';\nimport { Toolbar } from './components/Toolbar/Toolbar';\nimport { RichTextEditorContext } from './context/RichTextEditorContext';\nimport { useEditorResize, useEditorState } from './hooks';\nimport { DesignTokens, PaddingSizes } from './types';\nimport { EditorActions, defaultActions } from './utils/actions';\nimport { ON_SAVE_DELAY_IN_MS } from './utils';\nimport { defaultDesignTokens } from './utils/defaultDesignTokens';\nimport { parseRawValue } from './utils/parseRawValue';\nimport { TextStyles } from './utils/textStyles';\nimport { EditorPositioningWrapper } from './EditorPositioningWrapper';\nimport { Position } from './EditorPositioningWrapper';\nimport { getEditorConfig } from './utils/editorConfig';\nimport { GeneratePlugins, PluginComposer } from './EditorActions';\n\nexport type RichTextEditorProps = {\n id?: string;\n placeholder?: string;\n value?: string;\n onTextChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n readonly?: boolean;\n clear?: boolean;\n designTokens?: DesignTokens;\n actions?: EditorActions[][];\n padding?: PaddingSizes;\n position?: Position;\n plugins?: PluginComposer;\n};\n\nexport const RichTextEditor: FC<RichTextEditorProps> = ({\n id,\n value: initialValue,\n placeholder = '',\n readonly = false,\n clear = false,\n designTokens = defaultDesignTokens,\n actions = defaultActions,\n onTextChange,\n onBlur,\n padding = PaddingSizes.None,\n position = Position.FLOATING,\n plugins,\n}) => {\n const editorId = useMemoizedId(id);\n const { localValue } = useEditorState(editorId, clear);\n const { editorRef, editorWidth } = useEditorResize();\n\n const editableProps: EditableProps = {\n placeholder,\n readOnly: readonly,\n onBlur: () => onBlur && onBlur(JSON.stringify(localValue.current)),\n className: padding,\n };\n\n useEffect(() => {\n for (const element of Object.values(TextStyles).filter(\n (textStyle) => textStyle !== TextStyles.ELEMENT_PARAGRAPH,\n )) {\n if (!designTokens[element]) {\n designTokens[element] = defaultDesignTokens[element];\n }\n }\n }, [designTokens]);\n\n const debouncedOnChange = debounce((value: TNode[]) => {\n onTextChange && onTextChange(JSON.stringify(value));\n }, ON_SAVE_DELAY_IN_MS);\n\n const onChange = useCallback(\n (value) => {\n debouncedOnChange(value);\n localValue.current = value;\n },\n [debouncedOnChange, localValue],\n );\n\n const PositioningWrapper = EditorPositioningWrapper[position];\n\n const config = GeneratePlugins(editorId, plugins);\n const isNew = config && actions.length === 0 && plugins;\n const editorConfig = isNew ? config.create() : getEditorConfig();\n\n return (\n <RichTextEditorContext.Provider value={{ designTokens, PositioningWrapper }}>\n <PositioningWrapper.PlateWrapper ref={editorRef}>\n <Plate\n id={editorId}\n initialValue={parseRawValue(initialValue)}\n onChange={onChange}\n editableProps={editableProps}\n plugins={editorConfig}\n >\n {isNew && config.toolbar(editorWidth)}\n {!isNew && <Toolbar editorId={editorId} actions={actions} editorWidth={editorWidth} />}\n </Plate>\n </PositioningWrapper.PlateWrapper>\n </RichTextEditorContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCO,MAAM,KAA0C,CAAC;AAAA,EACpD;AAAA,EACA,OAAO;AAAA,EACP,iBAAc;AAAA,EACd,cAAW;AAAA,EACX,WAAQ;AAAA,EACR,kBAAe;AAAA,EACf,aAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,aAAU,EAAa;AAAA,EACvB,cAAW,EAAS;AAAA,EACpB;AAAA,MACE;AACI,QAAA,IAAW,EAAc,CAAE,GAC3B,EAAE,kBAAe,EAAe,GAAU,CAAK,GAC/C,EAAE,cAAW,mBAAgB,EAAgB,GAE7C,IAA+B;AAAA,IACjC;AAAA,IACA,UAAU;AAAA,IACV,QAAQ,MAAM,KAAU,EAAO,KAAK,UAAU,EAAW,OAAO,CAAC;AAAA,IACjE,WAAW;AAAA,EAAA;AAGf,IAAU,MAAM;AACD,eAAA,KAAW,OAAO,OAAO,CAAU,EAAE,OAC5C,CAAC,MAAc,MAAc,EAAW,iBAC5C;AACQ,MAAC,EAAa,MACd,GAAa,KAAW,EAAoB;AAAA,EAEpD,GACD,CAAC,CAAY,CAAC;AAEX,QAAA,IAAoB,EAAS,CAAC,MAAmB;AACnD,SAAgB,EAAa,KAAK,UAAU,CAAK,CAAC;AAAA,KACnD,CAAmB,GAEhB,IAAW,EACb,CAAC,MAAU;AACP,MAAkB,CAAK,GACvB,EAAW,UAAU;AAAA,EAAA,GAEzB,CAAC,GAAmB,CAAU,CAClC,GAEM,IAAqB,EAAyB,IAE9C,IAAS,EAAgB,GAAU,CAAO,GAC1C,IAAQ,KAAU,EAAQ,WAAW,KAAK,GAC1C,IAAe,IAAQ,EAAO,WAAW,EAAgB;AAG3D,SAAA,kBAAA,cAAC,EAAsB,UAAtB;AAAA,IAA+B,OAAO,EAAE,iBAAc,sBAAmB;AAAA,EACtE,GAAA,kBAAA,cAAC,EAAmB,cAAnB;AAAA,IAAgC,KAAK;AAAA,EAAA,GACjC,kBAAA,cAAA,GAAA;AAAA,IACG,IAAI;AAAA,IACJ,cAAc,EAAc,CAAY;AAAA,IACxC;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EAAA,GAER,KAAS,EAAO,QAAQ,CAAW,GACnC,CAAC,KAAU,kBAAA,cAAA,GAAA;AAAA,IAAQ;AAAA,IAAoB;AAAA,IAAkB;AAAA,EAAA,CAA0B,CACxF,CACJ,CACJ;AAER;"}
1
+ {"version":3,"file":"RichTextEditor.es.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { FC, useCallback, useEffect } from 'react';\nimport { Plate, TNode } from '@udecode/plate';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { debounce } from '@utilities/debounce';\nimport { EditableProps } from 'slate-react/dist/components/editable';\nimport { Toolbar } from './components/Toolbar/Toolbar';\nimport { RichTextEditorContext } from './context/RichTextEditorContext';\nimport { useEditorResize, useEditorState } from './hooks';\nimport { DesignTokens, PaddingSizes } from './types';\nimport { EditorActions, defaultActions } from './utils/actions';\nimport { ON_SAVE_DELAY_IN_MS } from './utils';\nimport { defaultDesignTokens } from './utils/defaultDesignTokens';\nimport { parseRawValue } from './utils/parseRawValue';\nimport { TextStyles } from './utils/textStyles';\nimport { EditorPositioningWrapper } from './EditorPositioningWrapper';\nimport { Position } from './EditorPositioningWrapper';\nimport { getEditorConfig } from './utils/editorConfig';\nimport { GeneratePlugins, PluginComposer } from './EditorActions';\nimport { forceTabOutOfActiveElement } from './helper';\n\nexport type RichTextEditorProps = {\n id?: string;\n placeholder?: string;\n value?: string;\n onTextChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n readonly?: boolean;\n clear?: boolean;\n designTokens?: DesignTokens;\n actions?: EditorActions[][];\n padding?: PaddingSizes;\n position?: Position;\n plugins?: PluginComposer;\n};\n\nexport const RichTextEditor: FC<RichTextEditorProps> = ({\n id,\n value: initialValue,\n placeholder = '',\n readonly = false,\n clear = false,\n designTokens = defaultDesignTokens,\n actions = defaultActions,\n onTextChange,\n onBlur,\n padding = PaddingSizes.None,\n position = Position.FLOATING,\n plugins,\n}) => {\n const editorId = useMemoizedId(id);\n const { localValue } = useEditorState(editorId, clear);\n const { editorRef, editorWidth } = useEditorResize();\n\n const editableProps: EditableProps = {\n placeholder,\n readOnly: readonly,\n onBlur: () => onBlur && onBlur(JSON.stringify(localValue.current)),\n className: padding,\n onKeyDown: (event) => {\n if (event.code === 'Tab') {\n // Forcing a blur event because of accessibility\n forceTabOutOfActiveElement();\n }\n },\n };\n\n useEffect(() => {\n for (const element of Object.values(TextStyles).filter(\n (textStyle) => textStyle !== TextStyles.ELEMENT_PARAGRAPH,\n )) {\n if (!designTokens[element]) {\n designTokens[element] = defaultDesignTokens[element];\n }\n }\n }, [designTokens]);\n\n const debouncedOnChange = debounce((value: TNode[]) => {\n onTextChange && onTextChange(JSON.stringify(value));\n }, ON_SAVE_DELAY_IN_MS);\n\n const onChange = useCallback(\n (value) => {\n debouncedOnChange(value);\n localValue.current = value;\n },\n [debouncedOnChange, localValue],\n );\n\n const PositioningWrapper = EditorPositioningWrapper[position];\n\n const config = GeneratePlugins(editorId, plugins);\n const isNew = config && actions.length === 0 && plugins;\n const editorConfig = isNew ? config.create() : getEditorConfig();\n\n return (\n <RichTextEditorContext.Provider value={{ designTokens, PositioningWrapper }}>\n <PositioningWrapper.PlateWrapper ref={editorRef}>\n <Plate\n id={editorId}\n initialValue={parseRawValue(initialValue)}\n onChange={onChange}\n editableProps={editableProps}\n plugins={editorConfig}\n >\n {isNew && config.toolbar(editorWidth)}\n {!isNew && <Toolbar editorId={editorId} actions={actions} editorWidth={editorWidth} />}\n </Plate>\n </PositioningWrapper.PlateWrapper>\n </RichTextEditorContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCO,MAAM,KAA0C,CAAC;AAAA,EACpD;AAAA,EACA,OAAO;AAAA,EACP,iBAAc;AAAA,EACd,cAAW;AAAA,EACX,WAAQ;AAAA,EACR,kBAAe;AAAA,EACf,aAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,aAAU,EAAa;AAAA,EACvB,cAAW,EAAS;AAAA,EACpB;AAAA,MACE;AACI,QAAA,IAAW,EAAc,CAAE,GAC3B,EAAE,kBAAe,EAAe,GAAU,CAAK,GAC/C,EAAE,cAAW,mBAAgB,EAAgB,GAE7C,IAA+B;AAAA,IACjC;AAAA,IACA,UAAU;AAAA,IACV,QAAQ,MAAM,KAAU,EAAO,KAAK,UAAU,EAAW,OAAO,CAAC;AAAA,IACjE,WAAW;AAAA,IACX,WAAW,CAAC,MAAU;AACd,MAAA,EAAM,SAAS,SAEY;IAEnC;AAAA,EAAA;AAGJ,IAAU,MAAM;AACD,eAAA,KAAW,OAAO,OAAO,CAAU,EAAE,OAC5C,CAAC,MAAc,MAAc,EAAW,iBAC5C;AACQ,MAAC,EAAa,MACd,GAAa,KAAW,EAAoB;AAAA,EAEpD,GACD,CAAC,CAAY,CAAC;AAEX,QAAA,IAAoB,EAAS,CAAC,MAAmB;AACnD,SAAgB,EAAa,KAAK,UAAU,CAAK,CAAC;AAAA,KACnD,CAAmB,GAEhB,IAAW,EACb,CAAC,MAAU;AACP,MAAkB,CAAK,GACvB,EAAW,UAAU;AAAA,EAAA,GAEzB,CAAC,GAAmB,CAAU,CAClC,GAEM,IAAqB,EAAyB,IAE9C,IAAS,EAAgB,GAAU,CAAO,GAC1C,IAAQ,KAAU,EAAQ,WAAW,KAAK,GAC1C,IAAe,IAAQ,EAAO,WAAW,EAAgB;AAG3D,SAAA,kBAAA,cAAC,EAAsB,UAAtB;AAAA,IAA+B,OAAO,EAAE,iBAAc,sBAAmB;AAAA,EACtE,GAAA,kBAAA,cAAC,EAAmB,cAAnB;AAAA,IAAgC,KAAK;AAAA,EAAA,GACjC,kBAAA,cAAA,GAAA;AAAA,IACG,IAAI;AAAA,IACJ,cAAc,EAAc,CAAY;AAAA,IACxC;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EAAA,GAER,KAAS,EAAO,QAAQ,CAAW,GACnC,CAAC,KAAU,kBAAA,cAAA,GAAA;AAAA,IAAQ;AAAA,IAAoB;AAAA,IAAkB;AAAA,EAAA,CAA0B,CACxF,CACJ,CACJ;AAER;"}
@@ -0,0 +1 @@
1
+ export declare const forceTabOutOfActiveElement: () => void;
@@ -0,0 +1,8 @@
1
+ const t = () => {
2
+ var e;
3
+ (e = document.activeElement) == null || e.blur();
4
+ };
5
+ export {
6
+ t as forceTabOutOfActiveElement
7
+ };
8
+ //# sourceMappingURL=helper.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.es.js","sources":["../../../src/components/RichTextEditor/helper.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nexport const forceTabOutOfActiveElement = () => {\n (document.activeElement as HTMLElement)?.blur();\n};\n"],"names":[],"mappings":"AAEO,MAAM,IAA6B,MAAM;AAAzC;AACF,gBAAS,kBAAT,UAAwC;AAC7C;"}
@@ -1,57 +1,74 @@
1
- import r, { useMemo as o } from "react";
1
+ import r, { useMemo as i } from "react";
2
2
  import { merge as n } from "../../utilities/merge.es.js";
3
- import { useFocusRing as k } from "@react-aria/focus";
4
- import { FOCUS_STYLE as M } from "../../utilities/focusStyle.es.js";
5
- import { useMemoizedId as L } from "../../hooks/useMemoizedId.es.js";
6
- import { InputLabel as E } from "../InputLabel/InputLabel.es.js";
7
- var F = /* @__PURE__ */ ((e) => (e.Small = "Small", e.Medium = "Medium", e.Large = "Large", e))(F || {});
8
- const y = {
9
- Small: "tw-w-5 tw-h-2",
10
- Medium: "tw-w-7 tw-h-4",
11
- Large: "tw-w-9 tw-h-5"
12
- }, N = {
13
- Small: "tw-w-3 tw-h-3",
14
- Medium: "tw-w-3 tw-h-3",
15
- Large: "tw-w-4 tw-h-4"
16
- }, U = ({
17
- id: e,
18
- name: u,
19
- label: l,
20
- disabled: s,
21
- onChange: b,
3
+ import { useFocusRing as M } from "@react-aria/focus";
4
+ import { FOCUS_STYLE as S } from "../../utilities/focusStyle.es.js";
5
+ import { useMemoizedId as E } from "../../hooks/useMemoizedId.es.js";
6
+ import { InputLabel as L } from "../InputLabel/InputLabel.es.js";
7
+ var T = /* @__PURE__ */ ((s) => (s.Small = "Small", s.Medium = "Medium", s.Large = "Large", s))(T || {});
8
+ const W = {
9
+ Small: "tw-w-[22px] tw-h-3",
10
+ Medium: "tw-w-[30px] tw-h-4",
11
+ Large: "tw-w-[38px] tw-h-5"
12
+ }, w = {
13
+ Small: {
14
+ dimensions: "tw-w-3 tw-h-3",
15
+ activeWidth: "group-active:tw-w-[14px]",
16
+ activeTranslation: "tw-translate-x-[9px]"
17
+ },
18
+ Medium: {
19
+ dimensions: "tw-w-4 tw-h-4",
20
+ activeWidth: "group-active:tw-w-[18px]",
21
+ activeTranslation: "tw-translate-x-[13px]"
22
+ },
23
+ Large: {
24
+ dimensions: "tw-w-5 tw-h-5",
25
+ activeWidth: "group-active:tw-w-[22px]",
26
+ activeTranslation: "tw-translate-x-[17px]"
27
+ }
28
+ }, O = ({
29
+ id: s,
30
+ name: p,
31
+ label: c,
32
+ disabled: a,
33
+ onChange: x,
22
34
  size: t = "Medium",
23
- on: a = !1,
24
- hug: w = !1,
25
- tooltip: C
35
+ on: e = !1,
36
+ hug: m = !1,
37
+ tooltip: v
26
38
  }) => {
27
- const i = L(e), { isFocusVisible: c, focusProps: g } = k(), f = o(() => n(["tw-inline-flex tw-border-0 tw-rounded-full tw-transition-colors tw-shrink-0", t !== "Small" ? "tw-py-0 tw-px-[0.125rem]" : "tw-p-0", s ? "tw-bg-box-disabled-strong tw-pointer-events-none" : a ? "tw-bg-button-strong-background hover:tw-bg-button-strong-background-hover" : "tw-bg-text-x-weak hover:tw-bg-text-weak", y[t], c && M]), [a, s, t, c]), x = o(() => {
28
- const m = "tw-block tw-self-center tw-bg-box-neutral-strong-inverse tw-rounded-full tw-transition-transform", d = t === "Small" ? s ? "tw-border tw-border-box-disabled-strong" : "tw-border tw-border-line-xx-strong" : "", S = a ? t === "Small" ? "tw-translate-x-2" : "tw-translate-x-full" : "tw-translate-x-0";
29
- return n([m, d, N[t], S]);
30
- }, [a, s, t]), p = o(() => n(["tw-gap-2 tw-items-center tw-justify-between", w ? "tw-inline-flex" : "tw-flex"]), [w]);
39
+ const d = E(s), { isFocusVisible: u, focusProps: g } = M(), f = i(() => n(["tw-group tw-border tw-inline-flex tw-rounded-full tw-shrink-0 tw-p-0 tw-transition-colors", a ? "tw-bg-box-disabled tw-border-line tw-pointer-events-none" : e ? "tw-bg-text-weak tw-border-line-xx-strong hover:tw-bg-text" : "tw-bg-box-neutral tw-border-line-x-strong hover:tw-bg-box-neutral-hover", W[t], u && S]), [e, a, t, u]), C = i(() => {
40
+ const o = "tw-relative tw-self-center tw-transition-transform", l = e && w[t].activeTranslation;
41
+ return n([o, w[t].dimensions, l]);
42
+ }, [e, t]), h = i(() => {
43
+ const o = "tw-border tw-bg-base tw-rounded-full tw-absolute tw-block tw-self-center tw-transition-width tw-duration-75", l = e ? "tw-right-0" : "tw-left-0 -tw-translate-x-px", b = a ? "tw-border-line-strong" : n(["tw-bg-base tw-border-line-xx-strong", w[t].activeWidth]);
44
+ return n([o, w[t].dimensions, l, b]);
45
+ }, [e, a, t]), k = i(() => n(["tw-gap-2 tw-items-center tw-justify-between", m ? "tw-inline-flex" : "tw-flex"]), [m]);
31
46
  return /* @__PURE__ */ r.createElement("div", {
32
- className: p,
47
+ className: k,
33
48
  "data-test-id": "switch-container"
34
- }, l && /* @__PURE__ */ r.createElement(E, {
49
+ }, c && /* @__PURE__ */ r.createElement(L, {
35
50
  clickable: !0,
36
- htmlFor: i,
37
- disabled: s,
38
- tooltip: C
39
- }, l), /* @__PURE__ */ r.createElement("button", {
51
+ htmlFor: d,
52
+ disabled: a,
53
+ tooltip: v
54
+ }, c), /* @__PURE__ */ r.createElement("button", {
40
55
  ...g,
41
- id: i,
42
- disabled: s,
43
- name: u,
56
+ id: d,
57
+ disabled: a,
58
+ name: p,
44
59
  "data-test-id": "switch",
45
60
  className: f,
46
- value: a.toString(),
47
- onClick: b,
61
+ value: e.toString(),
62
+ onClick: x,
48
63
  type: "button"
49
64
  }, /* @__PURE__ */ r.createElement("div", {
50
- className: x
51
- })));
65
+ className: C
66
+ }, /* @__PURE__ */ r.createElement("div", {
67
+ className: h
68
+ }))));
52
69
  };
53
70
  export {
54
- U as Switch,
55
- F as SwitchSize
71
+ O as Switch,
72
+ T as SwitchSize
56
73
  };
57
74
  //# sourceMappingURL=Switch.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.es.js","sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { FC, MouseEvent, useMemo } from 'react';\nimport { merge } from '@utilities/merge';\nimport { useFocusRing } from '@react-aria/focus';\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { InputLabel, InputLabelTooltipProps } from '@components/InputLabel/InputLabel';\n\nexport enum SwitchSize {\n Small = 'Small',\n Medium = 'Medium',\n Large = 'Large',\n}\n\nconst lineSizeClasses: Record<SwitchSize, string> = {\n [SwitchSize.Small]: 'tw-w-5 tw-h-2',\n [SwitchSize.Medium]: 'tw-w-7 tw-h-4',\n [SwitchSize.Large]: 'tw-w-9 tw-h-5',\n};\n\nconst dotSizeClasses: Record<SwitchSize, string> = {\n [SwitchSize.Small]: 'tw-w-3 tw-h-3',\n [SwitchSize.Medium]: 'tw-w-3 tw-h-3',\n [SwitchSize.Large]: 'tw-w-4 tw-h-4',\n};\n\nexport type SwitchProps = {\n id?: string;\n on?: boolean;\n disabled?: boolean;\n label?: string;\n name?: string;\n size?: SwitchSize;\n hug?: boolean;\n tooltip?: InputLabelTooltipProps;\n onChange?: (e: MouseEvent) => void;\n};\n\nexport const Switch: FC<SwitchProps> = ({\n id: propId,\n name,\n label,\n disabled,\n onChange,\n size = SwitchSize.Medium,\n on = false,\n hug = false,\n tooltip,\n}) => {\n const id = useMemoizedId(propId);\n const { isFocusVisible, focusProps } = useFocusRing();\n\n const lineClasses = useMemo(() => {\n const baseClasses = 'tw-inline-flex tw-border-0 tw-rounded-full tw-transition-colors tw-shrink-0';\n const sizeClasses = size !== SwitchSize.Small ? 'tw-py-0 tw-px-[0.125rem]' : 'tw-p-0';\n const activatedClasses = on\n ? 'tw-bg-button-strong-background hover:tw-bg-button-strong-background-hover'\n : 'tw-bg-text-x-weak hover:tw-bg-text-weak';\n const disabledClasses = disabled ? 'tw-bg-box-disabled-strong tw-pointer-events-none' : activatedClasses;\n\n return merge([baseClasses, sizeClasses, disabledClasses, lineSizeClasses[size], isFocusVisible && FOCUS_STYLE]);\n }, [on, disabled, size, isFocusVisible]);\n\n const dotClasses = useMemo(() => {\n const baseClasses =\n 'tw-block tw-self-center tw-bg-box-neutral-strong-inverse tw-rounded-full tw-transition-transform';\n const disabledClasses = disabled\n ? 'tw-border tw-border-box-disabled-strong'\n : 'tw-border tw-border-line-xx-strong';\n const sizeClasses = size === SwitchSize.Small ? disabledClasses : '';\n const activatedClasses = size === SwitchSize.Small ? 'tw-translate-x-2' : 'tw-translate-x-full';\n const animationClasses = on ? activatedClasses : 'tw-translate-x-0';\n\n return merge([baseClasses, sizeClasses, dotSizeClasses[size], animationClasses]);\n }, [on, disabled, size]);\n\n const containerClasses = useMemo(() => {\n return merge(['tw-gap-2 tw-items-center tw-justify-between', hug ? 'tw-inline-flex' : 'tw-flex']);\n }, [hug]);\n\n return (\n <div className={containerClasses} data-test-id=\"switch-container\">\n {label && (\n <InputLabel clickable={true} htmlFor={id} disabled={disabled} tooltip={tooltip}>\n {label}\n </InputLabel>\n )}\n <button\n {...focusProps}\n id={id}\n disabled={disabled}\n name={name}\n data-test-id=\"switch\"\n className={lineClasses}\n value={on.toString()}\n onClick={onChange}\n type=\"button\"\n >\n <div className={dotClasses} />\n </button>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;AASY,IAAA,sBAAA,MACA,GAAA,QAAA,SACC,EAAA,SAAA,UACD,EAAA,QAAA,SAHA,IAAA,KAAA,CAAA,CAAA;AAMZ,MAAM,IAA8C;AAAA,EAChD,AAAC,OAAmB;AAAA,EACpB,AAAC,QAAoB;AAAA,EACrB,AAAC,OAAmB;AACxB,GAEM,IAA6C;AAAA,EAC/C,AAAC,OAAmB;AAAA,EACpB,AAAC,QAAoB;AAAA,EACrB,AAAC,OAAmB;AACxB,GAca,IAA0B,CAAC;AAAA,EACpC,IAAI;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAO;AAAA,EACP,QAAK;AAAA,EACL,SAAM;AAAA,EACN;AAAA,MACE;AACI,QAAA,IAAK,EAAc,CAAM,GACzB,EAAE,mBAAgB,kBAAe,EAAa,GAE9C,IAAc,EAAQ,MAQjB,EAAM,CAPO,+EACA,MAAS,UAAmB,6BAA6B,UAIrD,IAAW,qDAHV,IACnB,8EACA,2CAGmD,EAAgB,IAAO,KAAkB,CAAW,CAAC,GAC/G,CAAC,GAAI,GAAU,GAAM,CAAc,CAAC,GAEjC,IAAa,EAAQ,MAAM;AAC7B,UAAM,IACF,oGAIE,IAAc,MAAS,UAHL,IAClB,4CACA,uCAC4D,IAE5D,IAAmB,IADA,MAAS,UAAmB,qBAAqB,wBACzB;AAEjD,WAAO,EAAM,CAAC,GAAa,GAAa,EAAe,IAAO,CAAgB,CAAC;AAAA,EAChF,GAAA,CAAC,GAAI,GAAU,CAAI,CAAC,GAEjB,IAAmB,EAAQ,MACtB,EAAM,CAAC,+CAA+C,IAAM,mBAAmB,SAAS,CAAC,GACjG,CAAC,CAAG,CAAC;AAER,SACK,kBAAA,cAAA,OAAA;AAAA,IAAI,WAAW;AAAA,IAAkB,gBAAa;AAAA,EAAA,GAC1C,KACI,kBAAA,cAAA,GAAA;AAAA,IAAW,WAAW;AAAA,IAAM,SAAS;AAAA,IAAI;AAAA,IAAoB;AAAA,EACzD,GAAA,CACL,GAEH,kBAAA,cAAA,UAAA;AAAA,IACI,GAAG;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAa;AAAA,IACb,WAAW;AAAA,IACX,OAAO,EAAG,SAAS;AAAA,IACnB,SAAS;AAAA,IACT,MAAK;AAAA,EAAA,GAEJ,kBAAA,cAAA,OAAA;AAAA,IAAI,WAAW;AAAA,EAAY,CAAA,CAChC,CACJ;AAER;"}
1
+ {"version":3,"file":"Switch.es.js","sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { FC, MouseEvent, useMemo } from 'react';\nimport { merge } from '@utilities/merge';\nimport { useFocusRing } from '@react-aria/focus';\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { InputLabel, InputLabelTooltipProps } from '@components/InputLabel/InputLabel';\n\nexport enum SwitchSize {\n Small = 'Small',\n Medium = 'Medium',\n Large = 'Large',\n}\n\nconst trackSizeClasses: Record<SwitchSize, string> = {\n [SwitchSize.Small]: 'tw-w-[22px] tw-h-3',\n [SwitchSize.Medium]: 'tw-w-[30px] tw-h-4',\n [SwitchSize.Large]: 'tw-w-[38px] tw-h-5',\n};\n\nconst dotSizeClasses: Record<SwitchSize, Record<'dimensions' | 'activeWidth' | 'activeTranslation', string>> = {\n [SwitchSize.Small]: {\n dimensions: 'tw-w-3 tw-h-3',\n activeWidth: 'group-active:tw-w-[14px]',\n activeTranslation: 'tw-translate-x-[9px]',\n },\n [SwitchSize.Medium]: {\n dimensions: 'tw-w-4 tw-h-4',\n activeWidth: 'group-active:tw-w-[18px]',\n activeTranslation: 'tw-translate-x-[13px]',\n },\n [SwitchSize.Large]: {\n dimensions: 'tw-w-5 tw-h-5',\n activeWidth: 'group-active:tw-w-[22px]',\n activeTranslation: 'tw-translate-x-[17px]',\n },\n};\n\nexport type SwitchProps = {\n id?: string;\n on?: boolean;\n disabled?: boolean;\n label?: string;\n name?: string;\n size?: SwitchSize;\n hug?: boolean;\n tooltip?: InputLabelTooltipProps;\n onChange?: (e: MouseEvent) => void;\n};\n\nexport const Switch: FC<SwitchProps> = ({\n id: propId,\n name,\n label,\n disabled,\n onChange,\n size = SwitchSize.Medium,\n on = false,\n hug = false,\n tooltip,\n}) => {\n const id = useMemoizedId(propId);\n const { isFocusVisible, focusProps } = useFocusRing();\n\n // The track on which the dot moves\n const trackClasses = useMemo(() => {\n const baseClasses = 'tw-group tw-border tw-inline-flex tw-rounded-full tw-shrink-0 tw-p-0 tw-transition-colors';\n\n const valueClasses = on\n ? 'tw-bg-text-weak tw-border-line-xx-strong hover:tw-bg-text'\n : 'tw-bg-box-neutral tw-border-line-x-strong hover:tw-bg-box-neutral-hover';\n\n const disabledClasses = disabled ? 'tw-bg-box-disabled tw-border-line tw-pointer-events-none' : valueClasses;\n\n return merge([baseClasses, disabledClasses, trackSizeClasses[size], isFocusVisible && FOCUS_STYLE]);\n }, [on, disabled, size, isFocusVisible]);\n\n // Responsible for the left-right translation\n const dotWrapperClasses = useMemo(() => {\n const baseClasses = 'tw-relative tw-self-center tw-transition-transform';\n\n const valueClasses = on && dotSizeClasses[size].activeTranslation;\n\n return merge([baseClasses, dotSizeClasses[size].dimensions, valueClasses]);\n }, [on, size]);\n\n // Responsible for dot styling and width animation on hover\n const dotClasses = useMemo(() => {\n const baseClasses =\n 'tw-border tw-bg-base tw-rounded-full tw-absolute tw-block tw-self-center tw-transition-width tw-duration-75';\n\n const valueClasses = on ? 'tw-right-0' : 'tw-left-0 -tw-translate-x-px';\n\n const disabledStateClasses = disabled\n ? 'tw-border-line-strong'\n : merge(['tw-bg-base tw-border-line-xx-strong', dotSizeClasses[size].activeWidth]);\n\n return merge([baseClasses, dotSizeClasses[size].dimensions, valueClasses, disabledStateClasses]);\n }, [on, disabled, size]);\n\n // Wraps the InputLabel instance and switch element\n const containerClasses = useMemo(() => {\n return merge(['tw-gap-2 tw-items-center tw-justify-between', hug ? 'tw-inline-flex' : 'tw-flex']);\n }, [hug]);\n\n return (\n <div className={containerClasses} data-test-id=\"switch-container\">\n {label && (\n <InputLabel clickable={true} htmlFor={id} disabled={disabled} tooltip={tooltip}>\n {label}\n </InputLabel>\n )}\n <button\n {...focusProps}\n id={id}\n disabled={disabled}\n name={name}\n data-test-id=\"switch\"\n className={trackClasses}\n value={on.toString()}\n onClick={onChange}\n type=\"button\"\n >\n <div className={dotWrapperClasses}>\n <div className={dotClasses} />\n </div>\n </button>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;AASY,IAAA,sBAAA,MACA,GAAA,QAAA,SACC,EAAA,SAAA,UACD,EAAA,QAAA,SAHA,IAAA,KAAA,CAAA,CAAA;AAMZ,MAAM,IAA+C;AAAA,EACjD,AAAC,OAAmB;AAAA,EACpB,AAAC,QAAoB;AAAA,EACrB,AAAC,OAAmB;AACxB,GAEM,IAAyG;AAAA,EAC3G,AAAC,OAAmB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,mBAAmB;AAAA,EACvB;AAAA,EACA,AAAC,QAAoB;AAAA,IACjB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,mBAAmB;AAAA,EACvB;AAAA,EACA,AAAC,OAAmB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,mBAAmB;AAAA,EACvB;AACJ,GAca,IAA0B,CAAC;AAAA,EACpC,IAAI;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAO;AAAA,EACP,QAAK;AAAA,EACL,SAAM;AAAA,EACN;AAAA,MACE;AACI,QAAA,IAAK,EAAc,CAAM,GACzB,EAAE,mBAAgB,kBAAe,EAAa,GAG9C,IAAe,EAAQ,MASlB,EAAM,CARO,6FAMI,IAAW,6DAJd,IACf,8DACA,2EAIsC,EAAiB,IAAO,KAAkB,CAAW,CAAC,GACnG,CAAC,GAAI,GAAU,GAAM,CAAc,CAAC,GAGjC,IAAoB,EAAQ,MAAM;AACpC,UAAM,IAAc,sDAEd,IAAe,KAAM,EAAe,GAAM;AAEhD,WAAO,EAAM,CAAC,GAAa,EAAe,GAAM,YAAY,CAAY,CAAC;AAAA,EAAA,GAC1E,CAAC,GAAI,CAAI,CAAC,GAGP,IAAa,EAAQ,MAAM;AAC7B,UAAM,IACF,+GAEE,IAAe,IAAK,eAAe,gCAEnC,IAAuB,IACvB,0BACA,EAAM,CAAC,uCAAuC,EAAe,GAAM,WAAW,CAAC;AAE9E,WAAA,EAAM,CAAC,GAAa,EAAe,GAAM,YAAY,GAAc,CAAoB,CAAC;AAAA,EAChG,GAAA,CAAC,GAAI,GAAU,CAAI,CAAC,GAGjB,IAAmB,EAAQ,MACtB,EAAM,CAAC,+CAA+C,IAAM,mBAAmB,SAAS,CAAC,GACjG,CAAC,CAAG,CAAC;AAER,SACK,kBAAA,cAAA,OAAA;AAAA,IAAI,WAAW;AAAA,IAAkB,gBAAa;AAAA,EAAA,GAC1C,KACI,kBAAA,cAAA,GAAA;AAAA,IAAW,WAAW;AAAA,IAAM,SAAS;AAAA,IAAI;AAAA,IAAoB;AAAA,EACzD,GAAA,CACL,GAEH,kBAAA,cAAA,UAAA;AAAA,IACI,GAAG;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAa;AAAA,IACb,WAAW;AAAA,IACX,OAAO,EAAG,SAAS;AAAA,IACnB,SAAS;AAAA,IACT,MAAK;AAAA,EAAA,GAEJ,kBAAA,cAAA,OAAA;AAAA,IAAI,WAAW;AAAA,EAAA,GACX,kBAAA,cAAA,OAAA;AAAA,IAAI,WAAW;AAAA,EAAA,CAAY,CAChC,CACJ,CACJ;AAER;"}
@@ -1682,10 +1682,10 @@ const LV = ({
1682
1682
  return /* @__PURE__ */ t.createElement("div", {
1683
1683
  ...O,
1684
1684
  className: i([
1685
- "tw-flex tw-items-center tw-h-9 tw-gap-2 tw-px-3 tw-border hover:tw-border-black-90 tw-transition tw-rounded tw-text-s tw-font-sans tw-relative tw-bg-white dark:tw-bg-transparent",
1685
+ "tw-flex tw-items-center tw-h-9 tw-gap-2 tw-px-3 tw-border tw-transition tw-rounded tw-text-s tw-font-sans tw-relative tw-bg-white dark:tw-bg-transparent",
1686
1686
  V ? "tw-border-dashed" : "tw-border-solid",
1687
1687
  o || u ? "tw-border-black-5 tw-bg-black-5 dark:tw-bg-black-90 dark:tw-border-black-90" : i([
1688
- "focus-within:tw-border-black-90",
1688
+ "focus-within:tw-border-black-90 hover:tw-border-black-90",
1689
1689
  J[d],
1690
1690
  L && n
1691
1691
  ])
@@ -1 +1 @@
1
- {"version":3,"file":"TextInput.es.js","sources":["../../../src/components/TextInput/TextInput.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { LoadingCircle, LoadingCircleSize } from '@components/LoadingCircle';\nimport { useCopy } from '@hooks/useCopy';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { useFocusRing } from '@react-aria/focus';\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport { Validation, validationClassMap } from '@utilities/validation';\nimport React, { FC, FocusEvent, KeyboardEvent, ReactNode, useEffect, useRef, useState } from 'react';\nimport { IconCheckMark, IconClipboard, IconCross, IconCrossCircle, IconEye, IconEyeOff } from '@foundation/Icon';\n\nexport enum TextInputType {\n Text = 'text',\n Password = 'password',\n Number = 'number',\n}\n\nexport type TextInputBaseProps = {\n id?: string;\n type?: TextInputType;\n decorator?: ReactNode;\n dotted?: boolean;\n clearable?: boolean;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n autocomplete?: boolean;\n readonly?: boolean;\n validation?: Validation;\n copyable?: boolean;\n value?: string;\n onChange?: (value: string) => void;\n onEnterPressed?: (event: KeyboardEvent<HTMLInputElement>) => void;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n onClear?: () => void;\n size?: number;\n spellcheck?: boolean;\n focusOnMount?: boolean;\n};\n\nexport type TextInputProps =\n | ({\n type?: TextInputType.Text;\n obfuscated?: false;\n } & TextInputBaseProps)\n | ({\n type?: TextInputType.Number;\n obfuscated?: false;\n min?: number;\n max?: number;\n } & TextInputBaseProps)\n | ({\n type: TextInputType.Password;\n obfuscated?: boolean;\n } & TextInputBaseProps);\n\nexport const TextInput: FC<TextInputProps> = ({\n id: propId,\n type = TextInputType.Text,\n decorator,\n validation = Validation.Default,\n clearable = false,\n placeholder,\n required,\n obfuscated,\n disabled = false,\n autocomplete = false,\n dotted = false,\n value = '',\n copyable = false,\n onChange,\n onEnterPressed,\n onBlur,\n onClear,\n size,\n spellcheck,\n readonly,\n focusOnMount,\n}) => {\n const { isFocusVisible, focusProps } = useFocusRing({ within: true, isTextInput: true });\n const { isFocusVisible: clearButtonIsFocusVisible, focusProps: clearButtonFocusProps } = useFocusRing();\n const { isFocusVisible: passwordButtonIsFocusVisible, focusProps: passwordButtonFocusProps } = useFocusRing();\n const { isFocusVisible: copyButtonIsFocusVisible, focusProps: copyButtonFocusProps } = useFocusRing();\n\n const { copy, status } = useCopy();\n\n const inputElement = useRef<HTMLInputElement | null>(null);\n const [isObfuscated, setIsObfuscated] = useState(\n typeof obfuscated === 'boolean' ? obfuscated : type === TextInputType.Password,\n );\n\n useEffect(() => {\n setTimeout(() => {\n focusOnMount && inputElement.current?.focus();\n }, 0);\n }, [focusOnMount]);\n\n useEffect(() => {\n if (typeof obfuscated === 'boolean') {\n setIsObfuscated(obfuscated);\n }\n }, [obfuscated]);\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n onEnterPressed && onEnterPressed(event);\n }\n };\n\n const getInputType = () => {\n if (type === TextInputType.Password) {\n return isObfuscated ? TextInputType.Password : TextInputType.Text;\n }\n return type;\n };\n\n const spellcheckProp = typeof spellcheck === 'boolean' ? { spellCheck: spellcheck } : null;\n\n return (\n <div\n {...focusProps}\n className={merge([\n 'tw-flex tw-items-center tw-h-9 tw-gap-2 tw-px-3 tw-border hover:tw-border-black-90 tw-transition tw-rounded tw-text-s tw-font-sans tw-relative tw-bg-white dark:tw-bg-transparent',\n dotted ? 'tw-border-dashed' : 'tw-border-solid',\n disabled || readonly\n ? 'tw-border-black-5 tw-bg-black-5 dark:tw-bg-black-90 dark:tw-border-black-90'\n : merge([\n 'focus-within:tw-border-black-90',\n validationClassMap[validation],\n isFocusVisible && FOCUS_STYLE,\n ]),\n ])}\n >\n {decorator && (\n <div\n className={merge([\n 'tw-flex tw-items-center tw-justify-center tw-pl-1',\n disabled ? 'tw-text-black-60' : 'tw-text-black-80',\n ])}\n data-test-id=\"decorator\"\n >\n {decorator}\n </div>\n )}\n <input\n id={useMemoizedId(propId)}\n ref={inputElement}\n className={merge([\n 'tw-w-full tw-grow tw-border-none tw-outline-none tw-bg-transparent tw-hide-input-arrows',\n disabled || readonly\n ? 'tw-text-black-40 tw-placeholder-black-30 dark:tw-text-black-30 dark:tw-placeholder-black-40'\n : 'tw-text-black tw-placeholder-black-60 dark:tw-text-white',\n ])}\n onClick={() => inputElement.current?.focus()}\n onChange={(event) => onChange && onChange(event.currentTarget.value)}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n value={value}\n type={getInputType()}\n required={required}\n readOnly={readonly}\n disabled={disabled}\n autoComplete={autocomplete ? 'on' : 'off'}\n size={size}\n data-test-id=\"text-input\"\n {...spellcheckProp}\n />\n {`${value}`.length > 0 && clearable && (\n <button\n className={merge([\n 'tw-flex tw-items-center tw-justify-center tw-transition-colors tw-rounded',\n disabled ? 'tw-cursor-default tw-text-black-40' : 'tw-text-black-60 hover:tw-text-black-100',\n clearButtonIsFocusVisible && FOCUS_STYLE,\n ])}\n onClick={() => {\n inputElement.current?.focus();\n inputElement.current?.setAttribute('value', '');\n\n onChange && onChange('');\n onClear && onClear();\n }}\n data-test-id=\"clear-icon\"\n title=\"Clear text input\"\n aria-label=\"clear text input\"\n disabled={disabled}\n type=\"button\"\n {...clearButtonFocusProps}\n >\n <IconCross />\n </button>\n )}\n {type === TextInputType.Password && (\n <button\n className={merge([\n 'tw-flex tw-items-center tw-justify-center tw-transition-colors tw-rounded',\n disabled ? 'tw-cursor-default tw-text-black-40' : 'tw-text-black-60 hover:tw-text-black-100',\n passwordButtonIsFocusVisible && FOCUS_STYLE,\n ])}\n onClick={() => setIsObfuscated(!isObfuscated)}\n data-test-id=\"visibility-icon\"\n title=\"Toggle text visibility\"\n type=\"button\"\n aria-label={`${isObfuscated ? 'unveil' : 'obfuscate'} text input`}\n disabled={disabled}\n {...passwordButtonFocusProps}\n >\n {isObfuscated ? <IconEye /> : <IconEyeOff />}\n </button>\n )}\n {validation === Validation.Loading && (\n <span className=\"tw-absolute tw-top-[-0.55rem] tw-right-[-0.55rem] tw-bg-white tw-rounded-full tw-p-[2px] tw-border tw-border-black-10\">\n <LoadingCircle size={LoadingCircleSize.ExtraSmall} />\n </span>\n )}\n {copyable && (\n <button\n className={merge([\n 'tw-flex tw-items-center tw-justify-center tw-transition-colors tw-rounded',\n disabled ? 'tw-cursor-default tw-text-black-40' : 'tw-text-black-60 hover:tw-text-black-100',\n copyButtonIsFocusVisible && FOCUS_STYLE,\n ])}\n onClick={() => copy(value)}\n data-test-id=\"copy-icon\"\n title=\"Copy input text\"\n disabled={disabled}\n type=\"button\"\n {...copyButtonFocusProps}\n >\n {status === 'error' && (\n <span className=\"tw-text-box-negative-strong\">\n <IconCrossCircle />\n </span>\n )}\n {status === 'idle' && <IconClipboard />}\n {status === 'success' && (\n <span className=\"tw-text-box-positive-strong\">\n <IconCheckMark />\n </span>\n )}\n </button>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"TextInput.es.js","sources":["../../../src/components/TextInput/TextInput.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { LoadingCircle, LoadingCircleSize } from '@components/LoadingCircle';\nimport { useCopy } from '@hooks/useCopy';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { useFocusRing } from '@react-aria/focus';\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport { Validation, validationClassMap } from '@utilities/validation';\nimport React, { FC, FocusEvent, KeyboardEvent, ReactNode, useEffect, useRef, useState } from 'react';\nimport { IconCheckMark, IconClipboard, IconCross, IconCrossCircle, IconEye, IconEyeOff } from '@foundation/Icon';\n\nexport enum TextInputType {\n Text = 'text',\n Password = 'password',\n Number = 'number',\n}\n\nexport type TextInputBaseProps = {\n id?: string;\n type?: TextInputType;\n decorator?: ReactNode;\n dotted?: boolean;\n clearable?: boolean;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n autocomplete?: boolean;\n readonly?: boolean;\n validation?: Validation;\n copyable?: boolean;\n value?: string;\n onChange?: (value: string) => void;\n onEnterPressed?: (event: KeyboardEvent<HTMLInputElement>) => void;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n onClear?: () => void;\n size?: number;\n spellcheck?: boolean;\n focusOnMount?: boolean;\n};\n\nexport type TextInputProps =\n | ({\n type?: TextInputType.Text;\n obfuscated?: false;\n } & TextInputBaseProps)\n | ({\n type?: TextInputType.Number;\n obfuscated?: false;\n min?: number;\n max?: number;\n } & TextInputBaseProps)\n | ({\n type: TextInputType.Password;\n obfuscated?: boolean;\n } & TextInputBaseProps);\n\nexport const TextInput: FC<TextInputProps> = ({\n id: propId,\n type = TextInputType.Text,\n decorator,\n validation = Validation.Default,\n clearable = false,\n placeholder,\n required,\n obfuscated,\n disabled = false,\n autocomplete = false,\n dotted = false,\n value = '',\n copyable = false,\n onChange,\n onEnterPressed,\n onBlur,\n onClear,\n size,\n spellcheck,\n readonly,\n focusOnMount,\n}) => {\n const { isFocusVisible, focusProps } = useFocusRing({ within: true, isTextInput: true });\n const { isFocusVisible: clearButtonIsFocusVisible, focusProps: clearButtonFocusProps } = useFocusRing();\n const { isFocusVisible: passwordButtonIsFocusVisible, focusProps: passwordButtonFocusProps } = useFocusRing();\n const { isFocusVisible: copyButtonIsFocusVisible, focusProps: copyButtonFocusProps } = useFocusRing();\n\n const { copy, status } = useCopy();\n\n const inputElement = useRef<HTMLInputElement | null>(null);\n const [isObfuscated, setIsObfuscated] = useState(\n typeof obfuscated === 'boolean' ? obfuscated : type === TextInputType.Password,\n );\n\n useEffect(() => {\n setTimeout(() => {\n focusOnMount && inputElement.current?.focus();\n }, 0);\n }, [focusOnMount]);\n\n useEffect(() => {\n if (typeof obfuscated === 'boolean') {\n setIsObfuscated(obfuscated);\n }\n }, [obfuscated]);\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n onEnterPressed && onEnterPressed(event);\n }\n };\n\n const getInputType = () => {\n if (type === TextInputType.Password) {\n return isObfuscated ? TextInputType.Password : TextInputType.Text;\n }\n return type;\n };\n\n const spellcheckProp = typeof spellcheck === 'boolean' ? { spellCheck: spellcheck } : null;\n\n return (\n <div\n {...focusProps}\n className={merge([\n 'tw-flex tw-items-center tw-h-9 tw-gap-2 tw-px-3 tw-border tw-transition tw-rounded tw-text-s tw-font-sans tw-relative tw-bg-white dark:tw-bg-transparent',\n dotted ? 'tw-border-dashed' : 'tw-border-solid',\n disabled || readonly\n ? 'tw-border-black-5 tw-bg-black-5 dark:tw-bg-black-90 dark:tw-border-black-90'\n : merge([\n 'focus-within:tw-border-black-90 hover:tw-border-black-90',\n validationClassMap[validation],\n isFocusVisible && FOCUS_STYLE,\n ]),\n ])}\n >\n {decorator && (\n <div\n className={merge([\n 'tw-flex tw-items-center tw-justify-center tw-pl-1',\n disabled ? 'tw-text-black-60' : 'tw-text-black-80',\n ])}\n data-test-id=\"decorator\"\n >\n {decorator}\n </div>\n )}\n <input\n id={useMemoizedId(propId)}\n ref={inputElement}\n className={merge([\n 'tw-w-full tw-grow tw-border-none tw-outline-none tw-bg-transparent tw-hide-input-arrows',\n disabled || readonly\n ? 'tw-text-black-40 tw-placeholder-black-30 dark:tw-text-black-30 dark:tw-placeholder-black-40'\n : 'tw-text-black tw-placeholder-black-60 dark:tw-text-white',\n ])}\n onClick={() => inputElement.current?.focus()}\n onChange={(event) => onChange && onChange(event.currentTarget.value)}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n value={value}\n type={getInputType()}\n required={required}\n readOnly={readonly}\n disabled={disabled}\n autoComplete={autocomplete ? 'on' : 'off'}\n size={size}\n data-test-id=\"text-input\"\n {...spellcheckProp}\n />\n {`${value}`.length > 0 && clearable && (\n <button\n className={merge([\n 'tw-flex tw-items-center tw-justify-center tw-transition-colors tw-rounded',\n disabled ? 'tw-cursor-default tw-text-black-40' : 'tw-text-black-60 hover:tw-text-black-100',\n clearButtonIsFocusVisible && FOCUS_STYLE,\n ])}\n onClick={() => {\n inputElement.current?.focus();\n inputElement.current?.setAttribute('value', '');\n\n onChange && onChange('');\n onClear && onClear();\n }}\n data-test-id=\"clear-icon\"\n title=\"Clear text input\"\n aria-label=\"clear text input\"\n disabled={disabled}\n type=\"button\"\n {...clearButtonFocusProps}\n >\n <IconCross />\n </button>\n )}\n {type === TextInputType.Password && (\n <button\n className={merge([\n 'tw-flex tw-items-center tw-justify-center tw-transition-colors tw-rounded',\n disabled ? 'tw-cursor-default tw-text-black-40' : 'tw-text-black-60 hover:tw-text-black-100',\n passwordButtonIsFocusVisible && FOCUS_STYLE,\n ])}\n onClick={() => setIsObfuscated(!isObfuscated)}\n data-test-id=\"visibility-icon\"\n title=\"Toggle text visibility\"\n type=\"button\"\n aria-label={`${isObfuscated ? 'unveil' : 'obfuscate'} text input`}\n disabled={disabled}\n {...passwordButtonFocusProps}\n >\n {isObfuscated ? <IconEye /> : <IconEyeOff />}\n </button>\n )}\n {validation === Validation.Loading && (\n <span className=\"tw-absolute tw-top-[-0.55rem] tw-right-[-0.55rem] tw-bg-white tw-rounded-full tw-p-[2px] tw-border tw-border-black-10\">\n <LoadingCircle size={LoadingCircleSize.ExtraSmall} />\n </span>\n )}\n {copyable && (\n <button\n className={merge([\n 'tw-flex tw-items-center tw-justify-center tw-transition-colors tw-rounded',\n disabled ? 'tw-cursor-default tw-text-black-40' : 'tw-text-black-60 hover:tw-text-black-100',\n copyButtonIsFocusVisible && FOCUS_STYLE,\n ])}\n onClick={() => copy(value)}\n data-test-id=\"copy-icon\"\n title=\"Copy input text\"\n disabled={disabled}\n type=\"button\"\n {...copyButtonFocusProps}\n >\n {status === 'error' && (\n <span className=\"tw-text-box-negative-strong\">\n <IconCrossCircle />\n </span>\n )}\n {status === 'idle' && <IconClipboard />}\n {status === 'success' && (\n <span className=\"tw-text-box-positive-strong\">\n <IconCheckMark />\n </span>\n )}\n </button>\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
@@ -21,6 +21,8 @@ export declare type TooltipProps = PropsWithChildren<{
21
21
  withArrow?: boolean;
22
22
  hoverDelay?: number;
23
23
  open?: boolean;
24
+ disabled?: boolean;
25
+ hidden?: boolean;
24
26
  }>;
25
27
  export declare enum TooltipPosition {
26
28
  Top = "Top",
@@ -33,4 +35,4 @@ export declare enum TooltipAlignment {
33
35
  Middle = "Middle",
34
36
  End = "End"
35
37
  }
36
- export declare const Tooltip: ({ content, tooltipIcon, heading, headingIcon, linkUrl, linkLabel, brightHeader, buttons, children, position, alignment, withArrow, flip, triggerElement, hoverDelay, open, }: TooltipProps) => JSX.Element;
38
+ export declare const Tooltip: ({ content, tooltipIcon, heading, headingIcon, linkUrl, linkLabel, brightHeader, buttons, children, position, alignment, withArrow, flip, triggerElement, hoverDelay, open, disabled, hidden, }: TooltipProps) => JSX.Element;