@remember-web/primitive 0.1.16 → 0.1.18
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/src/Control/BaseToggle/ToggleIcon/index.cjs.js +14 -3
- package/dist/src/Control/BaseToggle/ToggleIcon/index.cjs.js.map +1 -1
- package/dist/src/Control/BaseToggle/ToggleIcon/index.d.ts.map +1 -1
- package/dist/src/Control/BaseToggle/ToggleIcon/index.esm.js +9 -3
- package/dist/src/Control/BaseToggle/ToggleIcon/index.esm.js.map +1 -1
- package/dist/src/Control/BaseToggle/index.cjs.js +15 -14
- package/dist/src/Control/BaseToggle/index.cjs.js.map +1 -1
- package/dist/src/Control/BaseToggle/index.d.ts.map +1 -1
- package/dist/src/Control/BaseToggle/index.esm.js +16 -15
- package/dist/src/Control/BaseToggle/index.esm.js.map +1 -1
- package/dist/src/Control/BaseToggle/styles.cjs.js +2 -2
- package/dist/src/Control/BaseToggle/styles.cjs.js.map +1 -1
- package/dist/src/Control/BaseToggle/styles.esm.js +2 -2
- package/dist/src/Control/BaseToggle/styles.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/Control/BaseToggle/ToggleIcon/index.tsx +14 -1
- package/src/Control/BaseToggle/index.tsx +27 -20
- package/src/Control/BaseToggle/styles.ts +11 -11
- package/src/Control/Radio.stories.tsx +64 -11
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
+
var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
|
|
4
5
|
var icon = require('@remember-web/icon');
|
|
5
6
|
var util = require('@remember-web/icon/util');
|
|
7
|
+
var styled = require('styled-components');
|
|
6
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
9
|
|
|
10
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
|
|
12
|
+
var _taggedTemplateLiteral__default = /*#__PURE__*/_interopDefault(_taggedTemplateLiteral);
|
|
13
|
+
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
14
|
+
|
|
15
|
+
var _templateObject;
|
|
8
16
|
var ICON_NAME = {
|
|
9
17
|
check: {
|
|
10
18
|
on: icon.ControlCheckOn,
|
|
@@ -39,11 +47,14 @@ function ToggleIcon(_ref) {
|
|
|
39
47
|
className = _ref.className;
|
|
40
48
|
var iconSize = typeof size === 'string' && util.isSvgRegularSize(size) ? util.SVG_SIZES[size] : size;
|
|
41
49
|
var Icon = ICON_NAME[variant][status];
|
|
42
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
43
|
-
className: className,
|
|
44
|
-
|
|
50
|
+
return /*#__PURE__*/jsxRuntime.jsx(ToggleIconContainer, {
|
|
51
|
+
className: "toggleIcon ".concat(className),
|
|
52
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Icon, {
|
|
53
|
+
size: iconSize
|
|
54
|
+
})
|
|
45
55
|
});
|
|
46
56
|
}
|
|
57
|
+
var ToggleIconContainer = styled__default.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral__default.default(["\n border-radius: 50%;\n\n > svg {\n display: block;\n }\n"])));
|
|
47
58
|
|
|
48
59
|
exports.ToggleIcon = ToggleIcon;
|
|
49
60
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../../src/Control/BaseToggle/ToggleIcon/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n ControlBookmarkOff,\n ControlBookmarkOn,\n ControlCheckOff,\n ControlCheckOn,\n ControlCheckboxIndeterminate,\n ControlCheckboxOff,\n ControlCheckboxOn,\n ControlFavoriteOff,\n ControlFavoriteOn,\n ControlRadioOff,\n ControlRadioOn,\n} from '@remember-web/icon';\nimport {\n SVG_SIZES,\n isSvgRegularSize,\n type SvgSizeProps,\n type WithSvgSizeComponentType,\n} from '@remember-web/icon/util';\n\nimport type { ToggleStatusType, ToggleVariantType } from '../types';\n\nconst ICON_NAME = {\n check: {\n on: ControlCheckOn,\n indeterminate: ControlCheckOn,\n off: ControlCheckOff,\n },\n checkbox: {\n on: ControlCheckboxOn,\n indeterminate: ControlCheckboxIndeterminate,\n off: ControlCheckboxOff,\n },\n favorite: {\n on: ControlFavoriteOn,\n indeterminate: ControlFavoriteOn,\n off: ControlFavoriteOff,\n },\n bookmark: {\n on: ControlBookmarkOn,\n indeterminate: ControlBookmarkOn,\n off: ControlBookmarkOff,\n },\n radio: {\n on: ControlRadioOn,\n indeterminate: ControlRadioOff,\n off: ControlRadioOff,\n },\n} as const satisfies Record<\n ToggleVariantType,\n Record<ToggleStatusType, WithSvgSizeComponentType>\n>;\n\nexport function ToggleIcon({\n size,\n status,\n variant,\n className,\n}: {\n variant: ToggleVariantType;\n status: ToggleStatusType;\n className?: string;\n} & SvgSizeProps) {\n const iconSize =\n typeof size === 'string' && isSvgRegularSize(size) ? SVG_SIZES[size] : size;\n\n const Icon = ICON_NAME[variant][status];\n\n return <
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../../src/Control/BaseToggle/ToggleIcon/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n ControlBookmarkOff,\n ControlBookmarkOn,\n ControlCheckOff,\n ControlCheckOn,\n ControlCheckboxIndeterminate,\n ControlCheckboxOff,\n ControlCheckboxOn,\n ControlFavoriteOff,\n ControlFavoriteOn,\n ControlRadioOff,\n ControlRadioOn,\n} from '@remember-web/icon';\nimport {\n SVG_SIZES,\n isSvgRegularSize,\n type SvgSizeProps,\n type WithSvgSizeComponentType,\n} from '@remember-web/icon/util';\nimport styled from 'styled-components';\n\nimport type { ToggleStatusType, ToggleVariantType } from '../types';\n\nconst ICON_NAME = {\n check: {\n on: ControlCheckOn,\n indeterminate: ControlCheckOn,\n off: ControlCheckOff,\n },\n checkbox: {\n on: ControlCheckboxOn,\n indeterminate: ControlCheckboxIndeterminate,\n off: ControlCheckboxOff,\n },\n favorite: {\n on: ControlFavoriteOn,\n indeterminate: ControlFavoriteOn,\n off: ControlFavoriteOff,\n },\n bookmark: {\n on: ControlBookmarkOn,\n indeterminate: ControlBookmarkOn,\n off: ControlBookmarkOff,\n },\n radio: {\n on: ControlRadioOn,\n indeterminate: ControlRadioOff,\n off: ControlRadioOff,\n },\n} as const satisfies Record<\n ToggleVariantType,\n Record<ToggleStatusType, WithSvgSizeComponentType>\n>;\n\nexport function ToggleIcon({\n size,\n status,\n variant,\n className,\n}: {\n variant: ToggleVariantType;\n status: ToggleStatusType;\n className?: string;\n} & SvgSizeProps) {\n const iconSize =\n typeof size === 'string' && isSvgRegularSize(size) ? SVG_SIZES[size] : size;\n\n const Icon = ICON_NAME[variant][status];\n\n return (\n <ToggleIconContainer className={`toggleIcon ${className}`}>\n <Icon size={iconSize} />\n </ToggleIconContainer>\n );\n}\n\nconst ToggleIconContainer = styled.div`\n border-radius: 50%;\n\n > svg {\n display: block;\n }\n`;\n"],"names":["check","on","indeterminate","off","checkbox","favorite","bookmark","radio","className","size"],"mappings":";;;;;;;;;;;;;;AAAa;AAyBb;AACEA;AACEC;AACAC;AACAC;;AAEFC;AACEH;AACAC;AACAC;;AAEFE;AACEJ;AACAC;AACAC;;AAEFG;AACEL;AACAC;AACAC;;AAEFI;AACEN;AACAC;AACAC;AACF;AACF;AAKO;AASW;;;;AAChB;;;AAMuBK;;AACbC;;AAAkB;AAG9B;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/Control/BaseToggle/ToggleIcon/index.tsx"],"names":[],"mappings":"AAeA,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/Control/BaseToggle/ToggleIcon/index.tsx"],"names":[],"mappings":"AAeA,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAiCpE,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,MAAM,EACN,OAAO,EACP,SAAS,GACV,EAAE;IACD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,YAAY,2CAWf"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import _taggedTemplateLiteral from '@babel/runtime/helpers/taggedTemplateLiteral';
|
|
2
3
|
import { ControlCheckOn, ControlCheckOff, ControlCheckboxOn, ControlCheckboxIndeterminate, ControlCheckboxOff, ControlFavoriteOn, ControlFavoriteOff, ControlBookmarkOn, ControlBookmarkOff, ControlRadioOn, ControlRadioOff } from '@remember-web/icon';
|
|
3
4
|
import { isSvgRegularSize, SVG_SIZES } from '@remember-web/icon/util';
|
|
5
|
+
import styled from 'styled-components';
|
|
4
6
|
import { jsx } from 'react/jsx-runtime';
|
|
5
7
|
|
|
8
|
+
var _templateObject;
|
|
6
9
|
var ICON_NAME = {
|
|
7
10
|
check: {
|
|
8
11
|
on: ControlCheckOn,
|
|
@@ -37,11 +40,14 @@ function ToggleIcon(_ref) {
|
|
|
37
40
|
className = _ref.className;
|
|
38
41
|
var iconSize = typeof size === 'string' && isSvgRegularSize(size) ? SVG_SIZES[size] : size;
|
|
39
42
|
var Icon = ICON_NAME[variant][status];
|
|
40
|
-
return /*#__PURE__*/jsx(
|
|
41
|
-
className: className,
|
|
42
|
-
|
|
43
|
+
return /*#__PURE__*/jsx(ToggleIconContainer, {
|
|
44
|
+
className: "toggleIcon ".concat(className),
|
|
45
|
+
children: /*#__PURE__*/jsx(Icon, {
|
|
46
|
+
size: iconSize
|
|
47
|
+
})
|
|
43
48
|
});
|
|
44
49
|
}
|
|
50
|
+
var ToggleIconContainer = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border-radius: 50%;\n\n > svg {\n display: block;\n }\n"])));
|
|
45
51
|
|
|
46
52
|
export { ToggleIcon };
|
|
47
53
|
//# sourceMappingURL=index.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../../../src/Control/BaseToggle/ToggleIcon/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n ControlBookmarkOff,\n ControlBookmarkOn,\n ControlCheckOff,\n ControlCheckOn,\n ControlCheckboxIndeterminate,\n ControlCheckboxOff,\n ControlCheckboxOn,\n ControlFavoriteOff,\n ControlFavoriteOn,\n ControlRadioOff,\n ControlRadioOn,\n} from '@remember-web/icon';\nimport {\n SVG_SIZES,\n isSvgRegularSize,\n type SvgSizeProps,\n type WithSvgSizeComponentType,\n} from '@remember-web/icon/util';\n\nimport type { ToggleStatusType, ToggleVariantType } from '../types';\n\nconst ICON_NAME = {\n check: {\n on: ControlCheckOn,\n indeterminate: ControlCheckOn,\n off: ControlCheckOff,\n },\n checkbox: {\n on: ControlCheckboxOn,\n indeterminate: ControlCheckboxIndeterminate,\n off: ControlCheckboxOff,\n },\n favorite: {\n on: ControlFavoriteOn,\n indeterminate: ControlFavoriteOn,\n off: ControlFavoriteOff,\n },\n bookmark: {\n on: ControlBookmarkOn,\n indeterminate: ControlBookmarkOn,\n off: ControlBookmarkOff,\n },\n radio: {\n on: ControlRadioOn,\n indeterminate: ControlRadioOff,\n off: ControlRadioOff,\n },\n} as const satisfies Record<\n ToggleVariantType,\n Record<ToggleStatusType, WithSvgSizeComponentType>\n>;\n\nexport function ToggleIcon({\n size,\n status,\n variant,\n className,\n}: {\n variant: ToggleVariantType;\n status: ToggleStatusType;\n className?: string;\n} & SvgSizeProps) {\n const iconSize =\n typeof size === 'string' && isSvgRegularSize(size) ? SVG_SIZES[size] : size;\n\n const Icon = ICON_NAME[variant][status];\n\n return <
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../../src/Control/BaseToggle/ToggleIcon/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n ControlBookmarkOff,\n ControlBookmarkOn,\n ControlCheckOff,\n ControlCheckOn,\n ControlCheckboxIndeterminate,\n ControlCheckboxOff,\n ControlCheckboxOn,\n ControlFavoriteOff,\n ControlFavoriteOn,\n ControlRadioOff,\n ControlRadioOn,\n} from '@remember-web/icon';\nimport {\n SVG_SIZES,\n isSvgRegularSize,\n type SvgSizeProps,\n type WithSvgSizeComponentType,\n} from '@remember-web/icon/util';\nimport styled from 'styled-components';\n\nimport type { ToggleStatusType, ToggleVariantType } from '../types';\n\nconst ICON_NAME = {\n check: {\n on: ControlCheckOn,\n indeterminate: ControlCheckOn,\n off: ControlCheckOff,\n },\n checkbox: {\n on: ControlCheckboxOn,\n indeterminate: ControlCheckboxIndeterminate,\n off: ControlCheckboxOff,\n },\n favorite: {\n on: ControlFavoriteOn,\n indeterminate: ControlFavoriteOn,\n off: ControlFavoriteOff,\n },\n bookmark: {\n on: ControlBookmarkOn,\n indeterminate: ControlBookmarkOn,\n off: ControlBookmarkOff,\n },\n radio: {\n on: ControlRadioOn,\n indeterminate: ControlRadioOff,\n off: ControlRadioOff,\n },\n} as const satisfies Record<\n ToggleVariantType,\n Record<ToggleStatusType, WithSvgSizeComponentType>\n>;\n\nexport function ToggleIcon({\n size,\n status,\n variant,\n className,\n}: {\n variant: ToggleVariantType;\n status: ToggleStatusType;\n className?: string;\n} & SvgSizeProps) {\n const iconSize =\n typeof size === 'string' && isSvgRegularSize(size) ? SVG_SIZES[size] : size;\n\n const Icon = ICON_NAME[variant][status];\n\n return (\n <ToggleIconContainer className={`toggleIcon ${className}`}>\n <Icon size={iconSize} />\n </ToggleIconContainer>\n );\n}\n\nconst ToggleIconContainer = styled.div`\n border-radius: 50%;\n\n > svg {\n display: block;\n }\n`;\n"],"names":["check","on","indeterminate","off","checkbox","favorite","bookmark","radio","className","size"],"mappings":";;;;;;;AAAa;AAyBb;AACEA;AACEC;AACAC;AACAC;;AAEFC;AACEH;AACAC;AACAC;;AAEFE;AACEJ;AACAC;AACAC;;AAEFG;AACEL;AACAC;AACAC;;AAEFI;AACEN;AACAC;AACAC;AACF;AACF;AAKO;AASW;;;;AAChB;;;AAMuBK;;AACbC;;AAAkB;AAG9B;AAEA;;"}
|
|
@@ -23,7 +23,7 @@ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefault(_objectWith
|
|
|
23
23
|
var _excluded = ["variant", "label", "labelPosition", "className", "inputClassName", "size", "labelGap", "type", "onToggle", "onChange", "indeterminate"];
|
|
24
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
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 _BaseToggle = function _BaseToggle(_ref,
|
|
26
|
+
var _BaseToggle = function _BaseToggle(_ref, ref) {
|
|
27
27
|
var variant = _ref.variant,
|
|
28
28
|
_label = _ref.label,
|
|
29
29
|
_ref$labelPosition = _ref.labelPosition,
|
|
@@ -45,22 +45,23 @@ var _BaseToggle = function _BaseToggle(_ref, _ref2) {
|
|
|
45
45
|
variant: "Body1",
|
|
46
46
|
children: _label
|
|
47
47
|
}) : _label;
|
|
48
|
+
var refCallback = react.useCallback(function (input) {
|
|
49
|
+
if (ref) {
|
|
50
|
+
if (typeof ref === 'function') {
|
|
51
|
+
ref(input);
|
|
52
|
+
} else {
|
|
53
|
+
ref.current = input;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (input) {
|
|
57
|
+
input.indeterminate = indeterminate !== null && indeterminate !== void 0 ? indeterminate : false;
|
|
58
|
+
}
|
|
59
|
+
}, [indeterminate, ref]);
|
|
48
60
|
return /*#__PURE__*/jsxRuntime.jsxs(styles.ToggleRoot, {
|
|
49
61
|
className: className,
|
|
50
62
|
$gap: labelGap,
|
|
51
63
|
children: [/*#__PURE__*/jsxRuntime.jsx(styles.ToggleInput, _objectSpread(_objectSpread({
|
|
52
|
-
ref:
|
|
53
|
-
if (_ref2) {
|
|
54
|
-
if (typeof _ref2 === 'function') {
|
|
55
|
-
_ref2(input);
|
|
56
|
-
} else {
|
|
57
|
-
_ref2.current = input;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (input) {
|
|
61
|
-
input.indeterminate = indeterminate !== null && indeterminate !== void 0 ? indeterminate : false;
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
+
ref: refCallback,
|
|
64
65
|
className: inputClassName,
|
|
65
66
|
type: type
|
|
66
67
|
}, props), {}, {
|
|
@@ -73,7 +74,7 @@ var _BaseToggle = function _BaseToggle(_ref, _ref2) {
|
|
|
73
74
|
size: size,
|
|
74
75
|
status: "on",
|
|
75
76
|
variant: variant
|
|
76
|
-
}), /*#__PURE__*/jsxRuntime.jsx(index.ToggleIcon, {
|
|
77
|
+
}), type === 'checkbox' && /*#__PURE__*/jsxRuntime.jsx(index.ToggleIcon, {
|
|
77
78
|
className: "indeterminateIcon",
|
|
78
79
|
size: size,
|
|
79
80
|
status: "indeterminate",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../src/Control/BaseToggle/index.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardRefRenderFunction } from 'react';\nimport { forwardRef } from 'react';\n\nimport { Typography } from '@/Common';\n\nimport { ToggleIcon } from './ToggleIcon';\nimport { ToggleInput, ToggleRoot } from './styles';\nimport type { BaseToggleProps } from './types';\n\nconst _BaseToggle: ForwardRefRenderFunction<\n HTMLInputElement,\n BaseToggleProps\n> = (\n {\n variant,\n label: _label,\n labelPosition = 'right',\n className,\n inputClassName,\n size = 'medium',\n labelGap = size === 'small' ? 2 : 4,\n type = 'checkbox',\n onToggle,\n onChange,\n indeterminate,\n ...props\n },\n ref\n) => {\n const isStringLabel = typeof _label === 'string';\n const label = isStringLabel ? (\n <Typography variant=\"Body1\">{_label}</Typography>\n ) : (\n _label\n );\n\n
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/Control/BaseToggle/index.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardRefRenderFunction } from 'react';\nimport { forwardRef, useCallback } from 'react';\n\nimport { Typography } from '@/Common';\n\nimport { ToggleIcon } from './ToggleIcon';\nimport { ToggleInput, ToggleRoot } from './styles';\nimport type { BaseToggleProps } from './types';\n\nconst _BaseToggle: ForwardRefRenderFunction<\n HTMLInputElement,\n BaseToggleProps\n> = (\n {\n variant,\n label: _label,\n labelPosition = 'right',\n className,\n inputClassName,\n size = 'medium',\n labelGap = size === 'small' ? 2 : 4,\n type = 'checkbox',\n onToggle,\n onChange,\n indeterminate,\n ...props\n },\n ref\n) => {\n const isStringLabel = typeof _label === 'string';\n const label = isStringLabel ? (\n <Typography variant=\"Body1\">{_label}</Typography>\n ) : (\n _label\n );\n\n const refCallback = useCallback(\n (input: HTMLInputElement | null) => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(input);\n } else {\n ref.current = input;\n }\n }\n\n if (input) {\n input.indeterminate = indeterminate ?? false;\n }\n },\n [indeterminate, ref]\n );\n\n return (\n <ToggleRoot className={className} $gap={labelGap}>\n <ToggleInput\n ref={refCallback}\n className={inputClassName}\n type={type}\n {...props}\n onChange={(e) => {\n onChange?.(e);\n onToggle?.(e.target.checked);\n }}\n />\n {labelPosition === 'left' && label}\n <ToggleIcon\n className=\"onIcon\"\n size={size}\n status=\"on\"\n variant={variant}\n />\n {type === 'checkbox' && (\n <ToggleIcon\n className=\"indeterminateIcon\"\n size={size}\n status=\"indeterminate\"\n variant={variant}\n />\n )}\n <ToggleIcon\n className=\"offIcon\"\n size={size}\n status=\"off\"\n variant={variant}\n />\n {labelPosition === 'right' && label}\n </ToggleRoot>\n );\n};\n\nexport const BaseToggle = forwardRef(_BaseToggle);\n"],"names":["labelPosition","size","type","props","variant","children","className","$gap","ref","onChange","status"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAa;AAAA;AAAA;AAWb;AAmBK;;;AAZDA;;;;AAGAC;;;;AAEAC;;;;AAIGC;AAIL;AACA;AACcC;AAAeC;;AAK7B;AAEI;AACE;;AAEA;;AAEA;AACF;AAEA;;AAEA;AACF;;AAKYC;AAAsBC;AAAeF;AAE7CG;AACAF;AACAJ;AAAW;AAEXO;AACEA;;AAEF;;AAIAH;AACAL;AACAS;AACAN;;AAIEE;AACAL;AACAS;AACAN;AAAiB;AAInBE;AACAL;AACAS;AACAN;AAAiB;AAEgB;AAGzC;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Control/BaseToggle/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Control/BaseToggle/index.tsx"],"names":[],"mappings":";AA6FA,eAAO,MAAM,UAAU;;;;;;;;;;sJAA0B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
3
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
4
|
-
import { forwardRef } from 'react';
|
|
4
|
+
import { forwardRef, useCallback } from 'react';
|
|
5
5
|
import '../../Common/Divider/index.esm.js';
|
|
6
6
|
import '../../Common/Flex/index.esm.js';
|
|
7
7
|
import '../../Common/Grid/index.esm.js';
|
|
@@ -16,7 +16,7 @@ import { ToggleRoot, ToggleInput } from './styles.esm.js';
|
|
|
16
16
|
var _excluded = ["variant", "label", "labelPosition", "className", "inputClassName", "size", "labelGap", "type", "onToggle", "onChange", "indeterminate"];
|
|
17
17
|
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; }
|
|
18
18
|
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; }
|
|
19
|
-
var _BaseToggle = function _BaseToggle(_ref,
|
|
19
|
+
var _BaseToggle = function _BaseToggle(_ref, ref) {
|
|
20
20
|
var variant = _ref.variant,
|
|
21
21
|
_label = _ref.label,
|
|
22
22
|
_ref$labelPosition = _ref.labelPosition,
|
|
@@ -38,22 +38,23 @@ var _BaseToggle = function _BaseToggle(_ref, _ref2) {
|
|
|
38
38
|
variant: "Body1",
|
|
39
39
|
children: _label
|
|
40
40
|
}) : _label;
|
|
41
|
+
var refCallback = useCallback(function (input) {
|
|
42
|
+
if (ref) {
|
|
43
|
+
if (typeof ref === 'function') {
|
|
44
|
+
ref(input);
|
|
45
|
+
} else {
|
|
46
|
+
ref.current = input;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (input) {
|
|
50
|
+
input.indeterminate = indeterminate !== null && indeterminate !== void 0 ? indeterminate : false;
|
|
51
|
+
}
|
|
52
|
+
}, [indeterminate, ref]);
|
|
41
53
|
return /*#__PURE__*/jsxs(ToggleRoot, {
|
|
42
54
|
className: className,
|
|
43
55
|
$gap: labelGap,
|
|
44
56
|
children: [/*#__PURE__*/jsx(ToggleInput, _objectSpread(_objectSpread({
|
|
45
|
-
ref:
|
|
46
|
-
if (_ref2) {
|
|
47
|
-
if (typeof _ref2 === 'function') {
|
|
48
|
-
_ref2(input);
|
|
49
|
-
} else {
|
|
50
|
-
_ref2.current = input;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (input) {
|
|
54
|
-
input.indeterminate = indeterminate !== null && indeterminate !== void 0 ? indeterminate : false;
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
+
ref: refCallback,
|
|
57
58
|
className: inputClassName,
|
|
58
59
|
type: type
|
|
59
60
|
}, props), {}, {
|
|
@@ -66,7 +67,7 @@ var _BaseToggle = function _BaseToggle(_ref, _ref2) {
|
|
|
66
67
|
size: size,
|
|
67
68
|
status: "on",
|
|
68
69
|
variant: variant
|
|
69
|
-
}), /*#__PURE__*/jsx(ToggleIcon, {
|
|
70
|
+
}), type === 'checkbox' && /*#__PURE__*/jsx(ToggleIcon, {
|
|
70
71
|
className: "indeterminateIcon",
|
|
71
72
|
size: size,
|
|
72
73
|
status: "indeterminate",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../../src/Control/BaseToggle/index.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardRefRenderFunction } from 'react';\nimport { forwardRef } from 'react';\n\nimport { Typography } from '@/Common';\n\nimport { ToggleIcon } from './ToggleIcon';\nimport { ToggleInput, ToggleRoot } from './styles';\nimport type { BaseToggleProps } from './types';\n\nconst _BaseToggle: ForwardRefRenderFunction<\n HTMLInputElement,\n BaseToggleProps\n> = (\n {\n variant,\n label: _label,\n labelPosition = 'right',\n className,\n inputClassName,\n size = 'medium',\n labelGap = size === 'small' ? 2 : 4,\n type = 'checkbox',\n onToggle,\n onChange,\n indeterminate,\n ...props\n },\n ref\n) => {\n const isStringLabel = typeof _label === 'string';\n const label = isStringLabel ? (\n <Typography variant=\"Body1\">{_label}</Typography>\n ) : (\n _label\n );\n\n
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/Control/BaseToggle/index.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardRefRenderFunction } from 'react';\nimport { forwardRef, useCallback } from 'react';\n\nimport { Typography } from '@/Common';\n\nimport { ToggleIcon } from './ToggleIcon';\nimport { ToggleInput, ToggleRoot } from './styles';\nimport type { BaseToggleProps } from './types';\n\nconst _BaseToggle: ForwardRefRenderFunction<\n HTMLInputElement,\n BaseToggleProps\n> = (\n {\n variant,\n label: _label,\n labelPosition = 'right',\n className,\n inputClassName,\n size = 'medium',\n labelGap = size === 'small' ? 2 : 4,\n type = 'checkbox',\n onToggle,\n onChange,\n indeterminate,\n ...props\n },\n ref\n) => {\n const isStringLabel = typeof _label === 'string';\n const label = isStringLabel ? (\n <Typography variant=\"Body1\">{_label}</Typography>\n ) : (\n _label\n );\n\n const refCallback = useCallback(\n (input: HTMLInputElement | null) => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(input);\n } else {\n ref.current = input;\n }\n }\n\n if (input) {\n input.indeterminate = indeterminate ?? false;\n }\n },\n [indeterminate, ref]\n );\n\n return (\n <ToggleRoot className={className} $gap={labelGap}>\n <ToggleInput\n ref={refCallback}\n className={inputClassName}\n type={type}\n {...props}\n onChange={(e) => {\n onChange?.(e);\n onToggle?.(e.target.checked);\n }}\n />\n {labelPosition === 'left' && label}\n <ToggleIcon\n className=\"onIcon\"\n size={size}\n status=\"on\"\n variant={variant}\n />\n {type === 'checkbox' && (\n <ToggleIcon\n className=\"indeterminateIcon\"\n size={size}\n status=\"indeterminate\"\n variant={variant}\n />\n )}\n <ToggleIcon\n className=\"offIcon\"\n size={size}\n status=\"off\"\n variant={variant}\n />\n {labelPosition === 'right' && label}\n </ToggleRoot>\n );\n};\n\nexport const BaseToggle = forwardRef(_BaseToggle);\n"],"names":["labelPosition","size","type","props","variant","children","className","$gap","ref","onChange","status"],"mappings":";;;;;;;;;;;;;;;AAAa;AAAA;AAAA;AAWb;AAmBK;;;AAZDA;;;;AAGAC;;;;AAEAC;;;;AAIGC;AAIL;AACA;AACcC;AAAeC;;AAK7B;AAEI;AACE;;AAEA;;AAEA;AACF;AAEA;;AAEA;AACF;;AAKYC;AAAsBC;AAAeF;AAE7CG;AACAF;AACAJ;AAAW;AAEXO;AACEA;;AAEF;;AAIAH;AACAL;AACAS;AACAN;;AAIEE;AACAL;AACAS;AACAN;AAAiB;AAInBE;AACAL;AACAS;AACAN;AAAiB;AAEgB;AAGzC;;;"}
|
|
@@ -11,11 +11,11 @@ var _taggedTemplateLiteral__default = /*#__PURE__*/_interopDefault(_taggedTempla
|
|
|
11
11
|
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
12
12
|
|
|
13
13
|
var _templateObject, _templateObject2;
|
|
14
|
-
var ToggleRoot = styled__default.default.label(_templateObject || (_templateObject = _taggedTemplateLiteral__default.default(["\n width: fit-content;\n height: fit-content;\n display: flex;\n ", "\n\n cursor: pointer;\n user-select: none;\n align-items: center;\n\n & >
|
|
14
|
+
var ToggleRoot = styled__default.default.label(_templateObject || (_templateObject = _taggedTemplateLiteral__default.default(["\n width: fit-content;\n height: fit-content;\n display: flex;\n ", "\n\n cursor: pointer;\n user-select: none;\n align-items: center;\n\n & > .toggleIcon {\n transition: filter 0.2s ease-in-out;\n flex-shrink: 0;\n }\n\n &:has(input:disabled) {\n cursor: default;\n }\n\n @media (hover: hover) {\n &:hover > .toggleIcon {\n filter: grayscale(0.05) brightness(0.95);\n }\n }\n"])), function (_ref) {
|
|
15
15
|
var $gap = _ref.$gap;
|
|
16
16
|
return $gap && "gap: ".concat($gap, "px;");
|
|
17
17
|
});
|
|
18
|
-
var ToggleInput = styled__default.default.input(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral__default.default(["\n all: unset;\n position: absolute;\n width: 1px;\n height: 0px;\n margin-left: -1px;\n\n &:checked ~
|
|
18
|
+
var ToggleInput = styled__default.default.input(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral__default.default(["\n all: unset;\n position: absolute;\n width: 1px;\n height: 0px;\n margin-left: -1px;\n\n &:checked ~ .toggleIcon.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ .toggleIcon.onIcon {\n display: none;\n }\n\n &[type='checkbox']:indeterminate ~ .toggleIcon.offIcon,\n &[type='checkbox']:indeterminate ~ .toggleIcon.onIcon {\n display: none;\n }\n\n &[type='checkbox']:not(:indeterminate) ~ .toggleIcon.indeterminateIcon {\n display: none;\n }\n\n &:disabled ~ .toggleIcon {\n filter: grayscale(1) brightness(1.1);\n }\n\n &:not(:disabled):active ~ .toggleIcon {\n filter: grayscale(0.1) brightness(0.9);\n }\n\n &:focus-visible ~ .toggleIcon {\n outline: solid 2px ", ";\n outline-offset: -1px;\n }\n"])), mixin.primary100);
|
|
19
19
|
|
|
20
20
|
exports.ToggleInput = ToggleInput;
|
|
21
21
|
exports.ToggleRoot = ToggleRoot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.cjs.js","sources":["../../../../src/Control/BaseToggle/styles.ts"],"sourcesContent":["'use client';\n\nimport styled from 'styled-components';\nimport { primary100 } from '@remember-web/mixin';\n\nexport const ToggleRoot = styled.label<{ $gap?: number }>`\n width: fit-content;\n height: fit-content;\n display: flex;\n ${({ $gap }) => $gap && `gap: ${$gap}px;`}\n\n cursor: pointer;\n user-select: none;\n align-items: center;\n\n & >
|
|
1
|
+
{"version":3,"file":"styles.cjs.js","sources":["../../../../src/Control/BaseToggle/styles.ts"],"sourcesContent":["'use client';\n\nimport styled from 'styled-components';\nimport { primary100 } from '@remember-web/mixin';\n\nexport const ToggleRoot = styled.label<{ $gap?: number }>`\n width: fit-content;\n height: fit-content;\n display: flex;\n ${({ $gap }) => $gap && `gap: ${$gap}px;`}\n\n cursor: pointer;\n user-select: none;\n align-items: center;\n\n & > .toggleIcon {\n transition: filter 0.2s ease-in-out;\n flex-shrink: 0;\n }\n\n &:has(input:disabled) {\n cursor: default;\n }\n\n @media (hover: hover) {\n &:hover > .toggleIcon {\n filter: grayscale(0.05) brightness(0.95);\n }\n }\n`;\n\nexport const ToggleInput = styled.input`\n all: unset;\n position: absolute;\n width: 1px;\n height: 0px;\n margin-left: -1px;\n\n &:checked ~ .toggleIcon.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ .toggleIcon.onIcon {\n display: none;\n }\n\n &[type='checkbox']:indeterminate ~ .toggleIcon.offIcon,\n &[type='checkbox']:indeterminate ~ .toggleIcon.onIcon {\n display: none;\n }\n\n &[type='checkbox']:not(:indeterminate) ~ .toggleIcon.indeterminateIcon {\n display: none;\n }\n\n &:disabled ~ .toggleIcon {\n filter: grayscale(1) brightness(1.1);\n }\n\n &:not(:disabled):active ~ .toggleIcon {\n filter: grayscale(0.1) brightness(0.9);\n }\n\n &:focus-visible ~ .toggleIcon {\n outline: solid 2px ${primary100};\n outline-offset: -1px;\n }\n`;\n"],"names":["ToggleRoot","ToggleInput"],"mappings":";;;;;;;;;;;;AAAa;AAKAA;AAIT;AAAO;AAAgC;AAsB9BC;;;"}
|
|
@@ -4,11 +4,11 @@ import styled from 'styled-components';
|
|
|
4
4
|
import { primary100 } from '@remember-web/mixin';
|
|
5
5
|
|
|
6
6
|
var _templateObject, _templateObject2;
|
|
7
|
-
var ToggleRoot = styled.label(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: fit-content;\n height: fit-content;\n display: flex;\n ", "\n\n cursor: pointer;\n user-select: none;\n align-items: center;\n\n & >
|
|
7
|
+
var ToggleRoot = styled.label(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: fit-content;\n height: fit-content;\n display: flex;\n ", "\n\n cursor: pointer;\n user-select: none;\n align-items: center;\n\n & > .toggleIcon {\n transition: filter 0.2s ease-in-out;\n flex-shrink: 0;\n }\n\n &:has(input:disabled) {\n cursor: default;\n }\n\n @media (hover: hover) {\n &:hover > .toggleIcon {\n filter: grayscale(0.05) brightness(0.95);\n }\n }\n"])), function (_ref) {
|
|
8
8
|
var $gap = _ref.$gap;
|
|
9
9
|
return $gap && "gap: ".concat($gap, "px;");
|
|
10
10
|
});
|
|
11
|
-
var ToggleInput = styled.input(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n all: unset;\n position: absolute;\n width: 1px;\n height: 0px;\n margin-left: -1px;\n\n &:checked ~
|
|
11
|
+
var ToggleInput = styled.input(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n all: unset;\n position: absolute;\n width: 1px;\n height: 0px;\n margin-left: -1px;\n\n &:checked ~ .toggleIcon.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ .toggleIcon.onIcon {\n display: none;\n }\n\n &[type='checkbox']:indeterminate ~ .toggleIcon.offIcon,\n &[type='checkbox']:indeterminate ~ .toggleIcon.onIcon {\n display: none;\n }\n\n &[type='checkbox']:not(:indeterminate) ~ .toggleIcon.indeterminateIcon {\n display: none;\n }\n\n &:disabled ~ .toggleIcon {\n filter: grayscale(1) brightness(1.1);\n }\n\n &:not(:disabled):active ~ .toggleIcon {\n filter: grayscale(0.1) brightness(0.9);\n }\n\n &:focus-visible ~ .toggleIcon {\n outline: solid 2px ", ";\n outline-offset: -1px;\n }\n"])), primary100);
|
|
12
12
|
|
|
13
13
|
export { ToggleInput, ToggleRoot };
|
|
14
14
|
//# sourceMappingURL=styles.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.esm.js","sources":["../../../../src/Control/BaseToggle/styles.ts"],"sourcesContent":["'use client';\n\nimport styled from 'styled-components';\nimport { primary100 } from '@remember-web/mixin';\n\nexport const ToggleRoot = styled.label<{ $gap?: number }>`\n width: fit-content;\n height: fit-content;\n display: flex;\n ${({ $gap }) => $gap && `gap: ${$gap}px;`}\n\n cursor: pointer;\n user-select: none;\n align-items: center;\n\n & >
|
|
1
|
+
{"version":3,"file":"styles.esm.js","sources":["../../../../src/Control/BaseToggle/styles.ts"],"sourcesContent":["'use client';\n\nimport styled from 'styled-components';\nimport { primary100 } from '@remember-web/mixin';\n\nexport const ToggleRoot = styled.label<{ $gap?: number }>`\n width: fit-content;\n height: fit-content;\n display: flex;\n ${({ $gap }) => $gap && `gap: ${$gap}px;`}\n\n cursor: pointer;\n user-select: none;\n align-items: center;\n\n & > .toggleIcon {\n transition: filter 0.2s ease-in-out;\n flex-shrink: 0;\n }\n\n &:has(input:disabled) {\n cursor: default;\n }\n\n @media (hover: hover) {\n &:hover > .toggleIcon {\n filter: grayscale(0.05) brightness(0.95);\n }\n }\n`;\n\nexport const ToggleInput = styled.input`\n all: unset;\n position: absolute;\n width: 1px;\n height: 0px;\n margin-left: -1px;\n\n &:checked ~ .toggleIcon.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ .toggleIcon.onIcon {\n display: none;\n }\n\n &[type='checkbox']:indeterminate ~ .toggleIcon.offIcon,\n &[type='checkbox']:indeterminate ~ .toggleIcon.onIcon {\n display: none;\n }\n\n &[type='checkbox']:not(:indeterminate) ~ .toggleIcon.indeterminateIcon {\n display: none;\n }\n\n &:disabled ~ .toggleIcon {\n filter: grayscale(1) brightness(1.1);\n }\n\n &:not(:disabled):active ~ .toggleIcon {\n filter: grayscale(0.1) brightness(0.9);\n }\n\n &:focus-visible ~ .toggleIcon {\n outline: solid 2px ${primary100};\n outline-offset: -1px;\n }\n`;\n"],"names":["ToggleRoot","ToggleInput"],"mappings":";;;;;AAAa;AAKAA;AAIT;AAAO;AAAgC;AAsB9BC;;"}
|
package/package.json
CHANGED
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
type SvgSizeProps,
|
|
20
20
|
type WithSvgSizeComponentType,
|
|
21
21
|
} from '@remember-web/icon/util';
|
|
22
|
+
import styled from 'styled-components';
|
|
22
23
|
|
|
23
24
|
import type { ToggleStatusType, ToggleVariantType } from '../types';
|
|
24
25
|
|
|
@@ -68,5 +69,17 @@ export function ToggleIcon({
|
|
|
68
69
|
|
|
69
70
|
const Icon = ICON_NAME[variant][status];
|
|
70
71
|
|
|
71
|
-
return
|
|
72
|
+
return (
|
|
73
|
+
<ToggleIconContainer className={`toggleIcon ${className}`}>
|
|
74
|
+
<Icon size={iconSize} />
|
|
75
|
+
</ToggleIconContainer>
|
|
76
|
+
);
|
|
72
77
|
}
|
|
78
|
+
|
|
79
|
+
const ToggleIconContainer = styled.div`
|
|
80
|
+
border-radius: 50%;
|
|
81
|
+
|
|
82
|
+
> svg {
|
|
83
|
+
display: block;
|
|
84
|
+
}
|
|
85
|
+
`;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import type { ForwardRefRenderFunction } from 'react';
|
|
4
|
-
import { forwardRef } from 'react';
|
|
4
|
+
import { forwardRef, useCallback } from 'react';
|
|
5
5
|
|
|
6
6
|
import { Typography } from '@/Common';
|
|
7
7
|
|
|
@@ -36,22 +36,27 @@ const _BaseToggle: ForwardRefRenderFunction<
|
|
|
36
36
|
_label
|
|
37
37
|
);
|
|
38
38
|
|
|
39
|
+
const refCallback = useCallback(
|
|
40
|
+
(input: HTMLInputElement | null) => {
|
|
41
|
+
if (ref) {
|
|
42
|
+
if (typeof ref === 'function') {
|
|
43
|
+
ref(input);
|
|
44
|
+
} else {
|
|
45
|
+
ref.current = input;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (input) {
|
|
50
|
+
input.indeterminate = indeterminate ?? false;
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
[indeterminate, ref]
|
|
54
|
+
);
|
|
55
|
+
|
|
39
56
|
return (
|
|
40
57
|
<ToggleRoot className={className} $gap={labelGap}>
|
|
41
58
|
<ToggleInput
|
|
42
|
-
ref={
|
|
43
|
-
if (ref) {
|
|
44
|
-
if (typeof ref === 'function') {
|
|
45
|
-
ref(input);
|
|
46
|
-
} else {
|
|
47
|
-
ref.current = input;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (input) {
|
|
52
|
-
input.indeterminate = indeterminate ?? false;
|
|
53
|
-
}
|
|
54
|
-
}}
|
|
59
|
+
ref={refCallback}
|
|
55
60
|
className={inputClassName}
|
|
56
61
|
type={type}
|
|
57
62
|
{...props}
|
|
@@ -67,12 +72,14 @@ const _BaseToggle: ForwardRefRenderFunction<
|
|
|
67
72
|
status="on"
|
|
68
73
|
variant={variant}
|
|
69
74
|
/>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
{type === 'checkbox' && (
|
|
76
|
+
<ToggleIcon
|
|
77
|
+
className="indeterminateIcon"
|
|
78
|
+
size={size}
|
|
79
|
+
status="indeterminate"
|
|
80
|
+
variant={variant}
|
|
81
|
+
/>
|
|
82
|
+
)}
|
|
76
83
|
<ToggleIcon
|
|
77
84
|
className="offIcon"
|
|
78
85
|
size={size}
|
|
@@ -13,17 +13,17 @@ export const ToggleRoot = styled.label<{ $gap?: number }>`
|
|
|
13
13
|
user-select: none;
|
|
14
14
|
align-items: center;
|
|
15
15
|
|
|
16
|
-
& >
|
|
16
|
+
& > .toggleIcon {
|
|
17
17
|
transition: filter 0.2s ease-in-out;
|
|
18
18
|
flex-shrink: 0;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
&:has(input:disabled) {
|
|
22
22
|
cursor: default;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
@media (hover: hover) {
|
|
26
|
-
&:hover >
|
|
26
|
+
&:hover > .toggleIcon {
|
|
27
27
|
filter: grayscale(0.05) brightness(0.95);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -36,32 +36,32 @@ export const ToggleInput = styled.input`
|
|
|
36
36
|
height: 0px;
|
|
37
37
|
margin-left: -1px;
|
|
38
38
|
|
|
39
|
-
&:checked ~
|
|
39
|
+
&:checked ~ .toggleIcon.offIcon {
|
|
40
40
|
display: none;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
&:not(:checked) ~
|
|
43
|
+
&:not(:checked) ~ .toggleIcon.onIcon {
|
|
44
44
|
display: none;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
&[type='checkbox']:indeterminate ~ .toggleIcon.offIcon,
|
|
48
|
+
&[type='checkbox']:indeterminate ~ .toggleIcon.onIcon {
|
|
49
49
|
display: none;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
&[type='checkbox']:not(:indeterminate) ~ .toggleIcon.indeterminateIcon {
|
|
53
53
|
display: none;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
&:disabled ~
|
|
56
|
+
&:disabled ~ .toggleIcon {
|
|
57
57
|
filter: grayscale(1) brightness(1.1);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
&:not(:disabled):active ~
|
|
60
|
+
&:not(:disabled):active ~ .toggleIcon {
|
|
61
61
|
filter: grayscale(0.1) brightness(0.9);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
&:focus-visible ~
|
|
64
|
+
&:focus-visible ~ .toggleIcon {
|
|
65
65
|
outline: solid 2px ${primary100};
|
|
66
66
|
outline-offset: -1px;
|
|
67
67
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
|
|
3
3
|
import { Radio } from './Radio';
|
|
4
|
+
import { useState } from 'react';
|
|
4
5
|
|
|
5
6
|
type Story = StoryObj<typeof Radio>;
|
|
6
7
|
|
|
@@ -20,17 +21,69 @@ export const Default: Story = {
|
|
|
20
21
|
labelPosition: 'right',
|
|
21
22
|
label: "I'm a Radio",
|
|
22
23
|
},
|
|
23
|
-
render: ({ ...args }) =>
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
render: ({ ...args }) => {
|
|
25
|
+
const [value, setValue] = useState<string | null>(null);
|
|
26
|
+
return (
|
|
27
|
+
<>
|
|
28
|
+
<div>
|
|
29
|
+
<h2>name으로 묶은 uncontrolled 라디오</h2>
|
|
30
|
+
<Radio {...args} name="radio" value="1" label="1번 라디오 입니다." />
|
|
31
|
+
<Radio {...args} name="radio" value="2" label="2번 라디오 입니다." />
|
|
32
|
+
<Radio {...args} name="radio" value="3" label="3번 라디오 입니다." />
|
|
33
|
+
<Radio {...args} name="radio" value="4" label="4번 라디오 입니다." />
|
|
34
|
+
<Radio {...args} name="radio" value="5" label="5번 라디오 입니다." />
|
|
35
|
+
<Radio {...args} name="radio" value="6" label="6번 라디오 입니다." />
|
|
36
|
+
<Radio {...args} name="radio" value="7" label="7번 라디오 입니다." />
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<div>
|
|
40
|
+
<h2>state로 관리하는 controlled 라디오</h2>
|
|
41
|
+
<Radio
|
|
42
|
+
{...args}
|
|
43
|
+
checked={value === '1'}
|
|
44
|
+
onClick={() => setValue('1')}
|
|
45
|
+
label="1번 라디오 입니다."
|
|
46
|
+
/>
|
|
47
|
+
<Radio
|
|
48
|
+
{...args}
|
|
49
|
+
checked={value === '2'}
|
|
50
|
+
onClick={() => setValue('2')}
|
|
51
|
+
label="2번 라디오 입니다."
|
|
52
|
+
/>
|
|
53
|
+
<Radio
|
|
54
|
+
{...args}
|
|
55
|
+
checked={value === '3'}
|
|
56
|
+
onClick={() => setValue('3')}
|
|
57
|
+
label="3번 라디오 입니다."
|
|
58
|
+
/>
|
|
59
|
+
<Radio
|
|
60
|
+
{...args}
|
|
61
|
+
checked={value === '4'}
|
|
62
|
+
onClick={() => setValue('4')}
|
|
63
|
+
label="4번 라디오 입니다."
|
|
64
|
+
/>
|
|
65
|
+
<Radio
|
|
66
|
+
{...args}
|
|
67
|
+
checked={value === '5'}
|
|
68
|
+
onClick={() => setValue('5')}
|
|
69
|
+
label="5번 라디오 입니다."
|
|
70
|
+
/>
|
|
71
|
+
<Radio
|
|
72
|
+
{...args}
|
|
73
|
+
checked={value === '6'}
|
|
74
|
+
onClick={() => setValue('6')}
|
|
75
|
+
label="6번 라디오 입니다."
|
|
76
|
+
/>
|
|
77
|
+
<Radio
|
|
78
|
+
{...args}
|
|
79
|
+
checked={value === '7'}
|
|
80
|
+
onClick={() => setValue('7')}
|
|
81
|
+
label="7번 라디오 입니다."
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
</>
|
|
85
|
+
);
|
|
86
|
+
},
|
|
34
87
|
};
|
|
35
88
|
|
|
36
89
|
export default meta;
|