@frontify/fondue 12.0.0-beta.371 → 12.0.0-beta.372

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.
@@ -1,6 +1,6 @@
1
1
  import { jsx as r, jsxs as p } from "react/jsx-runtime";
2
2
  import { InputLabel as Z } from "../InputLabel/InputLabel.es.js";
3
- import { forwardRef as q, useState as v, useRef as E, useEffect as y, useCallback as R } from "react";
3
+ import { forwardRef as q, useState as g, useRef as E, useEffect as y, useCallback as R } from "react";
4
4
  import { FOCUS_STYLE as T } from "../../utilities/focusStyle.es.js";
5
5
  import { merge as o } from "../../utilities/merge.es.js";
6
6
  import { mergeProps as ee } from "@react-aria/utils";
@@ -26,9 +26,9 @@ const de = (e) => e === "Checked" || e === "Mixed", W = "tw-bg-box-selected-stro
26
26
  emphasis: k = "Default",
27
27
  size: C = "Default",
28
28
  disabled: s,
29
- required: b,
29
+ required: v,
30
30
  label: i,
31
- hideLabel: g,
31
+ hideLabel: b,
32
32
  tooltip: z,
33
33
  helperText: l,
34
34
  "aria-label": L = "Checkbox",
@@ -42,7 +42,7 @@ const de = (e) => e === "Checked" || e === "Mixed", W = "tw-bg-box-selected-stro
42
42
  onChange: s ? void 0 : X,
43
43
  isSelected: c === "Checked"
44
44
  /* Checked */
45
- }), [H, D] = v(), [F, K] = v(), w = E(null), d = E(null), [Y, _] = v(!1), [A, B] = v(!1), N = (n) => {
45
+ }), [H, D] = g(), [F, K] = g(), w = E(null), d = E(null), [Y, _] = g(!1), [A, B] = g(!1), N = (n) => {
46
46
  n.key === "Tab" && D(!0);
47
47
  }, S = () => {
48
48
  D(!1);
@@ -54,7 +54,7 @@ const de = (e) => e === "Checked" || e === "Mixed", W = "tw-bg-box-selected-stro
54
54
  const { inputProps: G } = te(
55
55
  {
56
56
  isDisabled: s,
57
- isRequired: b,
57
+ isRequired: v,
58
58
  isIndeterminate: c === "Mixed",
59
59
  "aria-label": L,
60
60
  value: U
@@ -78,18 +78,18 @@ const de = (e) => e === "Checked" || e === "Mixed", W = "tw-bg-box-selected-stro
78
78
  );
79
79
  }, [w, d]);
