@servicetitan/anvil2 1.46.9 → 1.46.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/{AnvilProvider-C_qRQnE6.js → AnvilProvider-DkHInQRh.js} +2 -2
- package/dist/{AnvilProvider-C_qRQnE6.js.map → AnvilProvider-DkHInQRh.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Calendar-BopUjnAk.js → Calendar-DaVJ96Hp.js} +14 -3
- package/dist/{Calendar-BopUjnAk.js.map → Calendar-DaVJ96Hp.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/Calendar.js.map +1 -1
- package/dist/{Checkbox-DAODkzN3.js → Checkbox-B5VTqylq.js} +2 -2
- package/dist/{Checkbox-DAODkzN3.js.map → Checkbox-B5VTqylq.js.map} +1 -1
- package/dist/{Checkbox-C5PX8wur.js → Checkbox-Dv01A09v.js} +2 -2
- package/dist/{Checkbox-C5PX8wur.js.map → Checkbox-Dv01A09v.js.map} +1 -1
- package/dist/Checkbox.js +2 -2
- package/dist/{Combobox-D4Q9NeVP.js → Combobox-C9-VQHxv.js} +4 -4
- package/dist/{Combobox-D4Q9NeVP.js.map → Combobox-C9-VQHxv.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/DataTable-B17y3l8v.js +5640 -0
- package/dist/DataTable-B17y3l8v.js.map +1 -0
- package/dist/DataTable.css +648 -0
- package/dist/{DateField-B1AdxJKt.js → DateField-CKI7Zk4E.js} +5 -5
- package/dist/{DateField-B1AdxJKt.js.map → DateField-CKI7Zk4E.js.map} +1 -1
- package/dist/DateField.js +1 -1
- package/dist/{DateFieldRange-DiNR5bJ6.js → DateFieldRange-DIycPI0Y.js} +5 -5
- package/dist/{DateFieldRange-DiNR5bJ6.js.map → DateFieldRange-DIycPI0Y.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-CTYbquGi.js → DateFieldSingle-BdkVUPvB.js} +5 -5
- package/dist/{DateFieldSingle-CTYbquGi.js.map → DateFieldSingle-BdkVUPvB.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-HrylwnwX.js → DateFieldYearless-DvbW4vgm.js} +2 -2
- package/dist/{DateFieldYearless-HrylwnwX.js.map → DateFieldYearless-DvbW4vgm.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DaysOfTheWeek-CvWu1j6-.js → DaysOfTheWeek-BcyYG7dD.js} +3 -3
- package/dist/{DaysOfTheWeek-CvWu1j6-.js.map → DaysOfTheWeek-BcyYG7dD.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-D3aUlrNr.js → Dialog-BLFx4TRs.js} +2 -2
- package/dist/{Dialog-D3aUlrNr.js.map → Dialog-BLFx4TRs.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-yG7C8Owv.js → Drawer-DPM-jPb7.js} +2 -2
- package/dist/{Drawer-yG7C8Owv.js.map → Drawer-DPM-jPb7.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/{FieldLabel-Bgl3iu13.js → FieldLabel-C6XZKglC.js} +2 -2
- package/dist/{FieldLabel-Bgl3iu13.js.map → FieldLabel-C6XZKglC.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{InputMask-BHupXP8N.js → InputMask-DkNgXdFO.js} +2 -2
- package/dist/{InputMask-BHupXP8N.js.map → InputMask-DkNgXdFO.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-Dsj5MiUx.js → ListView-DYKwVASE.js} +2 -2
- package/dist/{ListView-Dsj5MiUx.js.map → ListView-DYKwVASE.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Menu-CETp4nrV.js → Menu-D22YbM7y.js} +2 -2
- package/dist/{Menu-CETp4nrV.js.map → Menu-D22YbM7y.js.map} +1 -1
- package/dist/Menu.js +1 -1
- package/dist/{NumberField-lvPAltDB.js → NumberField-B1hQ8jRn.js} +2 -2
- package/dist/{NumberField-lvPAltDB.js.map → NumberField-B1hQ8jRn.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/{Page-DAkneNVH.js → Page-DwBcDxi2.js} +5 -5
- package/dist/{Page-DAkneNVH.js.map → Page-DwBcDxi2.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-DiLZ3lxt.js → Pagination-B7uvkLb3.js} +2 -2
- package/dist/{Pagination-DiLZ3lxt.js.map → Pagination-B7uvkLb3.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-Du2PBdp1.js → Popover-BuhxFt5z.js} +2 -2
- package/dist/{Popover-Du2PBdp1.js.map → Popover-BuhxFt5z.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-BwM_e5cP.js → ProgressBar-Bq8indkz.js} +2 -2
- package/dist/{ProgressBar-BwM_e5cP.js.map → ProgressBar-Bq8indkz.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-C5riI-do.js → Radio-57ck6GTm.js} +2 -2
- package/dist/{Radio-C5riI-do.js.map → Radio-57ck6GTm.js.map} +1 -1
- package/dist/Radio.js +2 -2
- package/dist/{RadioGroup-B7O06pVu.js → RadioGroup-CcRLdoAl.js} +2 -2
- package/dist/{RadioGroup-B7O06pVu.js.map → RadioGroup-CcRLdoAl.js.map} +1 -1
- package/dist/{SelectCard-Ca07K1FW.js → SelectCard-dEhb5KAL.js} +3 -3
- package/dist/{SelectCard-Ca07K1FW.js.map → SelectCard-dEhb5KAL.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/{SelectTrigger-CaXX1SHG.js → SelectTrigger-A96aYNm-.js} +2 -2
- package/dist/{SelectTrigger-CaXX1SHG.js.map → SelectTrigger-A96aYNm-.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-C7TLCna1.js → SelectTriggerBase-I4Qo37zM.js} +2 -2
- package/dist/{SelectTriggerBase-C7TLCna1.js.map → SelectTriggerBase-I4Qo37zM.js.map} +1 -1
- package/dist/Table.d.ts +2 -0
- package/dist/Table.js +2 -0
- package/dist/Table.js.map +1 -0
- package/dist/{TextField-Duo_mY8Y.js → TextField-CP5kL2j7.js} +2 -2
- package/dist/{TextField-Duo_mY8Y.js.map → TextField-CP5kL2j7.js.map} +1 -1
- package/dist/{TextField-CGfnQPiO.js → TextField-DLIaLKT1.js} +2 -2
- package/dist/{TextField-CGfnQPiO.js.map → TextField-DLIaLKT1.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-B2-6m291.js → Textarea-Kb-RF4rR.js} +2 -2
- package/dist/{Textarea-B2-6m291.js.map → Textarea-Kb-RF4rR.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-Be3Pvtpz.js → ThemeProvider-7X1D1GxO.js} +4 -4
- package/dist/{ThemeProvider-Be3Pvtpz.js.map → ThemeProvider-7X1D1GxO.js.map} +1 -1
- package/dist/ThemeProvider.css +96 -90
- package/dist/ThemeProvider.js +1 -1
- package/dist/{TimeField-DohKibUE.js → TimeField-6OSTzIYV.js} +3 -3
- package/dist/{TimeField-DohKibUE.js.map → TimeField-6OSTzIYV.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-CH5FTmGv.js → Toaster-BVM24YZG.js} +2 -2
- package/dist/{Toaster-CH5FTmGv.js.map → Toaster-BVM24YZG.js.map} +1 -1
- package/dist/{Toaster-BKyvW8J8.js → Toaster-Du0zf4b-.js} +2 -2
- package/dist/{Toaster-BKyvW8J8.js.map → Toaster-Du0zf4b-.js.map} +1 -1
- package/dist/{Toolbar-DbH5zdna.js → Toolbar-BGaVd-fy.js} +11 -11
- package/dist/{Toolbar-DbH5zdna.js.map → Toolbar-BGaVd-fy.js.map} +1 -1
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-DhtVlhah.js → Tooltip-Dp9gWa2P.js} +3 -3
- package/dist/{Tooltip-DhtVlhah.js.map → Tooltip-Dp9gWa2P.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/beta/components/Calendar/Calendar.d.ts +4 -0
- package/dist/beta/components/Table/DataTable/DataTable.d.ts +116 -0
- package/dist/beta/components/Table/DataTable/DataTable.test-data.d.ts +15 -0
- package/dist/beta/components/Table/DataTable/index.d.ts +1 -0
- package/dist/beta/components/Table/DataTable/internal/DataTableBody.d.ts +16 -0
- package/dist/beta/components/Table/DataTable/internal/DataTableContainer.d.ts +7 -0
- package/dist/beta/components/Table/DataTable/internal/DataTableContext.d.ts +26 -0
- package/dist/beta/components/Table/DataTable/internal/DataTableContextProvider.d.ts +28 -0
- package/dist/beta/components/Table/DataTable/internal/DataTableFooter.d.ts +48 -0
- package/dist/beta/components/Table/DataTable/internal/DataTableHeader.d.ts +17 -0
- package/dist/beta/components/Table/DataTable/internal/cells/DataTableBodyCell.d.ts +40 -0
- package/dist/beta/components/Table/DataTable/internal/cells/DataTableFooterCell.d.ts +18 -0
- package/dist/beta/components/Table/DataTable/internal/cells/DataTableHeaderCell.d.ts +21 -0
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableCellEditIcon.d.ts +5 -0
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectCell.d.ts +26 -0
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableSelectCell.d.ts +26 -0
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableTextCell.d.ts +17 -0
- package/dist/beta/components/Table/DataTable/internal/editable-cells/types.d.ts +50 -0
- package/dist/beta/components/Table/DataTable/internal/editable-cells/useEditCell.d.ts +11 -0
- package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +27 -0
- package/dist/beta/components/Table/base/TableBase.d.ts +43 -0
- package/dist/beta/components/Table/base/TableBody.d.ts +25 -0
- package/dist/beta/components/Table/base/TableContainer.d.ts +28 -0
- package/dist/beta/components/Table/base/TableFooter.d.ts +25 -0
- package/dist/beta/components/Table/base/TableHeader.d.ts +25 -0
- package/dist/beta/components/Table/base/cells/TableBodyCell.d.ts +27 -0
- package/dist/beta/components/Table/base/cells/TableEmptyCellContent.d.ts +4 -0
- package/dist/beta/components/Table/base/cells/TableFooterCell.d.ts +30 -0
- package/dist/beta/components/Table/base/cells/TableHeaderCell.d.ts +40 -0
- package/dist/beta/components/Table/base/cells/types.d.ts +10 -0
- package/dist/beta/components/Table/createColumnHelper.d.ts +25 -0
- package/dist/beta/components/Table/formatters/chipsFormatter.d.ts +21 -0
- package/dist/beta/components/Table/formatters/currencyFormatter.d.ts +22 -0
- package/dist/beta/components/Table/formatters/index.d.ts +3 -0
- package/dist/beta/components/Table/formatters/percentFormatter.d.ts +22 -0
- package/dist/beta/components/Table/index.d.ts +3 -0
- package/dist/beta/components/Table/internal/ResizeHandle.d.ts +14 -0
- package/dist/beta/components/Table/internal/TruncateChips.d.ts +30 -0
- package/dist/beta/components/Table/internal/focus-management/types.d.ts +34 -0
- package/dist/beta/components/Table/internal/focus-management/useColumnOrder.d.ts +10 -0
- package/dist/beta/components/Table/internal/focus-management/useFocusManagement.d.ts +27 -0
- package/dist/beta/components/Table/internal/focus-management/useHandleKeyDown.d.ts +36 -0
- package/dist/beta/components/Table/internal/focus-management/useScrollIntoView.d.ts +9 -0
- package/dist/beta/components/Table/internal/getColSpanWidth.d.ts +7 -0
- package/dist/beta/components/Table/internal/getCommonPinningClasses.d.ts +5 -0
- package/dist/beta/components/Table/internal/getCommonPinningStyles.d.ts +6 -0
- package/dist/beta/components/Table/internal/getTanStackColumnDef.d.ts +24 -0
- package/dist/beta/components/Table/types.d.ts +97 -0
- package/dist/beta/components/index.d.ts +1 -0
- package/dist/beta.js +3 -2
- package/dist/beta.js.map +1 -1
- package/dist/index.js +34 -34
- package/dist/token/core/raw.js +78 -73
- package/dist/token/core/semantic-variables.scss +92 -86
- package/dist/token/core/semantic.js +80 -59
- package/dist/token/core/semantic.scss +46 -43
- package/dist/token.js +126 -102
- package/dist/token.js.map +1 -1
- package/dist/{utils-CskVBG_X.js → utils-CEgTTa9_.js} +2 -2
- package/dist/{utils-CskVBG_X.js.map → utils-CEgTTa9_.js.map} +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioGroup-B7O06pVu.js","sources":["../../hammer-icon/mdi/two-tone/radio_button_unchecked.svg","../../hammer-icon/mdi/two-tone/radio_button_checked.svg","../src/components/Radio/internal/Radio.tsx","../src/components/Radio/RadioGroup.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgRadioButtonUnchecked = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }));\nexport default SvgRadioButtonUnchecked;\n","import * as React from \"react\";\nconst SvgRadioButtonChecked = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }), /* @__PURE__ */ React.createElement(\"circle\", { cx: 12, cy: 12, r: 5 }));\nexport default SvgRadioButtonChecked;\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n ChangeEvent,\n ReactElement,\n useId,\n} from \"react\";\nimport cx from \"classnames\";\nimport { Icon } from \"../../Icon\";\nimport Radio_outline from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_unchecked.svg\";\nimport Radio_checked from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_checked.svg\";\nimport styles from \"../Radio.module.scss\";\nimport { LayoutUtilProps, Svg } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport { Helper, HelperProps } from \"../../../internal/components\";\nimport { RadioState } from \"../types\";\n\n/**\n * Props for the Radio component\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\">\n * @extends LayoutUtilProps\n */\nexport type RadioProps = Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\"> &\n LayoutUtilProps & {\n /**\n * Controlled state\n * @default false\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state\n * @default false\n */\n defaultChecked?: boolean;\n\n /**\n * Callback when radio is changed\n */\n onChange?: (e?: ChangeEvent<HTMLInputElement>, state?: RadioState) => void;\n\n /**\n * Label for Radio\n * @remarks This should either be a string or have text content inside for accessibility\n */\n label?: ReactElement | string;\n\n /**\n * Error state for the radio\n * @default false\n */\n error?: boolean;\n\n /**\n * Icon overrides for checked and unchecked states\n */\n icons?: {\n /**\n * Icon to display when radio is checked\n */\n checked?: Svg;\n /**\n * Icon to display when radio is unchecked\n */\n unchecked?: Svg;\n };\n\n /**\n * Description text to display below the radio\n */\n description?: HelperProps[\"description\"];\n\n /**\n * When true, hides the radio for visual users\n * @default false\n */\n hideRadio?: boolean;\n };\n\nconst RadioElement = forwardRef<HTMLInputElement, RadioProps>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n checked,\n defaultChecked,\n value,\n icons,\n error,\n label,\n onChange,\n style,\n description,\n hideRadio = false,\n ...rest\n } = componentProps;\n const {\n checked: checkedIcon = Radio_checked,\n unchecked: uncheckedIcon = Radio_outline,\n } = { ...icons };\n\n const onChangeHandler = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e, { value, checked: e.target.checked });\n };\n\n const helperUid = useId();\n\n const wrapperClassNames = cx(\n styles[\"wrapper\"],\n { [styles[\"focus\"]]: hideRadio },\n className,\n );\n\n const radioClassNames = cx(styles[\"radio\"], {\n [styles[\"error\"]]: error,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <div className={wrapperClassNames} style={styleCombined} data-anv=\"radio\">\n <label className={radioClassNames}>\n <input\n type=\"radio\"\n aria-checked={checked ?? defaultChecked}\n checked={checked}\n defaultChecked={defaultChecked}\n value={value}\n onChange={onChangeHandler}\n aria-describedby={helperUid}\n ref={ref}\n {...rest}\n />\n\n <span\n className={cx(styles[\"icon-wrapper\"], {\n [styles[\"sr-only\"]]: hideRadio,\n })}\n >\n <Icon\n size=\"large\"\n svg={uncheckedIcon}\n className={cx([styles[\"icon-unchecked\"]])}\n />\n\n <Icon\n size=\"large\"\n svg={checkedIcon}\n className={cx([styles[\"icon-checked\"]])}\n />\n </span>\n\n <span className={cx({ [styles[\"focus-label\"]]: hideRadio })}>\n {label}\n </span>\n </label>\n\n {description ? (\n <div className={styles[\"helper-wrapper\"]}>\n <Helper id={helperUid} description={description} />\n </div>\n ) : null}\n </div>\n );\n});\n\nRadioElement.displayName = \"RadioElement\";\n\n/**\n * Radio component for single selection from a group of options.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Customizable icons for checked and unchecked states\n * - Error state with visual indicators\n * - Description text support\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Optional radio hiding for visual users\n * - Flexible labeling options\n * - Group support via Radio.Group\n *\n * @example\n * <Radio\n * label=\"Option 1\"\n * value=\"option1\"\n * checked={selectedValue === \"option1\"}\n * onChange={(e, state) => setSelectedValue(state?.value)}\n * />\n *\n * @example\n * <Radio\n * label=\"Custom styled option\"\n * value=\"custom\"\n * icons={{\n * checked: CustomCheckedIcon,\n * unchecked: CustomUncheckedIcon\n * }}\n * description=\"This option has custom styling\"\n * />\n *\n * @example\n * <Radio.Group legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </Radio.Group>\n */\nexport const Radio = RadioElement;\n","import {\n ComponentPropsWithoutRef,\n FocusEventHandler,\n forwardRef,\n ReactElement,\n useState,\n} from \"react\";\nimport styles from \"./Radio.module.scss\";\nimport cx from \"classnames\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { SrOnly } from \"../SrOnly\";\nimport { FieldLabel } from \"../FieldLabel\";\nimport { FieldLabelProps } from \"../../internal/types\";\n\n/**\n * Props for the RadioGroup component\n * @extends ComponentPropsWithoutRef<\"fieldset\">\n * @extends LayoutUtilProps\n * @extends Omit<FieldLabelProps, \"labelProps\">\n */\nexport type RadioGroupProps = ComponentPropsWithoutRef<\"fieldset\"> &\n LayoutUtilProps &\n Omit<FieldLabelProps, \"labelProps\"> & {\n /**\n * Required flag for label\n * @remarks This does not enforce error when nothing is selected\n */\n required?: boolean;\n\n /**\n * Legend for the fieldset\n */\n legend?: string | ReactElement;\n };\n\n/**\n * RadioGroup component for grouping related radio options.\n *\n * Features:\n * - Groups multiple radio options together\n * - Legend support for group labeling\n * - Required field indication\n * - Accessibility support with proper fieldset semantics\n * - Layout utility props for positioning and spacing\n * - Focus and blur event handling\n * - More info support for additional context\n * - Automatic alignment based on flex direction\n *\n * @example\n * <RadioGroup legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </RadioGroup>\n *\n * @example\n * <RadioGroup\n * legend=\"Horizontal layout\"\n * flexDirection=\"row\"\n * gap=\"4\"\n * >\n * <Radio label=\"Yes\" value=\"yes\" />\n * <Radio label=\"No\" value=\"no\" />\n * </RadioGroup>\n */\nexport const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n children,\n legend,\n moreInfo,\n onBlur,\n onFocus,\n required,\n style,\n ...rest\n } = componentProps;\n\n const RadioGroupClassNames = cx(styles[\"radio-group\"], className);\n const [openInfo, setOpenInfo] = useState<boolean>(false);\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n alignItems:\n layoutStyles?.alignItems ??\n (layoutStyles?.flexDirection === \"row\" ? \"center\" : undefined),\n };\n\n const focusHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onFocus?.(e);\n setOpenInfo(true);\n };\n\n const blurHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onBlur?.(e);\n setOpenInfo(false);\n };\n\n return (\n <fieldset\n role=\"radiogroup\"\n data-anv=\"radio-group\"\n className={RadioGroupClassNames}\n aria-required={required}\n style={styleCombined}\n ref={ref}\n onFocus={focusHandler}\n onBlur={blurHandler}\n {...rest}\n >\n <legend className={styles[\"legend\"]}>\n {legend}\n {required && \", required\"}\n {moreInfo && <SrOnly>{moreInfo}</SrOnly>}\n </legend>\n <FieldLabel\n aria-hidden\n moreInfo={moreInfo}\n required={required}\n openMoreInfo={openInfo}\n >\n {legend}\n </FieldLabel>\n <div\n className={styles[\"children\"]}\n style={{\n flexDirection: layoutStyles?.flexDirection,\n gap: layoutStyles?.gap,\n }}\n >\n {children}\n </div>\n </fieldset>\n );\n },\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n"],"names":["Radio_checked","Radio_outline"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RadioGroup-CcRLdoAl.js","sources":["../../hammer-icon/mdi/two-tone/radio_button_unchecked.svg","../../hammer-icon/mdi/two-tone/radio_button_checked.svg","../src/components/Radio/internal/Radio.tsx","../src/components/Radio/RadioGroup.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgRadioButtonUnchecked = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }));\nexport default SvgRadioButtonUnchecked;\n","import * as React from \"react\";\nconst SvgRadioButtonChecked = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }), /* @__PURE__ */ React.createElement(\"circle\", { cx: 12, cy: 12, r: 5 }));\nexport default SvgRadioButtonChecked;\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n ChangeEvent,\n ReactElement,\n useId,\n} from \"react\";\nimport cx from \"classnames\";\nimport { Icon } from \"../../Icon\";\nimport Radio_outline from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_unchecked.svg\";\nimport Radio_checked from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_checked.svg\";\nimport styles from \"../Radio.module.scss\";\nimport { LayoutUtilProps, Svg } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport { Helper, HelperProps } from \"../../../internal/components\";\nimport { RadioState } from \"../types\";\n\n/**\n * Props for the Radio component\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\">\n * @extends LayoutUtilProps\n */\nexport type RadioProps = Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\"> &\n LayoutUtilProps & {\n /**\n * Controlled state\n * @default false\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state\n * @default false\n */\n defaultChecked?: boolean;\n\n /**\n * Callback when radio is changed\n */\n onChange?: (e?: ChangeEvent<HTMLInputElement>, state?: RadioState) => void;\n\n /**\n * Label for Radio\n * @remarks This should either be a string or have text content inside for accessibility\n */\n label?: ReactElement | string;\n\n /**\n * Error state for the radio\n * @default false\n */\n error?: boolean;\n\n /**\n * Icon overrides for checked and unchecked states\n */\n icons?: {\n /**\n * Icon to display when radio is checked\n */\n checked?: Svg;\n /**\n * Icon to display when radio is unchecked\n */\n unchecked?: Svg;\n };\n\n /**\n * Description text to display below the radio\n */\n description?: HelperProps[\"description\"];\n\n /**\n * When true, hides the radio for visual users\n * @default false\n */\n hideRadio?: boolean;\n };\n\nconst RadioElement = forwardRef<HTMLInputElement, RadioProps>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n checked,\n defaultChecked,\n value,\n icons,\n error,\n label,\n onChange,\n style,\n description,\n hideRadio = false,\n ...rest\n } = componentProps;\n const {\n checked: checkedIcon = Radio_checked,\n unchecked: uncheckedIcon = Radio_outline,\n } = { ...icons };\n\n const onChangeHandler = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e, { value, checked: e.target.checked });\n };\n\n const helperUid = useId();\n\n const wrapperClassNames = cx(\n styles[\"wrapper\"],\n { [styles[\"focus\"]]: hideRadio },\n className,\n );\n\n const radioClassNames = cx(styles[\"radio\"], {\n [styles[\"error\"]]: error,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <div className={wrapperClassNames} style={styleCombined} data-anv=\"radio\">\n <label className={radioClassNames}>\n <input\n type=\"radio\"\n aria-checked={checked ?? defaultChecked}\n checked={checked}\n defaultChecked={defaultChecked}\n value={value}\n onChange={onChangeHandler}\n aria-describedby={helperUid}\n ref={ref}\n {...rest}\n />\n\n <span\n className={cx(styles[\"icon-wrapper\"], {\n [styles[\"sr-only\"]]: hideRadio,\n })}\n >\n <Icon\n size=\"large\"\n svg={uncheckedIcon}\n className={cx([styles[\"icon-unchecked\"]])}\n />\n\n <Icon\n size=\"large\"\n svg={checkedIcon}\n className={cx([styles[\"icon-checked\"]])}\n />\n </span>\n\n <span className={cx({ [styles[\"focus-label\"]]: hideRadio })}>\n {label}\n </span>\n </label>\n\n {description ? (\n <div className={styles[\"helper-wrapper\"]}>\n <Helper id={helperUid} description={description} />\n </div>\n ) : null}\n </div>\n );\n});\n\nRadioElement.displayName = \"RadioElement\";\n\n/**\n * Radio component for single selection from a group of options.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Customizable icons for checked and unchecked states\n * - Error state with visual indicators\n * - Description text support\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Optional radio hiding for visual users\n * - Flexible labeling options\n * - Group support via Radio.Group\n *\n * @example\n * <Radio\n * label=\"Option 1\"\n * value=\"option1\"\n * checked={selectedValue === \"option1\"}\n * onChange={(e, state) => setSelectedValue(state?.value)}\n * />\n *\n * @example\n * <Radio\n * label=\"Custom styled option\"\n * value=\"custom\"\n * icons={{\n * checked: CustomCheckedIcon,\n * unchecked: CustomUncheckedIcon\n * }}\n * description=\"This option has custom styling\"\n * />\n *\n * @example\n * <Radio.Group legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </Radio.Group>\n */\nexport const Radio = RadioElement;\n","import {\n ComponentPropsWithoutRef,\n FocusEventHandler,\n forwardRef,\n ReactElement,\n useState,\n} from \"react\";\nimport styles from \"./Radio.module.scss\";\nimport cx from \"classnames\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { SrOnly } from \"../SrOnly\";\nimport { FieldLabel } from \"../FieldLabel\";\nimport { FieldLabelProps } from \"../../internal/types\";\n\n/**\n * Props for the RadioGroup component\n * @extends ComponentPropsWithoutRef<\"fieldset\">\n * @extends LayoutUtilProps\n * @extends Omit<FieldLabelProps, \"labelProps\">\n */\nexport type RadioGroupProps = ComponentPropsWithoutRef<\"fieldset\"> &\n LayoutUtilProps &\n Omit<FieldLabelProps, \"labelProps\"> & {\n /**\n * Required flag for label\n * @remarks This does not enforce error when nothing is selected\n */\n required?: boolean;\n\n /**\n * Legend for the fieldset\n */\n legend?: string | ReactElement;\n };\n\n/**\n * RadioGroup component for grouping related radio options.\n *\n * Features:\n * - Groups multiple radio options together\n * - Legend support for group labeling\n * - Required field indication\n * - Accessibility support with proper fieldset semantics\n * - Layout utility props for positioning and spacing\n * - Focus and blur event handling\n * - More info support for additional context\n * - Automatic alignment based on flex direction\n *\n * @example\n * <RadioGroup legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </RadioGroup>\n *\n * @example\n * <RadioGroup\n * legend=\"Horizontal layout\"\n * flexDirection=\"row\"\n * gap=\"4\"\n * >\n * <Radio label=\"Yes\" value=\"yes\" />\n * <Radio label=\"No\" value=\"no\" />\n * </RadioGroup>\n */\nexport const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n children,\n legend,\n moreInfo,\n onBlur,\n onFocus,\n required,\n style,\n ...rest\n } = componentProps;\n\n const RadioGroupClassNames = cx(styles[\"radio-group\"], className);\n const [openInfo, setOpenInfo] = useState<boolean>(false);\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n alignItems:\n layoutStyles?.alignItems ??\n (layoutStyles?.flexDirection === \"row\" ? \"center\" : undefined),\n };\n\n const focusHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onFocus?.(e);\n setOpenInfo(true);\n };\n\n const blurHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onBlur?.(e);\n setOpenInfo(false);\n };\n\n return (\n <fieldset\n role=\"radiogroup\"\n data-anv=\"radio-group\"\n className={RadioGroupClassNames}\n aria-required={required}\n style={styleCombined}\n ref={ref}\n onFocus={focusHandler}\n onBlur={blurHandler}\n {...rest}\n >\n <legend className={styles[\"legend\"]}>\n {legend}\n {required && \", required\"}\n {moreInfo && <SrOnly>{moreInfo}</SrOnly>}\n </legend>\n <FieldLabel\n aria-hidden\n moreInfo={moreInfo}\n required={required}\n openMoreInfo={openInfo}\n >\n {legend}\n </FieldLabel>\n <div\n className={styles[\"children\"]}\n style={{\n flexDirection: layoutStyles?.flexDirection,\n gap: layoutStyles?.gap,\n }}\n >\n {children}\n </div>\n </fieldset>\n );\n },\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n"],"names":["Radio_checked","Radio_outline"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useContext, createContext, useState, useId, forwardRef, useLayoutEffect } from 'react';
|
|
3
3
|
import { c as cx } from './index-tZvMCc77.js';
|
|
4
|
-
import { C as CheckboxGroup, a as Checkbox } from './Checkbox-
|
|
5
|
-
import { R as RadioGroup, a as Radio } from './RadioGroup-
|
|
4
|
+
import { C as CheckboxGroup, a as Checkbox } from './Checkbox-Dv01A09v.js';
|
|
5
|
+
import { R as RadioGroup, a as Radio } from './RadioGroup-CcRLdoAl.js';
|
|
6
6
|
import { C as Card } from './Card-vTYeSkxt.js';
|
|
7
7
|
import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
|
|
8
8
|
|
|
@@ -221,4 +221,4 @@ const SelectCard = Object.assign(SelectCardElement, {
|
|
|
221
221
|
});
|
|
222
222
|
|
|
223
223
|
export { SelectCard as S, SelectCardElement as a, SelectCardGroup as b };
|
|
224
|
-
//# sourceMappingURL=SelectCard-
|
|
224
|
+
//# sourceMappingURL=SelectCard-dEhb5KAL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectCard-Ca07K1FW.js","sources":["../src/components/SelectCard/internal/SelectCardProvider.tsx","../src/components/SelectCard/SelectCardGroup.tsx","../src/components/SelectCard/SelectCard.tsx"],"sourcesContent":["import {\n ChangeEvent,\n ReactNode,\n createContext,\n useContext,\n useId,\n useState,\n} from \"react\";\n\n/**\n * Interface for the select card state\n */\ninterface ISelectCardState {\n /**\n * When `true`, adds the item to the selected state holder.\n */\n checked: boolean;\n\n /**\n * Gives an explicit id to each item in the set.\n */\n id?: string | number;\n}\n\n/**\n * Interface for the select card onChange options\n */\ninterface ISelectCardOnChangeOptions {\n /**\n * When `true`, doesn't fire the user's `onChange`\n */\n internal?: boolean;\n}\n\n/**\n * Interface for the select card context\n */\nexport interface ISelectCardContext {\n /**\n * Callback function that is triggered when the selection state changes.\n *\n * @callback OnChangeCallback\n * @param {ChangeEvent<HTMLInputElement>} [e] - The native HTML input change event.\n * @param {ISelectCardState} [state] - The current state of the select card component after the change.\n * @returns {void}\n */\n onChange: (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => void;\n\n /**\n * Sets how many cards the user can select, either 'single' (radio buttons) or 'multiple' (checkboxes)\n */\n selectionMode: \"single\" | \"multiple\";\n\n /**\n * Used internally to create a UUID for the HTML `name` property on radios.\n */\n radioName: string;\n\n /**\n * Creates a set of ids that are selected.\n */\n selection: Set<string | number>;\n}\n\n/**\n * Props for the SelectCardProvider component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\ninterface ISelectCardProviderProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n children: ReactNode;\n}\n\nconst SelectCardContext = createContext<ISelectCardContext | null>(null);\n\n/**\n * SelectCardProvider component for managing selection state across SelectCard components.\n *\n * Features:\n * - Provides context for SelectCard components to share selection state\n * - Manages selection mode (single vs multiple)\n * - Handles selection state updates and callbacks\n * - Generates unique radio button names for single selection mode\n * - Maintains a set of selected card IDs\n * - Integrates with SelectCardGroup for automatic context provision\n *\n * @example\n * <SelectCardProvider\n * selectionMode=\"multiple\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"1\" onChange={() => {}}>Option 1</SelectCard>\n * <SelectCard id=\"2\" onChange={() => {}}>Option 2</SelectCard>\n * </SelectCardProvider>\n */\nexport const SelectCardProvider = ({\n children,\n onChange,\n selectionMode,\n}: ISelectCardProviderProps) => {\n const [selection, setSelection] = useState<Set<string | number>>(new Set());\n\n const radioName = useId();\n\n const handleChange = (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => {\n if (!state || !state.id) {\n if (!options?.internal) {\n onChange(e, state);\n }\n\n return;\n }\n\n // Set internal selection\n if (selectionMode === \"single\") {\n if (state.checked) {\n setSelection(new Set([state.id]));\n } else {\n setSelection(new Set());\n }\n } else {\n if (state.checked) {\n setSelection(selection.add(state.id));\n } else {\n selection.delete(state.id);\n setSelection(selection);\n }\n }\n\n if (!options?.internal) {\n onChange(e, state);\n }\n };\n\n const context = {\n selectionMode,\n onChange: handleChange,\n radioName,\n selection,\n };\n\n return (\n <SelectCardContext.Provider value={context}>\n {children}\n </SelectCardContext.Provider>\n );\n};\n\n/**\n * Custom hook for accessing the SelectCard context.\n * @returns The SelectCard context or null if not within a SelectCardProvider\n */\nexport const useSelectCardContext = () => useContext(SelectCardContext);\n","import { forwardRef, ReactNode } from \"react\";\nimport { CheckboxGroup, CheckboxGroupProps } from \"../Checkbox/CheckboxGroup\";\nimport { RadioGroup } from \"../Radio\";\nimport {\n ISelectCardContext,\n SelectCardProvider,\n} from \"./internal/SelectCardProvider\";\n\n/**\n * Props for the SelectCardGroup component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\nexport interface SelectCardGroupProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n /**\n * Associates the legend with content below.\n */\n ariaLabelledBy?: string;\n\n children?: ReactNode;\n\n /**\n * Sets the legend on the group.\n */\n legend: CheckboxGroupProps[\"legend\"];\n\n /**\n * When `true`, sets \"required\" text in label.\n * @accessibility This does not enforce error when nothing is selected.\n * @default false\n */\n required?: boolean;\n}\n\n/**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n * - Integrates with CheckboxGroup and RadioGroup for proper form semantics\n *\n * @example\n * <SelectCardGroup\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCardGroup>\n */\nexport const SelectCardGroup = forwardRef<\n HTMLInputElement,\n SelectCardGroupProps\n>((props, _ref) => {\n const {\n ariaLabelledBy,\n children,\n legend,\n onChange,\n required = false,\n selectionMode,\n ...rest\n } = props;\n\n return (\n <SelectCardProvider onChange={onChange} selectionMode={selectionMode}>\n {selectionMode === \"multiple\" && (\n <CheckboxGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n required={required}\n {...rest}\n >\n {children}\n </CheckboxGroup>\n )}\n {selectionMode === \"single\" && (\n <RadioGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n required={required}\n {...rest}\n >\n {children}\n </RadioGroup>\n )}\n </SelectCardProvider>\n );\n});\n\nSelectCardGroup.displayName = \"SelectCardGroup\";\n","import { useLayoutEffect, useState, forwardRef, type ChangeEvent } from \"react\";\nimport cx from \"classnames\";\n\nimport { SelectCardGroup } from \"./SelectCardGroup\";\nimport { Card, CardProps } from \"../Card\";\nimport { Radio, RadioProps } from \"../Radio/internal/Radio\";\nimport { Checkbox, CheckboxProps } from \"../Checkbox/internal/Checkbox\";\n\nimport { useSelectCardContext } from \"./internal/SelectCardProvider\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\n\nimport styles from \"./SelectCard.module.scss\";\n\n/**\n * Props for the SelectCard component\n * @extends Omit<CardProps, \"onChange\" | \"id\">\n */\nexport interface SelectCardProps extends Omit<CardProps, \"onChange\" | \"id\"> {\n /**\n * Passes props to the underlying `<Checkbox />` component.\n */\n checkboxProps?: Omit<CheckboxProps, \"label\">;\n\n /**\n * Controlled state. When provided, the component becomes controlled.\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state.\n */\n defaultChecked?: boolean;\n\n /**\n * When `true`, disables the card.\n */\n disabled?: boolean;\n\n /**\n * When `true`, sets error styling on the card.\n */\n errored?: boolean;\n\n /**\n * A unique identifier for the card, used to track the selection state.\n */\n id: string | number;\n\n /**\n * Function called on selection state change.\n */\n onChange: (value: boolean) => void;\n\n /**\n * Passes props to the underlying `<Radio />` component.\n */\n radioProps?: Omit<RadioProps, \"label\">;\n\n /**\n * Removes the drop shadow effect on the card.\n */\n removeDropShadow?: boolean;\n}\n\nexport const SelectCardElement = forwardRef<HTMLInputElement, SelectCardProps>(\n (props, ref) => {\n const {\n checkboxProps,\n children,\n checked: checkedProp,\n className,\n defaultChecked: defaultCheckedProp,\n disabled,\n errored,\n radioProps,\n onChange,\n removeDropShadow,\n id,\n ...rest\n } = props;\n\n const [checked, setChecked] = useOptionallyControlledState<boolean>({\n controlledValue: checkedProp,\n defaultValue: defaultCheckedProp || false,\n onChange,\n });\n\n const context = useSelectCardContext();\n\n // we need to re-render after setting the initial selection state on context\n const [_, setForceRenderCount] = useState(0);\n useLayoutEffect(() => {\n if (defaultCheckedProp) {\n context?.onChange(\n undefined,\n {\n id,\n checked: defaultCheckedProp,\n },\n { internal: true },\n );\n\n setForceRenderCount((prev) => prev + 1);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleChange = (event?: ChangeEvent<HTMLInputElement>) => {\n const newChecked = event ? event.target.checked : false;\n setChecked(newChecked);\n context?.onChange(event, {\n id,\n checked: newChecked,\n });\n };\n\n // A selection in the group context supersedes the normal checked state of the card\n const isChecked = context ? context.selection.has(id) : checked;\n\n return (\n <>\n {(!context || context?.selectionMode === \"multiple\") && (\n <Checkbox\n {...checkboxProps}\n defaultChecked={defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n label={\n <Card\n {...rest}\n className={cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n })}\n >\n {children}\n </Card>\n }\n hideCheckbox\n />\n )}\n {context?.selectionMode === \"single\" && (\n <Radio\n {...radioProps}\n defaultChecked={defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n name={context.radioName}\n label={\n <Card\n {...rest}\n className={cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n })}\n >\n {children}\n </Card>\n }\n hideRadio\n />\n )}\n </>\n );\n },\n);\n\nSelectCardElement.displayName = \"SelectCard\";\n\n/**\n * SelectCard component for creating interactive card-based selection interfaces.\n *\n * Features:\n * - Supports both single selection (radio) and multiple selection (checkbox) modes\n * - Automatic context detection for selection behavior\n * - Visual feedback for selected, disabled, and error states\n * - Accessible with proper ARIA roles and keyboard navigation\n * - Customizable styling through Card component props\n * - Hover and focus states with smooth transitions\n * - Integration with SelectCardGroup for grouped selection\n *\n * @example\n * <SelectCard\n * id=\"option-1\"\n * onChange={(checked) => console.log('Selected:', checked)}\n * >\n * <Text variant=\"headline\" size=\"small\">Option 1</Text>\n * <Text>Description of option 1</Text>\n * </SelectCard>\n */\nexport const SelectCard = Object.assign(SelectCardElement, {\n /**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n *\n * @example\n * <SelectCard.Group\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCard.Group>\n */\n Group: SelectCardGroup,\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectCard-dEhb5KAL.js","sources":["../src/components/SelectCard/internal/SelectCardProvider.tsx","../src/components/SelectCard/SelectCardGroup.tsx","../src/components/SelectCard/SelectCard.tsx"],"sourcesContent":["import {\n ChangeEvent,\n ReactNode,\n createContext,\n useContext,\n useId,\n useState,\n} from \"react\";\n\n/**\n * Interface for the select card state\n */\ninterface ISelectCardState {\n /**\n * When `true`, adds the item to the selected state holder.\n */\n checked: boolean;\n\n /**\n * Gives an explicit id to each item in the set.\n */\n id?: string | number;\n}\n\n/**\n * Interface for the select card onChange options\n */\ninterface ISelectCardOnChangeOptions {\n /**\n * When `true`, doesn't fire the user's `onChange`\n */\n internal?: boolean;\n}\n\n/**\n * Interface for the select card context\n */\nexport interface ISelectCardContext {\n /**\n * Callback function that is triggered when the selection state changes.\n *\n * @callback OnChangeCallback\n * @param {ChangeEvent<HTMLInputElement>} [e] - The native HTML input change event.\n * @param {ISelectCardState} [state] - The current state of the select card component after the change.\n * @returns {void}\n */\n onChange: (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => void;\n\n /**\n * Sets how many cards the user can select, either 'single' (radio buttons) or 'multiple' (checkboxes)\n */\n selectionMode: \"single\" | \"multiple\";\n\n /**\n * Used internally to create a UUID for the HTML `name` property on radios.\n */\n radioName: string;\n\n /**\n * Creates a set of ids that are selected.\n */\n selection: Set<string | number>;\n}\n\n/**\n * Props for the SelectCardProvider component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\ninterface ISelectCardProviderProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n children: ReactNode;\n}\n\nconst SelectCardContext = createContext<ISelectCardContext | null>(null);\n\n/**\n * SelectCardProvider component for managing selection state across SelectCard components.\n *\n * Features:\n * - Provides context for SelectCard components to share selection state\n * - Manages selection mode (single vs multiple)\n * - Handles selection state updates and callbacks\n * - Generates unique radio button names for single selection mode\n * - Maintains a set of selected card IDs\n * - Integrates with SelectCardGroup for automatic context provision\n *\n * @example\n * <SelectCardProvider\n * selectionMode=\"multiple\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"1\" onChange={() => {}}>Option 1</SelectCard>\n * <SelectCard id=\"2\" onChange={() => {}}>Option 2</SelectCard>\n * </SelectCardProvider>\n */\nexport const SelectCardProvider = ({\n children,\n onChange,\n selectionMode,\n}: ISelectCardProviderProps) => {\n const [selection, setSelection] = useState<Set<string | number>>(new Set());\n\n const radioName = useId();\n\n const handleChange = (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => {\n if (!state || !state.id) {\n if (!options?.internal) {\n onChange(e, state);\n }\n\n return;\n }\n\n // Set internal selection\n if (selectionMode === \"single\") {\n if (state.checked) {\n setSelection(new Set([state.id]));\n } else {\n setSelection(new Set());\n }\n } else {\n if (state.checked) {\n setSelection(selection.add(state.id));\n } else {\n selection.delete(state.id);\n setSelection(selection);\n }\n }\n\n if (!options?.internal) {\n onChange(e, state);\n }\n };\n\n const context = {\n selectionMode,\n onChange: handleChange,\n radioName,\n selection,\n };\n\n return (\n <SelectCardContext.Provider value={context}>\n {children}\n </SelectCardContext.Provider>\n );\n};\n\n/**\n * Custom hook for accessing the SelectCard context.\n * @returns The SelectCard context or null if not within a SelectCardProvider\n */\nexport const useSelectCardContext = () => useContext(SelectCardContext);\n","import { forwardRef, ReactNode } from \"react\";\nimport { CheckboxGroup, CheckboxGroupProps } from \"../Checkbox/CheckboxGroup\";\nimport { RadioGroup } from \"../Radio\";\nimport {\n ISelectCardContext,\n SelectCardProvider,\n} from \"./internal/SelectCardProvider\";\n\n/**\n * Props for the SelectCardGroup component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\nexport interface SelectCardGroupProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n /**\n * Associates the legend with content below.\n */\n ariaLabelledBy?: string;\n\n children?: ReactNode;\n\n /**\n * Sets the legend on the group.\n */\n legend: CheckboxGroupProps[\"legend\"];\n\n /**\n * When `true`, sets \"required\" text in label.\n * @accessibility This does not enforce error when nothing is selected.\n * @default false\n */\n required?: boolean;\n}\n\n/**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n * - Integrates with CheckboxGroup and RadioGroup for proper form semantics\n *\n * @example\n * <SelectCardGroup\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCardGroup>\n */\nexport const SelectCardGroup = forwardRef<\n HTMLInputElement,\n SelectCardGroupProps\n>((props, _ref) => {\n const {\n ariaLabelledBy,\n children,\n legend,\n onChange,\n required = false,\n selectionMode,\n ...rest\n } = props;\n\n return (\n <SelectCardProvider onChange={onChange} selectionMode={selectionMode}>\n {selectionMode === \"multiple\" && (\n <CheckboxGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n required={required}\n {...rest}\n >\n {children}\n </CheckboxGroup>\n )}\n {selectionMode === \"single\" && (\n <RadioGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n required={required}\n {...rest}\n >\n {children}\n </RadioGroup>\n )}\n </SelectCardProvider>\n );\n});\n\nSelectCardGroup.displayName = \"SelectCardGroup\";\n","import { useLayoutEffect, useState, forwardRef, type ChangeEvent } from \"react\";\nimport cx from \"classnames\";\n\nimport { SelectCardGroup } from \"./SelectCardGroup\";\nimport { Card, CardProps } from \"../Card\";\nimport { Radio, RadioProps } from \"../Radio/internal/Radio\";\nimport { Checkbox, CheckboxProps } from \"../Checkbox/internal/Checkbox\";\n\nimport { useSelectCardContext } from \"./internal/SelectCardProvider\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\n\nimport styles from \"./SelectCard.module.scss\";\n\n/**\n * Props for the SelectCard component\n * @extends Omit<CardProps, \"onChange\" | \"id\">\n */\nexport interface SelectCardProps extends Omit<CardProps, \"onChange\" | \"id\"> {\n /**\n * Passes props to the underlying `<Checkbox />` component.\n */\n checkboxProps?: Omit<CheckboxProps, \"label\">;\n\n /**\n * Controlled state. When provided, the component becomes controlled.\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state.\n */\n defaultChecked?: boolean;\n\n /**\n * When `true`, disables the card.\n */\n disabled?: boolean;\n\n /**\n * When `true`, sets error styling on the card.\n */\n errored?: boolean;\n\n /**\n * A unique identifier for the card, used to track the selection state.\n */\n id: string | number;\n\n /**\n * Function called on selection state change.\n */\n onChange: (value: boolean) => void;\n\n /**\n * Passes props to the underlying `<Radio />` component.\n */\n radioProps?: Omit<RadioProps, \"label\">;\n\n /**\n * Removes the drop shadow effect on the card.\n */\n removeDropShadow?: boolean;\n}\n\nexport const SelectCardElement = forwardRef<HTMLInputElement, SelectCardProps>(\n (props, ref) => {\n const {\n checkboxProps,\n children,\n checked: checkedProp,\n className,\n defaultChecked: defaultCheckedProp,\n disabled,\n errored,\n radioProps,\n onChange,\n removeDropShadow,\n id,\n ...rest\n } = props;\n\n const [checked, setChecked] = useOptionallyControlledState<boolean>({\n controlledValue: checkedProp,\n defaultValue: defaultCheckedProp || false,\n onChange,\n });\n\n const context = useSelectCardContext();\n\n // we need to re-render after setting the initial selection state on context\n const [_, setForceRenderCount] = useState(0);\n useLayoutEffect(() => {\n if (defaultCheckedProp) {\n context?.onChange(\n undefined,\n {\n id,\n checked: defaultCheckedProp,\n },\n { internal: true },\n );\n\n setForceRenderCount((prev) => prev + 1);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleChange = (event?: ChangeEvent<HTMLInputElement>) => {\n const newChecked = event ? event.target.checked : false;\n setChecked(newChecked);\n context?.onChange(event, {\n id,\n checked: newChecked,\n });\n };\n\n // A selection in the group context supersedes the normal checked state of the card\n const isChecked = context ? context.selection.has(id) : checked;\n\n return (\n <>\n {(!context || context?.selectionMode === \"multiple\") && (\n <Checkbox\n {...checkboxProps}\n defaultChecked={defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n label={\n <Card\n {...rest}\n className={cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n })}\n >\n {children}\n </Card>\n }\n hideCheckbox\n />\n )}\n {context?.selectionMode === \"single\" && (\n <Radio\n {...radioProps}\n defaultChecked={defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n name={context.radioName}\n label={\n <Card\n {...rest}\n className={cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n })}\n >\n {children}\n </Card>\n }\n hideRadio\n />\n )}\n </>\n );\n },\n);\n\nSelectCardElement.displayName = \"SelectCard\";\n\n/**\n * SelectCard component for creating interactive card-based selection interfaces.\n *\n * Features:\n * - Supports both single selection (radio) and multiple selection (checkbox) modes\n * - Automatic context detection for selection behavior\n * - Visual feedback for selected, disabled, and error states\n * - Accessible with proper ARIA roles and keyboard navigation\n * - Customizable styling through Card component props\n * - Hover and focus states with smooth transitions\n * - Integration with SelectCardGroup for grouped selection\n *\n * @example\n * <SelectCard\n * id=\"option-1\"\n * onChange={(checked) => console.log('Selected:', checked)}\n * >\n * <Text variant=\"headline\" size=\"small\">Option 1</Text>\n * <Text>Description of option 1</Text>\n * </SelectCard>\n */\nexport const SelectCard = Object.assign(SelectCardElement, {\n /**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n *\n * @example\n * <SelectCard.Group\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCard.Group>\n */\n Group: SelectCardGroup,\n});\n"],"names":[],"mappings":";;;;;;;;AA6EA,MAAM,iBAAA,GAAoB,cAAyC,IAAI,CAAA;AAsBhE,MAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,IAAI,QAAA,iBAA+B,IAAI,KAAK,CAAA;AAE1E,EAAA,MAAM,YAAY,KAAA,EAAM;AAExB,EAAA,MAAM,YAAA,GAAe,CACnB,CAAA,EACA,KAAA,EACA,OAAA,KACG;AACH,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,EAAA,EAAI;AACvB,MAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,QAAA,QAAA,CAAS,GAAG,KAAK,CAAA;AAAA,MACnB;AAEA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,kBAAkB,QAAA,EAAU;AAC9B,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,YAAA,qBAAiB,GAAA,CAAI,CAAC,KAAA,CAAM,EAAE,CAAC,CAAC,CAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,YAAA,iBAAa,IAAI,KAAK,CAAA;AAAA,MACxB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,YAAA,CAAa,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,SAAA,CAAU,MAAA,CAAO,MAAM,EAAE,CAAA;AACzB,QAAA,YAAA,CAAa,SAAS,CAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,MAAA,QAAA,CAAS,GAAG,KAAK,CAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,aAAA;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV,SAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,2BACG,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,KAAA,EAAO,SAChC,QAAA,EACH,CAAA;AAEJ,CAAA;AAMO,MAAM,oBAAA,GAAuB,MAAM,UAAA,CAAW,iBAAiB,CAAA;;ACpG/D,MAAM,eAAA,GAAkB,UAAA,CAG7B,CAAC,KAAA,EAAO,IAAA,KAAS;AACjB,EAAA,MAAM;AAAA,IACJ,cAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,aAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,uBACE,IAAA,CAAC,kBAAA,EAAA,EAAmB,QAAA,EAAoB,aAAA,EACrC,QAAA,EAAA;AAAA,IAAA,aAAA,KAAkB,UAAA,oBACjB,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,iBAAA,EAAiB,cAAA;AAAA,QACjB,MAAA;AAAA,QACA,QAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,IAED,kBAAkB,QAAA,oBACjB,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,iBAAA,EAAiB,cAAA;AAAA,QACjB,MAAA;AAAA,QACA,QAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ,CAAC;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;;;;;;;;;;ACpCvB,MAAM,iBAAA,GAAoB,UAAA;AAAA,EAC/B,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM;AAAA,MACJ,aAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,SAAA;AAAA,MACA,cAAA,EAAgB,kBAAA;AAAA,MAChB,QAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,EAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,KAAA;AAEJ,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,4BAAA,CAAsC;AAAA,MAClE,eAAA,EAAiB,WAAA;AAAA,MACjB,cAAc,kBAAA,IAAsB,KAAA;AAAA,MACpC;AAAA,KACD,CAAA;AAED,IAAA,MAAM,UAAU,oBAAA,EAAqB;AAGrC,IAAA,MAAM,CAAC,CAAA,EAAG,mBAAmB,CAAA,GAAI,SAAS,CAAC,CAAA;AAC3C,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,OAAA,EAAS,QAAA;AAAA,UACP,MAAA;AAAA,UACA;AAAA,YACE,EAAA;AAAA,YACA,OAAA,EAAS;AAAA,WACX;AAAA,UACA,EAAE,UAAU,IAAA;AAAK,SACnB;AAEA,QAAA,mBAAA,CAAoB,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,MACxC;AAAA,IAEF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAA0C;AAC9D,MAAA,MAAM,UAAA,GAAa,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,OAAA,GAAU,KAAA;AAClD,MAAA,UAAA,CAAW,UAAU,CAAA;AACrB,MAAA,OAAA,EAAS,SAAS,KAAA,EAAO;AAAA,QACvB,EAAA;AAAA,QACA,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAGA,IAAA,MAAM,YAAY,OAAA,GAAU,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA,GAAI,OAAA;AAExD,IAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACI,QAAA,EAAA;AAAA,MAAA,CAAA,CAAC,OAAA,IAAW,OAAA,EAAS,aAAA,KAAkB,UAAA,qBACvC,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACE,GAAG,aAAA;AAAA,UACJ,cAAA,EAAgB,kBAAA;AAAA,UAChB,QAAA,EAAU,YAAA;AAAA,UACV,QAAA;AAAA,UACA,GAAA;AAAA,UACA,KAAA,kBACE,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACE,GAAG,IAAA;AAAA,cACJ,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,aAAa,GAAG,SAAA,EAAW;AAAA,gBAC9C,CAAC,MAAA,CAAO,iCAAiC,CAAC,GAAG,gBAAA;AAAA,gBAC7C,CAAC,MAAA,CAAO,uBAAuB,CAAC,GAAG,aAAa,CAAC,OAAA;AAAA,gBACjD,CAAC,MAAA,CAAO,sBAAsB,CAAC,GAAG,OAAA;AAAA,gBAClC,CAAC,MAAA,CAAO,uBAAuB,CAAC,GAAG;AAAA,eACpC,CAAA;AAAA,cAEA;AAAA;AAAA,WACH;AAAA,UAEF,YAAA,EAAY;AAAA;AAAA,OACd;AAAA,MAED,OAAA,EAAS,kBAAkB,QAAA,oBAC1B,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACE,GAAG,UAAA;AAAA,UACJ,cAAA,EAAgB,kBAAA;AAAA,UAChB,QAAA,EAAU,YAAA;AAAA,UACV,QAAA;AAAA,UACA,GAAA;AAAA,UACA,MAAM,OAAA,CAAQ,SAAA;AAAA,UACd,KAAA,kBACE,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACE,GAAG,IAAA;AAAA,cACJ,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,aAAa,GAAG,SAAA,EAAW;AAAA,gBAC9C,CAAC,MAAA,CAAO,iCAAiC,CAAC,GAAG,gBAAA;AAAA,gBAC7C,CAAC,MAAA,CAAO,uBAAuB,CAAC,GAAG,aAAa,CAAC,OAAA;AAAA,gBACjD,CAAC,MAAA,CAAO,sBAAsB,CAAC,GAAG,OAAA;AAAA,gBAClC,CAAC,MAAA,CAAO,uBAAuB,CAAC,GAAG;AAAA,eACpC,CAAA;AAAA,cAEA;AAAA;AAAA,WACH;AAAA,UAEF,SAAA,EAAS;AAAA;AAAA;AACX,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,iBAAA,CAAkB,WAAA,GAAc,YAAA;AAuBzB,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BzD,KAAA,EAAO;AACT,CAAC;;;;"}
|
package/dist/SelectCard.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as SelectCard, a as SelectCardElement, b as SelectCardGroup, S as default } from './SelectCard-
|
|
1
|
+
export { S as SelectCard, a as SelectCardElement, b as SelectCardGroup, S as default } from './SelectCard-dEhb5KAL.js';
|
|
2
2
|
//# sourceMappingURL=SelectCard.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { A as Avatar } from './Avatar-3d5Kv2CF.js';
|
|
3
3
|
import { I as Icon } from './Icon-D8SPKeO4.js';
|
|
4
|
-
import { S as SelectTriggerBase, d as defaultItemToString, a as defaultItemToKey } from './SelectTriggerBase-
|
|
4
|
+
import { S as SelectTriggerBase, d as defaultItemToString, a as defaultItemToKey } from './SelectTriggerBase-I4Qo37zM.js';
|
|
5
5
|
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjD5IMh0.js';
|
|
6
6
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
7
7
|
import { useTrackingId } from './useTrackingId.js';
|
|
@@ -122,4 +122,4 @@ const SelectTrigger = function(props) {
|
|
|
122
122
|
};
|
|
123
123
|
|
|
124
124
|
export { SelectTrigger as S };
|
|
125
|
-
//# sourceMappingURL=SelectTrigger-
|
|
125
|
+
//# sourceMappingURL=SelectTrigger-A96aYNm-.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTrigger-
|
|
1
|
+
{"version":3,"file":"SelectTrigger-A96aYNm-.js","sources":["../src/components/SelectTrigger/SelectTrigger.tsx"],"sourcesContent":["import { Dispatch, SetStateAction } from \"react\";\nimport {\n UseComboboxProps as UseDownshiftComboboxProps,\n UseMultipleSelectionProps as UseDownshiftMultipleSelectionProps,\n} from \"downshift\";\n\nimport { Avatar, AvatarProps } from \"../Avatar\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { DataTrackingId, DistributiveOmit } from \"../../types\";\nimport { FieldLabelProps } from \"../FieldLabel\";\nimport { Icon, IconProps } from \"../Icon\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport {\n SelectTriggerBase,\n SelectTriggerBaseProps,\n} from \"./internal/SelectTriggerBase\";\nimport {\n defaultItemToKey,\n defaultItemToString,\n} from \"../Combobox/internal/ComboboxUtils\";\n\nexport type SelectTriggerProps<Item> = DistributiveOmit<\n SelectTriggerBaseProps<Item>,\n \"prefix\" | \"selectedItem\" | \"selectedItems\" | \"onChange\"\n> &\n Pick<FieldLabelProps, \"required\" | \"moreInfo\" | \"openMoreInfo\"> &\n Pick<UseDownshiftComboboxProps<Item>, \"itemToString\" | \"itemToKey\"> &\n DataTrackingId & {\n prefix?:\n | string\n | { icon: DistributiveOmit<IconProps, \"size\"> }\n | { avatar: DistributiveOmit<AvatarProps, \"size\"> };\n } & (\n | {\n multiple?: never;\n onChange?:\n | Dispatch<SetStateAction<Item | null>>\n | ((arg: Item | null) => void);\n selectedItem: UseDownshiftComboboxProps<Item>[\"selectedItem\"];\n selectedItems?: never;\n }\n | {\n multiple: true;\n onChange?:\n | Dispatch<SetStateAction<Item[] | null>>\n | ((arg: Item[] | null) => void);\n selectedItem?: never;\n selectedItems: UseDownshiftMultipleSelectionProps<Item>[\"selectedItems\"];\n }\n );\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO: look into unknown\nexport const SelectTrigger = function <Item = any>(\n props: SelectTriggerProps<Item>,\n) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n\n const {\n className,\n style,\n label,\n size,\n error,\n hint,\n description,\n required,\n moreInfo,\n openMoreInfo,\n prefix: prefixProp,\n suffix,\n maxRows,\n selectedItemProps = () => ({}),\n id,\n placeholder,\n disabled: isDisabled,\n readOnly: isReadOnly,\n onClick,\n multiple,\n onChange,\n disableClearSelection,\n itemToString: itemToStringProp,\n itemToKey: itemToKeyProp,\n selectedItem = null,\n selectedItems = [],\n ...rest\n } = componentProps;\n\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n const itemToKey = itemToKeyProp ?? defaultItemToKey<Item>;\n\n function removeSelectedItem(item: Item) {\n if (multiple) {\n onChange?.(\n selectedItems.filter(\n (selectedItem: Item) => itemToKey(selectedItem) !== itemToKey(item),\n ),\n );\n } else if (itemToKey(selectedItem) === itemToKey(item)) {\n onChange?.(null);\n }\n }\n\n function reset() {\n if (multiple) {\n onChange?.([]);\n } else {\n onChange?.(null);\n }\n }\n\n const noClearButton = isDisabled || isReadOnly || disableClearSelection;\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const data = {\n label: childrenToString(props.label),\n size: props.size,\n required: props.required,\n moreInfo: props.moreInfo,\n openMoreInfo: props.openMoreInfo,\n description: childrenToString(props.description),\n hint: props.hint,\n labelProps: props.labelProps,\n };\n\n const trackingId = useTrackingId({\n name: \"ComboboxSearchField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const prefix =\n prefixProp == null || typeof prefixProp === \"string\" ? (\n prefixProp\n ) : \"icon\" in prefixProp ? (\n <Icon {...prefixProp.icon} />\n ) : \"avatar\" in prefixProp ? (\n <Avatar\n {...prefixProp.avatar}\n size={props.size === \"small\" ? \"small\" : \"medium\"}\n />\n ) : (\n prefixProp\n );\n\n return (\n <SelectTriggerBase\n data-anv=\"select-trigger\"\n data-tracking-id={trackingId}\n className={className}\n style={styleCombined}\n label={label}\n size={size}\n error={error}\n hint={hint}\n description={description}\n labelProps={{\n required,\n moreInfo,\n openMoreInfo,\n }}\n prefix={prefix}\n suffix={suffix}\n maxRows={maxRows}\n selectedItemProps={selectedItemProps}\n id={id}\n placeholder={placeholder}\n disabled={isDisabled}\n readOnly={isReadOnly}\n itemToString={itemToString}\n removeSelectedItem={removeSelectedItem}\n disableClearSelection={noClearButton}\n selectedItem={selectedItem}\n selectedItems={selectedItems}\n onClearButtonClick={reset}\n inputWrapperProps={{ onClick }}\n inputProps={rest}\n />\n );\n};\n"],"names":["selectedItem"],"mappings":"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"}
|
package/dist/SelectTrigger.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as SelectTrigger, S as default } from './SelectTrigger-
|
|
1
|
+
export { S as SelectTrigger, S as default } from './SelectTrigger-A96aYNm-.js';
|
|
2
2
|
//# sourceMappingURL=SelectTrigger.js.map
|
|
@@ -6,7 +6,7 @@ import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
|
|
|
6
6
|
import { B as Button } from './Button-VNQQgZ45.js';
|
|
7
7
|
import { C as Chip } from './Chip-DLU13qe-.js';
|
|
8
8
|
import { F as Flex } from './Flex-BdQMekvA.js';
|
|
9
|
-
import { F as FieldLabel } from './FieldLabel-
|
|
9
|
+
import { F as FieldLabel } from './FieldLabel-C6XZKglC.js';
|
|
10
10
|
import { H as Helper } from './Helper-BkIDJqgA.js';
|
|
11
11
|
|
|
12
12
|
import './SelectTriggerBase.css';const ADD_NEW = Symbol.for("add-new");
|
|
@@ -313,4 +313,4 @@ const SelectTriggerBase = function({
|
|
|
313
313
|
};
|
|
314
314
|
|
|
315
315
|
export { ADD_NEW as A, SelectTriggerBase as S, defaultItemToKey as a, defaultItemToString as d, isMultiple as i, useDownshiftEnvironment as u };
|
|
316
|
-
//# sourceMappingURL=SelectTriggerBase-
|
|
316
|
+
//# sourceMappingURL=SelectTriggerBase-I4Qo37zM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTriggerBase-C7TLCna1.js","sources":["../src/components/Combobox/internal/ComboboxUtils.ts","../src/components/SelectTrigger/internal/SelectTriggerBase.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport {\n ComboboxMultipleProps,\n ComboboxProps,\n ComboboxSelectProps,\n SelectMultipleProps,\n} from \"../ComboboxTypes\";\n\nexport const ADD_NEW = Symbol.for(\"add-new\");\n\n/**\n * Default function to convert an item to a string representation\n * @template Item - The type of the item\n * @param item - The item to convert to string\n * @returns String representation of the item or empty string if null/undefined\n */\nexport const defaultItemToString = function <Item>(item: Item | null) {\n return item != null ? String(item) : \"\";\n};\n\n/**\n * Default function to generate a unique key for an item\n * @template Item - The type of the item\n * @param item - The item to generate a key for\n * @returns The item itself as the key\n */\nexport const defaultItemToKey = function <Item>(item: Item | null) {\n return item;\n};\n\n/**\n * Hook to handle downshift environment configuration for shadow DOM support\n *\n * Features:\n * - Fixes shadow DOM compatibility issues with downshift\n * - Provides proper document and event listener references\n * - Returns ref for wrapper element and environment configuration\n *\n * @returns Object containing ref and environment configuration\n *\n * @example\n * const { ref, environment } = useDownshiftEnvironment();\n *\n * return (\n * <div ref={ref}>\n * <Combobox environment={environment}>\n * combobox content\n * </Combobox>\n * </div>\n * );\n */\nexport const useDownshiftEnvironment = () => {\n // fix for shadow DOM, see https://gist.github.com/Rendez/1dd55882e9b850dd3990feefc9d6e177\n const wrapperDivRef = useRef<HTMLDivElement | null>(null);\n\n const shadowRoot = wrapperDivRef.current\n ? wrapperDivRef.current.getRootNode()\n : null;\n\n const shadowDocument =\n wrapperDivRef.current && shadowRoot ? shadowRoot.ownerDocument : null;\n\n const environment = shadowDocument\n ? {\n document: shadowDocument,\n addEventListener: shadowDocument.addEventListener.bind(shadowRoot),\n removeEventListener:\n shadowDocument.removeEventListener.bind(shadowRoot),\n Node,\n }\n : undefined;\n\n return { ref: wrapperDivRef, environment };\n};\n\nexport function isMultiple<Item>(\n props: ComboboxProps<Item> | ComboboxSelectProps<Item>,\n): props is ComboboxMultipleProps<Item> | SelectMultipleProps<Item> {\n return Object.hasOwn(props, \"multiple\") && props.multiple === true;\n}\n","import {\n useState,\n useId,\n useRef,\n useLayoutEffect,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n type MutableRefObject,\n type MouseEventHandler,\n ReactNode,\n} from \"react\";\nimport cx from \"classnames\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\n\nimport { Button } from \"../../Button\";\nimport { Chip, ChipProps } from \"../../Chip\";\nimport { Flex } from \"../../Flex\";\nimport { FieldLabel, FieldLabelProps } from \"../../FieldLabel\";\nimport { Helper } from \"../../../internal/components\";\nimport { TextFieldProps } from \"../../TextField\";\n\nimport styles from \"./SelectTriggerBase.module.scss\";\nimport { DistributiveOmit } from \"../../../types\";\nimport { defaultItemToString } from \"../../Combobox/internal/ComboboxUtils\";\n\ntype PartialChipProps = Partial<Omit<ChipProps, \"icon\" | \"avatar\">> &\n (\n | { icon?: ChipProps[\"icon\"]; avatar?: never }\n | { icon?: never; avatar?: ChipProps[\"avatar\"] }\n );\n\nfunction mergeChipProps(\n ...propSets: (PartialChipProps | Partial<ChipProps>)[]\n): ChipProps {\n const merged = propSets.reduce(\n (acc, props) => ({ ...acc, ...props }),\n {} as Record<string, unknown>,\n );\n\n return merged as ChipProps;\n}\n\nexport type SelectTriggerBaseProps<Item = unknown> = DistributiveOmit<\n TextFieldProps,\n \"showCounter\" | \"prefix\"\n> & {\n /**\n * Should be a positive integer.\n */\n maxRows?: number;\n\n /** Allows Combobox/Select to display custom-colored Chips */\n selectedItemProps?: (item: Item, index: number) => PartialChipProps;\n} & {\n itemToString?: (item: Item) => string;\n removeSelectedItem?: (item: Item) => void;\n disableClearSelection?: boolean;\n selectedItem: Item | null;\n selectedItems: Item[];\n\n inputValue?: string;\n referenceRef?: MutableRefObject<HTMLDivElement | null>;\n} & {\n variant?: \"select\" | \"combobox\";\n onClearButtonClick?: MouseEventHandler<HTMLButtonElement>;\n labelProps?: Partial<FieldLabelProps>;\n inputWrapperProps?: ComponentPropsWithoutRef<\"div\">;\n toggleButtonProps?: ComponentPropsWithoutRef<\"button\">;\n chipProps?: (item: Item, index: number) => PartialChipProps;\n inputProps?: ComponentPropsWithoutRef<\"input\" | \"div\">;\n} & {\n prefix?: string | ReactNode;\n};\n\nexport const SelectTriggerBase = function <Item>({\n className,\n label,\n size,\n error,\n hint,\n description,\n prefix,\n suffix,\n maxRows,\n selectedItemProps = (_item: Item, _index: number): PartialChipProps => ({}),\n disabled,\n readOnly,\n /** ======== */\n disableClearSelection,\n itemToString: itemToStringProp,\n selectedItem,\n selectedItems,\n removeSelectedItem,\n inputValue,\n referenceRef,\n /** ======== */\n variant = \"select\",\n onClearButtonClick,\n labelProps,\n inputWrapperProps = {},\n toggleButtonProps = {},\n inputProps = {},\n chipProps = (_item: Item, _index: number): PartialChipProps => ({}),\n placeholder,\n ...rest\n}: SelectTriggerBaseProps<Item>) {\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n\n const ComboboxTriggerClassNames = cx(styles[\"search-field\"], {\n [styles[\"select\"]]: variant === \"select\",\n });\n\n const noClearButton = disabled || readOnly || disableClearSelection;\n\n const ComboboxInputWrapperClassNames = cx(\n styles[\"input-wrapper\"],\n className\n ? {\n [className]: variant === \"select\",\n }\n : {},\n {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: noClearButton,\n },\n );\n\n const ComboboxInputClassNames = cx(\n styles[\"input\"],\n className\n ? {\n [className]: variant === \"combobox\",\n }\n : {},\n {\n [styles[\"error\"]]: error,\n },\n );\n\n const helperUid = \"helper\" + useId();\n const placeholderUid = \"placeholder\" + useId();\n const ariaDescribedBy = `${helperUid} ${placeholderUid}`;\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n\n const rowsRef = useRef<HTMLDivElement>(null);\n const [stillCalculating, setStillCalculating] = useState<boolean>(false);\n const [collapsedChips, setCollapsedChips] = useState<boolean>(false);\n const [visibleChipsCount, setVisibleChipsCount] = useState<number | null>(\n null,\n );\n const [forceRenderCount, setForceRenderCount] = useState<number>(0);\n\n useLayoutEffect(() => {\n // we only need to do this nonsense if maxRows is set\n if (maxRows === undefined) return;\n\n // 1) Render with no chips collapsed, if it's already just one row, we're done\n // 2) If there is a second row, then render again with best guess at how we should collapse\n // 3) If there is still a second row while collapsed, then render again with one less item\n // 4) Keep going until there is only one row, then /actually/ render\n\n // start calculation loop, set intiial values and force re-render\n if (stillCalculating === false) {\n setStillCalculating(true);\n setCollapsedChips(false);\n setVisibleChipsCount(null);\n setForceRenderCount((x) => x + 1);\n\n // otherwise, calculate the number of rows\n } else if (rowsRef?.current?.children) {\n const children = rowsRef?.current?.children;\n\n const rowData = Array.from(children).reduce(\n (acc, child) => {\n const top = child.getBoundingClientRect().top;\n\n if (!acc.length) {\n return [{ count: 1, top }];\n } else if (acc[acc.length - 1].top === top) {\n return [\n ...acc.slice(0, -1),\n { count: acc[acc.length - 1].count + 1, top },\n ];\n } else if (acc[acc.length - 1].top !== top) {\n return [...acc, { count: 1, top }];\n } else {\n return acc;\n }\n },\n [] as { count: number; top: number }[],\n );\n\n // Call it a day if:\n // We don't have a second row OR\n // We're already hiding everything OR\n // There's only one item selected\n if (\n !rowData[maxRows] ||\n visibleChipsCount === 0 ||\n selectedItems.length === 1\n ) {\n setStillCalculating(false);\n } else {\n setCollapsedChips(true);\n\n // otherwise, either guess how many visible chips we have\n if (visibleChipsCount == null) {\n const firstGuess = Math.max(\n rowData.reduce((sum, row) => sum + row.count, -2),\n 0,\n );\n setVisibleChipsCount(firstGuess);\n\n // or decrease our last guess by 1 and try again\n } else {\n setVisibleChipsCount(visibleChipsCount - 1);\n }\n\n setForceRenderCount((x) => x + 1);\n }\n }\n }, [selectedItems.length, maxRows, forceRenderCount]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const selectedItemsDisplayCount =\n collapsedChips && maxRows != null && visibleChipsCount !== null\n ? visibleChipsCount\n : selectedItems.length;\n\n // TODO: Update this to use a TextField component once we can pass props\n // directly to both the label and the text input\n return (\n <div {...rest} className={ComboboxTriggerClassNames} ref={referenceRef}>\n {label ? (\n <FieldLabel\n {...labelProps}\n className={cx(styles[\"label\"], labelProps?.className)}\n >\n {label}\n </FieldLabel>\n ) : null}\n\n <div\n {...inputWrapperProps}\n className={ComboboxInputWrapperClassNames}\n {...(variant === \"select\"\n ? {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": labelProps?.id,\n }\n : {})}\n >\n <div className={styles[\"buttons-wrapper\"]}>\n {(inputValue || selectedItem || selectedItems.length) &&\n !noClearButton ? (\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n icon={Close}\n className={styles[\"close-button\"]}\n onClick={(e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n onClearButtonClick?.(e);\n }}\n tabIndex={-1}\n />\n </div>\n ) : null}\n\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n {...toggleButtonProps}\n {...(variant === \"select\" ? { tabIndex: -1, inert: \"true\" } : {})}\n className={styles[\"toggle-button\"]}\n aria-label=\"toggle menu\"\n icon={Chevron_Right}\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n />\n </div>\n </div>\n\n <div className={styles[\"prefix-wrapper\"]}>\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n </div>\n\n <div className={styles[\"rows-wrapper\"]} ref={rowsRef}>\n {selectedItems.length && removeSelectedItem != null\n ? selectedItems\n .slice(0, selectedItemsDisplayCount)\n .map((item, index) => {\n return (\n <div\n key={`selected-item-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...mergeChipProps(\n chipProps(item, index),\n selectedItemProps(item, index),\n {\n label: itemToString(item),\n onClose:\n disabled || readOnly\n ? undefined\n : (_e) => {\n removeSelectedItem(item);\n },\n className: styles[\"chip\"],\n title: itemToString(item),\n },\n )}\n />\n </div>\n );\n })\n : null}\n\n {collapsedChips && maxRows != null ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${selectedItems.length - selectedItemsDisplayCount}`}\n className={styles[\"chip\"]}\n title={selectedItems\n .slice(selectedItemsDisplayCount)\n .map((item) => itemToString(item))\n .join(\", \")}\n />\n </div>\n ) : null}\n\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n {variant === \"select\" ? (\n <div\n {...inputProps}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n >\n {selectedItems.length ? null : selectedItem ? (\n itemToString(selectedItem)\n ) : (\n <span\n className={styles[\"fake-placeholder\"]}\n id={placeholderUid}\n >\n {placeholder}\n </span>\n )}\n </div>\n ) : (\n <input\n {...inputProps}\n placeholder={placeholder}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n {...(inputProps[\"aria-expanded\"] != null &&\n inputProps[\"aria-controls\"] != null\n ? {\n role: \"combobox\",\n }\n : {})}\n />\n )}\n\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n </div>\n </div>\n\n {hint || errorMessage || description ? (\n <Helper\n id={helperUid}\n errorMessage={errorMessage}\n hint={hint}\n description={description}\n />\n ) : null}\n </div>\n );\n};\n"],"names":["Close","Chevron_Right"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectTriggerBase-I4Qo37zM.js","sources":["../src/components/Combobox/internal/ComboboxUtils.ts","../src/components/SelectTrigger/internal/SelectTriggerBase.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport {\n ComboboxMultipleProps,\n ComboboxProps,\n ComboboxSelectProps,\n SelectMultipleProps,\n} from \"../ComboboxTypes\";\n\nexport const ADD_NEW = Symbol.for(\"add-new\");\n\n/**\n * Default function to convert an item to a string representation\n * @template Item - The type of the item\n * @param item - The item to convert to string\n * @returns String representation of the item or empty string if null/undefined\n */\nexport const defaultItemToString = function <Item>(item: Item | null) {\n return item != null ? String(item) : \"\";\n};\n\n/**\n * Default function to generate a unique key for an item\n * @template Item - The type of the item\n * @param item - The item to generate a key for\n * @returns The item itself as the key\n */\nexport const defaultItemToKey = function <Item>(item: Item | null) {\n return item;\n};\n\n/**\n * Hook to handle downshift environment configuration for shadow DOM support\n *\n * Features:\n * - Fixes shadow DOM compatibility issues with downshift\n * - Provides proper document and event listener references\n * - Returns ref for wrapper element and environment configuration\n *\n * @returns Object containing ref and environment configuration\n *\n * @example\n * const { ref, environment } = useDownshiftEnvironment();\n *\n * return (\n * <div ref={ref}>\n * <Combobox environment={environment}>\n * combobox content\n * </Combobox>\n * </div>\n * );\n */\nexport const useDownshiftEnvironment = () => {\n // fix for shadow DOM, see https://gist.github.com/Rendez/1dd55882e9b850dd3990feefc9d6e177\n const wrapperDivRef = useRef<HTMLDivElement | null>(null);\n\n const shadowRoot = wrapperDivRef.current\n ? wrapperDivRef.current.getRootNode()\n : null;\n\n const shadowDocument =\n wrapperDivRef.current && shadowRoot ? shadowRoot.ownerDocument : null;\n\n const environment = shadowDocument\n ? {\n document: shadowDocument,\n addEventListener: shadowDocument.addEventListener.bind(shadowRoot),\n removeEventListener:\n shadowDocument.removeEventListener.bind(shadowRoot),\n Node,\n }\n : undefined;\n\n return { ref: wrapperDivRef, environment };\n};\n\nexport function isMultiple<Item>(\n props: ComboboxProps<Item> | ComboboxSelectProps<Item>,\n): props is ComboboxMultipleProps<Item> | SelectMultipleProps<Item> {\n return Object.hasOwn(props, \"multiple\") && props.multiple === true;\n}\n","import {\n useState,\n useId,\n useRef,\n useLayoutEffect,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n type MutableRefObject,\n type MouseEventHandler,\n ReactNode,\n} from \"react\";\nimport cx from \"classnames\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\n\nimport { Button } from \"../../Button\";\nimport { Chip, ChipProps } from \"../../Chip\";\nimport { Flex } from \"../../Flex\";\nimport { FieldLabel, FieldLabelProps } from \"../../FieldLabel\";\nimport { Helper } from \"../../../internal/components\";\nimport { TextFieldProps } from \"../../TextField\";\n\nimport styles from \"./SelectTriggerBase.module.scss\";\nimport { DistributiveOmit } from \"../../../types\";\nimport { defaultItemToString } from \"../../Combobox/internal/ComboboxUtils\";\n\ntype PartialChipProps = Partial<Omit<ChipProps, \"icon\" | \"avatar\">> &\n (\n | { icon?: ChipProps[\"icon\"]; avatar?: never }\n | { icon?: never; avatar?: ChipProps[\"avatar\"] }\n );\n\nfunction mergeChipProps(\n ...propSets: (PartialChipProps | Partial<ChipProps>)[]\n): ChipProps {\n const merged = propSets.reduce(\n (acc, props) => ({ ...acc, ...props }),\n {} as Record<string, unknown>,\n );\n\n return merged as ChipProps;\n}\n\nexport type SelectTriggerBaseProps<Item = unknown> = DistributiveOmit<\n TextFieldProps,\n \"showCounter\" | \"prefix\"\n> & {\n /**\n * Should be a positive integer.\n */\n maxRows?: number;\n\n /** Allows Combobox/Select to display custom-colored Chips */\n selectedItemProps?: (item: Item, index: number) => PartialChipProps;\n} & {\n itemToString?: (item: Item) => string;\n removeSelectedItem?: (item: Item) => void;\n disableClearSelection?: boolean;\n selectedItem: Item | null;\n selectedItems: Item[];\n\n inputValue?: string;\n referenceRef?: MutableRefObject<HTMLDivElement | null>;\n} & {\n variant?: \"select\" | \"combobox\";\n onClearButtonClick?: MouseEventHandler<HTMLButtonElement>;\n labelProps?: Partial<FieldLabelProps>;\n inputWrapperProps?: ComponentPropsWithoutRef<\"div\">;\n toggleButtonProps?: ComponentPropsWithoutRef<\"button\">;\n chipProps?: (item: Item, index: number) => PartialChipProps;\n inputProps?: ComponentPropsWithoutRef<\"input\" | \"div\">;\n} & {\n prefix?: string | ReactNode;\n};\n\nexport const SelectTriggerBase = function <Item>({\n className,\n label,\n size,\n error,\n hint,\n description,\n prefix,\n suffix,\n maxRows,\n selectedItemProps = (_item: Item, _index: number): PartialChipProps => ({}),\n disabled,\n readOnly,\n /** ======== */\n disableClearSelection,\n itemToString: itemToStringProp,\n selectedItem,\n selectedItems,\n removeSelectedItem,\n inputValue,\n referenceRef,\n /** ======== */\n variant = \"select\",\n onClearButtonClick,\n labelProps,\n inputWrapperProps = {},\n toggleButtonProps = {},\n inputProps = {},\n chipProps = (_item: Item, _index: number): PartialChipProps => ({}),\n placeholder,\n ...rest\n}: SelectTriggerBaseProps<Item>) {\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n\n const ComboboxTriggerClassNames = cx(styles[\"search-field\"], {\n [styles[\"select\"]]: variant === \"select\",\n });\n\n const noClearButton = disabled || readOnly || disableClearSelection;\n\n const ComboboxInputWrapperClassNames = cx(\n styles[\"input-wrapper\"],\n className\n ? {\n [className]: variant === \"select\",\n }\n : {},\n {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: noClearButton,\n },\n );\n\n const ComboboxInputClassNames = cx(\n styles[\"input\"],\n className\n ? {\n [className]: variant === \"combobox\",\n }\n : {},\n {\n [styles[\"error\"]]: error,\n },\n );\n\n const helperUid = \"helper\" + useId();\n const placeholderUid = \"placeholder\" + useId();\n const ariaDescribedBy = `${helperUid} ${placeholderUid}`;\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n\n const rowsRef = useRef<HTMLDivElement>(null);\n const [stillCalculating, setStillCalculating] = useState<boolean>(false);\n const [collapsedChips, setCollapsedChips] = useState<boolean>(false);\n const [visibleChipsCount, setVisibleChipsCount] = useState<number | null>(\n null,\n );\n const [forceRenderCount, setForceRenderCount] = useState<number>(0);\n\n useLayoutEffect(() => {\n // we only need to do this nonsense if maxRows is set\n if (maxRows === undefined) return;\n\n // 1) Render with no chips collapsed, if it's already just one row, we're done\n // 2) If there is a second row, then render again with best guess at how we should collapse\n // 3) If there is still a second row while collapsed, then render again with one less item\n // 4) Keep going until there is only one row, then /actually/ render\n\n // start calculation loop, set intiial values and force re-render\n if (stillCalculating === false) {\n setStillCalculating(true);\n setCollapsedChips(false);\n setVisibleChipsCount(null);\n setForceRenderCount((x) => x + 1);\n\n // otherwise, calculate the number of rows\n } else if (rowsRef?.current?.children) {\n const children = rowsRef?.current?.children;\n\n const rowData = Array.from(children).reduce(\n (acc, child) => {\n const top = child.getBoundingClientRect().top;\n\n if (!acc.length) {\n return [{ count: 1, top }];\n } else if (acc[acc.length - 1].top === top) {\n return [\n ...acc.slice(0, -1),\n { count: acc[acc.length - 1].count + 1, top },\n ];\n } else if (acc[acc.length - 1].top !== top) {\n return [...acc, { count: 1, top }];\n } else {\n return acc;\n }\n },\n [] as { count: number; top: number }[],\n );\n\n // Call it a day if:\n // We don't have a second row OR\n // We're already hiding everything OR\n // There's only one item selected\n if (\n !rowData[maxRows] ||\n visibleChipsCount === 0 ||\n selectedItems.length === 1\n ) {\n setStillCalculating(false);\n } else {\n setCollapsedChips(true);\n\n // otherwise, either guess how many visible chips we have\n if (visibleChipsCount == null) {\n const firstGuess = Math.max(\n rowData.reduce((sum, row) => sum + row.count, -2),\n 0,\n );\n setVisibleChipsCount(firstGuess);\n\n // or decrease our last guess by 1 and try again\n } else {\n setVisibleChipsCount(visibleChipsCount - 1);\n }\n\n setForceRenderCount((x) => x + 1);\n }\n }\n }, [selectedItems.length, maxRows, forceRenderCount]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const selectedItemsDisplayCount =\n collapsedChips && maxRows != null && visibleChipsCount !== null\n ? visibleChipsCount\n : selectedItems.length;\n\n // TODO: Update this to use a TextField component once we can pass props\n // directly to both the label and the text input\n return (\n <div {...rest} className={ComboboxTriggerClassNames} ref={referenceRef}>\n {label ? (\n <FieldLabel\n {...labelProps}\n className={cx(styles[\"label\"], labelProps?.className)}\n >\n {label}\n </FieldLabel>\n ) : null}\n\n <div\n {...inputWrapperProps}\n className={ComboboxInputWrapperClassNames}\n {...(variant === \"select\"\n ? {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": labelProps?.id,\n }\n : {})}\n >\n <div className={styles[\"buttons-wrapper\"]}>\n {(inputValue || selectedItem || selectedItems.length) &&\n !noClearButton ? (\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n icon={Close}\n className={styles[\"close-button\"]}\n onClick={(e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n onClearButtonClick?.(e);\n }}\n tabIndex={-1}\n />\n </div>\n ) : null}\n\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n {...toggleButtonProps}\n {...(variant === \"select\" ? { tabIndex: -1, inert: \"true\" } : {})}\n className={styles[\"toggle-button\"]}\n aria-label=\"toggle menu\"\n icon={Chevron_Right}\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n />\n </div>\n </div>\n\n <div className={styles[\"prefix-wrapper\"]}>\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n </div>\n\n <div className={styles[\"rows-wrapper\"]} ref={rowsRef}>\n {selectedItems.length && removeSelectedItem != null\n ? selectedItems\n .slice(0, selectedItemsDisplayCount)\n .map((item, index) => {\n return (\n <div\n key={`selected-item-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...mergeChipProps(\n chipProps(item, index),\n selectedItemProps(item, index),\n {\n label: itemToString(item),\n onClose:\n disabled || readOnly\n ? undefined\n : (_e) => {\n removeSelectedItem(item);\n },\n className: styles[\"chip\"],\n title: itemToString(item),\n },\n )}\n />\n </div>\n );\n })\n : null}\n\n {collapsedChips && maxRows != null ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${selectedItems.length - selectedItemsDisplayCount}`}\n className={styles[\"chip\"]}\n title={selectedItems\n .slice(selectedItemsDisplayCount)\n .map((item) => itemToString(item))\n .join(\", \")}\n />\n </div>\n ) : null}\n\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n {variant === \"select\" ? (\n <div\n {...inputProps}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n >\n {selectedItems.length ? null : selectedItem ? (\n itemToString(selectedItem)\n ) : (\n <span\n className={styles[\"fake-placeholder\"]}\n id={placeholderUid}\n >\n {placeholder}\n </span>\n )}\n </div>\n ) : (\n <input\n {...inputProps}\n placeholder={placeholder}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n {...(inputProps[\"aria-expanded\"] != null &&\n inputProps[\"aria-controls\"] != null\n ? {\n role: \"combobox\",\n }\n : {})}\n />\n )}\n\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n </div>\n </div>\n\n {hint || errorMessage || description ? (\n <Helper\n id={helperUid}\n errorMessage={errorMessage}\n hint={hint}\n description={description}\n />\n ) : null}\n </div>\n );\n};\n"],"names":["Close","Chevron_Right"],"mappings":"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"}
|
package/dist/Table.d.ts
ADDED
package/dist/Table.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Table.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -3,7 +3,7 @@ import { forwardRef, useRef, useState, useMemo, useId } from 'react';
|
|
|
3
3
|
import { S as Spinner } from './Spinner-wmO8Epw0.js';
|
|
4
4
|
import { t as textFieldStyles } from './TextField.module-pD1felN8.js';
|
|
5
5
|
import { c as cx } from './index-tZvMCc77.js';
|
|
6
|
-
import { F as FieldLabel } from './FieldLabel-
|
|
6
|
+
import { F as FieldLabel } from './FieldLabel-C6XZKglC.js';
|
|
7
7
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
8
8
|
import { useTrackingId } from './useTrackingId.js';
|
|
9
9
|
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjD5IMh0.js';
|
|
@@ -193,4 +193,4 @@ const TextField = forwardRef(
|
|
|
193
193
|
TextField.displayName = "InternalTextField";
|
|
194
194
|
|
|
195
195
|
export { TextField as T };
|
|
196
|
-
//# sourceMappingURL=TextField-
|
|
196
|
+
//# sourceMappingURL=TextField-CP5kL2j7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField-Duo_mY8Y.js","sources":["../src/components/TextField/internal/TextField.tsx"],"sourcesContent":["import {\n ChangeEventHandler,\n ComponentPropsWithoutRef,\n FocusEventHandler,\n ReactElement,\n ReactNode,\n Ref,\n forwardRef,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../../hooks\";\nimport {\n DataTrackingId,\n LayoutUtilProps,\n Size,\n MaxLengthCounterProps,\n} from \"../../../types\";\nimport {\n useLayoutPropsUtil,\n useOptionallyControlledState,\n} from \"../../../internal/hooks\";\nimport { Helper, HelperProps } from \"../../../internal/components\";\nimport { Spinner } from \"../../Spinner\";\nimport styles from \"../TextField.module.scss\";\nimport cx from \"classnames\";\nimport { FieldLabel, FieldLabelProps } from \"../../FieldLabel\";\nimport { childrenToString } from \"../../../internal/functions\";\n\nexport type TextFieldProps = Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"size\" | \"prefix\"\n> &\n LayoutUtilProps & {\n error?: ReactElement | string | boolean;\n label?: FieldLabelProps[\"children\"];\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n type?: \"text\" | \"email\" | \"tel\" | \"url\" | \"password\" | \"number\";\n description?: HelperProps[\"description\"];\n errorAriaLive?: HelperProps[\"errorAriaLive\"];\n hint?: HelperProps[\"hint\"];\n loading?: boolean;\n disabled?: boolean;\n labelProps?: FieldLabelProps;\n moreInfo?: ReactNode;\n } & MaxLengthCounterProps &\n DataTrackingId;\n\nexport const TextField = forwardRef(\n (props: TextFieldProps, ref: Ref<HTMLInputElement>) => {\n const data = {\n label: childrenToString(props.label),\n labelProps: props.labelProps,\n prefix: childrenToString(props.prefix),\n hint: childrenToString(props.hint),\n description: childrenToString(props.description),\n size: props.size,\n type: props.type,\n };\n\n const trackingId = useTrackingId({\n name: \"TextField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n error,\n errorAriaLive: errorAriaLiveProp = \"assertive\",\n defaultValue: defaultValueProp,\n value: valueProp,\n label,\n moreInfo,\n prefix,\n suffix,\n size,\n type = \"text\",\n required,\n onChange,\n onFocus,\n onBlur,\n id: idProp,\n description,\n hint,\n showCounter,\n maxLength,\n loading,\n disabled,\n labelProps,\n style,\n placeholder,\n ...rest\n } = componentProps;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [isTyping, setIsTyping] = useState(false);\n const [openInfo, setOpenInfo] = useState(false);\n const [errorAriaLive, setErrorAriaLive] =\n useState<HelperProps[\"errorAriaLive\"]>(\"off\");\n\n // Use the optionally controlled state for value\n const [value, setValue] = useOptionallyControlledState<typeof valueProp>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n\n const length = useMemo(() => {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n Array.isArray(value)\n ) {\n return String(value).length;\n }\n return 0;\n }, [value]);\n\n const onChangeHandler: ChangeEventHandler<HTMLInputElement> = (e) => {\n setValue(e.target.value);\n onChange?.(e);\n if (!isTyping) {\n setIsTyping(true);\n }\n };\n\n const focusHandler: FocusEventHandler<HTMLInputElement> = (e) => {\n onFocus?.(e);\n setOpenInfo(true);\n setErrorAriaLive(errorAriaLiveProp);\n };\n\n const blurHandler: FocusEventHandler<HTMLInputElement> = (e) => {\n onBlur?.(e);\n setOpenInfo(false);\n setErrorAriaLive(\"off\");\n if (isTyping) {\n setIsTyping(false);\n }\n };\n\n const labelUid = useId();\n const id = idProp ?? labelUid;\n\n const prefixUid = useId();\n const suffixUid = useId();\n\n const helperUid = useId();\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n\n const styleCombined = { ...style, ...layoutStyles };\n\n return (\n <div\n className={cx(styles[\"textfield\"], className)}\n data-anv=\"textfield\"\n style={styleCombined}\n >\n {label && (\n <FieldLabel\n moreInfo={moreInfo}\n openMoreInfo={openInfo}\n required={required}\n htmlFor={id}\n {...labelProps}\n >\n {label}\n </FieldLabel>\n )}\n <div\n className={cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n })}\n role=\"presentation\"\n onClick={() => inputRef.current?.focus()}\n >\n {prefix ? (\n <div\n aria-hidden\n className={styles[\"prefix\"]}\n id={`prefix${prefixUid}`}\n >\n {prefix}\n </div>\n ) : null}\n <input\n id={id}\n className={cx(styles[\"input\"], {\n [styles[\"error\"]]: error,\n })}\n onChange={onChangeHandler}\n onFocus={focusHandler}\n onBlur={blurHandler}\n ref={useMergeRefs([ref, inputRef])}\n required={required}\n maxLength={maxLength}\n placeholder={placeholder}\n type={type}\n disabled={disabled}\n value={value ?? \"\"}\n data-tracking-id={trackingId}\n {...rest}\n aria-label={label ? undefined : placeholder}\n aria-describedby={helperUid}\n aria-invalid={error ? !!error : undefined}\n />\n {loading ? (\n <div className={styles[\"loading-spinner-wrapper\"]}>\n <Spinner />\n </div>\n ) : null}\n {suffix ? (\n <div\n className={styles[\"suffix\"]}\n aria-hidden\n id={`suffix${suffixUid}`}\n >\n {suffix}\n </div>\n ) : null}\n </div>\n {hint || showCounter || errorMessage || description ? (\n <Helper\n id={helperUid}\n hint={hint}\n maxLength={maxLength}\n inputLength={length}\n isTyping={isTyping}\n showCounter={showCounter}\n errorMessage={errorMessage}\n errorAriaLive={errorAriaLive}\n description={description}\n />\n ) : null}\n </div>\n );\n },\n);\nTextField.displayName = \"InternalTextField\";\n"],"names":["styles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TextField-CP5kL2j7.js","sources":["../src/components/TextField/internal/TextField.tsx"],"sourcesContent":["import {\n ChangeEventHandler,\n ComponentPropsWithoutRef,\n FocusEventHandler,\n ReactElement,\n ReactNode,\n Ref,\n forwardRef,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../../hooks\";\nimport {\n DataTrackingId,\n LayoutUtilProps,\n Size,\n MaxLengthCounterProps,\n} from \"../../../types\";\nimport {\n useLayoutPropsUtil,\n useOptionallyControlledState,\n} from \"../../../internal/hooks\";\nimport { Helper, HelperProps } from \"../../../internal/components\";\nimport { Spinner } from \"../../Spinner\";\nimport styles from \"../TextField.module.scss\";\nimport cx from \"classnames\";\nimport { FieldLabel, FieldLabelProps } from \"../../FieldLabel\";\nimport { childrenToString } from \"../../../internal/functions\";\n\nexport type TextFieldProps = Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"size\" | \"prefix\"\n> &\n LayoutUtilProps & {\n error?: ReactElement | string | boolean;\n label?: FieldLabelProps[\"children\"];\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n type?: \"text\" | \"email\" | \"tel\" | \"url\" | \"password\" | \"number\";\n description?: HelperProps[\"description\"];\n errorAriaLive?: HelperProps[\"errorAriaLive\"];\n hint?: HelperProps[\"hint\"];\n loading?: boolean;\n disabled?: boolean;\n labelProps?: FieldLabelProps;\n moreInfo?: ReactNode;\n } & MaxLengthCounterProps &\n DataTrackingId;\n\nexport const TextField = forwardRef(\n (props: TextFieldProps, ref: Ref<HTMLInputElement>) => {\n const data = {\n label: childrenToString(props.label),\n labelProps: props.labelProps,\n prefix: childrenToString(props.prefix),\n hint: childrenToString(props.hint),\n description: childrenToString(props.description),\n size: props.size,\n type: props.type,\n };\n\n const trackingId = useTrackingId({\n name: \"TextField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n error,\n errorAriaLive: errorAriaLiveProp = \"assertive\",\n defaultValue: defaultValueProp,\n value: valueProp,\n label,\n moreInfo,\n prefix,\n suffix,\n size,\n type = \"text\",\n required,\n onChange,\n onFocus,\n onBlur,\n id: idProp,\n description,\n hint,\n showCounter,\n maxLength,\n loading,\n disabled,\n labelProps,\n style,\n placeholder,\n ...rest\n } = componentProps;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [isTyping, setIsTyping] = useState(false);\n const [openInfo, setOpenInfo] = useState(false);\n const [errorAriaLive, setErrorAriaLive] =\n useState<HelperProps[\"errorAriaLive\"]>(\"off\");\n\n // Use the optionally controlled state for value\n const [value, setValue] = useOptionallyControlledState<typeof valueProp>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n\n const length = useMemo(() => {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n Array.isArray(value)\n ) {\n return String(value).length;\n }\n return 0;\n }, [value]);\n\n const onChangeHandler: ChangeEventHandler<HTMLInputElement> = (e) => {\n setValue(e.target.value);\n onChange?.(e);\n if (!isTyping) {\n setIsTyping(true);\n }\n };\n\n const focusHandler: FocusEventHandler<HTMLInputElement> = (e) => {\n onFocus?.(e);\n setOpenInfo(true);\n setErrorAriaLive(errorAriaLiveProp);\n };\n\n const blurHandler: FocusEventHandler<HTMLInputElement> = (e) => {\n onBlur?.(e);\n setOpenInfo(false);\n setErrorAriaLive(\"off\");\n if (isTyping) {\n setIsTyping(false);\n }\n };\n\n const labelUid = useId();\n const id = idProp ?? labelUid;\n\n const prefixUid = useId();\n const suffixUid = useId();\n\n const helperUid = useId();\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n\n const styleCombined = { ...style, ...layoutStyles };\n\n return (\n <div\n className={cx(styles[\"textfield\"], className)}\n data-anv=\"textfield\"\n style={styleCombined}\n >\n {label && (\n <FieldLabel\n moreInfo={moreInfo}\n openMoreInfo={openInfo}\n required={required}\n htmlFor={id}\n {...labelProps}\n >\n {label}\n </FieldLabel>\n )}\n <div\n className={cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n })}\n role=\"presentation\"\n onClick={() => inputRef.current?.focus()}\n >\n {prefix ? (\n <div\n aria-hidden\n className={styles[\"prefix\"]}\n id={`prefix${prefixUid}`}\n >\n {prefix}\n </div>\n ) : null}\n <input\n id={id}\n className={cx(styles[\"input\"], {\n [styles[\"error\"]]: error,\n })}\n onChange={onChangeHandler}\n onFocus={focusHandler}\n onBlur={blurHandler}\n ref={useMergeRefs([ref, inputRef])}\n required={required}\n maxLength={maxLength}\n placeholder={placeholder}\n type={type}\n disabled={disabled}\n value={value ?? \"\"}\n data-tracking-id={trackingId}\n {...rest}\n aria-label={label ? undefined : placeholder}\n aria-describedby={helperUid}\n aria-invalid={error ? !!error : undefined}\n />\n {loading ? (\n <div className={styles[\"loading-spinner-wrapper\"]}>\n <Spinner />\n </div>\n ) : null}\n {suffix ? (\n <div\n className={styles[\"suffix\"]}\n aria-hidden\n id={`suffix${suffixUid}`}\n >\n {suffix}\n </div>\n ) : null}\n </div>\n {hint || showCounter || errorMessage || description ? (\n <Helper\n id={helperUid}\n hint={hint}\n maxLength={maxLength}\n inputLength={length}\n isTyping={isTyping}\n showCounter={showCounter}\n errorMessage={errorMessage}\n errorAriaLive={errorAriaLive}\n description={description}\n />\n ) : null}\n </div>\n );\n },\n);\nTextField.displayName = \"InternalTextField\";\n"],"names":["styles"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
|
-
import { T as TextField$1 } from './TextField-
|
|
3
|
+
import { T as TextField$1 } from './TextField-CP5kL2j7.js';
|
|
4
4
|
|
|
5
5
|
const TextField = forwardRef(
|
|
6
6
|
(props, ref) => {
|
|
@@ -10,4 +10,4 @@ const TextField = forwardRef(
|
|
|
10
10
|
TextField.displayName = "TextField";
|
|
11
11
|
|
|
12
12
|
export { TextField as T };
|
|
13
|
-
//# sourceMappingURL=TextField-
|
|
13
|
+
//# sourceMappingURL=TextField-DLIaLKT1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField-
|
|
1
|
+
{"version":3,"file":"TextField-DLIaLKT1.js","sources":["../src/components/TextField/TextField.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport {\n TextField as CoreTextField,\n TextFieldProps as CoreTextFieldProps,\n} from \"./internal/TextField\";\nimport { MaxLengthCounterProps } from \"../../types\";\n\nexport type TextFieldProps = Omit<CoreTextFieldProps, \"prefix\"> & {\n prefix?: string;\n} & MaxLengthCounterProps;\n\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n (props, ref) => {\n return <CoreTextField ref={ref} {...props} />;\n },\n);\n\nTextField.displayName = \"TextField\";\n"],"names":["CoreTextField"],"mappings":";;;;AAWO,MAAM,SAAA,GAAY,UAAA;AAAA,EACvB,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,uBAAO,GAAA,CAACA,WAAA,EAAA,EAAc,GAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,EAC7C;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;;;;"}
|
package/dist/TextField.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { T as TextField, T as default } from './TextField-
|
|
1
|
+
export { T as TextField, T as default } from './TextField-DLIaLKT1.js';
|
|
2
2
|
//# sourceMappingURL=TextField.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import React__default, { useLayoutEffect, forwardRef, useRef, useState, useMemo, useEffect, useId } from 'react';
|
|
4
|
-
import { F as FieldLabel } from './FieldLabel-
|
|
4
|
+
import { F as FieldLabel } from './FieldLabel-C6XZKglC.js';
|
|
5
5
|
import { c as cx } from './index-tZvMCc77.js';
|
|
6
6
|
import { _ as _objectWithoutPropertiesLoose, a as _extends } from './extends-Bg2s_OKl.js';
|
|
7
7
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
@@ -402,4 +402,4 @@ const Textarea = forwardRef(
|
|
|
402
402
|
Textarea.displayName = "Textarea";
|
|
403
403
|
|
|
404
404
|
export { Textarea as T };
|
|
405
|
-
//# sourceMappingURL=Textarea-
|
|
405
|
+
//# sourceMappingURL=Textarea-Kb-RF4rR.js.map
|