@remember-web/primitive 0.1.11 → 0.1.13
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/package.json +2 -2
- package/src/Control/BaseToggle/ToggleIcon/index.tsx +27 -5
- package/src/Control/BaseToggle/index.tsx +20 -1
- package/src/Control/BaseToggle/styles.ts +9 -0
- package/src/Control/BaseToggle/types.ts +2 -1
- package/src/Control/Checkbox.stories.tsx +28 -1
- package/src/Control/Checkbox.tsx +9 -3
- package/src/Control/Radio.tsx +1 -1
- package/src/Control/Toggle.tsx +1 -1
- package/dist/src/Avatars/Avatar/index.cjs.js +0 -42
- package/dist/src/Avatars/Avatar/index.cjs.js.map +0 -1
- package/dist/src/Avatars/Avatar/index.d.ts +0 -7
- package/dist/src/Avatars/Avatar/index.d.ts.map +0 -1
- package/dist/src/Avatars/Avatar/index.esm.js +0 -40
- package/dist/src/Avatars/Avatar/index.esm.js.map +0 -1
- package/dist/src/Avatars/Avatar/styles.cjs.js +0 -45
- package/dist/src/Avatars/Avatar/styles.cjs.js.map +0 -1
- package/dist/src/Avatars/Avatar/styles.d.ts +0 -22
- package/dist/src/Avatars/Avatar/styles.d.ts.map +0 -1
- package/dist/src/Avatars/Avatar/styles.esm.js +0 -38
- package/dist/src/Avatars/Avatar/styles.esm.js.map +0 -1
- package/dist/src/Avatars/index.d.ts +0 -4
- package/dist/src/Avatars/index.d.ts.map +0 -1
- package/dist/src/Badge/Badge.cjs.js +0 -15
- package/dist/src/Badge/Badge.cjs.js.map +0 -1
- package/dist/src/Badge/Badge.d.ts +0 -6
- package/dist/src/Badge/Badge.d.ts.map +0 -1
- package/dist/src/Badge/Badge.esm.js +0 -13
- package/dist/src/Badge/Badge.esm.js.map +0 -1
- package/dist/src/Badge/index.d.ts +0 -6
- package/dist/src/Badge/index.d.ts.map +0 -1
- package/dist/src/Badge/style.cjs.js +0 -38
- package/dist/src/Badge/style.cjs.js.map +0 -1
- package/dist/src/Badge/style.d.ts +0 -16
- package/dist/src/Badge/style.d.ts.map +0 -1
- package/dist/src/Badge/style.esm.js +0 -29
- package/dist/src/Badge/style.esm.js.map +0 -1
- package/dist/src/Badge/types.d.ts +0 -10
- package/dist/src/Badge/types.d.ts.map +0 -1
- package/dist/src/Badge/utils.cjs.js +0 -26
- package/dist/src/Badge/utils.cjs.js.map +0 -1
- package/dist/src/Badge/utils.d.ts +0 -12
- package/dist/src/Badge/utils.d.ts.map +0 -1
- package/dist/src/Badge/utils.esm.js +0 -23
- package/dist/src/Badge/utils.esm.js.map +0 -1
- package/dist/src/Buttons/Button/const.cjs.js +0 -59
- package/dist/src/Buttons/Button/const.cjs.js.map +0 -1
- package/dist/src/Buttons/Button/const.d.ts +0 -50
- package/dist/src/Buttons/Button/const.d.ts.map +0 -1
- package/dist/src/Buttons/Button/const.esm.js +0 -54
- package/dist/src/Buttons/Button/const.esm.js.map +0 -1
- package/dist/src/Buttons/Button/index.cjs.js +0 -62
- package/dist/src/Buttons/Button/index.cjs.js.map +0 -1
- package/dist/src/Buttons/Button/index.d.ts +0 -10
- package/dist/src/Buttons/Button/index.d.ts.map +0 -1
- package/dist/src/Buttons/Button/index.esm.js +0 -55
- package/dist/src/Buttons/Button/index.esm.js.map +0 -1
- package/dist/src/Buttons/Button/styles.cjs.js +0 -33
- package/dist/src/Buttons/Button/styles.cjs.js.map +0 -1
- package/dist/src/Buttons/Button/styles.d.ts +0 -5
- package/dist/src/Buttons/Button/styles.d.ts.map +0 -1
- package/dist/src/Buttons/Button/styles.esm.js +0 -25
- package/dist/src/Buttons/Button/styles.esm.js.map +0 -1
- package/dist/src/Buttons/Button/types.d.ts +0 -22
- package/dist/src/Buttons/Button/types.d.ts.map +0 -1
- package/dist/src/Buttons/index.d.ts +0 -2
- package/dist/src/Buttons/index.d.ts.map +0 -1
- package/dist/src/Common/Divider/index.cjs.js +0 -54
- package/dist/src/Common/Divider/index.cjs.js.map +0 -1
- package/dist/src/Common/Divider/index.d.ts +0 -10
- package/dist/src/Common/Divider/index.d.ts.map +0 -1
- package/dist/src/Common/Divider/index.esm.js +0 -27
- package/dist/src/Common/Divider/index.esm.js.map +0 -1
- package/dist/src/Common/Flex/index.cjs.js +0 -71
- package/dist/src/Common/Flex/index.cjs.js.map +0 -1
- package/dist/src/Common/Flex/index.d.ts +0 -23
- package/dist/src/Common/Flex/index.d.ts.map +0 -1
- package/dist/src/Common/Flex/index.esm.js +0 -62
- package/dist/src/Common/Flex/index.esm.js.map +0 -1
- package/dist/src/Common/Grid/index.cjs.js +0 -72
- package/dist/src/Common/Grid/index.cjs.js.map +0 -1
- package/dist/src/Common/Grid/index.d.ts +0 -25
- package/dist/src/Common/Grid/index.d.ts.map +0 -1
- package/dist/src/Common/Grid/index.esm.js +0 -64
- package/dist/src/Common/Grid/index.esm.js.map +0 -1
- package/dist/src/Common/Spinner/index.cjs.js +0 -26
- package/dist/src/Common/Spinner/index.cjs.js.map +0 -1
- package/dist/src/Common/Spinner/index.d.ts +0 -3
- package/dist/src/Common/Spinner/index.d.ts.map +0 -1
- package/dist/src/Common/Spinner/index.esm.js +0 -24
- package/dist/src/Common/Spinner/index.esm.js.map +0 -1
- package/dist/src/Common/Spinner/styles.cjs.js +0 -21
- package/dist/src/Common/Spinner/styles.cjs.js.map +0 -1
- package/dist/src/Common/Spinner/styles.d.ts +0 -4
- package/dist/src/Common/Spinner/styles.d.ts.map +0 -1
- package/dist/src/Common/Spinner/styles.esm.js +0 -14
- package/dist/src/Common/Spinner/styles.esm.js.map +0 -1
- package/dist/src/Common/Spinner/types.d.ts +0 -15
- package/dist/src/Common/Spinner/types.d.ts.map +0 -1
- package/dist/src/Common/Typography/index.cjs.js +0 -40
- package/dist/src/Common/Typography/index.cjs.js.map +0 -1
- package/dist/src/Common/Typography/index.d.ts +0 -16
- package/dist/src/Common/Typography/index.d.ts.map +0 -1
- package/dist/src/Common/Typography/index.esm.js +0 -33
- package/dist/src/Common/Typography/index.esm.js.map +0 -1
- package/dist/src/Common/Typography/styles.cjs.js +0 -26
- package/dist/src/Common/Typography/styles.cjs.js.map +0 -1
- package/dist/src/Common/Typography/styles.d.ts +0 -9
- package/dist/src/Common/Typography/styles.d.ts.map +0 -1
- package/dist/src/Common/Typography/styles.esm.js +0 -19
- package/dist/src/Common/Typography/styles.esm.js.map +0 -1
- package/dist/src/Common/index.d.ts +0 -8
- package/dist/src/Common/index.d.ts.map +0 -1
- package/dist/src/Control/BaseToggle/ToggleIcon/index.cjs.js +0 -44
- package/dist/src/Control/BaseToggle/ToggleIcon/index.cjs.js.map +0 -1
- package/dist/src/Control/BaseToggle/ToggleIcon/index.d.ts +0 -8
- package/dist/src/Control/BaseToggle/ToggleIcon/index.d.ts.map +0 -1
- package/dist/src/Control/BaseToggle/ToggleIcon/index.esm.js +0 -42
- package/dist/src/Control/BaseToggle/ToggleIcon/index.esm.js.map +0 -1
- package/dist/src/Control/BaseToggle/index.cjs.js +0 -75
- package/dist/src/Control/BaseToggle/index.cjs.js.map +0 -1
- package/dist/src/Control/BaseToggle/index.d.ts +0 -12
- package/dist/src/Control/BaseToggle/index.d.ts.map +0 -1
- package/dist/src/Control/BaseToggle/index.esm.js +0 -68
- package/dist/src/Control/BaseToggle/index.esm.js.map +0 -1
- package/dist/src/Control/BaseToggle/styles.cjs.js +0 -22
- package/dist/src/Control/BaseToggle/styles.cjs.js.map +0 -1
- package/dist/src/Control/BaseToggle/styles.d.ts +0 -6
- package/dist/src/Control/BaseToggle/styles.d.ts.map +0 -1
- package/dist/src/Control/BaseToggle/styles.esm.js +0 -14
- package/dist/src/Control/BaseToggle/styles.esm.js.map +0 -1
- package/dist/src/Control/BaseToggle/types.d.ts +0 -21
- package/dist/src/Control/BaseToggle/types.d.ts.map +0 -1
- package/dist/src/Control/Checkbox.cjs.js +0 -31
- package/dist/src/Control/Checkbox.cjs.js.map +0 -1
- package/dist/src/Control/Checkbox.d.ts +0 -9
- package/dist/src/Control/Checkbox.d.ts.map +0 -1
- package/dist/src/Control/Checkbox.esm.js +0 -23
- package/dist/src/Control/Checkbox.esm.js.map +0 -1
- package/dist/src/Control/Radio.cjs.js +0 -30
- package/dist/src/Control/Radio.cjs.js.map +0 -1
- package/dist/src/Control/Radio.d.ts +0 -4
- package/dist/src/Control/Radio.d.ts.map +0 -1
- package/dist/src/Control/Radio.esm.js +0 -22
- package/dist/src/Control/Radio.esm.js.map +0 -1
- package/dist/src/Control/Switch/index.cjs.js +0 -34
- package/dist/src/Control/Switch/index.cjs.js.map +0 -1
- package/dist/src/Control/Switch/index.d.ts +0 -3
- package/dist/src/Control/Switch/index.d.ts.map +0 -1
- package/dist/src/Control/Switch/index.esm.js +0 -27
- package/dist/src/Control/Switch/index.esm.js.map +0 -1
- package/dist/src/Control/Switch/styles.cjs.js +0 -47
- package/dist/src/Control/Switch/styles.cjs.js.map +0 -1
- package/dist/src/Control/Switch/styles.d.ts +0 -15
- package/dist/src/Control/Switch/styles.d.ts.map +0 -1
- package/dist/src/Control/Switch/styles.esm.js +0 -19
- package/dist/src/Control/Switch/styles.esm.js.map +0 -1
- package/dist/src/Control/Switch/types.d.ts +0 -5
- package/dist/src/Control/Switch/types.d.ts.map +0 -1
- package/dist/src/Control/Toggle.cjs.js +0 -37
- package/dist/src/Control/Toggle.cjs.js.map +0 -1
- package/dist/src/Control/Toggle.d.ts +0 -30
- package/dist/src/Control/Toggle.d.ts.map +0 -1
- package/dist/src/Control/Toggle.esm.js +0 -26
- package/dist/src/Control/Toggle.esm.js.map +0 -1
- package/dist/src/Control/index.d.ts +0 -5
- package/dist/src/Control/index.d.ts.map +0 -1
- package/dist/src/Floating/DropdownMenu/DropdownMenuSection.cjs.js +0 -28
- package/dist/src/Floating/DropdownMenu/DropdownMenuSection.cjs.js.map +0 -1
- package/dist/src/Floating/DropdownMenu/DropdownMenuSection.d.ts +0 -9
- package/dist/src/Floating/DropdownMenu/DropdownMenuSection.d.ts.map +0 -1
- package/dist/src/Floating/DropdownMenu/DropdownMenuSection.esm.js +0 -21
- package/dist/src/Floating/DropdownMenu/DropdownMenuSection.esm.js.map +0 -1
- package/dist/src/Floating/DropdownMenu/index.cjs.js +0 -62
- package/dist/src/Floating/DropdownMenu/index.cjs.js.map +0 -1
- package/dist/src/Floating/DropdownMenu/index.d.ts +0 -27
- package/dist/src/Floating/DropdownMenu/index.d.ts.map +0 -1
- package/dist/src/Floating/DropdownMenu/index.esm.js +0 -36
- package/dist/src/Floating/DropdownMenu/index.esm.js.map +0 -1
- package/dist/src/Floating/DropdownMenu/styles.cjs.js +0 -54
- package/dist/src/Floating/DropdownMenu/styles.cjs.js.map +0 -1
- package/dist/src/Floating/DropdownMenu/styles.d.ts +0 -22
- package/dist/src/Floating/DropdownMenu/styles.d.ts.map +0 -1
- package/dist/src/Floating/DropdownMenu/styles.esm.js +0 -38
- package/dist/src/Floating/DropdownMenu/styles.esm.js.map +0 -1
- package/dist/src/Floating/Popover/index.cjs.js +0 -66
- package/dist/src/Floating/Popover/index.cjs.js.map +0 -1
- package/dist/src/Floating/Popover/index.d.ts +0 -19
- package/dist/src/Floating/Popover/index.d.ts.map +0 -1
- package/dist/src/Floating/Popover/index.esm.js +0 -40
- package/dist/src/Floating/Popover/index.esm.js.map +0 -1
- package/dist/src/Floating/Popover/styles.cjs.js +0 -27
- package/dist/src/Floating/Popover/styles.cjs.js.map +0 -1
- package/dist/src/Floating/Popover/styles.d.ts +0 -7
- package/dist/src/Floating/Popover/styles.d.ts.map +0 -1
- package/dist/src/Floating/Popover/styles.esm.js +0 -18
- package/dist/src/Floating/Popover/styles.esm.js.map +0 -1
- package/dist/src/Floating/Tooltip/index.cjs.js +0 -136
- package/dist/src/Floating/Tooltip/index.cjs.js.map +0 -1
- package/dist/src/Floating/Tooltip/index.d.ts +0 -4
- package/dist/src/Floating/Tooltip/index.d.ts.map +0 -1
- package/dist/src/Floating/Tooltip/index.esm.js +0 -110
- package/dist/src/Floating/Tooltip/index.esm.js.map +0 -1
- package/dist/src/Floating/Tooltip/styles.cjs.js +0 -60
- package/dist/src/Floating/Tooltip/styles.cjs.js.map +0 -1
- package/dist/src/Floating/Tooltip/styles.d.ts +0 -16
- package/dist/src/Floating/Tooltip/styles.d.ts.map +0 -1
- package/dist/src/Floating/Tooltip/styles.esm.js +0 -32
- package/dist/src/Floating/Tooltip/styles.esm.js.map +0 -1
- package/dist/src/Floating/Tooltip/types.cjs.js +0 -12
- package/dist/src/Floating/Tooltip/types.cjs.js.map +0 -1
- package/dist/src/Floating/Tooltip/types.d.ts +0 -31
- package/dist/src/Floating/Tooltip/types.d.ts.map +0 -1
- package/dist/src/Floating/Tooltip/types.esm.js +0 -9
- package/dist/src/Floating/Tooltip/types.esm.js.map +0 -1
- package/dist/src/Floating/index.d.ts +0 -11
- package/dist/src/Floating/index.d.ts.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/const.cjs.js +0 -8
- package/dist/src/Inputs/Select/DesignedSelect/const.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/const.d.ts +0 -3
- package/dist/src/Inputs/Select/DesignedSelect/const.d.ts.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/const.esm.js +0 -5
- package/dist/src/Inputs/Select/DesignedSelect/const.esm.js.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/index.cjs.js +0 -251
- package/dist/src/Inputs/Select/DesignedSelect/index.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/index.d.ts +0 -12
- package/dist/src/Inputs/Select/DesignedSelect/index.d.ts.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/index.esm.js +0 -243
- package/dist/src/Inputs/Select/DesignedSelect/index.esm.js.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/styles.cjs.js +0 -49
- package/dist/src/Inputs/Select/DesignedSelect/styles.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/styles.d.ts +0 -15
- package/dist/src/Inputs/Select/DesignedSelect/styles.d.ts.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/styles.esm.js +0 -39
- package/dist/src/Inputs/Select/DesignedSelect/styles.esm.js.map +0 -1
- package/dist/src/Inputs/Select/DesignedSelect/types.d.ts +0 -12
- package/dist/src/Inputs/Select/DesignedSelect/types.d.ts.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/Option/index.cjs.js +0 -18
- package/dist/src/Inputs/Select/NativeSelect/Option/index.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/Option/index.d.ts +0 -3
- package/dist/src/Inputs/Select/NativeSelect/Option/index.d.ts.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/Option/index.esm.js +0 -16
- package/dist/src/Inputs/Select/NativeSelect/Option/index.esm.js.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/index.cjs.js +0 -55
- package/dist/src/Inputs/Select/NativeSelect/index.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/index.d.ts +0 -8
- package/dist/src/Inputs/Select/NativeSelect/index.d.ts.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/index.esm.js +0 -48
- package/dist/src/Inputs/Select/NativeSelect/index.esm.js.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/styles.cjs.js +0 -31
- package/dist/src/Inputs/Select/NativeSelect/styles.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/styles.d.ts +0 -7
- package/dist/src/Inputs/Select/NativeSelect/styles.d.ts.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/styles.esm.js +0 -23
- package/dist/src/Inputs/Select/NativeSelect/styles.esm.js.map +0 -1
- package/dist/src/Inputs/Select/NativeSelect/types.d.ts +0 -11
- package/dist/src/Inputs/Select/NativeSelect/types.d.ts.map +0 -1
- package/dist/src/Inputs/Select/Option/index.cjs.js +0 -11
- package/dist/src/Inputs/Select/Option/index.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/Option/index.d.ts +0 -6
- package/dist/src/Inputs/Select/Option/index.d.ts.map +0 -1
- package/dist/src/Inputs/Select/Option/index.esm.js +0 -9
- package/dist/src/Inputs/Select/Option/index.esm.js.map +0 -1
- package/dist/src/Inputs/Select/index.cjs.js +0 -81
- package/dist/src/Inputs/Select/index.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/index.d.ts +0 -10
- package/dist/src/Inputs/Select/index.d.ts.map +0 -1
- package/dist/src/Inputs/Select/index.esm.js +0 -75
- package/dist/src/Inputs/Select/index.esm.js.map +0 -1
- package/dist/src/Inputs/Select/styles.cjs.js +0 -28
- package/dist/src/Inputs/Select/styles.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/styles.d.ts +0 -6
- package/dist/src/Inputs/Select/styles.d.ts.map +0 -1
- package/dist/src/Inputs/Select/styles.esm.js +0 -20
- package/dist/src/Inputs/Select/styles.esm.js.map +0 -1
- package/dist/src/Inputs/Select/types.d.ts +0 -35
- package/dist/src/Inputs/Select/types.d.ts.map +0 -1
- package/dist/src/Inputs/Select/utils.cjs.js +0 -44
- package/dist/src/Inputs/Select/utils.cjs.js.map +0 -1
- package/dist/src/Inputs/Select/utils.d.ts +0 -2
- package/dist/src/Inputs/Select/utils.d.ts.map +0 -1
- package/dist/src/Inputs/Select/utils.esm.js +0 -42
- package/dist/src/Inputs/Select/utils.esm.js.map +0 -1
- package/dist/src/Inputs/TextInput/index.cjs.js +0 -95
- package/dist/src/Inputs/TextInput/index.cjs.js.map +0 -1
- package/dist/src/Inputs/TextInput/index.d.ts +0 -5
- package/dist/src/Inputs/TextInput/index.d.ts.map +0 -1
- package/dist/src/Inputs/TextInput/index.esm.js +0 -87
- package/dist/src/Inputs/TextInput/index.esm.js.map +0 -1
- package/dist/src/Inputs/TextInput/styles.cjs.js +0 -42
- package/dist/src/Inputs/TextInput/styles.cjs.js.map +0 -1
- package/dist/src/Inputs/TextInput/styles.d.ts +0 -17
- package/dist/src/Inputs/TextInput/styles.d.ts.map +0 -1
- package/dist/src/Inputs/TextInput/styles.esm.js +0 -28
- package/dist/src/Inputs/TextInput/styles.esm.js.map +0 -1
- package/dist/src/Inputs/TextInput/types.d.ts +0 -19
- package/dist/src/Inputs/TextInput/types.d.ts.map +0 -1
- package/dist/src/Inputs/index.d.ts +0 -3
- package/dist/src/Inputs/index.d.ts.map +0 -1
- package/dist/src/Logos/EnvLabel/index.cjs.js +0 -28
- package/dist/src/Logos/EnvLabel/index.cjs.js.map +0 -1
- package/dist/src/Logos/EnvLabel/index.d.ts +0 -3
- package/dist/src/Logos/EnvLabel/index.d.ts.map +0 -1
- package/dist/src/Logos/EnvLabel/index.esm.js +0 -26
- package/dist/src/Logos/EnvLabel/index.esm.js.map +0 -1
- package/dist/src/Logos/RememberLogo/index.cjs.js +0 -91
- package/dist/src/Logos/RememberLogo/index.cjs.js.map +0 -1
- package/dist/src/Logos/RememberLogo/index.d.ts +0 -5
- package/dist/src/Logos/RememberLogo/index.d.ts.map +0 -1
- package/dist/src/Logos/RememberLogo/index.esm.js +0 -83
- package/dist/src/Logos/RememberLogo/index.esm.js.map +0 -1
- package/dist/src/Logos/RememberMobileLogo/index.cjs.js +0 -52
- package/dist/src/Logos/RememberMobileLogo/index.cjs.js.map +0 -1
- package/dist/src/Logos/RememberMobileLogo/index.d.ts +0 -3
- package/dist/src/Logos/RememberMobileLogo/index.d.ts.map +0 -1
- package/dist/src/Logos/RememberMobileLogo/index.esm.js +0 -45
- package/dist/src/Logos/RememberMobileLogo/index.esm.js.map +0 -1
- package/dist/src/Logos/RememberServiceLogo/index.cjs.js +0 -47
- package/dist/src/Logos/RememberServiceLogo/index.cjs.js.map +0 -1
- package/dist/src/Logos/RememberServiceLogo/index.d.ts +0 -9
- package/dist/src/Logos/RememberServiceLogo/index.d.ts.map +0 -1
- package/dist/src/Logos/RememberServiceLogo/index.esm.js +0 -40
- package/dist/src/Logos/RememberServiceLogo/index.esm.js.map +0 -1
- package/dist/src/Logos/RememberServiceLogo/style.cjs.js +0 -16
- package/dist/src/Logos/RememberServiceLogo/style.cjs.js.map +0 -1
- package/dist/src/Logos/RememberServiceLogo/style.d.ts +0 -3
- package/dist/src/Logos/RememberServiceLogo/style.d.ts.map +0 -1
- package/dist/src/Logos/RememberServiceLogo/style.esm.js +0 -9
- package/dist/src/Logos/RememberServiceLogo/style.esm.js.map +0 -1
- package/dist/src/Logos/RememberSquareLogo/index.cjs.js +0 -68
- package/dist/src/Logos/RememberSquareLogo/index.cjs.js.map +0 -1
- package/dist/src/Logos/RememberSquareLogo/index.d.ts +0 -3
- package/dist/src/Logos/RememberSquareLogo/index.d.ts.map +0 -1
- package/dist/src/Logos/RememberSquareLogo/index.esm.js +0 -61
- package/dist/src/Logos/RememberSquareLogo/index.esm.js.map +0 -1
- package/dist/src/Logos/index.d.ts +0 -5
- package/dist/src/Logos/index.d.ts.map +0 -1
- package/dist/src/Logos/types.d.ts +0 -12
- package/dist/src/Logos/types.d.ts.map +0 -1
- package/dist/src/Modals/Dialog/index.cjs.js +0 -95
- package/dist/src/Modals/Dialog/index.cjs.js.map +0 -1
- package/dist/src/Modals/Dialog/index.d.ts +0 -32
- package/dist/src/Modals/Dialog/index.d.ts.map +0 -1
- package/dist/src/Modals/Dialog/index.esm.js +0 -88
- package/dist/src/Modals/Dialog/index.esm.js.map +0 -1
- package/dist/src/Modals/Dialog/styles.cjs.js +0 -51
- package/dist/src/Modals/Dialog/styles.cjs.js.map +0 -1
- package/dist/src/Modals/Dialog/styles.d.ts +0 -19
- package/dist/src/Modals/Dialog/styles.d.ts.map +0 -1
- package/dist/src/Modals/Dialog/styles.esm.js +0 -18
- package/dist/src/Modals/Dialog/styles.esm.js.map +0 -1
- package/dist/src/Modals/index.d.ts +0 -2
- package/dist/src/Modals/index.d.ts.map +0 -1
- package/dist/src/Paginations/CompactPagination/index.cjs.js +0 -98
- package/dist/src/Paginations/CompactPagination/index.cjs.js.map +0 -1
- package/dist/src/Paginations/CompactPagination/index.d.ts +0 -3
- package/dist/src/Paginations/CompactPagination/index.d.ts.map +0 -1
- package/dist/src/Paginations/CompactPagination/index.esm.js +0 -96
- package/dist/src/Paginations/CompactPagination/index.esm.js.map +0 -1
- package/dist/src/Paginations/Pagination/index.cjs.js +0 -116
- package/dist/src/Paginations/Pagination/index.cjs.js.map +0 -1
- package/dist/src/Paginations/Pagination/index.d.ts +0 -3
- package/dist/src/Paginations/Pagination/index.d.ts.map +0 -1
- package/dist/src/Paginations/Pagination/index.esm.js +0 -114
- package/dist/src/Paginations/Pagination/index.esm.js.map +0 -1
- package/dist/src/Paginations/index.d.ts +0 -3
- package/dist/src/Paginations/index.d.ts.map +0 -1
- package/dist/src/Paginations/styles.cjs.js +0 -37
- package/dist/src/Paginations/styles.cjs.js.map +0 -1
- package/dist/src/Paginations/styles.d.ts +0 -26
- package/dist/src/Paginations/styles.d.ts.map +0 -1
- package/dist/src/Paginations/styles.esm.js +0 -23
- package/dist/src/Paginations/styles.esm.js.map +0 -1
- package/dist/src/Paginations/types.d.ts +0 -17
- package/dist/src/Paginations/types.d.ts.map +0 -1
- package/dist/src/Paginations/usePagination.cjs.js +0 -40
- package/dist/src/Paginations/usePagination.cjs.js.map +0 -1
- package/dist/src/Paginations/usePagination.d.ts +0 -15
- package/dist/src/Paginations/usePagination.d.ts.map +0 -1
- package/dist/src/Paginations/usePagination.esm.js +0 -38
- package/dist/src/Paginations/usePagination.esm.js.map +0 -1
- package/dist/src/hooks/useMouseEventAway.cjs.js +0 -27
- package/dist/src/hooks/useMouseEventAway.cjs.js.map +0 -1
- package/dist/src/hooks/useMouseEventAway.d.ts +0 -5
- package/dist/src/hooks/useMouseEventAway.d.ts.map +0 -1
- package/dist/src/hooks/useMouseEventAway.esm.js +0 -25
- package/dist/src/hooks/useMouseEventAway.esm.js.map +0 -1
- package/dist/src/index.cjs.js +0 -79
- package/dist/src/index.cjs.js.map +0 -1
- package/dist/src/index.d.ts +0 -11
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.esm.js +0 -31
- package/dist/src/index.esm.js.map +0 -1
- package/dist/src/stories/common.styles.d.ts +0 -18
- package/dist/src/stories/common.styles.d.ts.map +0 -1
- package/dist/src/stories/util.d.ts +0 -7
- package/dist/src/stories/util.d.ts.map +0 -1
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
5
|
-
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
6
|
-
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
7
|
-
var react = require('react');
|
|
8
|
-
var icon = require('@remember-web/icon');
|
|
9
|
-
var useMouseEventAway = require('../../../hooks/useMouseEventAway.cjs.js');
|
|
10
|
-
var utils = require('../utils.cjs.js');
|
|
11
|
-
var index = require('../Option/index.cjs.js');
|
|
12
|
-
var styles = require('../styles.cjs.js');
|
|
13
|
-
var _const = require('./const.cjs.js');
|
|
14
|
-
var styles$1 = require('./styles.cjs.js');
|
|
15
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
16
|
-
|
|
17
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
-
|
|
19
|
-
var _defineProperty__default = /*#__PURE__*/_interopDefault(_defineProperty);
|
|
20
|
-
var _slicedToArray__default = /*#__PURE__*/_interopDefault(_slicedToArray);
|
|
21
|
-
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefault(_objectWithoutProperties);
|
|
22
|
-
|
|
23
|
-
var _excluded = ["children", "value", "maxHeight", "placeholder", "onChange", "width", "extendDirection", "disabled", "onClick"];
|
|
24
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
26
|
-
var DesignedSelect = function DesignedSelect(_ref, ref) {
|
|
27
|
-
var children = _ref.children,
|
|
28
|
-
value = _ref.value,
|
|
29
|
-
_ref$maxHeight = _ref.maxHeight,
|
|
30
|
-
maxHeight = _ref$maxHeight === void 0 ? _const.DEFAULT_MAX_HEIGHT_PX : _ref$maxHeight,
|
|
31
|
-
placeholder = _ref.placeholder,
|
|
32
|
-
onChange = _ref.onChange,
|
|
33
|
-
width = _ref.width,
|
|
34
|
-
extendDirection = _ref.extendDirection,
|
|
35
|
-
disabled = _ref.disabled,
|
|
36
|
-
onClick = _ref.onClick,
|
|
37
|
-
props = _objectWithoutProperties__default.default(_ref, _excluded);
|
|
38
|
-
var id = react.useId();
|
|
39
|
-
var _useState = react.useState('none'),
|
|
40
|
-
_useState2 = _slicedToArray__default.default(_useState, 2),
|
|
41
|
-
expandedDirection = _useState2[0],
|
|
42
|
-
_setExpandedDirection = _useState2[1];
|
|
43
|
-
var selectContainerRef = react.useRef(null);
|
|
44
|
-
var selectListRef = react.useRef(null);
|
|
45
|
-
var clickAwayRef = useMouseEventAway('pointerdown', function () {
|
|
46
|
-
setExpandedDirection('none');
|
|
47
|
-
});
|
|
48
|
-
var setExpandedDirection = react.useCallback(function () {
|
|
49
|
-
if (disabled) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
_setExpandedDirection.apply(void 0, arguments);
|
|
53
|
-
}, [disabled]);
|
|
54
|
-
var options = react.Children.toArray(children).filter(function (child) {
|
|
55
|
-
return /*#__PURE__*/react.isValidElement(child) && child.type === index.OptionHolder;
|
|
56
|
-
}).map(function (_ref2) {
|
|
57
|
-
var _ref2$props = _ref2.props,
|
|
58
|
-
_children = _ref2$props.children,
|
|
59
|
-
_value = _ref2$props.value,
|
|
60
|
-
_disabled = _ref2$props.disabled;
|
|
61
|
-
return {
|
|
62
|
-
label: _children,
|
|
63
|
-
value: _value,
|
|
64
|
-
disabled: _disabled
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
|
-
var selectedOption = options.find(function (option) {
|
|
68
|
-
return value === option.value;
|
|
69
|
-
});
|
|
70
|
-
var isExpanded = expandedDirection !== 'none';
|
|
71
|
-
var onSelectOption = function onSelectOption(_value, _label) {
|
|
72
|
-
var _selectContainerRef$c;
|
|
73
|
-
onChange === null || onChange === void 0 || onChange(_value, _label);
|
|
74
|
-
setExpandedDirection('none');
|
|
75
|
-
(_selectContainerRef$c = selectContainerRef.current) === null || _selectContainerRef$c === void 0 || _selectContainerRef$c.focus();
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
// 리스트가 하단으로 나와야하는지 상단으로 나와야하는지 계산하는 함수
|
|
79
|
-
// 현재 Viewport기준으로 Select컴포넌트가 아래로 확장되었을 때 뷰포트 내에 리스트박스가 노출될 수 있다면 하단으로 확장, 아니라면 상단으로 확장
|
|
80
|
-
// direction이 props로 전달되었다면 해당 방향으로 확장
|
|
81
|
-
var expandSelectListAtComputedPosition = function expandSelectListAtComputedPosition() {
|
|
82
|
-
var _selectContainerRef$c2;
|
|
83
|
-
if (extendDirection) {
|
|
84
|
-
setExpandedDirection(extendDirection);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
var selectContainerRect = (_selectContainerRef$c2 = selectContainerRef.current) === null || _selectContainerRef$c2 === void 0 ? void 0 : _selectContainerRef$c2.getBoundingClientRect();
|
|
88
|
-
if (!selectContainerRect) {
|
|
89
|
-
setExpandedDirection('below');
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// SelectOptionWrapper가 마운트되기 전에 계산해야 하기 때문에 clientHeight를 사용하지 못하고 직접 계산
|
|
94
|
-
var currentSelectHeight = Math.min(maxHeight, options.length * _const.OPTION_ITEM_HEIGHT_PX);
|
|
95
|
-
var bottomGap = document.body.clientHeight - selectContainerRect.bottom;
|
|
96
|
-
setExpandedDirection(currentSelectHeight > bottomGap ? 'above' : 'below');
|
|
97
|
-
};
|
|
98
|
-
var optionItemRef = react.useCallback(function (ele) {
|
|
99
|
-
if (!ele) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// 선택한 요소가 없을때는 첫번째 요소에 focus
|
|
104
|
-
if (!value && !ele.previousSibling) {
|
|
105
|
-
setTimeout(function () {
|
|
106
|
-
return ele.focus();
|
|
107
|
-
});
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// 선택한 요소가 있다면 해당 요소에 focus
|
|
112
|
-
var optionValue = ele.dataset.optionValue || null;
|
|
113
|
-
if (optionValue === value) {
|
|
114
|
-
setTimeout(function () {
|
|
115
|
-
return ele.focus();
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
}, [value]);
|
|
119
|
-
var keyDownHandler = function keyDownHandler(e) {
|
|
120
|
-
var _selectContainerRef$c3;
|
|
121
|
-
var focusedElement = document.activeElement;
|
|
122
|
-
if (!focusedElement || !(focusedElement instanceof HTMLElement)) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
switch (e.key) {
|
|
126
|
-
case 'Tab':
|
|
127
|
-
if (isExpanded) {
|
|
128
|
-
e.preventDefault();
|
|
129
|
-
}
|
|
130
|
-
break;
|
|
131
|
-
case 'ArrowUp':
|
|
132
|
-
e.preventDefault();
|
|
133
|
-
if (!isExpanded) {
|
|
134
|
-
expandSelectListAtComputedPosition();
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
utils.focusSibling(focusedElement, 'previous');
|
|
138
|
-
break;
|
|
139
|
-
case 'ArrowDown':
|
|
140
|
-
e.preventDefault();
|
|
141
|
-
if (!isExpanded) {
|
|
142
|
-
expandSelectListAtComputedPosition();
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
utils.focusSibling(focusedElement, 'next');
|
|
146
|
-
break;
|
|
147
|
-
case 'Escape':
|
|
148
|
-
e.preventDefault();
|
|
149
|
-
setExpandedDirection('none');
|
|
150
|
-
(_selectContainerRef$c3 = selectContainerRef.current) === null || _selectContainerRef$c3 === void 0 || _selectContainerRef$c3.focus();
|
|
151
|
-
break;
|
|
152
|
-
case 'Enter':
|
|
153
|
-
case ' ':
|
|
154
|
-
e.preventDefault();
|
|
155
|
-
if (e.target === e.currentTarget) {
|
|
156
|
-
if (isExpanded) {
|
|
157
|
-
setExpandedDirection('none');
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
expandSelectListAtComputedPosition();
|
|
161
|
-
}
|
|
162
|
-
if (focusedElement !== null && focusedElement !== void 0 && focusedElement.matches('[data-option-value]') && focusedElement instanceof HTMLLIElement && focusedElement.dataset.optionValue) {
|
|
163
|
-
onSelectOption(focusedElement.dataset.optionValue, focusedElement.innerText);
|
|
164
|
-
}
|
|
165
|
-
break;
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
return /*#__PURE__*/jsxRuntime.jsxs(styles.SelectContainer, _objectSpread(_objectSpread({
|
|
169
|
-
ref: function ref(el) {
|
|
170
|
-
if (!el) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
selectContainerRef.current = el;
|
|
174
|
-
clickAwayRef.current = el;
|
|
175
|
-
},
|
|
176
|
-
$width: width,
|
|
177
|
-
tabIndex: disabled ? undefined : 0,
|
|
178
|
-
"aria-expanded": isExpanded,
|
|
179
|
-
"aria-haspopup": "listbox",
|
|
180
|
-
"aria-disabled": disabled,
|
|
181
|
-
onKeyDown: keyDownHandler
|
|
182
|
-
}, props), {}, {
|
|
183
|
-
children: [/*#__PURE__*/jsxRuntime.jsx(styles$1.StyledSelect, {
|
|
184
|
-
ref: ref,
|
|
185
|
-
onClick: onClick,
|
|
186
|
-
expandedDirection: expandedDirection,
|
|
187
|
-
isPlaceholder: !selectedOption && !!placeholder,
|
|
188
|
-
onPointerDown: function onPointerDown(e) {
|
|
189
|
-
if (isExpanded) {
|
|
190
|
-
setExpandedDirection('none');
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
e.stopPropagation();
|
|
194
|
-
expandSelectListAtComputedPosition();
|
|
195
|
-
},
|
|
196
|
-
children: (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) || placeholder || 'ㅤ'
|
|
197
|
-
}), /*#__PURE__*/jsxRuntime.jsx(styles$1.SelectDownIcon, {
|
|
198
|
-
children: isExpanded ? /*#__PURE__*/jsxRuntime.jsx(icon.IconArrow2Up, {
|
|
199
|
-
size: "small"
|
|
200
|
-
}) : /*#__PURE__*/jsxRuntime.jsx(icon.IconArrow2Down, {
|
|
201
|
-
size: "small"
|
|
202
|
-
})
|
|
203
|
-
}), isExpanded && /*#__PURE__*/jsxRuntime.jsx(styles$1.SelectOptionWrapper, {
|
|
204
|
-
role: "listbox",
|
|
205
|
-
"aria-activedescendant": value != null ? "".concat(id, "-select-option-").concat(value) : undefined,
|
|
206
|
-
ref: selectListRef,
|
|
207
|
-
expandedDirection: expandedDirection,
|
|
208
|
-
maxHeight: maxHeight,
|
|
209
|
-
children: options.map(function (_ref3) {
|
|
210
|
-
var optionValue = _ref3.value,
|
|
211
|
-
label = _ref3.label,
|
|
212
|
-
_disabled = _ref3.disabled;
|
|
213
|
-
return /*#__PURE__*/jsxRuntime.jsx(styles$1.SelectOption, {
|
|
214
|
-
id: "".concat(id, "-select-option-").concat(optionValue),
|
|
215
|
-
role: "option",
|
|
216
|
-
tabIndex: _disabled ? undefined : 0,
|
|
217
|
-
"aria-selected": optionValue === value,
|
|
218
|
-
"aria-disabled": _disabled,
|
|
219
|
-
ref: optionItemRef,
|
|
220
|
-
isSelected: optionValue === value,
|
|
221
|
-
"data-option-value": optionValue
|
|
222
|
-
// onMouseEnter를 사용하게 되면 키보드로 스크롤 할 때도 focus가 이동하게 되기 때문에 onMouseMove를 사용
|
|
223
|
-
,
|
|
224
|
-
onMouseMove: function onMouseMove(e) {
|
|
225
|
-
if (e.currentTarget === document.activeElement) {
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
e.currentTarget.focus({
|
|
229
|
-
preventScroll: true
|
|
230
|
-
});
|
|
231
|
-
},
|
|
232
|
-
onFocus: function onFocus() {
|
|
233
|
-
var _selectListRef$curren;
|
|
234
|
-
(_selectListRef$curren = selectListRef.current) === null || _selectListRef$curren === void 0 || _selectListRef$curren.setAttribute('aria-activedescendant', "".concat(id, "-select-option-").concat(optionValue));
|
|
235
|
-
},
|
|
236
|
-
onClick: function onClick() {
|
|
237
|
-
if (_disabled) {
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
onSelectOption(optionValue, label);
|
|
241
|
-
},
|
|
242
|
-
children: label
|
|
243
|
-
}, optionValue);
|
|
244
|
-
})
|
|
245
|
-
})]
|
|
246
|
-
}));
|
|
247
|
-
};
|
|
248
|
-
var DesignedSelect$1 = /*#__PURE__*/react.forwardRef(DesignedSelect);
|
|
249
|
-
|
|
250
|
-
module.exports = DesignedSelect$1;
|
|
251
|
-
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../../src/Inputs/Select/DesignedSelect/index.tsx"],"sourcesContent":["'use client';\n\nimport type { KeyboardEvent, ReactNode, Ref, RefCallback } from 'react';\nimport {\n Children,\n forwardRef,\n isValidElement,\n useCallback,\n useRef,\n useState,\n useId,\n} from 'react';\nimport { IconArrow2Down, IconArrow2Up } from '@remember-web/icon';\n\nimport useMouseEventAway from '@/hooks/useMouseEventAway';\n\nimport { focusSibling } from '../utils';\nimport { OptionHolder } from '../Option';\nimport { SelectContainer } from '../styles';\nimport type { OptionElementType, SelectValue } from '../types';\nimport { DEFAULT_MAX_HEIGHT_PX, OPTION_ITEM_HEIGHT_PX } from './const';\nimport {\n SelectDownIcon,\n SelectOption,\n SelectOptionWrapper,\n StyledSelect,\n} from './styles';\nimport type { DesignedSelectInternalProps, ExpandedType } from './types';\n\nconst DesignedSelect = <Value extends SelectValue>(\n {\n children,\n value,\n maxHeight = DEFAULT_MAX_HEIGHT_PX,\n placeholder,\n onChange,\n width,\n extendDirection,\n disabled,\n onClick,\n ...props\n }: DesignedSelectInternalProps<Value>,\n ref?: Ref<HTMLDivElement>\n) => {\n const id = useId();\n const [expandedDirection, _setExpandedDirection] =\n useState<ExpandedType>('none');\n const selectContainerRef = useRef<HTMLDivElement | null>(null);\n const selectListRef = useRef<HTMLUListElement | null>(null);\n const clickAwayRef = useMouseEventAway<HTMLDivElement, 'pointerdown'>(\n 'pointerdown',\n () => {\n setExpandedDirection('none');\n }\n );\n\n const setExpandedDirection = useCallback(\n (...args: Parameters<typeof _setExpandedDirection>) => {\n if (disabled) {\n return;\n }\n _setExpandedDirection(...args);\n },\n [disabled]\n );\n\n const options = Children.toArray(children)\n .filter(\n (child): child is OptionElementType<Value> =>\n isValidElement(child) && child.type === OptionHolder\n )\n .map(\n ({\n props: { children: _children, value: _value, disabled: _disabled },\n }) => ({\n label: _children,\n value: _value,\n disabled: _disabled,\n })\n );\n\n const selectedOption = options.find((option) => value === option.value);\n\n const isExpanded = expandedDirection !== 'none';\n\n const onSelectOption = (_value: Value, _label: ReactNode) => {\n onChange?.(_value, _label);\n setExpandedDirection('none');\n selectContainerRef.current?.focus();\n };\n\n // 리스트가 하단으로 나와야하는지 상단으로 나와야하는지 계산하는 함수\n // 현재 Viewport기준으로 Select컴포넌트가 아래로 확장되었을 때 뷰포트 내에 리스트박스가 노출될 수 있다면 하단으로 확장, 아니라면 상단으로 확장\n // direction이 props로 전달되었다면 해당 방향으로 확장\n const expandSelectListAtComputedPosition = () => {\n if (extendDirection) {\n setExpandedDirection(extendDirection);\n return;\n }\n\n const selectContainerRect =\n selectContainerRef.current?.getBoundingClientRect();\n\n if (!selectContainerRect) {\n setExpandedDirection('below');\n return;\n }\n\n // SelectOptionWrapper가 마운트되기 전에 계산해야 하기 때문에 clientHeight를 사용하지 못하고 직접 계산\n const currentSelectHeight = Math.min(\n maxHeight,\n options.length * OPTION_ITEM_HEIGHT_PX\n );\n const bottomGap = document.body.clientHeight - selectContainerRect.bottom;\n\n setExpandedDirection(currentSelectHeight > bottomGap ? 'above' : 'below');\n };\n\n const optionItemRef = useCallback<RefCallback<HTMLLIElement>>(\n (ele) => {\n if (!ele) {\n return;\n }\n\n // 선택한 요소가 없을때는 첫번째 요소에 focus\n if (!value && !ele.previousSibling) {\n setTimeout(() => ele.focus());\n return;\n }\n\n // 선택한 요소가 있다면 해당 요소에 focus\n const optionValue = ele.dataset.optionValue || null;\n if (optionValue === value) {\n setTimeout(() => ele.focus());\n }\n },\n [value]\n );\n\n const keyDownHandler = (e: KeyboardEvent) => {\n const focusedElement = document.activeElement;\n\n if (!focusedElement || !(focusedElement instanceof HTMLElement)) {\n return;\n }\n\n switch (e.key) {\n case 'Tab':\n if (isExpanded) {\n e.preventDefault();\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isExpanded) {\n expandSelectListAtComputedPosition();\n break;\n }\n focusSibling(focusedElement, 'previous');\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isExpanded) {\n expandSelectListAtComputedPosition();\n break;\n }\n focusSibling(focusedElement, 'next');\n break;\n case 'Escape':\n e.preventDefault();\n setExpandedDirection('none');\n selectContainerRef.current?.focus();\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n\n if (e.target === e.currentTarget) {\n if (isExpanded) {\n setExpandedDirection('none');\n return;\n }\n expandSelectListAtComputedPosition();\n }\n\n if (\n focusedElement?.matches('[data-option-value]') &&\n focusedElement instanceof HTMLLIElement &&\n focusedElement.dataset.optionValue\n ) {\n onSelectOption(\n focusedElement.dataset.optionValue as Value,\n focusedElement.innerText\n );\n }\n break;\n default:\n break;\n }\n };\n\n return (\n <SelectContainer\n ref={(el) => {\n if (!el) {\n return;\n }\n selectContainerRef.current = el;\n clickAwayRef.current = el;\n }}\n $width={width}\n tabIndex={disabled ? undefined : 0}\n aria-expanded={isExpanded}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n onKeyDown={keyDownHandler}\n {...props}\n >\n <StyledSelect\n ref={ref}\n onClick={onClick}\n expandedDirection={expandedDirection}\n isPlaceholder={!selectedOption && !!placeholder}\n onPointerDown={(e) => {\n if (isExpanded) {\n setExpandedDirection('none');\n return;\n }\n\n e.stopPropagation();\n\n expandSelectListAtComputedPosition();\n }}\n >\n {selectedOption?.label || placeholder || 'ㅤ'}\n </StyledSelect>\n <SelectDownIcon>\n {isExpanded ? (\n <IconArrow2Up size=\"small\" />\n ) : (\n <IconArrow2Down size=\"small\" />\n )}\n </SelectDownIcon>\n {isExpanded && (\n <SelectOptionWrapper\n role=\"listbox\"\n aria-activedescendant={\n value != null ? `${id}-select-option-${value}` : undefined\n }\n ref={selectListRef}\n expandedDirection={expandedDirection}\n maxHeight={maxHeight}\n >\n {options.map(({ value: optionValue, label, disabled: _disabled }) => (\n <SelectOption\n id={`${id}-select-option-${optionValue}`}\n role=\"option\"\n key={optionValue}\n tabIndex={_disabled ? undefined : 0}\n aria-selected={optionValue === value}\n aria-disabled={_disabled}\n ref={optionItemRef}\n isSelected={optionValue === value}\n data-option-value={optionValue}\n // onMouseEnter를 사용하게 되면 키보드로 스크롤 할 때도 focus가 이동하게 되기 때문에 onMouseMove를 사용\n onMouseMove={(e) => {\n if (e.currentTarget === document.activeElement) {\n return;\n }\n e.currentTarget.focus({\n preventScroll: true,\n });\n }}\n onFocus={() => {\n selectListRef.current?.setAttribute(\n 'aria-activedescendant',\n `${id}-select-option-${optionValue}`\n );\n }}\n onClick={() => {\n if (_disabled) {\n return;\n }\n\n onSelectOption(optionValue, label);\n }}\n >\n {label}\n </SelectOption>\n ))}\n </SelectOptionWrapper>\n )}\n </SelectContainer>\n );\n};\n\nexport default forwardRef(DesignedSelect);\n"],"names":["maxHeight","props","expandedDirection","_setExpandedDirection","label","value","disabled","setTimeout","expandSelectListAtComputedPosition","focusSibling","ref","$width","tabIndex","onKeyDown","onClick","isPlaceholder","onPointerDown","children","size","role","onMouseMove","e","preventScroll","onSelectOption"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAa;AAAA;AAAA;AA6Bb;AAcK;;;AAVDA;;;;;;;AAOGC;AAIL;AACA;;AAAOC;AAAmBC;AAE1B;AACA;AACA;;AAIE;AAGF;AAEI;AACE;AACF;AACAA;AACF;AAIF;;AAG0D;AAGtD;;;;;AAGEC;AACAC;AACAC;;AACD;AAGL;AAA2C;;AAE3C;;AAE6D;;;AAG3D;;;AAGF;AACA;AACA;AACA;AAAiD;AAC/C;;AAEE;AACF;AAEA;;;AAKE;AACF;;AAEA;AACA;;;;AASF;;AAGM;AACF;;AAEA;AACA;AACEC;AAAW;;AACX;AACF;;AAEA;;;AAGEA;AAAW;;AACb;AACF;AAIF;AAA6C;AAC3C;;AAGE;AACF;;AAGE;AACE;;AAEA;AACA;AACF;;;AAGIC;AACA;AACF;AACAC;AACA;AACF;;;AAGID;AACA;AACF;AACAC;AACA;AACF;;;AAGE;AACA;AACF;AACA;;AAGE;AACE;;AAEE;AACF;AACAD;AACF;;;AAWA;AACA;AAGJ;;AAGF;AAEIE;;AAEI;AACF;;;;AAIFC;AACAC;AACA;AACA;AACA;AACAC;AAA0B;;AAIxBH;AACAI;AACAZ;AACAa;AACAC;AACE;;AAEE;AACF;;AAIAR;;;AAG0C;AAE/BS;AAEGC;AAAY;AAEVA;;AACjB;AAICC;AACA;AAGAT;AACAR;AACAF;AAAqBiB;AAER;;;;;AAGTE;AAEAP;;AAEA;AACAF;;;AAGA;AAAA;AACAU;AACE;AACE;AACF;AACAC;AACEC;AACF;;;AAEa;;;;AAOb;AACE;AACF;AAEAC;;AACAN;AAEI;;AAER;AAEL;AAGP;AAEA;;"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
import type { OptionElementType, SelectValue } from '../types';
|
|
3
|
-
declare const _default: import("react").ForwardRefExoticComponent<Omit<import("react").SelectHTMLAttributes<HTMLDivElement>, `aria-${string}` | "children" | "onChange"> & {
|
|
4
|
-
children: OptionElementType<SelectValue> | OptionElementType<SelectValue>[];
|
|
5
|
-
onChange?: ((targetValue: SelectValue, targetLabel: ReactNode) => void | Promise<void>) | undefined;
|
|
6
|
-
maxHeight?: number | undefined;
|
|
7
|
-
width?: string | number | undefined;
|
|
8
|
-
placeholder?: string | undefined;
|
|
9
|
-
extendDirection?: "above" | "below" | undefined;
|
|
10
|
-
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
11
|
-
export default _default;
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/Inputs/Select/DesignedSelect/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,SAAS,EAAoB,MAAM,OAAO,CAAC;AAiBxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;;;;;;;;;AAqR/D,wBAA0C"}
|
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
|
-
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
4
|
-
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
5
|
-
import { forwardRef, useId, useState, useRef, useCallback, Children, isValidElement } from 'react';
|
|
6
|
-
import { IconArrow2Up, IconArrow2Down } from '@remember-web/icon';
|
|
7
|
-
import useMouseEventAway from '../../../hooks/useMouseEventAway.esm.js';
|
|
8
|
-
import { focusSibling } from '../utils.esm.js';
|
|
9
|
-
import { OptionHolder } from '../Option/index.esm.js';
|
|
10
|
-
import { SelectContainer } from '../styles.esm.js';
|
|
11
|
-
import { DEFAULT_MAX_HEIGHT_PX, OPTION_ITEM_HEIGHT_PX } from './const.esm.js';
|
|
12
|
-
import { StyledSelect, SelectDownIcon, SelectOptionWrapper, SelectOption } from './styles.esm.js';
|
|
13
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
14
|
-
|
|
15
|
-
var _excluded = ["children", "value", "maxHeight", "placeholder", "onChange", "width", "extendDirection", "disabled", "onClick"];
|
|
16
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
|
-
var DesignedSelect = function DesignedSelect(_ref, ref) {
|
|
19
|
-
var children = _ref.children,
|
|
20
|
-
value = _ref.value,
|
|
21
|
-
_ref$maxHeight = _ref.maxHeight,
|
|
22
|
-
maxHeight = _ref$maxHeight === void 0 ? DEFAULT_MAX_HEIGHT_PX : _ref$maxHeight,
|
|
23
|
-
placeholder = _ref.placeholder,
|
|
24
|
-
onChange = _ref.onChange,
|
|
25
|
-
width = _ref.width,
|
|
26
|
-
extendDirection = _ref.extendDirection,
|
|
27
|
-
disabled = _ref.disabled,
|
|
28
|
-
onClick = _ref.onClick,
|
|
29
|
-
props = _objectWithoutProperties(_ref, _excluded);
|
|
30
|
-
var id = useId();
|
|
31
|
-
var _useState = useState('none'),
|
|
32
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
33
|
-
expandedDirection = _useState2[0],
|
|
34
|
-
_setExpandedDirection = _useState2[1];
|
|
35
|
-
var selectContainerRef = useRef(null);
|
|
36
|
-
var selectListRef = useRef(null);
|
|
37
|
-
var clickAwayRef = useMouseEventAway('pointerdown', function () {
|
|
38
|
-
setExpandedDirection('none');
|
|
39
|
-
});
|
|
40
|
-
var setExpandedDirection = useCallback(function () {
|
|
41
|
-
if (disabled) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
_setExpandedDirection.apply(void 0, arguments);
|
|
45
|
-
}, [disabled]);
|
|
46
|
-
var options = Children.toArray(children).filter(function (child) {
|
|
47
|
-
return /*#__PURE__*/isValidElement(child) && child.type === OptionHolder;
|
|
48
|
-
}).map(function (_ref2) {
|
|
49
|
-
var _ref2$props = _ref2.props,
|
|
50
|
-
_children = _ref2$props.children,
|
|
51
|
-
_value = _ref2$props.value,
|
|
52
|
-
_disabled = _ref2$props.disabled;
|
|
53
|
-
return {
|
|
54
|
-
label: _children,
|
|
55
|
-
value: _value,
|
|
56
|
-
disabled: _disabled
|
|
57
|
-
};
|
|
58
|
-
});
|
|
59
|
-
var selectedOption = options.find(function (option) {
|
|
60
|
-
return value === option.value;
|
|
61
|
-
});
|
|
62
|
-
var isExpanded = expandedDirection !== 'none';
|
|
63
|
-
var onSelectOption = function onSelectOption(_value, _label) {
|
|
64
|
-
var _selectContainerRef$c;
|
|
65
|
-
onChange === null || onChange === void 0 || onChange(_value, _label);
|
|
66
|
-
setExpandedDirection('none');
|
|
67
|
-
(_selectContainerRef$c = selectContainerRef.current) === null || _selectContainerRef$c === void 0 || _selectContainerRef$c.focus();
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
// 리스트가 하단으로 나와야하는지 상단으로 나와야하는지 계산하는 함수
|
|
71
|
-
// 현재 Viewport기준으로 Select컴포넌트가 아래로 확장되었을 때 뷰포트 내에 리스트박스가 노출될 수 있다면 하단으로 확장, 아니라면 상단으로 확장
|
|
72
|
-
// direction이 props로 전달되었다면 해당 방향으로 확장
|
|
73
|
-
var expandSelectListAtComputedPosition = function expandSelectListAtComputedPosition() {
|
|
74
|
-
var _selectContainerRef$c2;
|
|
75
|
-
if (extendDirection) {
|
|
76
|
-
setExpandedDirection(extendDirection);
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
var selectContainerRect = (_selectContainerRef$c2 = selectContainerRef.current) === null || _selectContainerRef$c2 === void 0 ? void 0 : _selectContainerRef$c2.getBoundingClientRect();
|
|
80
|
-
if (!selectContainerRect) {
|
|
81
|
-
setExpandedDirection('below');
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// SelectOptionWrapper가 마운트되기 전에 계산해야 하기 때문에 clientHeight를 사용하지 못하고 직접 계산
|
|
86
|
-
var currentSelectHeight = Math.min(maxHeight, options.length * OPTION_ITEM_HEIGHT_PX);
|
|
87
|
-
var bottomGap = document.body.clientHeight - selectContainerRect.bottom;
|
|
88
|
-
setExpandedDirection(currentSelectHeight > bottomGap ? 'above' : 'below');
|
|
89
|
-
};
|
|
90
|
-
var optionItemRef = useCallback(function (ele) {
|
|
91
|
-
if (!ele) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// 선택한 요소가 없을때는 첫번째 요소에 focus
|
|
96
|
-
if (!value && !ele.previousSibling) {
|
|
97
|
-
setTimeout(function () {
|
|
98
|
-
return ele.focus();
|
|
99
|
-
});
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// 선택한 요소가 있다면 해당 요소에 focus
|
|
104
|
-
var optionValue = ele.dataset.optionValue || null;
|
|
105
|
-
if (optionValue === value) {
|
|
106
|
-
setTimeout(function () {
|
|
107
|
-
return ele.focus();
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
}, [value]);
|
|
111
|
-
var keyDownHandler = function keyDownHandler(e) {
|
|
112
|
-
var _selectContainerRef$c3;
|
|
113
|
-
var focusedElement = document.activeElement;
|
|
114
|
-
if (!focusedElement || !(focusedElement instanceof HTMLElement)) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
switch (e.key) {
|
|
118
|
-
case 'Tab':
|
|
119
|
-
if (isExpanded) {
|
|
120
|
-
e.preventDefault();
|
|
121
|
-
}
|
|
122
|
-
break;
|
|
123
|
-
case 'ArrowUp':
|
|
124
|
-
e.preventDefault();
|
|
125
|
-
if (!isExpanded) {
|
|
126
|
-
expandSelectListAtComputedPosition();
|
|
127
|
-
break;
|
|
128
|
-
}
|
|
129
|
-
focusSibling(focusedElement, 'previous');
|
|
130
|
-
break;
|
|
131
|
-
case 'ArrowDown':
|
|
132
|
-
e.preventDefault();
|
|
133
|
-
if (!isExpanded) {
|
|
134
|
-
expandSelectListAtComputedPosition();
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
focusSibling(focusedElement, 'next');
|
|
138
|
-
break;
|
|
139
|
-
case 'Escape':
|
|
140
|
-
e.preventDefault();
|
|
141
|
-
setExpandedDirection('none');
|
|
142
|
-
(_selectContainerRef$c3 = selectContainerRef.current) === null || _selectContainerRef$c3 === void 0 || _selectContainerRef$c3.focus();
|
|
143
|
-
break;
|
|
144
|
-
case 'Enter':
|
|
145
|
-
case ' ':
|
|
146
|
-
e.preventDefault();
|
|
147
|
-
if (e.target === e.currentTarget) {
|
|
148
|
-
if (isExpanded) {
|
|
149
|
-
setExpandedDirection('none');
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
expandSelectListAtComputedPosition();
|
|
153
|
-
}
|
|
154
|
-
if (focusedElement !== null && focusedElement !== void 0 && focusedElement.matches('[data-option-value]') && focusedElement instanceof HTMLLIElement && focusedElement.dataset.optionValue) {
|
|
155
|
-
onSelectOption(focusedElement.dataset.optionValue, focusedElement.innerText);
|
|
156
|
-
}
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
};
|
|
160
|
-
return /*#__PURE__*/jsxs(SelectContainer, _objectSpread(_objectSpread({
|
|
161
|
-
ref: function ref(el) {
|
|
162
|
-
if (!el) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
selectContainerRef.current = el;
|
|
166
|
-
clickAwayRef.current = el;
|
|
167
|
-
},
|
|
168
|
-
$width: width,
|
|
169
|
-
tabIndex: disabled ? undefined : 0,
|
|
170
|
-
"aria-expanded": isExpanded,
|
|
171
|
-
"aria-haspopup": "listbox",
|
|
172
|
-
"aria-disabled": disabled,
|
|
173
|
-
onKeyDown: keyDownHandler
|
|
174
|
-
}, props), {}, {
|
|
175
|
-
children: [/*#__PURE__*/jsx(StyledSelect, {
|
|
176
|
-
ref: ref,
|
|
177
|
-
onClick: onClick,
|
|
178
|
-
expandedDirection: expandedDirection,
|
|
179
|
-
isPlaceholder: !selectedOption && !!placeholder,
|
|
180
|
-
onPointerDown: function onPointerDown(e) {
|
|
181
|
-
if (isExpanded) {
|
|
182
|
-
setExpandedDirection('none');
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
e.stopPropagation();
|
|
186
|
-
expandSelectListAtComputedPosition();
|
|
187
|
-
},
|
|
188
|
-
children: (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) || placeholder || 'ㅤ'
|
|
189
|
-
}), /*#__PURE__*/jsx(SelectDownIcon, {
|
|
190
|
-
children: isExpanded ? /*#__PURE__*/jsx(IconArrow2Up, {
|
|
191
|
-
size: "small"
|
|
192
|
-
}) : /*#__PURE__*/jsx(IconArrow2Down, {
|
|
193
|
-
size: "small"
|
|
194
|
-
})
|
|
195
|
-
}), isExpanded && /*#__PURE__*/jsx(SelectOptionWrapper, {
|
|
196
|
-
role: "listbox",
|
|
197
|
-
"aria-activedescendant": value != null ? "".concat(id, "-select-option-").concat(value) : undefined,
|
|
198
|
-
ref: selectListRef,
|
|
199
|
-
expandedDirection: expandedDirection,
|
|
200
|
-
maxHeight: maxHeight,
|
|
201
|
-
children: options.map(function (_ref3) {
|
|
202
|
-
var optionValue = _ref3.value,
|
|
203
|
-
label = _ref3.label,
|
|
204
|
-
_disabled = _ref3.disabled;
|
|
205
|
-
return /*#__PURE__*/jsx(SelectOption, {
|
|
206
|
-
id: "".concat(id, "-select-option-").concat(optionValue),
|
|
207
|
-
role: "option",
|
|
208
|
-
tabIndex: _disabled ? undefined : 0,
|
|
209
|
-
"aria-selected": optionValue === value,
|
|
210
|
-
"aria-disabled": _disabled,
|
|
211
|
-
ref: optionItemRef,
|
|
212
|
-
isSelected: optionValue === value,
|
|
213
|
-
"data-option-value": optionValue
|
|
214
|
-
// onMouseEnter를 사용하게 되면 키보드로 스크롤 할 때도 focus가 이동하게 되기 때문에 onMouseMove를 사용
|
|
215
|
-
,
|
|
216
|
-
onMouseMove: function onMouseMove(e) {
|
|
217
|
-
if (e.currentTarget === document.activeElement) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
e.currentTarget.focus({
|
|
221
|
-
preventScroll: true
|
|
222
|
-
});
|
|
223
|
-
},
|
|
224
|
-
onFocus: function onFocus() {
|
|
225
|
-
var _selectListRef$curren;
|
|
226
|
-
(_selectListRef$curren = selectListRef.current) === null || _selectListRef$curren === void 0 || _selectListRef$curren.setAttribute('aria-activedescendant', "".concat(id, "-select-option-").concat(optionValue));
|
|
227
|
-
},
|
|
228
|
-
onClick: function onClick() {
|
|
229
|
-
if (_disabled) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
onSelectOption(optionValue, label);
|
|
233
|
-
},
|
|
234
|
-
children: label
|
|
235
|
-
}, optionValue);
|
|
236
|
-
})
|
|
237
|
-
})]
|
|
238
|
-
}));
|
|
239
|
-
};
|
|
240
|
-
var DesignedSelect$1 = /*#__PURE__*/forwardRef(DesignedSelect);
|
|
241
|
-
|
|
242
|
-
export { DesignedSelect$1 as default };
|
|
243
|
-
//# sourceMappingURL=index.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../../../src/Inputs/Select/DesignedSelect/index.tsx"],"sourcesContent":["'use client';\n\nimport type { KeyboardEvent, ReactNode, Ref, RefCallback } from 'react';\nimport {\n Children,\n forwardRef,\n isValidElement,\n useCallback,\n useRef,\n useState,\n useId,\n} from 'react';\nimport { IconArrow2Down, IconArrow2Up } from '@remember-web/icon';\n\nimport useMouseEventAway from '@/hooks/useMouseEventAway';\n\nimport { focusSibling } from '../utils';\nimport { OptionHolder } from '../Option';\nimport { SelectContainer } from '../styles';\nimport type { OptionElementType, SelectValue } from '../types';\nimport { DEFAULT_MAX_HEIGHT_PX, OPTION_ITEM_HEIGHT_PX } from './const';\nimport {\n SelectDownIcon,\n SelectOption,\n SelectOptionWrapper,\n StyledSelect,\n} from './styles';\nimport type { DesignedSelectInternalProps, ExpandedType } from './types';\n\nconst DesignedSelect = <Value extends SelectValue>(\n {\n children,\n value,\n maxHeight = DEFAULT_MAX_HEIGHT_PX,\n placeholder,\n onChange,\n width,\n extendDirection,\n disabled,\n onClick,\n ...props\n }: DesignedSelectInternalProps<Value>,\n ref?: Ref<HTMLDivElement>\n) => {\n const id = useId();\n const [expandedDirection, _setExpandedDirection] =\n useState<ExpandedType>('none');\n const selectContainerRef = useRef<HTMLDivElement | null>(null);\n const selectListRef = useRef<HTMLUListElement | null>(null);\n const clickAwayRef = useMouseEventAway<HTMLDivElement, 'pointerdown'>(\n 'pointerdown',\n () => {\n setExpandedDirection('none');\n }\n );\n\n const setExpandedDirection = useCallback(\n (...args: Parameters<typeof _setExpandedDirection>) => {\n if (disabled) {\n return;\n }\n _setExpandedDirection(...args);\n },\n [disabled]\n );\n\n const options = Children.toArray(children)\n .filter(\n (child): child is OptionElementType<Value> =>\n isValidElement(child) && child.type === OptionHolder\n )\n .map(\n ({\n props: { children: _children, value: _value, disabled: _disabled },\n }) => ({\n label: _children,\n value: _value,\n disabled: _disabled,\n })\n );\n\n const selectedOption = options.find((option) => value === option.value);\n\n const isExpanded = expandedDirection !== 'none';\n\n const onSelectOption = (_value: Value, _label: ReactNode) => {\n onChange?.(_value, _label);\n setExpandedDirection('none');\n selectContainerRef.current?.focus();\n };\n\n // 리스트가 하단으로 나와야하는지 상단으로 나와야하는지 계산하는 함수\n // 현재 Viewport기준으로 Select컴포넌트가 아래로 확장되었을 때 뷰포트 내에 리스트박스가 노출될 수 있다면 하단으로 확장, 아니라면 상단으로 확장\n // direction이 props로 전달되었다면 해당 방향으로 확장\n const expandSelectListAtComputedPosition = () => {\n if (extendDirection) {\n setExpandedDirection(extendDirection);\n return;\n }\n\n const selectContainerRect =\n selectContainerRef.current?.getBoundingClientRect();\n\n if (!selectContainerRect) {\n setExpandedDirection('below');\n return;\n }\n\n // SelectOptionWrapper가 마운트되기 전에 계산해야 하기 때문에 clientHeight를 사용하지 못하고 직접 계산\n const currentSelectHeight = Math.min(\n maxHeight,\n options.length * OPTION_ITEM_HEIGHT_PX\n );\n const bottomGap = document.body.clientHeight - selectContainerRect.bottom;\n\n setExpandedDirection(currentSelectHeight > bottomGap ? 'above' : 'below');\n };\n\n const optionItemRef = useCallback<RefCallback<HTMLLIElement>>(\n (ele) => {\n if (!ele) {\n return;\n }\n\n // 선택한 요소가 없을때는 첫번째 요소에 focus\n if (!value && !ele.previousSibling) {\n setTimeout(() => ele.focus());\n return;\n }\n\n // 선택한 요소가 있다면 해당 요소에 focus\n const optionValue = ele.dataset.optionValue || null;\n if (optionValue === value) {\n setTimeout(() => ele.focus());\n }\n },\n [value]\n );\n\n const keyDownHandler = (e: KeyboardEvent) => {\n const focusedElement = document.activeElement;\n\n if (!focusedElement || !(focusedElement instanceof HTMLElement)) {\n return;\n }\n\n switch (e.key) {\n case 'Tab':\n if (isExpanded) {\n e.preventDefault();\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isExpanded) {\n expandSelectListAtComputedPosition();\n break;\n }\n focusSibling(focusedElement, 'previous');\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isExpanded) {\n expandSelectListAtComputedPosition();\n break;\n }\n focusSibling(focusedElement, 'next');\n break;\n case 'Escape':\n e.preventDefault();\n setExpandedDirection('none');\n selectContainerRef.current?.focus();\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n\n if (e.target === e.currentTarget) {\n if (isExpanded) {\n setExpandedDirection('none');\n return;\n }\n expandSelectListAtComputedPosition();\n }\n\n if (\n focusedElement?.matches('[data-option-value]') &&\n focusedElement instanceof HTMLLIElement &&\n focusedElement.dataset.optionValue\n ) {\n onSelectOption(\n focusedElement.dataset.optionValue as Value,\n focusedElement.innerText\n );\n }\n break;\n default:\n break;\n }\n };\n\n return (\n <SelectContainer\n ref={(el) => {\n if (!el) {\n return;\n }\n selectContainerRef.current = el;\n clickAwayRef.current = el;\n }}\n $width={width}\n tabIndex={disabled ? undefined : 0}\n aria-expanded={isExpanded}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n onKeyDown={keyDownHandler}\n {...props}\n >\n <StyledSelect\n ref={ref}\n onClick={onClick}\n expandedDirection={expandedDirection}\n isPlaceholder={!selectedOption && !!placeholder}\n onPointerDown={(e) => {\n if (isExpanded) {\n setExpandedDirection('none');\n return;\n }\n\n e.stopPropagation();\n\n expandSelectListAtComputedPosition();\n }}\n >\n {selectedOption?.label || placeholder || 'ㅤ'}\n </StyledSelect>\n <SelectDownIcon>\n {isExpanded ? (\n <IconArrow2Up size=\"small\" />\n ) : (\n <IconArrow2Down size=\"small\" />\n )}\n </SelectDownIcon>\n {isExpanded && (\n <SelectOptionWrapper\n role=\"listbox\"\n aria-activedescendant={\n value != null ? `${id}-select-option-${value}` : undefined\n }\n ref={selectListRef}\n expandedDirection={expandedDirection}\n maxHeight={maxHeight}\n >\n {options.map(({ value: optionValue, label, disabled: _disabled }) => (\n <SelectOption\n id={`${id}-select-option-${optionValue}`}\n role=\"option\"\n key={optionValue}\n tabIndex={_disabled ? undefined : 0}\n aria-selected={optionValue === value}\n aria-disabled={_disabled}\n ref={optionItemRef}\n isSelected={optionValue === value}\n data-option-value={optionValue}\n // onMouseEnter를 사용하게 되면 키보드로 스크롤 할 때도 focus가 이동하게 되기 때문에 onMouseMove를 사용\n onMouseMove={(e) => {\n if (e.currentTarget === document.activeElement) {\n return;\n }\n e.currentTarget.focus({\n preventScroll: true,\n });\n }}\n onFocus={() => {\n selectListRef.current?.setAttribute(\n 'aria-activedescendant',\n `${id}-select-option-${optionValue}`\n );\n }}\n onClick={() => {\n if (_disabled) {\n return;\n }\n\n onSelectOption(optionValue, label);\n }}\n >\n {label}\n </SelectOption>\n ))}\n </SelectOptionWrapper>\n )}\n </SelectContainer>\n );\n};\n\nexport default forwardRef(DesignedSelect);\n"],"names":["maxHeight","props","expandedDirection","_setExpandedDirection","label","value","disabled","setTimeout","expandSelectListAtComputedPosition","focusSibling","ref","$width","tabIndex","onKeyDown","onClick","isPlaceholder","onPointerDown","children","size","role","onMouseMove","e","preventScroll","onSelectOption"],"mappings":";;;;;;;;;;;;;;AAAa;AAAA;AAAA;AA6Bb;AAcK;;;AAVDA;;;;;;;AAOGC;AAIL;AACA;;AAAOC;AAAmBC;AAE1B;AACA;AACA;;AAIE;AAGF;AAEI;AACE;AACF;AACAA;AACF;AAIF;;AAG0D;AAGtD;;;;;AAGEC;AACAC;AACAC;;AACD;AAGL;AAA2C;;AAE3C;;AAE6D;;;AAG3D;;;AAGF;AACA;AACA;AACA;AAAiD;AAC/C;;AAEE;AACF;AAEA;;;AAKE;AACF;;AAEA;AACA;;;;AASF;;AAGM;AACF;;AAEA;AACA;AACEC;AAAW;;AACX;AACF;;AAEA;;;AAGEA;AAAW;;AACb;AACF;AAIF;AAA6C;AAC3C;;AAGE;AACF;;AAGE;AACE;;AAEA;AACA;AACF;;;AAGIC;AACA;AACF;AACAC;AACA;AACF;;;AAGID;AACA;AACF;AACAC;AACA;AACF;;;AAGE;AACA;AACF;AACA;;AAGE;AACE;;AAEE;AACF;AACAD;AACF;;;AAWA;AACA;AAGJ;;AAGF;AAEIE;;AAEI;AACF;;;;AAIFC;AACAC;AACA;AACA;AACA;AACAC;AAA0B;;AAIxBH;AACAI;AACAZ;AACAa;AACAC;AACE;;AAEE;AACF;;AAIAR;;;AAG0C;AAE/BS;AAEGC;AAAY;AAEVA;;AACjB;AAICC;AACA;AAGAT;AACAR;AACAF;AAAqBiB;AAER;;;;;AAGTE;AAEAP;;AAEA;AACAF;;;AAGA;AAAA;AACAU;AACE;AACE;AACF;AACAC;AACEC;AACF;;;AAEa;;;;AAOb;AACE;AACF;AAEAC;;AACAN;AAEI;;AAER;AAEL;AAGP;AAEA;;"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
|
|
5
|
-
var styled = require('styled-components');
|
|
6
|
-
var mixin = require('@remember-web/mixin');
|
|
7
|
-
var styles = require('../styles.cjs.js');
|
|
8
|
-
|
|
9
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
|
|
11
|
-
var _taggedTemplateLiteral__default = /*#__PURE__*/_interopDefault(_taggedTemplateLiteral);
|
|
12
|
-
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
13
|
-
|
|
14
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13;
|
|
15
|
-
var StyledSelect = styled__default.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral__default.default(["\n ", "\n border: 1px solid ", ";\n ", ";\n\n padding: 10px 36px 10px 12px;\n transition: border-color 0.2s, background-color 0.2s;\n\n ", "\n\n ", ":focus-within & {\n outline: none;\n border-color: ", ";\n }\n ", ":not([aria-disabled='true']) & {\n @media (hover: hover) {\n &:hover {\n background-color: ", ";\n }\n }\n\n &:active {\n background-color: ", ";\n }\n }\n"])), mixin.ellipsis(), mixin.contents300, function (_ref) {
|
|
16
|
-
var expandedDirection = _ref.expandedDirection;
|
|
17
|
-
return {
|
|
18
|
-
none: styled.css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral__default.default(["\n border-radius: 4px;\n "]))),
|
|
19
|
-
above: styled.css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral__default.default(["\n border-radius: 0 0 4px 4px;\n border-top-color: transparent;\n "]))),
|
|
20
|
-
below: styled.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral__default.default(["\n border-radius: 4px 4px 0 0;\n border-bottom-color: transparent;\n "])))
|
|
21
|
-
}[expandedDirection !== null && expandedDirection !== void 0 ? expandedDirection : 'none'];
|
|
22
|
-
}, function (_ref2) {
|
|
23
|
-
var isPlaceholder = _ref2.isPlaceholder;
|
|
24
|
-
return isPlaceholder && styled.css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral__default.default(["\n color: ", ";\n "])), mixin.contents200);
|
|
25
|
-
}, styles.SelectContainer, mixin.contents000, styles.SelectContainer, mixin.bg200, mixin.bg300);
|
|
26
|
-
var SelectDownIcon = styled__default.default.div(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral__default.default(["\n position: absolute;\n right: 12px;\n top: 50%;\n transform: translateY(-50%);\n\n & > svg {\n display: block;\n }\n\n pointer-events: none;\n"])));
|
|
27
|
-
var SelectOptionWrapper = styled__default.default.ul(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral__default.default(["\n all: unset;\n position: absolute;\n left: 0;\n right: 0;\n z-index: 1;\n border: 1px solid ", ";\n background-color: ", ";\n overflow-y: scroll;\n overscroll-behavior: contain;\n transition: border-color 0.2s, background-color 0.2s;\n\n ", ";\n\n ", "\n\n ", ":focus &, ", ":focus-within & {\n outline: none;\n border-color: ", ";\n }\n"])), mixin.contents300, mixin.bg100, function (_ref3) {
|
|
28
|
-
var maxHeight = _ref3.maxHeight;
|
|
29
|
-
if (!maxHeight) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
if (typeof maxHeight === 'number') {
|
|
33
|
-
return styled.css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral__default.default(["\n max-height: ", "px;\n "])), maxHeight);
|
|
34
|
-
}
|
|
35
|
-
return styled.css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral__default.default(["\n max-height: ", ";\n "])), maxHeight);
|
|
36
|
-
}, function (_ref4) {
|
|
37
|
-
var expandedDirection = _ref4.expandedDirection;
|
|
38
|
-
return expandedDirection === 'below' ? styled.css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral__default.default(["\n top: calc(100% - 1px);\n border-top: none;\n border-radius: 0 0 4px 4px;\n "]))) : styled.css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral__default.default(["\n bottom: calc(100% - 1px);\n border-bottom: none;\n border-radius: 4px 4px 0 0;\n "])));
|
|
39
|
-
}, styles.SelectContainer, styles.SelectContainer, mixin.contents000);
|
|
40
|
-
var SelectOption = styled__default.default.li(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral__default.default(["\n ", "\n padding: 10px 12px;\n color: ", ";\n\n &[aria-disabled='true'] {\n color: ", ";\n }\n\n &:focus {\n background-color: ", ";\n outline: none;\n }\n\n ", "\n"])), mixin.ellipsis(), mixin.contents000, mixin.contents300, mixin.bg200, function (_ref5) {
|
|
41
|
-
var isSelected = _ref5.isSelected;
|
|
42
|
-
return isSelected && styled.css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral__default.default(["\n background-color: ", ";\n "])), mixin.bg200);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
exports.SelectDownIcon = SelectDownIcon;
|
|
46
|
-
exports.SelectOption = SelectOption;
|
|
47
|
-
exports.SelectOptionWrapper = SelectOptionWrapper;
|
|
48
|
-
exports.StyledSelect = StyledSelect;
|
|
49
|
-
//# sourceMappingURL=styles.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.cjs.js","sources":["../../../../../src/Inputs/Select/DesignedSelect/styles.ts"],"sourcesContent":["'use client';\n\nimport styled, { css } from 'styled-components';\nimport {\n bg100,\n bg200,\n bg300,\n contents000,\n contents200,\n contents300,\n ellipsis,\n} from '@remember-web/mixin';\n\nimport { SelectContainer } from '../styles';\nimport type { ExpandedType } from './types';\n\nexport const StyledSelect = styled.div<{\n expandedDirection?: ExpandedType;\n isPlaceholder?: boolean;\n}>`\n ${ellipsis()}\n border: 1px solid ${contents300};\n ${({ expandedDirection }) =>\n ({\n none: css`\n border-radius: 4px;\n `,\n above: css`\n border-radius: 0 0 4px 4px;\n border-top-color: transparent;\n `,\n below: css`\n border-radius: 4px 4px 0 0;\n border-bottom-color: transparent;\n `,\n }[expandedDirection ?? 'none'])};\n\n padding: 10px 36px 10px 12px;\n transition: border-color 0.2s, background-color 0.2s;\n\n ${({ isPlaceholder }) =>\n isPlaceholder &&\n css`\n color: ${contents200};\n `}\n\n ${SelectContainer}:focus-within & {\n outline: none;\n border-color: ${contents000};\n }\n ${SelectContainer}:not([aria-disabled='true']) & {\n @media (hover: hover) {\n &:hover {\n background-color: ${bg200};\n }\n }\n\n &:active {\n background-color: ${bg300};\n }\n }\n`;\n\nexport const SelectDownIcon = styled.div`\n position: absolute;\n right: 12px;\n top: 50%;\n transform: translateY(-50%);\n\n & > svg {\n display: block;\n }\n\n pointer-events: none;\n`;\n\nexport const SelectOptionWrapper = styled.ul<{\n expandedDirection?: ExpandedType;\n maxHeight?: number | string;\n}>`\n all: unset;\n position: absolute;\n left: 0;\n right: 0;\n z-index: 1;\n border: 1px solid ${contents300};\n background-color: ${bg100};\n overflow-y: scroll;\n overscroll-behavior: contain;\n transition: border-color 0.2s, background-color 0.2s;\n\n ${({ maxHeight }) => {\n if (!maxHeight) {\n return null;\n }\n\n if (typeof maxHeight === 'number') {\n return css`\n max-height: ${maxHeight}px;\n `;\n }\n\n return css`\n max-height: ${maxHeight};\n `;\n }};\n\n ${({ expandedDirection }) =>\n expandedDirection === 'below'\n ? css`\n top: calc(100% - 1px);\n border-top: none;\n border-radius: 0 0 4px 4px;\n `\n : css`\n bottom: calc(100% - 1px);\n border-bottom: none;\n border-radius: 4px 4px 0 0;\n `}\n\n ${SelectContainer}:focus &, ${SelectContainer}:focus-within & {\n outline: none;\n border-color: ${contents000};\n }\n`;\n\nexport const SelectOption = styled.li<{ isSelected?: boolean }>`\n ${ellipsis()}\n padding: 10px 12px;\n color: ${contents000};\n\n &[aria-disabled='true'] {\n color: ${contents300};\n }\n\n &:focus {\n background-color: ${bg200};\n outline: none;\n }\n\n ${({ isSelected }) =>\n isSelected &&\n css`\n background-color: ${bg200};\n `}\n`;\n"],"names":["below","SelectDownIcon"],"mappings":";;;;;;;;;;;;;AAAa;AAgBN;AAMH;;;;AASEA;;AAI4B;AAK9B;;AAIC;AAmBQC;;AA4BU;;AAEjB;AACF;AAEA;;AAIA;;AAKF;AAEE;AAAoB;AAWf;AAQF;AAcH;;AAIC;;;;;"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import type { ExpandedType } from './types';
|
|
3
|
-
export declare const StyledSelect: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
4
|
-
expandedDirection?: ExpandedType | undefined;
|
|
5
|
-
isPlaceholder?: boolean | undefined;
|
|
6
|
-
}>>;
|
|
7
|
-
export declare const SelectDownIcon: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>;
|
|
8
|
-
export declare const SelectOptionWrapper: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLUListElement>, HTMLUListElement>, {
|
|
9
|
-
expandedDirection?: ExpandedType | undefined;
|
|
10
|
-
maxHeight?: string | number | undefined;
|
|
11
|
-
}>>;
|
|
12
|
-
export declare const SelectOption: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, {
|
|
13
|
-
isSelected?: boolean | undefined;
|
|
14
|
-
}>>;
|
|
15
|
-
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../src/Inputs/Select/DesignedSelect/styles.ts"],"names":[],"mappings":";AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,YAAY;;;GA6CxB,CAAC;AAEF,eAAO,MAAM,cAAc,gNAW1B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;GAgD/B,CAAC;AAEF,eAAO,MAAM,YAAY;;GAmBxB,CAAC"}
|