@remember-web/primitive 0.1.16 → 0.1.17
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/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/index.tsx +27 -20
- package/src/Control/BaseToggle/styles.ts +4 -4
- package/src/Control/Radio.stories.tsx +64 -11
|
@@ -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 & > svg {\n transition: filter 0.2s ease-in-out;\n flex-shrink: 0;\n }\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 & > svg {\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 > svg {\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 ~ svg.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ svg.onIcon {\n display: none;\n }\n\n
|
|
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 ~ svg.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ svg.onIcon {\n display: none;\n }\n\n &[type='checkbox']:indeterminate ~ svg.offIcon,\n &[type='checkbox']:indeterminate ~ svg.onIcon {\n display: none;\n }\n\n &[type='checkbox']:not(:indeterminate) ~ svg.indeterminateIcon {\n display: none;\n }\n\n &:disabled ~ svg {\n filter: grayscale(1) brightness(1.1);\n }\n\n &:not(:disabled):active ~ svg {\n filter: grayscale(0.1) brightness(0.9);\n }\n\n &:focus-visible ~ svg {\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 & > svg {\n transition: filter 0.2s ease-in-out;\n flex-shrink: 0;\n }\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 & > svg {\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 > svg {\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 ~ svg.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ svg.onIcon {\n display: none;\n }\n\n &[type='checkbox']:indeterminate ~ svg.offIcon,\n &[type='checkbox']:indeterminate ~ svg.onIcon {\n display: none;\n }\n\n &[type='checkbox']:not(:indeterminate) ~ svg.indeterminateIcon {\n display: none;\n }\n\n &:disabled ~ svg {\n filter: grayscale(1) brightness(1.1);\n }\n\n &:not(:disabled):active ~ svg {\n filter: grayscale(0.1) brightness(0.9);\n }\n\n &:focus-visible ~ svg {\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 & > svg {\n transition: filter 0.2s ease-in-out;\n flex-shrink: 0;\n }\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 & > svg {\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 > svg {\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 ~ svg.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ svg.onIcon {\n display: none;\n }\n\n
|
|
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 ~ svg.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ svg.onIcon {\n display: none;\n }\n\n &[type='checkbox']:indeterminate ~ svg.offIcon,\n &[type='checkbox']:indeterminate ~ svg.onIcon {\n display: none;\n }\n\n &[type='checkbox']:not(:indeterminate) ~ svg.indeterminateIcon {\n display: none;\n }\n\n &:disabled ~ svg {\n filter: grayscale(1) brightness(1.1);\n }\n\n &:not(:disabled):active ~ svg {\n filter: grayscale(0.1) brightness(0.9);\n }\n\n &:focus-visible ~ svg {\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 & > svg {\n transition: filter 0.2s ease-in-out;\n flex-shrink: 0;\n }\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 & > svg {\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 > svg {\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 ~ svg.offIcon {\n display: none;\n }\n\n &:not(:checked) ~ svg.onIcon {\n display: none;\n }\n\n &[type='checkbox']:indeterminate ~ svg.offIcon,\n &[type='checkbox']:indeterminate ~ svg.onIcon {\n display: none;\n }\n\n &[type='checkbox']:not(:indeterminate) ~ svg.indeterminateIcon {\n display: none;\n }\n\n &:disabled ~ svg {\n filter: grayscale(1) brightness(1.1);\n }\n\n &:not(:disabled):active ~ svg {\n filter: grayscale(0.1) brightness(0.9);\n }\n\n &:focus-visible ~ svg {\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
|
@@ -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}
|
|
@@ -18,7 +18,7 @@ export const ToggleRoot = styled.label<{ $gap?: number }>`
|
|
|
18
18
|
flex-shrink: 0;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
&:has(input:disabled) {
|
|
22
22
|
cursor: default;
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -44,12 +44,12 @@ export const ToggleInput = styled.input`
|
|
|
44
44
|
display: none;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
&[type='checkbox']:indeterminate ~ svg.offIcon,
|
|
48
|
+
&[type='checkbox']:indeterminate ~ svg.onIcon {
|
|
49
49
|
display: none;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
&[type='checkbox']:not(:indeterminate) ~ svg.indeterminateIcon {
|
|
53
53
|
display: none;
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -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;
|