80
80
  return y(() => {
81
- if (!(!i && !l || g))
81
+ if (!(!i && !l || b))
82
82
  return u(), window.removeEventListener("resize", u), window.addEventListener("resize", u), () => {
83
83
  window.removeEventListener("resize", u);
84
84
  };
85
- }, [i, l, g, u]), /* @__PURE__ */ r("div", { className: "tw-gap-1 tw-transition-colors tw-w-full", "data-test-id": a, children: /* @__PURE__ */ r("div", { className: o(["tw-inline-flex tw-flex-row tw-rounded tw-w-full", H ? T : ""]), children: /* @__PURE__ */ r(
85
+ }, [i, l, b, u]), /* @__PURE__ */ r("div", { className: "tw-gap-1 tw-transition-colors tw-w-full", "data-test-id": a, children: /* @__PURE__ */ r("div", { className: o(["tw-inline-flex tw-flex-row tw-rounded tw-w-full", H ? T : ""]), children: /* @__PURE__ */ r(
86
86
  Z,
87
87
  {
88
88
  disabled: s,
89
89
  clickable: !0,
90
90
  htmlFor: M,
91
91
  tooltip: z,
92
- required: b,
92
+ required: v,
93
93
  bold: h,
94
94
  children: /* @__PURE__ */ p("span", { className: "tw-flex tw-items-center tw-whitespace-nowrap", children: [
95
95
  /* @__PURE__ */ p("span", { className: "tw-inline-flex", children: [
@@ -104,7 +104,7 @@ const de = (e) => e === "Checked" || e === "Mixed", W = "tw-bg-box-selected-stro
104
104
  "aria-label": L,
105
105
  role: "checkbox",
106
106
  "aria-checked": c === "Checked",
107
- required: b
107
+ required: v
108
108
  }
109
109
  ),
110
110
  /* @__PURE__ */ r(
@@ -121,8 +121,8 @@ const de = (e) => e === "Checked" || e === "Mixed", W = "tw-bg-box-selected-stro
121
121
  }
122
122
  )
123
123
  ] }),
124
- /* @__PURE__ */ p("span", { className: "tw-inline-flex tw-flex-col tw-min-w-0 tw-ml-1.5", children: [
125
- i && !g && /* @__PURE__ */ r(
124
+ !b && /* @__PURE__ */ p("span", { className: "tw-inline-flex tw-flex-col tw-min-w-0 tw-ml-1.5", children: [
125
+ i && /* @__PURE__ */ r(
126
126
  "span",
127
127
  {
128
128
  ref: w,
@@ -136,7 +136,7 @@ const de = (e) => e === "Checked" || e === "Mixed", W = "tw-bg-box-selected-stro
136
136
  children: i
137
137
  }
138
138
  ),
139
- l && !g && /* @__PURE__ */ r(
139
+ l && /* @__PURE__ */ r(
140
140
  "span",
141
141
  {
142
142
  ref: d,
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.es.js","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconCheckMark, IconMinus } from '@foundation/Icon/Generated';\nimport { InputLabel, InputLabelTooltipProps } from '@components/InputLabel/InputLabel';\nimport {\n ForwardRefRenderFunction,\n HTMLAttributes,\n ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { IconSize } from '@foundation/Icon';\nimport { merge } from '@utilities/merge';\nimport { mergeProps } from '@react-aria/utils';\nimport { useCheckbox } from '@react-aria/checkbox';\nimport { useFocusRing } from '@react-aria/focus';\nimport { useForwardedRef } from '@utilities/useForwardedRef';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { useToggleState } from '@react-stately/toggle';\n\nexport enum CheckboxState {\n Checked = 'Checked',\n Unchecked = 'Unchecked',\n Mixed = 'Mixed',\n}\n\nexport enum CheckboxEmphasis {\n Default = 'Default',\n Weak = 'Weak',\n Strong = 'Strong',\n}\n\nexport enum CheckboxSize {\n Default = 'Default',\n Large = 'Large',\n XLarge = 'XLarge',\n}\n\nexport type CheckboxProps = {\n id?: string;\n state?: CheckboxState;\n emphasis?: CheckboxEmphasis;\n size?: CheckboxSize;\n disabled?: boolean;\n required?: boolean;\n value?: string;\n onChange?: (isChecked: boolean) => void;\n label?: string;\n hideLabel?: boolean;\n tooltip?: InputLabelTooltipProps;\n helperText?: string;\n 'aria-label'?: string;\n groupInputProps?: HTMLAttributes<HTMLElement>;\n 'data-test-id'?: string;\n};\n\nconst isCheckedOrMixed = (checked: CheckboxState): boolean => {\n return checked === CheckboxState.Checked || checked === CheckboxState.Mixed;\n};\n\nconst emphasisDefaultClasses =\n 'tw-bg-box-selected-strong tw-text-box-selected-strong-inverse hover:tw-bg-box-selected-strong-hover';\n\nconst emphasisCheckedClassesMap: Record<CheckboxEmphasis, string> = {\n [CheckboxEmphasis.Weak]:\n 'tw-bg-box-neutral-strong tw-text-box-neutral-strong-inverse hover:tw-bg-box-neutral-strong-hover',\n [CheckboxEmphasis.Default]: emphasisDefaultClasses,\n [CheckboxEmphasis.Strong]: emphasisDefaultClasses,\n};\n\nconst sizeClassesMap: Record<CheckboxSize, string> = {\n [CheckboxSize.Default]: 'tw-h-4 tw-w-4',\n [CheckboxSize.Large]: 'tw-h-5 tw-w-5',\n [CheckboxSize.XLarge]: 'tw-h-8 tw-w-8',\n};\n\nconst CheckboxComponent: ForwardRefRenderFunction<HTMLInputElement, CheckboxProps> = (\n {\n id: propId,\n emphasis = CheckboxEmphasis.Default,\n size = CheckboxSize.Default,\n disabled,\n required,\n label,\n hideLabel,\n tooltip,\n helperText,\n 'aria-label': ariaLabel = 'Checkbox',\n value,\n groupInputProps,\n onChange,\n state = CheckboxState.Unchecked,\n 'data-test-id': dataTestId = 'checkbox',\n },\n ref,\n) => {\n const id = useMemoizedId(propId);\n const inputRef = useForwardedRef<HTMLInputElement | null>(ref);\n const { focusProps } = useFocusRing();\n const toggleState = useToggleState({\n onChange: disabled ? undefined : onChange,\n isSelected: state === CheckboxState.Checked,\n });\n const [showFocus, setShowFocus] = useState<Nullable<boolean>>();\n const [listeningForKeyboardEvents, setListeningForKeyboardEvents] = useState<Nullable<boolean>>();\n const labelContainer = useRef<HTMLSpanElement>(null);\n const helperTextContainer = useRef<HTMLSpanElement>(null);\n const [isLabelOverflowing, setIsLabelOverflowing] = useState(false);\n const [isHelperTextOverflowing, setIsHelperTextOverflowing] = useState(false);\n\n const tabFocusListener = (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n setShowFocus(true);\n }\n };\n\n const blurListener = () => {\n setShowFocus(false);\n };\n\n useEffect(() => {\n if (!listeningForKeyboardEvents) {\n inputRef?.current?.removeEventListener('keyup', tabFocusListener);\n inputRef?.current?.addEventListener('keyup', tabFocusListener);\n inputRef?.current?.removeEventListener('blur', blurListener);\n inputRef?.current?.addEventListener('blur', blurListener);\n\n setListeningForKeyboardEvents(true);\n }\n }, [listeningForKeyboardEvents, inputRef]);\n\n const { inputProps } = useCheckbox(\n {\n isDisabled: disabled,\n isRequired: required,\n isIndeterminate: state === CheckboxState.Mixed,\n 'aria-label': ariaLabel,\n value,\n },\n toggleState,\n inputRef,\n );\n\n const stateMap: Record<CheckboxState, ReactNode> = {\n [CheckboxState.Checked]: (\n <IconCheckMark size={size === CheckboxSize.XLarge ? IconSize.Size24 : IconSize.Size16} />\n ),\n [CheckboxState.Mixed]: <IconMinus />,\n [CheckboxState.Unchecked]: null,\n };\n\n const checkedOrMixed = isCheckedOrMixed(state);\n\n const disabledClasses = merge([\n 'tw-bg-box-disabled tw-pointer-events-none tw-text-box-disabled-inverse tw-border-line-strong',\n checkedOrMixed && 'tw-text-box-disabled-inverse tw-border-line-strong',\n ]);\n\n const enabledClasses = checkedOrMixed\n ? emphasisCheckedClassesMap[emphasis]\n : merge([\n 'tw-bg-base hover:tw-bg-box-neutral',\n emphasis === CheckboxEmphasis.Strong\n ? 'tw-border-2 tw-border-box-selected-strong'\n : 'tw-border tw-border-line-xx-strong',\n ]);\n\n const checkOverflowing = useCallback(() => {\n if (labelContainer.current) {\n setIsLabelOverflowing(labelContainer.current?.scrollWidth > labelContainer.current?.clientWidth);\n }\n\n if (helperTextContainer.current) {\n setIsHelperTextOverflowing(\n helperTextContainer.current?.scrollWidth > helperTextContainer.current?.clientWidth,\n );\n }\n }, [labelContainer, helperTextContainer]);\n\n useEffect(() => {\n if ((!label && !helperText) || hideLabel) {\n return;\n }\n checkOverflowing();\n\n window.removeEventListener('resize', checkOverflowing);\n window.addEventListener('resize', checkOverflowing);\n\n return () => {\n window.removeEventListener('resize', checkOverflowing);\n };\n }, [label, helperText, hideLabel, checkOverflowing]);\n\n return (\n <div className=\"tw-gap-1 tw-transition-colors tw-w-full\" data-test-id={dataTestId}>\n <div className={merge(['tw-inline-flex tw-flex-row tw-rounded tw-w-full', showFocus ? FOCUS_STYLE : ''])}>\n <InputLabel\n disabled={disabled}\n clickable\n htmlFor={id}\n tooltip={tooltip}\n required={required}\n bold={checkedOrMixed}\n >\n <span className=\"tw-flex tw-items-center tw-whitespace-nowrap\">\n <span className=\"tw-inline-flex\">\n <input\n {...mergeProps(groupInputProps || inputProps, focusProps)}\n id={id}\n ref={inputRef}\n className=\"tw-sr-only\"\n data-test-id={`${dataTestId}-input`}\n aria-label={ariaLabel}\n role=\"checkbox\"\n aria-checked={state === CheckboxState.Checked}\n required={required}\n />\n <span\n data-test-id={`${dataTestId}-icon-box`}\n aria-hidden=\"true\"\n className={merge([\n 'tw-leading-3 tw-relative tw-flex tw-items-center tw-justify-center tw-rounded tw-shrink-0 tw-flex-none',\n sizeClassesMap[size],\n disabled ? disabledClasses : enabledClasses,\n ])}\n >\n {stateMap[state]}\n </span>\n </span>\n <span className=\"tw-inline-flex tw-flex-col tw-min-w-0 tw-ml-1.5\">\n {label && !hideLabel && (\n <span\n ref={labelContainer}\n data-test-id={`${dataTestId}-label`}\n className={merge([\n 'tw-text-ellipsis tw-overflow-hidden',\n 'tw-text-xs tw-select-none hover:tw-cursor-pointer hover:tw-text-black dark:hover:tw-text-white group-hover:tw-text-black dark:group-hover:tw-text-white',\n checkedOrMixed && 'tw-font-medium',\n ])}\n title={isLabelOverflowing ? label : undefined}\n >\n {label}\n </span>\n )}\n {helperText && !hideLabel && (\n <span\n ref={helperTextContainer}\n data-test-id={`${dataTestId}-helper-text`}\n className={merge([\n 'tw-text-ellipsis tw-overflow-hidden',\n 'tw-font-sans tw-text-xs tw-font-normal',\n disabled ? 'text-disabled' : 'tw-text-text-weak',\n ])}\n title={isHelperTextOverflowing ? helperText : undefined}\n >\n {helperText}\n </span>\n )}\n </span>\n </span>\n </InputLabel>\n </div>\n </div>\n );\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(CheckboxComponent);\nCheckbox.displayName = 'FondueCheckbox';\n"],"names":["CheckboxState","CheckboxEmphasis","CheckboxSize","isCheckedOrMixed","checked","emphasisDefaultClasses","emphasisCheckedClassesMap","sizeClassesMap","CheckboxComponent","propId","emphasis","size","disabled","required","label","hideLabel","tooltip","helperText","ariaLabel","value","groupInputProps","onChange","state","dataTestId","ref","id","useMemoizedId","inputRef","useForwardedRef","focusProps","useFocusRing","toggleState","useToggleState","showFocus","setShowFocus","useState","listeningForKeyboardEvents","setListeningForKeyboardEvents","labelContainer","useRef","helperTextContainer","isLabelOverflowing","setIsLabelOverflowing","isHelperTextOverflowing","setIsHelperTextOverflowing","tabFocusListener","event","blurListener","useEffect","_a","_b","_c","_d","inputProps","useCheckbox","stateMap","jsx","IconCheckMark","IconSize","IconMinus","checkedOrMixed","disabledClasses","merge","enabledClasses","checkOverflowing","useCallback","FOCUS_STYLE","InputLabel","jsxs","mergeProps","Checkbox","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"Checkbox.es.js","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconCheckMark, IconMinus } from '@foundation/Icon/Generated';\nimport { InputLabel, InputLabelTooltipProps } from '@components/InputLabel/InputLabel';\nimport {\n ForwardRefRenderFunction,\n HTMLAttributes,\n ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { IconSize } from '@foundation/Icon';\nimport { merge } from '@utilities/merge';\nimport { mergeProps } from '@react-aria/utils';\nimport { useCheckbox } from '@react-aria/checkbox';\nimport { useFocusRing } from '@react-aria/focus';\nimport { useForwardedRef } from '@utilities/useForwardedRef';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { useToggleState } from '@react-stately/toggle';\n\nexport enum CheckboxState {\n Checked = 'Checked',\n Unchecked = 'Unchecked',\n Mixed = 'Mixed',\n}\n\nexport enum CheckboxEmphasis {\n Default = 'Default',\n Weak = 'Weak',\n Strong = 'Strong',\n}\n\nexport enum CheckboxSize {\n Default = 'Default',\n Large = 'Large',\n XLarge = 'XLarge',\n}\n\nexport type CheckboxProps = {\n id?: string;\n state?: CheckboxState;\n emphasis?: CheckboxEmphasis;\n size?: CheckboxSize;\n disabled?: boolean;\n required?: boolean;\n value?: string;\n onChange?: (isChecked: boolean) => void;\n label?: string;\n hideLabel?: boolean;\n tooltip?: InputLabelTooltipProps;\n helperText?: string;\n 'aria-label'?: string;\n groupInputProps?: HTMLAttributes<HTMLElement>;\n 'data-test-id'?: string;\n};\n\nconst isCheckedOrMixed = (checked: CheckboxState): boolean => {\n return checked === CheckboxState.Checked || checked === CheckboxState.Mixed;\n};\n\nconst emphasisDefaultClasses =\n 'tw-bg-box-selected-strong tw-text-box-selected-strong-inverse hover:tw-bg-box-selected-strong-hover';\n\nconst emphasisCheckedClassesMap: Record<CheckboxEmphasis, string> = {\n [CheckboxEmphasis.Weak]:\n 'tw-bg-box-neutral-strong tw-text-box-neutral-strong-inverse hover:tw-bg-box-neutral-strong-hover',\n [CheckboxEmphasis.Default]: emphasisDefaultClasses,\n [CheckboxEmphasis.Strong]: emphasisDefaultClasses,\n};\n\nconst sizeClassesMap: Record<CheckboxSize, string> = {\n [CheckboxSize.Default]: 'tw-h-4 tw-w-4',\n [CheckboxSize.Large]: 'tw-h-5 tw-w-5',\n [CheckboxSize.XLarge]: 'tw-h-8 tw-w-8',\n};\n\nconst CheckboxComponent: ForwardRefRenderFunction<HTMLInputElement, CheckboxProps> = (\n {\n id: propId,\n emphasis = CheckboxEmphasis.Default,\n size = CheckboxSize.Default,\n disabled,\n required,\n label,\n hideLabel,\n tooltip,\n helperText,\n 'aria-label': ariaLabel = 'Checkbox',\n value,\n groupInputProps,\n onChange,\n state = CheckboxState.Unchecked,\n 'data-test-id': dataTestId = 'checkbox',\n },\n ref,\n) => {\n const id = useMemoizedId(propId);\n const inputRef = useForwardedRef<HTMLInputElement | null>(ref);\n const { focusProps } = useFocusRing();\n const toggleState = useToggleState({\n onChange: disabled ? undefined : onChange,\n isSelected: state === CheckboxState.Checked,\n });\n const [showFocus, setShowFocus] = useState<Nullable<boolean>>();\n const [listeningForKeyboardEvents, setListeningForKeyboardEvents] = useState<Nullable<boolean>>();\n const labelContainer = useRef<HTMLSpanElement>(null);\n const helperTextContainer = useRef<HTMLSpanElement>(null);\n const [isLabelOverflowing, setIsLabelOverflowing] = useState(false);\n const [isHelperTextOverflowing, setIsHelperTextOverflowing] = useState(false);\n\n const tabFocusListener = (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n setShowFocus(true);\n }\n };\n\n const blurListener = () => {\n setShowFocus(false);\n };\n\n useEffect(() => {\n if (!listeningForKeyboardEvents) {\n inputRef?.current?.removeEventListener('keyup', tabFocusListener);\n inputRef?.current?.addEventListener('keyup', tabFocusListener);\n inputRef?.current?.removeEventListener('blur', blurListener);\n inputRef?.current?.addEventListener('blur', blurListener);\n\n setListeningForKeyboardEvents(true);\n }\n }, [listeningForKeyboardEvents, inputRef]);\n\n const { inputProps } = useCheckbox(\n {\n isDisabled: disabled,\n isRequired: required,\n isIndeterminate: state === CheckboxState.Mixed,\n 'aria-label': ariaLabel,\n value,\n },\n toggleState,\n inputRef,\n );\n\n const stateMap: Record<CheckboxState, ReactNode> = {\n [CheckboxState.Checked]: (\n <IconCheckMark size={size === CheckboxSize.XLarge ? IconSize.Size24 : IconSize.Size16} />\n ),\n [CheckboxState.Mixed]: <IconMinus />,\n [CheckboxState.Unchecked]: null,\n };\n\n const checkedOrMixed = isCheckedOrMixed(state);\n\n const disabledClasses = merge([\n 'tw-bg-box-disabled tw-pointer-events-none tw-text-box-disabled-inverse tw-border-line-strong',\n checkedOrMixed && 'tw-text-box-disabled-inverse tw-border-line-strong',\n ]);\n\n const enabledClasses = checkedOrMixed\n ? emphasisCheckedClassesMap[emphasis]\n : merge([\n 'tw-bg-base hover:tw-bg-box-neutral',\n emphasis === CheckboxEmphasis.Strong\n ? 'tw-border-2 tw-border-box-selected-strong'\n : 'tw-border tw-border-line-xx-strong',\n ]);\n\n const checkOverflowing = useCallback(() => {\n if (labelContainer.current) {\n setIsLabelOverflowing(labelContainer.current?.scrollWidth > labelContainer.current?.clientWidth);\n }\n\n if (helperTextContainer.current) {\n setIsHelperTextOverflowing(\n helperTextContainer.current?.scrollWidth > helperTextContainer.current?.clientWidth,\n );\n }\n }, [labelContainer, helperTextContainer]);\n\n useEffect(() => {\n if ((!label && !helperText) || hideLabel) {\n return;\n }\n checkOverflowing();\n\n window.removeEventListener('resize', checkOverflowing);\n window.addEventListener('resize', checkOverflowing);\n\n return () => {\n window.removeEventListener('resize', checkOverflowing);\n };\n }, [label, helperText, hideLabel, checkOverflowing]);\n\n return (\n <div className=\"tw-gap-1 tw-transition-colors tw-w-full\" data-test-id={dataTestId}>\n <div className={merge(['tw-inline-flex tw-flex-row tw-rounded tw-w-full', showFocus ? FOCUS_STYLE : ''])}>\n <InputLabel\n disabled={disabled}\n clickable\n htmlFor={id}\n tooltip={tooltip}\n required={required}\n bold={checkedOrMixed}\n >\n <span className=\"tw-flex tw-items-center tw-whitespace-nowrap\">\n <span className=\"tw-inline-flex\">\n <input\n {...mergeProps(groupInputProps || inputProps, focusProps)}\n id={id}\n ref={inputRef}\n className=\"tw-sr-only\"\n data-test-id={`${dataTestId}-input`}\n aria-label={ariaLabel}\n role=\"checkbox\"\n aria-checked={state === CheckboxState.Checked}\n required={required}\n />\n <span\n data-test-id={`${dataTestId}-icon-box`}\n aria-hidden=\"true\"\n className={merge([\n 'tw-leading-3 tw-relative tw-flex tw-items-center tw-justify-center tw-rounded tw-shrink-0 tw-flex-none',\n sizeClassesMap[size],\n disabled ? disabledClasses : enabledClasses,\n ])}\n >\n {stateMap[state]}\n </span>\n </span>\n {!hideLabel && (\n <span className=\"tw-inline-flex tw-flex-col tw-min-w-0 tw-ml-1.5\">\n {label && (\n <span\n ref={labelContainer}\n data-test-id={`${dataTestId}-label`}\n className={merge([\n 'tw-text-ellipsis tw-overflow-hidden',\n 'tw-text-xs tw-select-none hover:tw-cursor-pointer hover:tw-text-black dark:hover:tw-text-white group-hover:tw-text-black dark:group-hover:tw-text-white',\n checkedOrMixed && 'tw-font-medium',\n ])}\n title={isLabelOverflowing ? label : undefined}\n >\n {label}\n </span>\n )}\n {helperText && (\n <span\n ref={helperTextContainer}\n data-test-id={`${dataTestId}-helper-text`}\n className={merge([\n 'tw-text-ellipsis tw-overflow-hidden',\n 'tw-font-sans tw-text-xs tw-font-normal',\n disabled ? 'text-disabled' : 'tw-text-text-weak',\n ])}\n title={isHelperTextOverflowing ? helperText : undefined}\n >\n {helperText}\n </span>\n )}\n </span>\n )}\n </span>\n </InputLabel>\n </div>\n </div>\n );\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(CheckboxComponent);\nCheckbox.displayName = 'FondueCheckbox';\n"],"names":["CheckboxState","CheckboxEmphasis","CheckboxSize","isCheckedOrMixed","checked","emphasisDefaultClasses","emphasisCheckedClassesMap","sizeClassesMap","CheckboxComponent","propId","emphasis","size","disabled","required","label","hideLabel","tooltip","helperText","ariaLabel","value","groupInputProps","onChange","state","dataTestId","ref","id","useMemoizedId","inputRef","useForwardedRef","focusProps","useFocusRing","toggleState","useToggleState","showFocus","setShowFocus","useState","listeningForKeyboardEvents","setListeningForKeyboardEvents","labelContainer","useRef","helperTextContainer","isLabelOverflowing","setIsLabelOverflowing","isHelperTextOverflowing","setIsHelperTextOverflowing","tabFocusListener","event","blurListener","useEffect","_a","_b","_c","_d","inputProps","useCheckbox","stateMap","jsx","IconCheckMark","IconSize","IconMinus","checkedOrMixed","disabledClasses","merge","enabledClasses","checkOverflowing","useCallback","FOCUS_STYLE","InputLabel","jsxs","mergeProps","Checkbox","forwardRef"],"mappings":";;;;;;;;;;;;;;AAyBY,IAAAA,uBAAAA,OACRA,EAAA,UAAU,WACVA,EAAA,YAAY,aACZA,EAAA,QAAQ,SAHAA,IAAAA,MAAA,CAAA,CAAA,GAMAC,uBAAAA,OACRA,EAAA,UAAU,WACVA,EAAA,OAAO,QACPA,EAAA,SAAS,UAHDA,IAAAA,MAAA,CAAA,CAAA,GAMAC,uBAAAA,OACRA,EAAA,UAAU,WACVA,EAAA,QAAQ,SACRA,EAAA,SAAS,UAHDA,IAAAA,MAAA,CAAA,CAAA;AAwBZ,MAAMC,KAAmB,CAACC,MACfA,MAAY,aAAyBA,MAAY,SAGtDC,IACF,uGAEEC,KAA8D;AAAA,EAC/D,MACG;AAAA,EACH,SAA2BD;AAAA,EAC3B,QAA0BA;AAC/B,GAEME,KAA+C;AAAA,EAChD,SAAuB;AAAA,EACvB,OAAqB;AAAA,EACrB,QAAsB;AAC3B,GAEMC,KAA+E,CACjF;AAAA,EACI,IAAIC;AAAA,EACJ,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAcC,IAAY;AAAA,EAC1B,OAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,gBAAgBC,IAAa;AACjC,GACAC,MACC;AACK,QAAAC,IAAKC,GAAcjB,CAAM,GACzBkB,IAAWC,GAAyCJ,CAAG,GACvD,EAAE,YAAAK,MAAeC,MACjBC,IAAcC,GAAe;AAAA,IAC/B,UAAUpB,IAAW,SAAYS;AAAA,IACjC,YAAYC,MAAU;AAAA;AAAA,EAAA,CACzB,GACK,CAACW,GAAWC,CAAY,IAAIC,EAA4B,GACxD,CAACC,GAA4BC,CAA6B,IAAIF,EAA4B,GAC1FG,IAAiBC,EAAwB,IAAI,GAC7CC,IAAsBD,EAAwB,IAAI,GAClD,CAACE,GAAoBC,CAAqB,IAAIP,EAAS,EAAK,GAC5D,CAACQ,GAAyBC,CAA0B,IAAIT,EAAS,EAAK,GAEtEU,IAAmB,CAACC,MAAyB;AAC3C,IAAAA,EAAM,QAAQ,SACdZ,EAAa,EAAI;AAAA,EACrB,GAGEa,IAAe,MAAM;AACvB,IAAAb,EAAa,EAAK;AAAA,EAAA;AAGtB,EAAAc,EAAU,MAAM;;AACZ,IAAKZ,OACSa,IAAAtB,KAAA,gBAAAA,EAAA,YAAA,QAAAsB,EAAS,oBAAoB,SAASJ,KACtCK,IAAAvB,KAAA,gBAAAA,EAAA,YAAA,QAAAuB,EAAS,iBAAiB,SAASL,KACnCM,IAAAxB,KAAA,gBAAAA,EAAA,YAAA,QAAAwB,EAAS,oBAAoB,QAAQJ,KACrCK,IAAAzB,KAAA,gBAAAA,EAAA,YAAA,QAAAyB,EAAS,iBAAiB,QAAQL,IAE5CV,EAA8B,EAAI;AAAA,EACtC,GACD,CAACD,GAA4BT,CAAQ,CAAC;AAEnC,QAAA,EAAE,YAAA0B,MAAeC;AAAA,IACnB;AAAA,MACI,YAAY1C;AAAA,MACZ,YAAYC;AAAA,MACZ,iBAAiBS,MAAU;AAAA,MAC3B,cAAcJ;AAAA,MACd,OAAAC;AAAA,IACJ;AAAA,IACAY;AAAA,IACAJ;AAAA,EAAA,GAGE4B,IAA6C;AAAA,IAC9C,SACI,gBAAAC,EAAAC,IAAA,EAAc,MAAM9C,MAAS,WAAsB+C,EAAS,SAASA,EAAS,OAAQ,CAAA;AAAA,IAE1F,OAAsB,gBAAAF,EAACG,IAAU,EAAA;AAAA,IACjC,WAA0B;AAAA,EAAA,GAGzBC,IAAiBzD,GAAiBmB,CAAK,GAEvCuC,IAAkBC,EAAM;AAAA,IAC1B;AAAA,IACAF,KAAkB;AAAA,EAAA,CACrB,GAEKG,IAAiBH,IACjBtD,GAA0BI,CAAQ,IAClCoD,EAAM;AAAA,IACF;AAAA,IACApD,MAAa,WACP,8CACA;AAAA,EAAA,CACT,GAEDsD,IAAmBC,EAAY,MAAM;;AACvC,IAAI3B,EAAe,WACfI,IAAsBO,IAAAX,EAAe,YAAf,gBAAAW,EAAwB,iBAAcC,IAAAZ,EAAe,YAAf,gBAAAY,EAAwB,YAAW,GAG/FV,EAAoB,WACpBI;AAAA,QACIO,IAAAX,EAAoB,YAApB,gBAAAW,EAA6B,iBAAcC,IAAAZ,EAAoB,YAApB,gBAAAY,EAA6B;AAAA,IAAA;AAAA,EAEhF,GACD,CAACd,GAAgBE,CAAmB,CAAC;AAExC,SAAAQ,EAAU,MAAM;AACZ,QAAK,GAAClC,KAAS,CAACG,KAAeF;AAGd,aAAAiD,KAEV,OAAA,oBAAoB,UAAUA,CAAgB,GAC9C,OAAA,iBAAiB,UAAUA,CAAgB,GAE3C,MAAM;AACF,eAAA,oBAAoB,UAAUA,CAAgB;AAAA,MAAA;AAAA,KAE1D,CAAClD,GAAOG,GAAYF,GAAWiD,CAAgB,CAAC,qBAG9C,OAAI,EAAA,WAAU,2CAA0C,gBAAczC,GACnE,UAAC,gBAAAiC,EAAA,OAAA,EAAI,WAAWM,EAAM,CAAC,mDAAmD7B,IAAYiC,IAAc,EAAE,CAAC,GACnG,UAAA,gBAAAV;AAAA,IAACW;AAAA,IAAA;AAAA,MACG,UAAAvD;AAAA,MACA,WAAS;AAAA,MACT,SAASa;AAAA,MACT,SAAAT;AAAA,MACA,UAAAH;AAAA,MACA,MAAM+C;AAAA,MAEN,UAAA,gBAAAQ,EAAC,QAAK,EAAA,WAAU,gDACZ,UAAA;AAAA,QAAC,gBAAAA,EAAA,QAAA,EAAK,WAAU,kBACZ,UAAA;AAAA,UAAA,gBAAAZ;AAAA,YAAC;AAAA,YAAA;AAAA,cACI,GAAGa,GAAWjD,KAAmBiC,GAAYxB,CAAU;AAAA,cACxD,IAAAJ;AAAA,cACA,KAAKE;AAAA,cACL,WAAU;AAAA,cACV,gBAAc,GAAGJ,CAAU;AAAA,cAC3B,cAAYL;AAAA,cACZ,MAAK;AAAA,cACL,gBAAcI,MAAU;AAAA,cACxB,UAAAT;AAAA,YAAA;AAAA,UACJ;AAAA,UACA,gBAAA2C;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,gBAAc,GAAGjC,CAAU;AAAA,cAC3B,eAAY;AAAA,cACZ,WAAWuC,EAAM;AAAA,gBACb;AAAA,gBACAvD,GAAeI,CAAI;AAAA,gBACnBC,IAAWiD,IAAkBE;AAAA,cAAA,CAChC;AAAA,cAEA,YAASzC,CAAK;AAAA,YAAA;AAAA,UACnB;AAAA,QAAA,GACJ;AAAA,QACC,CAACP,KACG,gBAAAqD,EAAA,QAAA,EAAK,WAAU,mDACX,UAAA;AAAA,UACGtD,KAAA,gBAAA0C;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,KAAKlB;AAAA,cACL,gBAAc,GAAGf,CAAU;AAAA,cAC3B,WAAWuC,EAAM;AAAA,gBACb;AAAA,gBACA;AAAA,gBACAF,KAAkB;AAAA,cAAA,CACrB;AAAA,cACD,OAAOnB,IAAqB3B,IAAQ;AAAA,cAEnC,UAAAA;AAAA,YAAA;AAAA,UACL;AAAA,UAEHG,KACG,gBAAAuC;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,KAAKhB;AAAA,cACL,gBAAc,GAAGjB,CAAU;AAAA,cAC3B,WAAWuC,EAAM;AAAA,gBACb;AAAA,gBACA;AAAA,gBACAlD,IAAW,kBAAkB;AAAA,cAAA,CAChC;AAAA,cACD,OAAO+B,IAA0B1B,IAAa;AAAA,cAE7C,UAAAA;AAAA,YAAA;AAAA,UACL;AAAA,QAAA,GAER;AAAA,MAAA,GAER;AAAA,IAAA;AAAA,EAAA,EAER,CAAA,EACJ,CAAA;AAER,GAEaqD,KAAWC,EAA4C/D,EAAiB;AACrF8D,GAAS,cAAc;"}