@bonprix-ds/react-select 1.0.2 → 1.0.3
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/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -37,7 +37,7 @@ var d = o({
|
|
|
37
37
|
"border border-clr-primary rounded data-[side=top]:rounded-b-none data-[side=bottom]:rounded-t-none",
|
|
38
38
|
"w-[calc(var(--radix-select-trigger-width)+0.125rem)]"
|
|
39
39
|
],
|
|
40
|
-
viewport: "max-h-[16
|
|
40
|
+
viewport: "max-h-[calc(283/16*1rem)] group-data-[side=top]/menu:max-h-[calc(302/16*1rem)] overscroll-none",
|
|
41
41
|
list: "flex flex-col gap-1 p-2",
|
|
42
42
|
text: ["h-[1lh] typography-input-text grow text-left truncate", "text-clr-primary"],
|
|
43
43
|
labelClone: "hidden sticky bottom-0 bg-clr-bg-main typography-input-label pb-[0.0625rem] pl-[0.6875rem] pe-2"
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/SelectItem.tsx","../src/Select.tsx"],"sourcesContent":["import React, { FC, ReactNode, RefObject } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\n\nconst generateClasses = tv({\n base: [\n \"px-1 py-2 typography-input-text outline-none select-none text-wrap\",\n \"underline-offset-[30%] hover:underline data-[highlighted]:outline-none data-[highlighted]:underline data-[disabled]:no-underline\", // focus/hover\n \"data-[state=checked]:underline data-[state=checked]:decoration-[15%]\", // selected\n \"data-[state=checked]:hover:decoration-[25%] data-[state=checked]:data-[highlighted]:decoration-[25%]\", // selected + focus/hover\n ],\n variants: {\n disabled: {\n false: \"text-clr-primary cursor-pointer\",\n true: \"text-clr-disabled\",\n },\n },\n});\n\ninterface Props {\n /** The value of the select item. This will be used as the value when the select is submitted. */\n value: string;\n /** The content text of the select item. */\n children?: ReactNode;\n /** If `true`, the select item will be disabled and not selectable. */\n disabled?: boolean;\n /** If `true`, the select item will be hidden from the dropdown menu. */\n hidden?: boolean;\n /** A reference to the root element of the select item. */\n ref?: RefObject<HTMLDivElement>;\n}\n\nconst SelectItem: FC<Props> = ({ children, value, disabled = false, hidden = false, ref }) => {\n const base = generateClasses({ disabled });\n return (\n <SelectPrimitive.Item value={value} disabled={disabled} hidden={hidden} ref={ref} className={base}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n};\n\nexport default SelectItem;\n","\"use client\";\n\nimport { InputWrapper } from \"@bonprix-ds/internal-components\";\nimport Icon from \"@bonprix-ds/react-icon\";\nimport { useSafeAreaInsetBottom, useZIndex } from \"@bonprix-ds/utils\";\nimport React, { FC, RefObject, useId, useState } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\n\nimport SelectItem from \"./SelectItem\";\n\nconst generateClasses = tv({\n slots: {\n trigger: \"flex w-full align-center items-center gap-3 p-3 outline-none\",\n icon: \"w-5 h-5 fill-inherit shrink-0 [button[data-state='open']_span>&]:rotate-180\",\n menu: [\n \"group/menu preflight bg-clr-bg-main overflow-hidden whitespace-nowrap\",\n \"border border-clr-primary rounded data-[side=top]:rounded-b-none data-[side=bottom]:rounded-t-none\",\n \"w-[calc(var(--radix-select-trigger-width)+0.125rem)]\", // border is managed on InputWrapper, we need to add 0.125rem here to stay flush visually\n ],\n // max-height when opened to bottom : 6 x 38px (item height) + 5 x 4px (gap) + 8px x 2 (padding top or bottom) = 264px\n // max-height when opened to top: 264px + 19px label clone = 283px\n viewport: \"max-h-[16.5rem] group-data-[side=top]/menu:max-h-[17.6875rem] overscroll-none\",\n list: \"flex flex-col gap-1 p-2\",\n text: [\n \"h-[1lh] typography-input-text grow text-left truncate\",\n // override Safari iOS UA bluish style coming from the button tag\n \"text-clr-primary\",\n ],\n labelClone: \"hidden sticky bottom-0 bg-clr-bg-main typography-input-label pb-[0.0625rem] pl-[0.6875rem] pe-2\", // mimick label\n },\n variants: {\n labelFloated: {\n // We show a label clone inside the dropdown whenever the actual label is floated and hidden behind the dropdown.\n // Whehn not floated, the label is still visible inside the Select box as kind of a placeholder, so no need to duplicate it then.\n true: { labelClone: \"group-data-[side=top]/menu:block\" },\n },\n },\n});\n\ninterface BaseProps {\n /** The id of the input field. */\n id?: string;\n /** The visible label for the input field. */\n label: string;\n /** This is where Select.Item subcomponents should be placed. */\n children: React.ReactNode;\n /** The name of the input field. */\n name?: string;\n /** If `true`, disables the input. */\n disabled?: boolean;\n /** If `true`, the input field is in an error state. Required for `errorText` to be shown. */\n error?: boolean;\n /** If `true`, marks the input as required. */\n required?: boolean;\n /** A text that further describes the field and helps with filling out the form correctly. */\n helperText?: string;\n /** A text message that appears when the field is invalid. Only visible when `error` is set to `true`. */\n errorText?: string;\n /** <a href=\"https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-describedby\" target=\"_blank\">ARIA: aria-describedby attribute.</a> */\n describedBy?: string;\n /** Reference to the root element of the select. */\n ref?: RefObject<HTMLButtonElement>;\n}\n\ninterface ControlledSelectProps extends BaseProps {\n /** The current value of the select. Should be used in conjunction with `onValueChange`. */\n value: string;\n /** The default value of the select. Should be used when select is uncontrolled. */\n defaultValue?: never;\n /** Callback that is triggered when the value changes. */\n onValueChange: (value: string) => void;\n}\n\ninterface UncontrolledSelectProps extends BaseProps {\n value?: never;\n defaultValue: string;\n onValueChange?: (value: string) => void;\n}\n\nexport type Props = ControlledSelectProps | UncontrolledSelectProps;\n\ninterface Subcomponents {\n Item: typeof SelectItem;\n}\n\nconst Select: FC<Props> & Subcomponents = ({\n id,\n name,\n label,\n onValueChange,\n children,\n disabled = false,\n error = false,\n required = false,\n helperText = \"\",\n errorText = \"\",\n ref,\n ...unionProps\n}) => {\n const generatedId = useId();\n const calculatedId = id ?? generatedId;\n const helperTextId = useId();\n const errorTextId = useId();\n\n const isControlled = unionProps.value !== undefined;\n const value = isControlled ? unionProps.value : undefined;\n const defaultValue = isControlled ? undefined : unionProps.defaultValue;\n const initialLabelFloated = isControlled ? !!unionProps.value : !!defaultValue;\n const [labelFloated, setLabelFloated] = useState(initialLabelFloated);\n\n const variations = { error, labelFloated };\n const { trigger, icon, menu, viewport, list, text, labelClone } = generateClasses(variations);\n const zIndex = useZIndex();\n\n let ariaDescribedBy;\n if (helperText) {\n ariaDescribedBy = helperTextId;\n }\n if (error && errorText) {\n ariaDescribedBy = ariaDescribedBy ? ariaDescribedBy + \" \" + errorTextId : errorTextId;\n }\n\n const safeAreaInsetBottom = useSafeAreaInsetBottom();\n\n const handleValueChange = (value: string) => {\n setLabelFloated(true);\n if (onValueChange) {\n onValueChange(value);\n }\n };\n\n return (\n <>\n <InputWrapper\n label={label}\n id={calculatedId}\n required={required}\n labelFloated={labelFloated}\n disabled={disabled}\n error={error}\n errorText={errorText}\n errorTextId={errorTextId}\n helperText={helperText}\n helperTextId={helperTextId}\n componentName=\"select\"\n >\n <SelectPrimitive.Root name={name} disabled={disabled} value={value} onValueChange={handleValueChange} defaultValue={defaultValue}>\n <SelectPrimitive.Trigger\n id={calculatedId}\n className={trigger()}\n ref={ref}\n aria-describedby={ariaDescribedBy}\n aria-invalid={error ? \"true\" : undefined}\n data-bpds=\"select\"\n >\n <span className={text()}>\n <SelectPrimitive.Value />\n </span>\n <SelectPrimitive.Icon>\n <Icon variant=\"arrow-down\" className={icon()} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n side=\"bottom\"\n align=\"start\"\n alignOffset={-1} // no idea why we suddently need to adjust it\n className={menu()}\n style={{ zIndex }}\n collisionPadding={safeAreaInsetBottom ? { bottom: safeAreaInsetBottom + 10 } : undefined}\n >\n <SelectPrimitive.Viewport className={viewport()}>\n <div className={list()}>{children}</div>\n {/* Scrollbar should go until the end. So we need to use a pseudo element instad of padding */}\n <div className={labelClone()} aria-hidden=\"true\">\n {label}\n {required && <span>*</span>}\n </div>\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n </InputWrapper>\n </>\n );\n};\n\nSelect.displayName = \"Select\";\n\nSelect.Item = SelectItem;\nSelect.Item.displayName = \"Select.Item\";\n\nexport default Select;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/SelectItem.tsx","../src/Select.tsx"],"sourcesContent":["import React, { FC, ReactNode, RefObject } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\n\nconst generateClasses = tv({\n base: [\n \"px-1 py-2 typography-input-text outline-none select-none text-wrap\",\n \"underline-offset-[30%] hover:underline data-[highlighted]:outline-none data-[highlighted]:underline data-[disabled]:no-underline\", // focus/hover\n \"data-[state=checked]:underline data-[state=checked]:decoration-[15%]\", // selected\n \"data-[state=checked]:hover:decoration-[25%] data-[state=checked]:data-[highlighted]:decoration-[25%]\", // selected + focus/hover\n ],\n variants: {\n disabled: {\n false: \"text-clr-primary cursor-pointer\",\n true: \"text-clr-disabled\",\n },\n },\n});\n\ninterface Props {\n /** The value of the select item. This will be used as the value when the select is submitted. */\n value: string;\n /** The content text of the select item. */\n children?: ReactNode;\n /** If `true`, the select item will be disabled and not selectable. */\n disabled?: boolean;\n /** If `true`, the select item will be hidden from the dropdown menu. */\n hidden?: boolean;\n /** A reference to the root element of the select item. */\n ref?: RefObject<HTMLDivElement>;\n}\n\nconst SelectItem: FC<Props> = ({ children, value, disabled = false, hidden = false, ref }) => {\n const base = generateClasses({ disabled });\n return (\n <SelectPrimitive.Item value={value} disabled={disabled} hidden={hidden} ref={ref} className={base}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n};\n\nexport default SelectItem;\n","\"use client\";\n\nimport { InputWrapper } from \"@bonprix-ds/internal-components\";\nimport Icon from \"@bonprix-ds/react-icon\";\nimport { useSafeAreaInsetBottom, useZIndex } from \"@bonprix-ds/utils\";\nimport React, { FC, RefObject, useId, useState } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\n\nimport SelectItem from \"./SelectItem\";\n\nconst generateClasses = tv({\n slots: {\n trigger: \"flex w-full align-center items-center gap-3 p-3 outline-none\",\n icon: \"w-5 h-5 fill-inherit shrink-0 [button[data-state='open']_span>&]:rotate-180\",\n menu: [\n \"group/menu preflight bg-clr-bg-main overflow-hidden whitespace-nowrap\",\n \"border border-clr-primary rounded data-[side=top]:rounded-b-none data-[side=bottom]:rounded-t-none\",\n \"w-[calc(var(--radix-select-trigger-width)+0.125rem)]\", // border is managed on InputWrapper, we need to add 0.125rem here to stay flush visually\n ],\n // max-height when opened to bottom : 6.5 x 38px (item height) + 5 x 4px (gap) + 8px x 2 (padding top or bottom) = 283px\n // max-height when opened to top: 283px + 19px label clone = 302px\n viewport: \"max-h-[calc(283/16*1rem)] group-data-[side=top]/menu:max-h-[calc(302/16*1rem)] overscroll-none\",\n list: \"flex flex-col gap-1 p-2\",\n text: [\n \"h-[1lh] typography-input-text grow text-left truncate\",\n // override Safari iOS UA bluish style coming from the button tag\n \"text-clr-primary\",\n ],\n labelClone: \"hidden sticky bottom-0 bg-clr-bg-main typography-input-label pb-[0.0625rem] pl-[0.6875rem] pe-2\", // mimick label\n },\n variants: {\n labelFloated: {\n // We show a label clone inside the dropdown whenever the actual label is floated and hidden behind the dropdown.\n // Whehn not floated, the label is still visible inside the Select box as kind of a placeholder, so no need to duplicate it then.\n true: { labelClone: \"group-data-[side=top]/menu:block\" },\n },\n },\n});\n\ninterface BaseProps {\n /** The id of the input field. */\n id?: string;\n /** The visible label for the input field. */\n label: string;\n /** This is where Select.Item subcomponents should be placed. */\n children: React.ReactNode;\n /** The name of the input field. */\n name?: string;\n /** If `true`, disables the input. */\n disabled?: boolean;\n /** If `true`, the input field is in an error state. Required for `errorText` to be shown. */\n error?: boolean;\n /** If `true`, marks the input as required. */\n required?: boolean;\n /** A text that further describes the field and helps with filling out the form correctly. */\n helperText?: string;\n /** A text message that appears when the field is invalid. Only visible when `error` is set to `true`. */\n errorText?: string;\n /** <a href=\"https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-describedby\" target=\"_blank\">ARIA: aria-describedby attribute.</a> */\n describedBy?: string;\n /** Reference to the root element of the select. */\n ref?: RefObject<HTMLButtonElement>;\n}\n\ninterface ControlledSelectProps extends BaseProps {\n /** The current value of the select. Should be used in conjunction with `onValueChange`. */\n value: string;\n /** The default value of the select. Should be used when select is uncontrolled. */\n defaultValue?: never;\n /** Callback that is triggered when the value changes. */\n onValueChange: (value: string) => void;\n}\n\ninterface UncontrolledSelectProps extends BaseProps {\n value?: never;\n defaultValue: string;\n onValueChange?: (value: string) => void;\n}\n\nexport type Props = ControlledSelectProps | UncontrolledSelectProps;\n\ninterface Subcomponents {\n Item: typeof SelectItem;\n}\n\nconst Select: FC<Props> & Subcomponents = ({\n id,\n name,\n label,\n onValueChange,\n children,\n disabled = false,\n error = false,\n required = false,\n helperText = \"\",\n errorText = \"\",\n ref,\n ...unionProps\n}) => {\n const generatedId = useId();\n const calculatedId = id ?? generatedId;\n const helperTextId = useId();\n const errorTextId = useId();\n\n const isControlled = unionProps.value !== undefined;\n const value = isControlled ? unionProps.value : undefined;\n const defaultValue = isControlled ? undefined : unionProps.defaultValue;\n const initialLabelFloated = isControlled ? !!unionProps.value : !!defaultValue;\n const [labelFloated, setLabelFloated] = useState(initialLabelFloated);\n\n const variations = { error, labelFloated };\n const { trigger, icon, menu, viewport, list, text, labelClone } = generateClasses(variations);\n const zIndex = useZIndex();\n\n let ariaDescribedBy;\n if (helperText) {\n ariaDescribedBy = helperTextId;\n }\n if (error && errorText) {\n ariaDescribedBy = ariaDescribedBy ? ariaDescribedBy + \" \" + errorTextId : errorTextId;\n }\n\n const safeAreaInsetBottom = useSafeAreaInsetBottom();\n\n const handleValueChange = (value: string) => {\n setLabelFloated(true);\n if (onValueChange) {\n onValueChange(value);\n }\n };\n\n return (\n <>\n <InputWrapper\n label={label}\n id={calculatedId}\n required={required}\n labelFloated={labelFloated}\n disabled={disabled}\n error={error}\n errorText={errorText}\n errorTextId={errorTextId}\n helperText={helperText}\n helperTextId={helperTextId}\n componentName=\"select\"\n >\n <SelectPrimitive.Root name={name} disabled={disabled} value={value} onValueChange={handleValueChange} defaultValue={defaultValue}>\n <SelectPrimitive.Trigger\n id={calculatedId}\n className={trigger()}\n ref={ref}\n aria-describedby={ariaDescribedBy}\n aria-invalid={error ? \"true\" : undefined}\n data-bpds=\"select\"\n >\n <span className={text()}>\n <SelectPrimitive.Value />\n </span>\n <SelectPrimitive.Icon>\n <Icon variant=\"arrow-down\" className={icon()} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n side=\"bottom\"\n align=\"start\"\n alignOffset={-1} // no idea why we suddently need to adjust it\n className={menu()}\n style={{ zIndex }}\n collisionPadding={safeAreaInsetBottom ? { bottom: safeAreaInsetBottom + 10 } : undefined}\n >\n <SelectPrimitive.Viewport className={viewport()}>\n <div className={list()}>{children}</div>\n {/* Scrollbar should go until the end. So we need to use a pseudo element instad of padding */}\n <div className={labelClone()} aria-hidden=\"true\">\n {label}\n {required && <span>*</span>}\n </div>\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n </InputWrapper>\n </>\n );\n};\n\nSelect.displayName = \"Select\";\n\nSelect.Item = SelectItem;\nSelect.Item.displayName = \"Select.Item\";\n\nexport default Select;\n"],"mappings":"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"}
|