@jbpark/ui-kit 2.3.4 → 2.5.0
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/Menu.d.mts +2 -2
- package/dist/Menu.d.mts.map +1 -1
- package/dist/Menu.mjs +4 -4
- package/dist/Menu.mjs.map +1 -1
- package/dist/components/atoms/Button/index.d.mts +5 -1
- package/dist/components/atoms/Button/index.d.mts.map +1 -1
- package/dist/components/atoms/Button/index.mjs +22 -9
- package/dist/components/atoms/Button/index.mjs.map +1 -1
- package/dist/components/atoms/Checkbox/Group/index.d.mts +2 -2
- package/dist/components/atoms/Checkbox/Group/index.d.mts.map +1 -1
- package/dist/components/atoms/Checkbox/Group/index.mjs.map +1 -1
- package/dist/components/atoms/Checkbox/index.d.mts +2 -3
- package/dist/components/atoms/Checkbox/index.d.mts.map +1 -1
- package/dist/components/atoms/Checkbox/index.mjs.map +1 -1
- package/dist/components/atoms/Radio/Group/index.d.mts +7 -2
- package/dist/components/atoms/Radio/Group/index.d.mts.map +1 -1
- package/dist/components/atoms/Radio/Group/index.mjs +15 -4
- package/dist/components/atoms/Radio/Group/index.mjs.map +1 -1
- package/dist/components/atoms/Radio/index.d.mts +6 -3
- package/dist/components/atoms/Radio/index.d.mts.map +1 -1
- package/dist/components/atoms/Radio/index.mjs +3 -2
- package/dist/components/atoms/Radio/index.mjs.map +1 -1
- package/dist/components/atoms/Skeleton/index.d.mts +1 -1
- package/dist/components/atoms/Skeleton/index.d.mts.map +1 -1
- package/dist/components/atoms/Switch/index.d.mts +6 -0
- package/dist/components/atoms/Switch/index.d.mts.map +1 -1
- package/dist/components/atoms/Switch/index.mjs +39 -5
- package/dist/components/atoms/Switch/index.mjs.map +1 -1
- package/dist/components/organisms/List/index.d.mts +1 -1
- package/dist/components/organisms/List/index.d.mts.map +1 -1
- package/dist/core/switch.d.mts +2 -0
- package/dist/core/switch.d.mts.map +1 -1
- package/dist/core/switch.mjs +5 -5
- package/dist/core/switch.mjs.map +1 -1
- package/dist/index.d.mts +5 -1
- package/dist/index.mjs +4 -1
- package/dist/providers/ConfigProvider/ConfigContext.d.mts +8 -0
- package/dist/providers/ConfigProvider/ConfigContext.d.mts.map +1 -0
- package/dist/providers/ConfigProvider/ConfigContext.mjs +11 -0
- package/dist/providers/ConfigProvider/ConfigContext.mjs.map +1 -0
- package/dist/providers/ConfigProvider/index.d.mts +18 -0
- package/dist/providers/ConfigProvider/index.d.mts.map +1 -0
- package/dist/providers/ConfigProvider/index.mjs +67 -0
- package/dist/providers/ConfigProvider/index.mjs.map +1 -0
- package/dist/providers/ConfigProvider/types.d.mts +32 -0
- package/dist/providers/ConfigProvider/types.d.mts.map +1 -0
- package/dist/providers/index.d.mts +3 -0
- package/dist/providers/index.mjs +4 -0
- package/dist/style.css +122 -35
- package/dist/utils.d.mts +2 -2
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +4 -4
- package/dist/utils.mjs.map +1 -1
- package/package.json +1 -1
package/dist/Menu.d.mts
CHANGED
|
@@ -41,8 +41,8 @@ type ClickEventHandler = (params: {
|
|
|
41
41
|
}) => void;
|
|
42
42
|
declare const MENU_CLASSNAMES: string[];
|
|
43
43
|
type SelectionMap = ReadonlyMap<React.Key, boolean>;
|
|
44
|
-
declare
|
|
45
|
-
declare
|
|
44
|
+
declare const buildSelectionMap: (items: MenuItem[], selectedKeysSet: ReadonlySet<React.Key>) => SelectionMap;
|
|
45
|
+
declare const findKey: (menu: MenuItem, targetKeys: ReadonlySet<React.Key>) => boolean;
|
|
46
46
|
declare const Menu: ({
|
|
47
47
|
items,
|
|
48
48
|
mode,
|
package/dist/Menu.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.mts","names":[],"sources":["../src/components/molecules/Menu/index.tsx"],"mappings":";;;UAQiB,QAAA;EACf,KAAA,EAAO,KAAA,CAAM,SAAA;EACb,GAAA,EAAK,KAAA,CAAM,GAAA;EACX,IAAA;EACA,IAAA;EACA,QAAA,GAAW,QAAA;AAAA;AAAA,UAGI,KAAA;EACf,IAAA;EACA,YAAA,GAAe,KAAA,CAAM,GAAA;EACrB,mBAAA,GAAsB,KAAA,CAAM,GAAA;EAC5B,YAAA,GAAe,YAAA;EACf,MAAA;EACA,YAAA;EACA,UAAA;IACE,QAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;EAAA;EAGF,MAAA;IACE,QAAA,GAAW,KAAA,CAAM,aAAA;IACjB,OAAA,GAAU,KAAA,CAAM,aAAA;IAChB,IAAA,GAAO,KAAA,CAAM,aAAA;IACb,KAAA,GAAQ,KAAA,CAAM,aAAA;EAAA;EAGhB,OAAA,GAAU,iBAAA;EACV,QAAA,GAAW,iBAAA;AAAA;AAAA,UAGI,SAAA,SAEb,KAAA,EACA,IAAA,CAAK,KAAA,CAAM,wBAAA;EACb,KAAA,GAAQ,QAAA;AAAA;AAAA,KAGE,iBAAA,IAAqB,MAAA;EAC/B,QAAA,EAAU,KAAA,CAAM,UAAA;EAChB,GAAA,EAAK,KAAA,CAAM,GAAA;EACX,OAAA,EAAS,KAAA,CAAM,GAAA;EACf,IAAA,EAAM,QAAA;AAAA;AAAA,cAGK,eAAA;AAAA,KAQD,YAAA,GAAe,WAAA,CAAY,KAAA,CAAM,GAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"Menu.d.mts","names":[],"sources":["../src/components/molecules/Menu/index.tsx"],"mappings":";;;UAQiB,QAAA;EACf,KAAA,EAAO,KAAA,CAAM,SAAA;EACb,GAAA,EAAK,KAAA,CAAM,GAAA;EACX,IAAA;EACA,IAAA;EACA,QAAA,GAAW,QAAA;AAAA;AAAA,UAGI,KAAA;EACf,IAAA;EACA,YAAA,GAAe,KAAA,CAAM,GAAA;EACrB,mBAAA,GAAsB,KAAA,CAAM,GAAA;EAC5B,YAAA,GAAe,YAAA;EACf,MAAA;EACA,YAAA;EACA,UAAA;IACE,QAAA;IACA,OAAA;IACA,IAAA;IACA,KAAA;EAAA;EAGF,MAAA;IACE,QAAA,GAAW,KAAA,CAAM,aAAA;IACjB,OAAA,GAAU,KAAA,CAAM,aAAA;IAChB,IAAA,GAAO,KAAA,CAAM,aAAA;IACb,KAAA,GAAQ,KAAA,CAAM,aAAA;EAAA;EAGhB,OAAA,GAAU,iBAAA;EACV,QAAA,GAAW,iBAAA;AAAA;AAAA,UAGI,SAAA,SAEb,KAAA,EACA,IAAA,CAAK,KAAA,CAAM,wBAAA;EACb,KAAA,GAAQ,QAAA;AAAA;AAAA,KAGE,iBAAA,IAAqB,MAAA;EAC/B,QAAA,EAAU,KAAA,CAAM,UAAA;EAChB,GAAA,EAAK,KAAA,CAAM,GAAA;EACX,OAAA,EAAS,KAAA,CAAM,GAAA;EACf,IAAA,EAAM,QAAA;AAAA;AAAA,cAGK,eAAA;AAAA,KAQD,YAAA,GAAe,WAAA,CAAY,KAAA,CAAM,GAAA;AAAA,cAEhC,iBAAA,GACX,KAAA,EAAO,QAAA,IACP,eAAA,EAAiB,WAAA,CAAY,KAAA,CAAM,GAAA,MAClC,YAAA;AAAA,cAeU,OAAA,GACX,IAAA,EAAM,QAAA,EACN,UAAA,EAAY,WAAA,CAAY,KAAA,CAAM,GAAA;AAAA,cAiB1B,IAAA;EAAQ,KAAA;EAAA,IAAA;EAAA,mBAAA;EAAA,YAAA,EAAA,aAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAA,MAAA;EAAA,YAAA;EAAA,OAAA;EAAA,QAAA,EAAA,SAAA;EAAA,GAAA;AAAA,GAaX,SAAA,KAAS,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
package/dist/Menu.mjs
CHANGED
|
@@ -12,7 +12,7 @@ const MENU_CLASSNAMES = [
|
|
|
12
12
|
"shadow-md",
|
|
13
13
|
"rounded-md"
|
|
14
14
|
];
|
|
15
|
-
|
|
15
|
+
const buildSelectionMap = (items, selectedKeysSet) => {
|
|
16
16
|
const map = /* @__PURE__ */ new Map();
|
|
17
17
|
const dfs = (node) => {
|
|
18
18
|
const self = selectedKeysSet.has(node.key);
|
|
@@ -23,14 +23,14 @@ function buildSelectionMap(items, selectedKeysSet) {
|
|
|
23
23
|
};
|
|
24
24
|
items.forEach(dfs);
|
|
25
25
|
return map;
|
|
26
|
-
}
|
|
27
|
-
|
|
26
|
+
};
|
|
27
|
+
const findKey = (menu, targetKeys) => {
|
|
28
28
|
if (targetKeys.has(menu.key)) return true;
|
|
29
29
|
if (menu.children && Array.isArray(menu.children)) {
|
|
30
30
|
for (const child of menu.children) if (findKey(child, targetKeys)) return true;
|
|
31
31
|
}
|
|
32
32
|
return false;
|
|
33
|
-
}
|
|
33
|
+
};
|
|
34
34
|
const Menu = ({ items, mode = "vertical", defaultSelectedKeys = [], selectedKeys: _selectedKeys, className, classNames, styles, offset, inlineOffset, onClick, onSelect: _onSelect, ...props }) => {
|
|
35
35
|
const controlled = _selectedKeys !== void 0;
|
|
36
36
|
const [uncontrolledSelectedKeys, setUncontrolledSelectedKeys] = useState(defaultSelectedKeys ?? []);
|
package/dist/Menu.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.mjs","names":[],"sources":["../src/components/molecules/Menu/index.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Item from './Item';\n\nexport interface MenuItem {\n label: React.ReactNode;\n key: React.Key;\n type?: string;\n path?: string;\n children?: MenuItem[];\n}\n\nexport interface Props {\n mode?: 'horizontal' | 'vertical' | 'inline';\n selectedKeys?: React.Key[];\n defaultSelectedKeys?: React.Key[];\n selectionMap?: SelectionMap;\n offset?: [number, number];\n inlineOffset?: number;\n classNames?: {\n rootItem?: string;\n subMenu?: string;\n item?: string;\n label?: string;\n // open?: string;\n };\n styles?: {\n rootItem?: React.CSSProperties;\n subMenu?: React.CSSProperties;\n item?: React.CSSProperties;\n label?: React.CSSProperties;\n // open?: React.CSSProperties;\n };\n onClick?: ClickEventHandler;\n onSelect?: ClickEventHandler;\n}\n\nexport interface MenuProps\n extends\n Props,\n Omit<React.ComponentPropsWithoutRef<'ul'>, 'onClick' | 'onSelect'> {\n items?: MenuItem[];\n}\n\nexport type ClickEventHandler = (params: {\n domEvent: React.MouseEvent;\n key: React.Key;\n keyPath: React.Key[];\n item: MenuItem;\n}) => void;\n\nexport const MENU_CLASSNAMES = [\n 'p-0',\n 'bg-white',\n 'shadow-md',\n 'rounded-md',\n //\n];\n\nexport type SelectionMap = ReadonlyMap<React.Key, boolean>;\n\nexport
|
|
1
|
+
{"version":3,"file":"Menu.mjs","names":[],"sources":["../src/components/molecules/Menu/index.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo, useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Item from './Item';\n\nexport interface MenuItem {\n label: React.ReactNode;\n key: React.Key;\n type?: string;\n path?: string;\n children?: MenuItem[];\n}\n\nexport interface Props {\n mode?: 'horizontal' | 'vertical' | 'inline';\n selectedKeys?: React.Key[];\n defaultSelectedKeys?: React.Key[];\n selectionMap?: SelectionMap;\n offset?: [number, number];\n inlineOffset?: number;\n classNames?: {\n rootItem?: string;\n subMenu?: string;\n item?: string;\n label?: string;\n // open?: string;\n };\n styles?: {\n rootItem?: React.CSSProperties;\n subMenu?: React.CSSProperties;\n item?: React.CSSProperties;\n label?: React.CSSProperties;\n // open?: React.CSSProperties;\n };\n onClick?: ClickEventHandler;\n onSelect?: ClickEventHandler;\n}\n\nexport interface MenuProps\n extends\n Props,\n Omit<React.ComponentPropsWithoutRef<'ul'>, 'onClick' | 'onSelect'> {\n items?: MenuItem[];\n}\n\nexport type ClickEventHandler = (params: {\n domEvent: React.MouseEvent;\n key: React.Key;\n keyPath: React.Key[];\n item: MenuItem;\n}) => void;\n\nexport const MENU_CLASSNAMES = [\n 'p-0',\n 'bg-white',\n 'shadow-md',\n 'rounded-md',\n //\n];\n\nexport type SelectionMap = ReadonlyMap<React.Key, boolean>;\n\nexport const buildSelectionMap = (\n items: MenuItem[],\n selectedKeysSet: ReadonlySet<React.Key>,\n): SelectionMap => {\n const map = new Map<React.Key, boolean>();\n\n const dfs = (node: MenuItem): boolean => {\n const self = selectedKeysSet.has(node.key);\n const hasSelectedChild = node.children?.some(child => dfs(child)) ?? false;\n const isSelected = self || hasSelectedChild;\n map.set(node.key, isSelected);\n return isSelected;\n };\n\n items.forEach(dfs);\n return map;\n};\n\nexport const findKey = (\n menu: MenuItem,\n targetKeys: ReadonlySet<React.Key>,\n): boolean => {\n if (targetKeys.has(menu.key)) {\n return true;\n }\n\n if (menu.children && Array.isArray(menu.children)) {\n for (const child of menu.children) {\n if (findKey(child, targetKeys)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst Menu = ({\n items,\n mode = 'vertical',\n defaultSelectedKeys = [],\n selectedKeys: _selectedKeys,\n className,\n classNames,\n styles,\n offset,\n inlineOffset,\n onClick,\n onSelect: _onSelect,\n ...props\n}: MenuProps) => {\n const controlled = _selectedKeys !== undefined;\n const [uncontrolledSelectedKeys, setUncontrolledSelectedKeys] = useState<\n React.Key[]\n >(defaultSelectedKeys ?? []);\n\n const selectedKeys = controlled\n ? (_selectedKeys as React.Key[])\n : uncontrolledSelectedKeys;\n\n const selectedKeysSet = useMemo(\n () => new Set<React.Key>(selectedKeys ?? []),\n [selectedKeys],\n );\n\n const selectionMap = useMemo(\n () => buildSelectionMap(items ?? [], selectedKeysSet),\n [items, selectedKeysSet],\n );\n\n const onSelect = (params: {\n domEvent: React.MouseEvent;\n key: React.Key;\n keyPath: React.Key[];\n item: MenuItem;\n }) => {\n if (!controlled) {\n setUncontrolledSelectedKeys([params.key]);\n }\n _onSelect?.(params);\n };\n\n return (\n <ul\n role=\"menu\"\n className={cn(\n MENU_CLASSNAMES,\n mode === 'horizontal' ? 'flex' : 'inline-block',\n className,\n )}\n {...props}\n >\n {items?.map(item => (\n <Item\n root\n {...item}\n key={item.key}\n itemKey={item.key}\n keyPath={[item.key]}\n selectedKeys={selectedKeys}\n selectionMap={selectionMap}\n mode={mode}\n classNames={classNames}\n styles={styles}\n offset={offset}\n inlineOffset={inlineOffset}\n onClick={onClick}\n onSelect={onSelect}\n />\n ))}\n </ul>\n );\n};\n\nexport default Menu;\n"],"mappings":";;;;;;;;AAuDA,MAAa,kBAAkB;CAC7B;CACA;CACA;CACA;CAED;AAID,MAAa,qBACX,OACA,oBACiB;CACjB,MAAM,sBAAM,IAAI,KAAyB;CAEzC,MAAM,OAAO,SAA4B;EACvC,MAAM,OAAO,gBAAgB,IAAI,KAAK,IAAI;EAC1C,MAAM,mBAAmB,KAAK,UAAU,MAAK,UAAS,IAAI,MAAM,CAAC,IAAI;EACrE,MAAM,aAAa,QAAQ;AAC3B,MAAI,IAAI,KAAK,KAAK,WAAW;AAC7B,SAAO;;AAGT,OAAM,QAAQ,IAAI;AAClB,QAAO;;AAGT,MAAa,WACX,MACA,eACY;AACZ,KAAI,WAAW,IAAI,KAAK,IAAI,CAC1B,QAAO;AAGT,KAAI,KAAK,YAAY,MAAM,QAAQ,KAAK,SAAS,EAC/C;OAAK,MAAM,SAAS,KAAK,SACvB,KAAI,QAAQ,OAAO,WAAW,CAC5B,QAAO;;AAKb,QAAO;;AAGT,MAAM,QAAQ,EACZ,OACA,OAAO,YACP,sBAAsB,EAAE,EACxB,cAAc,eACd,WACA,YACA,QACA,QACA,cACA,SACA,UAAU,WACV,GAAG,YACY;CACf,MAAM,aAAa,kBAAkB;CACrC,MAAM,CAAC,0BAA0B,+BAA+B,SAE9D,uBAAuB,EAAE,CAAC;CAE5B,MAAM,eAAe,aAChB,gBACD;CAEJ,MAAM,kBAAkB,cAChB,IAAI,IAAe,gBAAgB,EAAE,CAAC,EAC5C,CAAC,aAAa,CACf;CAED,MAAM,eAAe,cACb,kBAAkB,SAAS,EAAE,EAAE,gBAAgB,EACrD,CAAC,OAAO,gBAAgB,CACzB;CAED,MAAM,YAAY,WAKZ;AACJ,MAAI,CAAC,WACH,6BAA4B,CAAC,OAAO,IAAI,CAAC;AAE3C,cAAY,OAAO;;AAGrB,QACE,oBAAC;EACC,MAAK;EACL,WAAW,GACT,iBACA,SAAS,eAAe,SAAS,gBACjC,UACD;EACD,GAAI;YAEH,OAAO,KAAI,SACV,8BAAC;GACC;GACA,GAAI;GACJ,KAAK,KAAK;GACV,SAAS,KAAK;GACd,SAAS,CAAC,KAAK,IAAI;GACL;GACA;GACR;GACM;GACJ;GACA;GACM;GACL;GACC;IACV,CACF;GACC"}
|
|
@@ -5,13 +5,15 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
|
5
5
|
//#region src/components/atoms/Button/index.d.ts
|
|
6
6
|
type ButtonProps = Props$1;
|
|
7
7
|
type PresetColors = 'blue' | 'purple' | 'cyan' | 'green' | 'magenta' | 'pink' | 'red' | 'orange' | 'yellow' | 'volcano' | 'geekblue' | 'lime' | 'gold';
|
|
8
|
-
interface Props extends Omit<ButtonProps, 'size' | 'variant'> {
|
|
8
|
+
interface Props extends Omit<ButtonProps, 'size' | 'variant' | 'type'> {
|
|
9
9
|
icon?: React.ReactNode;
|
|
10
10
|
block?: boolean;
|
|
11
11
|
danger?: boolean;
|
|
12
12
|
disabled?: boolean;
|
|
13
13
|
size?: 'small' | 'middle' | 'large';
|
|
14
|
+
type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';
|
|
14
15
|
variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';
|
|
16
|
+
shape?: 'default' | 'circle' | 'round';
|
|
15
17
|
color?: PresetColors | 'default' | 'primary' | 'danger';
|
|
16
18
|
loading?: boolean | {
|
|
17
19
|
icon: React.ReactNode;
|
|
@@ -20,9 +22,11 @@ interface Props extends Omit<ButtonProps, 'size' | 'variant'> {
|
|
|
20
22
|
declare const Button: ({
|
|
21
23
|
icon,
|
|
22
24
|
className,
|
|
25
|
+
type,
|
|
23
26
|
variant,
|
|
24
27
|
size,
|
|
25
28
|
color,
|
|
29
|
+
shape,
|
|
26
30
|
block,
|
|
27
31
|
disabled,
|
|
28
32
|
loading,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Button/index.tsx"],"mappings":";;;;;KAQK,WAAA,GAAc,OAAA;AAAA,KAEd,YAAA;AAAA,UAeY,KAAA,SAAc,IAAA,CAAK,WAAA;EAClC,IAAA,GAAO,KAAA,CAAM,SAAA;EACb,KAAA;EACA,MAAA;EACA,QAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA,GAAQ,YAAA;EACR,OAAA;IAAsB,IAAA,EAAM,KAAA,CAAM,SAAA;EAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Button/index.tsx"],"mappings":";;;;;KAQK,WAAA,GAAc,OAAA;AAAA,KAEd,YAAA;AAAA,UAeY,KAAA,SAAc,IAAA,CAAK,WAAA;EAClC,IAAA,GAAO,KAAA,CAAM,SAAA;EACb,KAAA;EACA,MAAA;EACA,QAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA,GAAQ,YAAA;EACR,OAAA;IAAsB,IAAA,EAAM,KAAA,CAAM,SAAA;EAAA;AAAA;AAAA,cAkD9B,MAAA;EAAU,IAAA;EAAA,SAAA;EAAA,IAAA;EAAA,OAAA;EAAA,IAAA;EAAA,KAAA;EAAA,KAAA;EAAA,KAAA;EAAA,QAAA;EAAA,OAAA;EAAA,MAAA;EAAA,QAAA;EAAA,WAAA;EAAA,GAAA;AAAA,GAeb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -10,38 +10,51 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
const Core = Button$1;
|
|
11
11
|
const variantClasses = {
|
|
12
12
|
solid: "",
|
|
13
|
-
outlined: cn("border border-[
|
|
14
|
-
dashed: cn("border border-dashed border-[
|
|
13
|
+
outlined: cn("border border-[color-mix(in_oklch,var(--btn-border),transparent_50%)]", "bg-background text-foreground", "hover:bg-accent"),
|
|
14
|
+
dashed: cn("border border-dashed border-[color-mix(in_oklch,var(--btn-border),transparent_50%)]", "bg-background text-foreground", "hover:bg-accent"),
|
|
15
15
|
filled: cn("bg-muted text-foreground", "hover:bg-muted/80"),
|
|
16
16
|
text: cn("bg-transparent text-foreground", "hover:bg-accent"),
|
|
17
17
|
link: cn("bg-transparent text-primary", "underline-offset-4 hover:underline", "hover:bg-primary/10")
|
|
18
18
|
};
|
|
19
|
+
const typeToVariant = {
|
|
20
|
+
primary: "solid",
|
|
21
|
+
default: "outlined",
|
|
22
|
+
dashed: "dashed",
|
|
23
|
+
text: "text",
|
|
24
|
+
link: "link"
|
|
25
|
+
};
|
|
19
26
|
const sizesClasses = {
|
|
20
27
|
small: "h-6 px-3 text-sm",
|
|
21
28
|
middle: "h-8 px-4 text-base",
|
|
22
29
|
large: "h-10 px-5 text-lg"
|
|
23
30
|
};
|
|
24
|
-
const
|
|
25
|
-
small:
|
|
26
|
-
middle:
|
|
27
|
-
large:
|
|
31
|
+
const iconClasses = {
|
|
32
|
+
small: `size-6 [&_svg:not([class*='size-'])]:size-3`,
|
|
33
|
+
middle: `size-8 [&_svg:not([class*='size-'])]:size-4`,
|
|
34
|
+
large: `size-10 [&_svg:not([class*='size-'])]:size-5`
|
|
35
|
+
};
|
|
36
|
+
const shapesClasses = {
|
|
37
|
+
default: "rounded-sm",
|
|
38
|
+
circle: "rounded-full",
|
|
39
|
+
round: "rounded-2xl"
|
|
28
40
|
};
|
|
29
|
-
const Button = ({ icon, className,
|
|
41
|
+
const Button = ({ icon, className, type = "default", variant, size = "middle", color = "default", shape = "default", block = false, disabled, loading, danger, children, onMouseDown, ...props }) => {
|
|
30
42
|
const iconOnly = icon && !children;
|
|
31
43
|
const computedColor = danger ? "danger" : color;
|
|
32
44
|
const colored = computedColor && computedColor !== "default";
|
|
45
|
+
const resolvedVariant = variant ?? typeToVariant[type] ?? "solid";
|
|
33
46
|
const displayIcon = loading ? typeof loading === "object" ? loading.icon : /* @__PURE__ */ jsx(LoaderCircle, { className: "animate-spin" }) : icon;
|
|
34
47
|
return /* @__PURE__ */ jsxs(Core, {
|
|
35
48
|
disabled,
|
|
36
49
|
variant: "default",
|
|
37
50
|
"data-color": computedColor,
|
|
38
|
-
className: cn("inline-flex items-center justify-center gap-x-2", "rounded-lg", "cursor-pointer", "h-auto py-0", "transition-all", variantClasses[
|
|
51
|
+
className: cn("inline-flex items-center justify-center gap-x-2", "rounded-lg", "cursor-pointer", "h-auto py-0", "transition-all", variantClasses[resolvedVariant], sizesClasses[size || "medium"], iconOnly && ["p-0", iconClasses[size || "medium"]], shapesClasses[shape || "default"], block && "w-full", colored && (resolvedVariant === "solid" ? [
|
|
39
52
|
"bg-(--btn-bg)",
|
|
40
53
|
"hover:bg-(--btn-bg-hover)",
|
|
41
54
|
"active:bg-(--btn-bg-active)",
|
|
42
55
|
"text-(--btn-fg)",
|
|
43
56
|
"border-(--btn-border)"
|
|
44
|
-
] : ["text-(--btn-bg)", "border-[
|
|
57
|
+
] : ["text-(--btn-bg)", "border-[color-mix(in_oklch,var(--btn-border),transparent_50%)]"]), className),
|
|
45
58
|
onMouseDown: (e) => {
|
|
46
59
|
e.preventDefault();
|
|
47
60
|
onMouseDown?.(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["button.Button"],"sources":["../../../../src/components/atoms/Button/index.tsx"],"sourcesContent":["'use client';\n\nimport { LoaderCircle } from 'lucide-react';\n\nimport { button } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst Core = button.Button;\ntype ButtonProps = button.Props;\n\ntype PresetColors =\n | 'blue'\n | 'purple'\n | 'cyan'\n | 'green'\n | 'magenta'\n | 'pink'\n | 'red'\n | 'orange'\n | 'yellow'\n | 'volcano'\n | 'geekblue'\n | 'lime'\n | 'gold';\n\nexport interface Props extends Omit<ButtonProps, 'size' | 'variant'> {\n icon?: React.ReactNode;\n block?: boolean;\n danger?: boolean;\n disabled?: boolean;\n size?: 'small' | 'middle' | 'large';\n variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';\n color?: PresetColors | 'default' | 'primary' | 'danger';\n loading?: boolean | { icon: React.ReactNode };\n}\n\nconst variantClasses: Record<string, string> = {\n solid: '',\n outlined: cn(\n 'border border-[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["button.Button"],"sources":["../../../../src/components/atoms/Button/index.tsx"],"sourcesContent":["'use client';\n\nimport { LoaderCircle } from 'lucide-react';\n\nimport { button } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst Core = button.Button;\ntype ButtonProps = button.Props;\n\ntype PresetColors =\n | 'blue'\n | 'purple'\n | 'cyan'\n | 'green'\n | 'magenta'\n | 'pink'\n | 'red'\n | 'orange'\n | 'yellow'\n | 'volcano'\n | 'geekblue'\n | 'lime'\n | 'gold';\n\nexport interface Props extends Omit<ButtonProps, 'size' | 'variant' | 'type'> {\n icon?: React.ReactNode;\n block?: boolean;\n danger?: boolean;\n disabled?: boolean;\n size?: 'small' | 'middle' | 'large';\n type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';\n variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';\n shape?: 'default' | 'circle' | 'round';\n color?: PresetColors | 'default' | 'primary' | 'danger';\n loading?: boolean | { icon: React.ReactNode };\n}\n\nconst variantClasses: Record<string, string> = {\n solid: '',\n outlined: cn(\n 'border border-[color-mix(in_oklch,var(--btn-border),transparent_50%)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n dashed: cn(\n 'border border-dashed border-[color-mix(in_oklch,var(--btn-border),transparent_50%)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n filled: cn('bg-muted text-foreground', 'hover:bg-muted/80'),\n text: cn('bg-transparent text-foreground', 'hover:bg-accent'),\n link: cn(\n 'bg-transparent text-primary',\n 'underline-offset-4 hover:underline',\n 'hover:bg-primary/10',\n ),\n};\n\nconst typeToVariant: Record<string, string> = {\n primary: 'solid',\n default: 'outlined',\n dashed: 'dashed',\n text: 'text',\n link: 'link',\n};\n\nconst sizesClasses: Record<string, string> = {\n small: 'h-6 px-3 text-sm',\n middle: 'h-8 px-4 text-base',\n large: 'h-10 px-5 text-lg',\n};\n\nconst iconClasses: Record<string, string> = {\n small: `size-6 [&_svg:not([class*='size-'])]:size-3`,\n middle: `size-8 [&_svg:not([class*='size-'])]:size-4`,\n large: `size-10 [&_svg:not([class*='size-'])]:size-5`,\n};\n\nconst shapesClasses = {\n default: 'rounded-sm',\n circle: 'rounded-full',\n round: 'rounded-2xl',\n};\n\nconst Button = ({\n icon,\n className,\n type = 'default',\n variant,\n size = 'middle',\n color = 'default',\n shape = 'default',\n block = false,\n disabled,\n loading,\n danger,\n children,\n onMouseDown,\n ...props\n}: Props) => {\n const iconOnly = icon && !children;\n const computedColor = danger ? 'danger' : color;\n const colored = computedColor && computedColor !== 'default';\n const resolvedVariant = variant ?? typeToVariant[type] ?? 'solid';\n\n const displayIcon = loading ? (\n typeof loading === 'object' ? (\n loading.icon\n ) : (\n <LoaderCircle className=\"animate-spin\" />\n )\n ) : (\n icon\n );\n\n return (\n <Core\n disabled={disabled}\n variant=\"default\"\n data-color={computedColor}\n className={cn(\n 'inline-flex items-center justify-center gap-x-2',\n 'rounded-lg',\n 'cursor-pointer',\n 'h-auto py-0',\n 'transition-all',\n variantClasses[resolvedVariant],\n sizesClasses[size || 'medium'],\n iconOnly && ['p-0', iconClasses[size || 'medium']],\n shapesClasses[shape || 'default'],\n block && 'w-full',\n colored &&\n (resolvedVariant === 'solid'\n ? [\n 'bg-(--btn-bg)',\n 'hover:bg-(--btn-bg-hover)',\n 'active:bg-(--btn-bg-active)',\n 'text-(--btn-fg)',\n 'border-(--btn-border)',\n ]\n : [\n 'text-(--btn-bg)',\n 'border-[color-mix(in_oklch,var(--btn-border),transparent_50%)]',\n //\n ]),\n className,\n //\n )}\n onMouseDown={e => {\n e.preventDefault();\n onMouseDown?.(e);\n }}\n {...props}\n >\n {displayIcon}\n {children}\n </Core>\n );\n};\n\nexport default Button;\n"],"mappings":";;;;;;;;;AAOA,MAAM,OAAOA;AA+Bb,MAAM,iBAAyC;CAC7C,OAAO;CACP,UAAU,GACR,yEACA,iCACA,kBACD;CACD,QAAQ,GACN,uFACA,iCACA,kBACD;CACD,QAAQ,GAAG,4BAA4B,oBAAoB;CAC3D,MAAM,GAAG,kCAAkC,kBAAkB;CAC7D,MAAM,GACJ,+BACA,sCACA,sBACD;CACF;AAED,MAAM,gBAAwC;CAC5C,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACP;AAED,MAAM,eAAuC;CAC3C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,MAAM,cAAsC;CAC1C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,MAAM,gBAAgB;CACpB,SAAS;CACT,QAAQ;CACR,OAAO;CACR;AAED,MAAM,UAAU,EACd,MACA,WACA,OAAO,WACP,SACA,OAAO,UACP,QAAQ,WACR,QAAQ,WACR,QAAQ,OACR,UACA,SACA,QACA,UACA,aACA,GAAG,YACQ;CACX,MAAM,WAAW,QAAQ,CAAC;CAC1B,MAAM,gBAAgB,SAAS,WAAW;CAC1C,MAAM,UAAU,iBAAiB,kBAAkB;CACnD,MAAM,kBAAkB,WAAW,cAAc,SAAS;CAE1D,MAAM,cAAc,UAClB,OAAO,YAAY,WACjB,QAAQ,OAER,oBAAC,gBAAa,WAAU,iBAAiB,GAG3C;AAGF,QACE,qBAAC;EACW;EACV,SAAQ;EACR,cAAY;EACZ,WAAW,GACT,mDACA,cACA,kBACA,eACA,kBACA,eAAe,kBACf,aAAa,QAAQ,WACrB,YAAY,CAAC,OAAO,YAAY,QAAQ,UAAU,EAClD,cAAc,SAAS,YACvB,SAAS,UACT,YACG,oBAAoB,UACjB;GACE;GACA;GACA;GACA;GACA;GACD,GACD,CACE,mBACA,iEAED,GACP,UAED;EACD,cAAa,MAAK;AAChB,KAAE,gBAAgB;AAClB,iBAAc,EAAE;;EAElB,GAAI;aAEH,aACA;GACI"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { OptionValue } from "../index.mjs";
|
|
2
1
|
import "react/jsx-runtime";
|
|
3
2
|
|
|
4
3
|
//#region src/components/atoms/Checkbox/Group/index.d.ts
|
|
4
|
+
type OptionValue = string | number | boolean;
|
|
5
5
|
type Option = {
|
|
6
6
|
label: string;
|
|
7
7
|
value: OptionValue;
|
|
@@ -17,5 +17,5 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' |
|
|
|
17
17
|
onChange?: (values: OptionValue[]) => void;
|
|
18
18
|
}
|
|
19
19
|
//#endregion
|
|
20
|
-
export { Props };
|
|
20
|
+
export { OptionValue, Props };
|
|
21
21
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"mappings":";;;KAMY,WAAA;AAAA,KAEP,MAAA;EACH,KAAA;EACA,KAAA,EAAO,WAAA;AAAA;AAAA,KAGJ,OAAA,qCAA4C,MAAA;AAAA,UAEhC,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,OAAA,GAAU,OAAA;EACV,WAAA;EACA,SAAA;EACA,UAAA,GAAa,MAAA;EACb,YAAA,GAAe,WAAA;EACf,KAAA,GAAQ,WAAA;EACR,QAAA,IAAY,MAAA,EAAQ,WAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Checkbox
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Checkbox from '..';\n\nexport type OptionValue = string | number | boolean;\n\ntype Option = {\n label: string;\n value: OptionValue;\n};\n\ntype Options = string[] | number[] | boolean[] | Option[];\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value'\n> {\n options?: Options;\n orientation?: 'vertical' | 'horizontal';\n placement?: 'left' | 'right';\n classNames?: Record<string, string>;\n defaultValue?: OptionValue[];\n value?: OptionValue[];\n onChange?: (values: OptionValue[]) => void;\n}\n\nconst Group = ({\n orientation = 'vertical',\n placement = 'left',\n className,\n classNames = {},\n options: _options = [],\n defaultValue,\n value: _value,\n onChange: _onChange = () => {},\n}: Props) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<OptionValue[]>(\n defaultValue || [],\n );\n\n const controlled = _value !== undefined;\n const value = controlled ? _value : uncontrolledValue;\n\n const options: Option[] = _options.map(item =>\n typeof item === 'object'\n ? item\n : {\n label: `${item}`,\n value: item,\n },\n );\n\n const onChange = (checked: boolean, optionValue: OptionValue) => {\n const nextValue = checked\n ? [...value, optionValue]\n : value.filter(v => v !== optionValue);\n\n if (!controlled) {\n setUncontrolledValue(nextValue);\n }\n _onChange(nextValue);\n };\n\n return (\n <ul\n className={cn(\n orientation === 'vertical' ? 'space-y-2' : 'flex gap-2',\n className,\n )}\n >\n {options.map((item: Option) => {\n const checked = value.includes(item.value);\n\n return (\n <li\n key={String(item.value)}\n className={cn('flex', classNames?.wrapper)}\n >\n <Checkbox\n placement={placement}\n className={cn(classNames?.item)}\n value={item.value}\n checked={checked}\n onChange={checked => onChange(checked, item.value)}\n >\n {item.label}\n </Checkbox>\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default Group;\n"],"mappings":";;;;;;AA4BA,MAAM,SAAS,EACb,cAAc,YACd,YAAY,QACZ,WACA,aAAa,EAAE,EACf,SAAS,WAAW,EAAE,EACtB,cACA,OAAO,QACP,UAAU,kBAAkB,SACjB;CACX,MAAM,CAAC,mBAAmB,wBAAwB,SAChD,gBAAgB,EAAE,CACnB;CAED,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,aAAa,SAAS;CAEpC,MAAM,UAAoB,SAAS,KAAI,SACrC,OAAO,SAAS,WACZ,OACA;EACE,OAAO,GAAG;EACV,OAAO;EACR,CACN;CAED,MAAM,YAAY,SAAkB,gBAA6B;EAC/D,MAAM,YAAY,UACd,CAAC,GAAG,OAAO,YAAY,GACvB,MAAM,QAAO,MAAK,MAAM,YAAY;AAExC,MAAI,CAAC,WACH,sBAAqB,UAAU;AAEjC,YAAU,UAAU;;AAGtB,QACE,oBAAC;EACC,WAAW,GACT,gBAAgB,aAAa,cAAc,cAC3C,UACD;YAEA,QAAQ,KAAK,SAAiB;GAC7B,MAAM,UAAU,MAAM,SAAS,KAAK,MAAM;AAE1C,UACE,oBAAC;IAEC,WAAW,GAAG,QAAQ,YAAY,QAAQ;cAE1C,oBAAC;KACY;KACX,WAAW,GAAG,YAAY,KAAK;KAC/B,OAAO,KAAK;KACH;KACT,WAAU,YAAW,SAAS,SAAS,KAAK,MAAM;eAEjD,KAAK;MACG;MAXN,OAAO,KAAK,MAAM,CAYpB;IAEP;GACC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { Props as Props$1 } from "./Group/index.mjs";
|
|
1
|
+
import { OptionValue, Props as Props$1 } from "./Group/index.mjs";
|
|
2
2
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/atoms/Checkbox/index.d.ts
|
|
5
|
-
type OptionValue = string | number | boolean;
|
|
6
5
|
interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange'> {
|
|
7
6
|
placement?: 'left' | 'right';
|
|
8
7
|
defaultChecked?: boolean;
|
|
@@ -41,5 +40,5 @@ declare const Checkbox: {
|
|
|
41
40
|
}: Props$1) => react_jsx_runtime0.JSX.Element;
|
|
42
41
|
};
|
|
43
42
|
//#endregion
|
|
44
|
-
export { Checkbox
|
|
43
|
+
export { Checkbox };
|
|
45
44
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"mappings":";;;;UAciB,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,SAAA;EACA,cAAA;EACA,OAAA;EACA,KAAA,GAAQ,WAAA;EACR,QAAA;EACA,KAAA;IAAU,OAAA,EAAS,KAAA,CAAM,SAAA;IAAW,SAAA,EAAW,KAAA,CAAM,SAAA;EAAA;EACrD,QAAA,GAAW,KAAA,CAAM,SAAA;EACjB,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,QAAA;EAAA;;;;;;;;;;;KAWH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["checkbox","label"],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Square, SquareCheck } from 'lucide-react';\n\nimport { checkbox, label } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group from './Group';\n\nconst { Checkbox: CoreCheckbox } = checkbox;\nconst { Label: CoreLabel } = label;\n\nexport
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["checkbox","label"],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Square, SquareCheck } from 'lucide-react';\n\nimport { checkbox, label } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group, { type OptionValue } from './Group';\n\nconst { Checkbox: CoreCheckbox } = checkbox;\nconst { Label: CoreLabel } = label;\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange'\n> {\n placement?: 'left' | 'right';\n defaultChecked?: boolean;\n checked?: boolean;\n value?: OptionValue;\n disabled?: boolean;\n icons?: { checked: React.ReactNode; unchecked: React.ReactNode };\n children?: React.ReactNode;\n onChange?: (checked: boolean) => void;\n}\n\nconst Checkbox = ({\n placement = 'left',\n value = '',\n children,\n className,\n icons,\n disabled,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const reactId = useId();\n\n const id = typeof value === 'boolean' || !value ? reactId : String(value);\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const cursorClassName = disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n\n const onChange = (next: boolean) => {\n if (disabled) {\n return;\n }\n\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const renderContent = icons ? (\n <>\n <input\n id={id}\n hidden\n type=\"checkbox\"\n checked={checked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n />\n <span\n className={cn(cursorClassName, disabled && 'opacity-50')}\n onClick={() => {\n document.getElementById(id)?.click();\n }}\n >\n {checked\n ? (icons.checked ?? <SquareCheck />)\n : (icons.unchecked ?? <Square />)}\n </span>\n {children && (\n <label\n className={cn(cursorClassName, disabled && 'opacity-50')}\n htmlFor={id}\n >\n {children}\n </label>\n )}\n </>\n ) : (\n <>\n <CoreCheckbox\n id={id}\n checked={checked}\n disabled={disabled}\n className={cn(cursorClassName)}\n onCheckedChange={onChange}\n />\n {children && (\n <CoreLabel htmlFor={id} className={cn(cursorClassName, 'text-left')}>\n {children}\n </CoreLabel>\n )}\n </>\n );\n\n return (\n <div\n className={cn(\n 'flex items-center gap-x-2',\n placement === 'right' && 'flex-row-reverse',\n cursorClassName,\n className,\n //\n )}\n {...props}\n >\n {renderContent}\n </div>\n );\n};\n\nCheckbox.Group = Group;\n\nexport default Checkbox;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EAAE,UAAU,iBAAiBA;AACnC,MAAM,EAAE,OAAO,cAAcC;AAgB7B,MAAM,YAAY,EAChB,YAAY,QACZ,QAAQ,IACR,UACA,WACA,OACA,UACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,UAAU,OAAO;CAEvB,MAAM,KAAK,OAAO,UAAU,aAAa,CAAC,QAAQ,UAAU,OAAO,MAAM;CACzE,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,kBAAkB,WAAW,uBAAuB;CAE1D,MAAM,YAAY,SAAkB;AAClC,MAAI,SACF;AAGF,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,gBAAgB,QACpB;EACE,oBAAC;GACK;GACJ;GACA,MAAK;GACI;GACT,WAAU,MAAK;AACb,aAAS,EAAE,OAAO,QAAQ;;IAE5B;EACF,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,eAAe;AACb,aAAS,eAAe,GAAG,EAAE,OAAO;;aAGrC,UACI,MAAM,WAAW,oBAAC,gBAAc,GAChC,MAAM,aAAa,oBAAC,WAAS;IAC7B;EACN,YACC,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,SAAS;GAER;IACK;KAET,GAEH,4CACE,oBAAC;EACK;EACK;EACC;EACV,WAAW,GAAG,gBAAgB;EAC9B,iBAAiB;GACjB,EACD,YACC,oBAAC;EAAU,SAAS;EAAI,WAAW,GAAG,iBAAiB,YAAY;EAChE;GACS,IAEb;AAGL,QACE,oBAAC;EACC,WAAW,GACT,6BACA,cAAc,WAAW,oBACzB,iBACA,UAED;EACD,GAAI;YAEH;GACG;;AAIV,SAAS,QAAQ"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { OptionValue } from "../index.mjs";
|
|
2
1
|
import "react/jsx-runtime";
|
|
3
2
|
|
|
4
3
|
//#region src/components/atoms/Radio/Group/index.d.ts
|
|
4
|
+
type OptionValue = string | number | boolean;
|
|
5
5
|
type Option = {
|
|
6
6
|
label: string;
|
|
7
7
|
value: OptionValue;
|
|
8
|
+
disabled?: boolean;
|
|
8
9
|
};
|
|
9
10
|
type Options = string[] | number[] | boolean[] | Option[];
|
|
10
11
|
interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue' | 'value'> {
|
|
@@ -14,8 +15,12 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' |
|
|
|
14
15
|
classNames?: Record<string, string>;
|
|
15
16
|
defaultValue?: OptionValue;
|
|
16
17
|
value?: OptionValue;
|
|
18
|
+
optionType?: 'default' | 'button';
|
|
19
|
+
buttonStyle?: 'solid' | 'outlined';
|
|
20
|
+
size?: 'small' | 'middle' | 'large';
|
|
21
|
+
disabled?: boolean;
|
|
17
22
|
onChange?: (value: OptionValue) => void;
|
|
18
23
|
}
|
|
19
24
|
//#endregion
|
|
20
|
-
export { Props };
|
|
25
|
+
export { OptionValue, Props };
|
|
21
26
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"mappings":";;;KAOY,WAAA;AAAA,KAEP,MAAA;EACH,KAAA;EACA,KAAA,EAAO,WAAA;EACP,QAAA;AAAA;AAAA,KAGG,OAAA,qCAA4C,MAAA;AAAA,UAEhC,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,OAAA,GAAU,OAAA;EACV,WAAA;EACA,SAAA;EACA,UAAA,GAAa,MAAA;EACb,YAAA,GAAe,WAAA;EACf,KAAA,GAAQ,WAAA;EACR,UAAA;EACA,WAAA;EACA,IAAA;EACA,QAAA;EACA,QAAA,IAAY,KAAA,EAAO,WAAA;AAAA"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { cn } from "../../../../utils.mjs";
|
|
2
|
+
import Button from "../../Button/index.mjs";
|
|
2
3
|
import Radio from "../index.mjs";
|
|
4
|
+
import "../../../../index.mjs";
|
|
3
5
|
import { useState } from "react";
|
|
4
6
|
import { jsx } from "react/jsx-runtime";
|
|
5
7
|
|
|
6
8
|
//#region src/components/atoms/Radio/Group/index.tsx
|
|
7
|
-
const RadioGroup = ({ orientation = "
|
|
9
|
+
const RadioGroup = ({ orientation = "horizontal", placement = "left", className, classNames = {}, options: _options = [], optionType = "default", buttonStyle = "solid", size, disabled, defaultValue, value: _value, onChange: _onChange = () => {} }) => {
|
|
8
10
|
const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
|
|
9
11
|
const controlled = _value !== void 0;
|
|
10
12
|
const value = controlled ? _value : uncontrolledValue;
|
|
@@ -12,22 +14,31 @@ const RadioGroup = ({ orientation = "vertical", placement = "left", className, c
|
|
|
12
14
|
label: `${item}`,
|
|
13
15
|
value: item
|
|
14
16
|
});
|
|
17
|
+
const isButton = optionType === "button";
|
|
15
18
|
const onChange = (checked, optionValue) => {
|
|
16
19
|
if (!checked) return;
|
|
17
20
|
if (!controlled) setUncontrolledValue(optionValue);
|
|
18
21
|
_onChange(optionValue);
|
|
19
22
|
};
|
|
20
23
|
return /* @__PURE__ */ jsx("ul", {
|
|
21
|
-
className: cn(orientation === "vertical"
|
|
22
|
-
children: options.map((item) => {
|
|
24
|
+
className: cn("flex gap-4", className, orientation === "vertical" && "flex-col", isButton && "gap-0"),
|
|
25
|
+
children: options.map((item, index) => {
|
|
23
26
|
const checked = value === item.value;
|
|
24
27
|
return /* @__PURE__ */ jsx("li", {
|
|
25
28
|
className: cn("flex", classNames?.wrapper),
|
|
26
|
-
children: /* @__PURE__ */ jsx(
|
|
29
|
+
children: isButton ? /* @__PURE__ */ jsx(Button, {
|
|
30
|
+
variant: checked ? buttonStyle : "outlined",
|
|
31
|
+
size,
|
|
32
|
+
className: cn("rounded-none", index === 0 && "rounded-l-lg", index === options.length - 1 && "rounded-r-lg", checked && buttonStyle === "outlined" && "border-primary"),
|
|
33
|
+
disabled: disabled || item.disabled,
|
|
34
|
+
onClick: () => onChange(true, item.value),
|
|
35
|
+
children: item.label
|
|
36
|
+
}) : /* @__PURE__ */ jsx(Radio, {
|
|
27
37
|
placement,
|
|
28
38
|
className: cn(classNames?.item),
|
|
29
39
|
value: item.value,
|
|
30
40
|
checked,
|
|
41
|
+
disabled: item.disabled,
|
|
31
42
|
onChange: (checked) => onChange(checked, item.value),
|
|
32
43
|
children: item.label
|
|
33
44
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Radio
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Button } from '@repo/ui';\nimport { cn } from '@repo/ui/utils';\n\nimport Radio from '..';\n\nexport type OptionValue = string | number | boolean;\n\ntype Option = {\n label: string;\n value: OptionValue;\n disabled?: boolean;\n};\n\ntype Options = string[] | number[] | boolean[] | Option[];\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value'\n> {\n options?: Options;\n orientation?: 'vertical' | 'horizontal';\n placement?: 'left' | 'right';\n classNames?: Record<string, string>;\n defaultValue?: OptionValue;\n value?: OptionValue;\n optionType?: 'default' | 'button';\n buttonStyle?: 'solid' | 'outlined';\n size?: 'small' | 'middle' | 'large';\n disabled?: boolean;\n onChange?: (value: OptionValue) => void;\n}\n\nconst RadioGroup = ({\n orientation = 'horizontal',\n placement = 'left',\n className,\n classNames = {},\n options: _options = [],\n optionType = 'default',\n buttonStyle = 'solid',\n size,\n disabled,\n defaultValue,\n value: _value,\n onChange: _onChange = () => {},\n}: Props) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<\n OptionValue | undefined\n >(defaultValue);\n\n const controlled = _value !== undefined;\n const value = controlled ? _value : uncontrolledValue;\n\n const options: Option[] = _options.map(item =>\n typeof item === 'object'\n ? item\n : {\n label: `${item}`,\n value: item,\n },\n );\n\n const isButton = optionType === 'button';\n\n const onChange = (checked: boolean, optionValue: OptionValue) => {\n if (!checked) {\n return;\n }\n if (!controlled) {\n setUncontrolledValue(optionValue);\n }\n _onChange(optionValue);\n };\n\n return (\n <ul\n className={cn(\n 'flex gap-4',\n className,\n orientation === 'vertical' && 'flex-col',\n isButton && 'gap-0',\n )}\n >\n {options.map((item: Option, index) => {\n const checked = value === item.value;\n\n return (\n <li\n key={String(item.value)}\n className={cn('flex', classNames?.wrapper)}\n >\n {isButton ? (\n <Button\n variant={checked ? buttonStyle : 'outlined'}\n size={size}\n className={cn(\n 'rounded-none',\n index === 0 && 'rounded-l-lg',\n index === options.length - 1 && 'rounded-r-lg',\n checked && buttonStyle === 'outlined' && 'border-primary',\n )}\n disabled={disabled || item.disabled}\n onClick={() => onChange(true, item.value)}\n >\n {item.label}\n </Button>\n ) : (\n <Radio\n placement={placement}\n className={cn(classNames?.item)}\n value={item.value}\n checked={checked}\n disabled={item.disabled}\n onChange={checked => onChange(checked, item.value)}\n >\n {item.label}\n </Radio>\n )}\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default RadioGroup;\n"],"mappings":";;;;;;;;AAkCA,MAAM,cAAc,EAClB,cAAc,cACd,YAAY,QACZ,WACA,aAAa,EAAE,EACf,SAAS,WAAW,EAAE,EACtB,aAAa,WACb,cAAc,SACd,MACA,UACA,cACA,OAAO,QACP,UAAU,kBAAkB,SACjB;CACX,MAAM,CAAC,mBAAmB,wBAAwB,SAEhD,aAAa;CAEf,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,aAAa,SAAS;CAEpC,MAAM,UAAoB,SAAS,KAAI,SACrC,OAAO,SAAS,WACZ,OACA;EACE,OAAO,GAAG;EACV,OAAO;EACR,CACN;CAED,MAAM,WAAW,eAAe;CAEhC,MAAM,YAAY,SAAkB,gBAA6B;AAC/D,MAAI,CAAC,QACH;AAEF,MAAI,CAAC,WACH,sBAAqB,YAAY;AAEnC,YAAU,YAAY;;AAGxB,QACE,oBAAC;EACC,WAAW,GACT,cACA,WACA,gBAAgB,cAAc,YAC9B,YAAY,QACb;YAEA,QAAQ,KAAK,MAAc,UAAU;GACpC,MAAM,UAAU,UAAU,KAAK;AAE/B,UACE,oBAAC;IAEC,WAAW,GAAG,QAAQ,YAAY,QAAQ;cAEzC,WACC,oBAAC;KACC,SAAS,UAAU,cAAc;KAC3B;KACN,WAAW,GACT,gBACA,UAAU,KAAK,gBACf,UAAU,QAAQ,SAAS,KAAK,gBAChC,WAAW,gBAAgB,cAAc,iBAC1C;KACD,UAAU,YAAY,KAAK;KAC3B,eAAe,SAAS,MAAM,KAAK,MAAM;eAExC,KAAK;MACC,GAET,oBAAC;KACY;KACX,WAAW,GAAG,YAAY,KAAK;KAC/B,OAAO,KAAK;KACH;KACT,UAAU,KAAK;KACf,WAAU,YAAW,SAAS,SAAS,KAAK,MAAM;eAEjD,KAAK;MACA;MA5BL,OAAO,KAAK,MAAM,CA8BpB;IAEP;GACC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { RadioGroup } from "../../../core/radio-group.mjs";
|
|
2
2
|
import "../../../core.mjs";
|
|
3
|
-
import { Props as Props$1 } from "./Group/index.mjs";
|
|
3
|
+
import { OptionValue, Props as Props$1 } from "./Group/index.mjs";
|
|
4
4
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
5
|
|
|
6
6
|
//#region src/components/atoms/Radio/index.d.ts
|
|
7
7
|
declare const Core: typeof RadioGroup;
|
|
8
|
-
type OptionValue = string | number | boolean;
|
|
9
8
|
interface Props extends Omit<React.ComponentPropsWithoutRef<typeof Core>, 'onChange' | 'value'> {
|
|
10
9
|
placement?: 'left' | 'right';
|
|
11
10
|
defaultChecked?: boolean;
|
|
@@ -37,11 +36,15 @@ declare const Radio: {
|
|
|
37
36
|
className,
|
|
38
37
|
classNames,
|
|
39
38
|
options: _options,
|
|
39
|
+
optionType,
|
|
40
|
+
buttonStyle,
|
|
41
|
+
size,
|
|
42
|
+
disabled,
|
|
40
43
|
defaultValue,
|
|
41
44
|
value: _value,
|
|
42
45
|
onChange: _onChange
|
|
43
46
|
}: Props$1) => react_jsx_runtime0.JSX.Element;
|
|
44
47
|
};
|
|
45
48
|
//#endregion
|
|
46
|
-
export {
|
|
49
|
+
export { Radio };
|
|
47
50
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"mappings":";;;;;;cAWoB,IAAA,SAAI,UAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"mappings":";;;;;;cAWoB,IAAA,SAAI,UAAA;AAAA,UAGP,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA,QAAgC,IAAA;EAGtC,SAAA;EACA,cAAA;EACA,OAAA;EACA,KAAA,GAAQ,WAAA;EACR,QAAA;EACA,KAAA;IAAU,OAAA,EAAS,KAAA,CAAM,SAAA;IAAW,SAAA,EAAW,KAAA,CAAM,SAAA;EAAA;EACrD,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,KAAA;EAAA;;;;;;;;;;;KAWH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -51,7 +51,7 @@ const Radio = ({ placement = "left", value = "", children, className, icons, dis
|
|
|
51
51
|
onValueChange: () => onChange(true),
|
|
52
52
|
children: /* @__PURE__ */ jsxs(Field, {
|
|
53
53
|
orientation: "horizontal",
|
|
54
|
-
className: cn("flex", placement === "right" && "flex-row-reverse"),
|
|
54
|
+
className: cn("flex gap-2", placement === "right" && "flex-row-reverse"),
|
|
55
55
|
"data-disabled": disabled,
|
|
56
56
|
children: [/* @__PURE__ */ jsx(Item, {
|
|
57
57
|
value: id,
|
|
@@ -60,12 +60,13 @@ const Radio = ({ placement = "left", value = "", children, className, icons, dis
|
|
|
60
60
|
disabled
|
|
61
61
|
}), /* @__PURE__ */ jsx(FieldLabel, {
|
|
62
62
|
htmlFor: id,
|
|
63
|
+
className: cursorClassName,
|
|
63
64
|
children
|
|
64
65
|
})]
|
|
65
66
|
})
|
|
66
67
|
});
|
|
67
68
|
return /* @__PURE__ */ jsx("div", {
|
|
68
|
-
className: cn("flex items-center
|
|
69
|
+
className: cn("flex items-center", icons && placement === "right" && "flex-row-reverse", cursorClassName, className),
|
|
69
70
|
...props,
|
|
70
71
|
children: renderContent
|
|
71
72
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["radio","field","Group"],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Circle, CircleCheck } from 'lucide-react';\n\nimport { field, radio } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group from './Group';\n\nconst { RadioGroup: Core, RadioGroupItem: Item } = radio;\nconst { Field, FieldLabel } = field;\n\nexport
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["radio","field","Group"],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Circle, CircleCheck } from 'lucide-react';\n\nimport { field, radio } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group, { type OptionValue } from './Group';\n\nconst { RadioGroup: Core, RadioGroupItem: Item } = radio;\nconst { Field, FieldLabel } = field;\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<typeof Core>,\n 'onChange' | 'value'\n> {\n placement?: 'left' | 'right';\n defaultChecked?: boolean;\n checked?: boolean;\n value?: OptionValue;\n disabled?: boolean;\n icons?: { checked: React.ReactNode; unchecked: React.ReactNode };\n onChange?: (checked: boolean) => void;\n}\n\nconst Radio = ({\n placement = 'left',\n value = '',\n children,\n className,\n icons,\n disabled,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const reactId = useId();\n const id = typeof value === 'boolean' || !value ? reactId : String(value);\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const cursorClassName = disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n\n const onChange = (next: boolean) => {\n if (disabled) {\n return;\n }\n\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const renderContent = icons ? (\n <>\n <input\n id={id}\n hidden\n type=\"radio\"\n checked={checked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n />\n <span\n className={cn(cursorClassName, disabled && 'opacity-50')}\n onClick={() => {\n document.getElementById(id)?.click();\n }}\n >\n {checked\n ? (icons.checked ?? <CircleCheck />)\n : (icons.unchecked ?? <Circle />)}\n </span>\n {children && (\n <label\n className={cn(cursorClassName, disabled && 'opacity-50')}\n htmlFor={id}\n >\n {children}\n </label>\n )}\n </>\n ) : (\n <Core value={checked ? id : ''} onValueChange={() => onChange(true)}>\n <Field\n orientation=\"horizontal\"\n className={cn(\n 'flex gap-2',\n placement === 'right' && 'flex-row-reverse',\n )}\n data-disabled={disabled}\n >\n <Item value={id} id={id} checked={checked} disabled={disabled} />\n <FieldLabel htmlFor={id} className={cursorClassName}>\n {children}\n </FieldLabel>\n </Field>\n </Core>\n );\n\n return (\n <div\n className={cn(\n 'flex items-center',\n icons && placement === 'right' && 'flex-row-reverse',\n cursorClassName,\n className,\n //\n )}\n {...props}\n >\n {renderContent}\n </div>\n );\n};\n\nRadio.Group = Group;\n\nexport default Radio;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EAAE,YAAY,MAAM,gBAAgB,SAASA;AACnD,MAAM,EAAE,OAAO,eAAeC;AAe9B,MAAM,SAAS,EACb,YAAY,QACZ,QAAQ,IACR,UACA,WACA,OACA,UACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,UAAU,OAAO;CACvB,MAAM,KAAK,OAAO,UAAU,aAAa,CAAC,QAAQ,UAAU,OAAO,MAAM;CACzE,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,kBAAkB,WAAW,uBAAuB;CAE1D,MAAM,YAAY,SAAkB;AAClC,MAAI,SACF;AAGF,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,gBAAgB,QACpB;EACE,oBAAC;GACK;GACJ;GACA,MAAK;GACI;GACT,WAAU,MAAK;AACb,aAAS,EAAE,OAAO,QAAQ;;IAE5B;EACF,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,eAAe;AACb,aAAS,eAAe,GAAG,EAAE,OAAO;;aAGrC,UACI,MAAM,WAAW,oBAAC,gBAAc,GAChC,MAAM,aAAa,oBAAC,WAAS;IAC7B;EACN,YACC,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,SAAS;GAER;IACK;KAET,GAEH,oBAAC;EAAK,OAAO,UAAU,KAAK;EAAI,qBAAqB,SAAS,KAAK;YACjE,qBAAC;GACC,aAAY;GACZ,WAAW,GACT,cACA,cAAc,WAAW,mBAC1B;GACD,iBAAe;cAEf,oBAAC;IAAK,OAAO;IAAQ;IAAa;IAAmB;KAAY,EACjE,oBAAC;IAAW,SAAS;IAAI,WAAW;IACjC;KACU;IACP;GACH;AAGT,QACE,oBAAC;EACC,WAAW,GACT,qBACA,SAAS,cAAc,WAAW,oBAClC,iBACA,UAED;EACD,GAAI;YAEH;GACG;;AAIV,MAAM,QAAQC"}
|
|
@@ -36,7 +36,7 @@ declare const Skeleton: {
|
|
|
36
36
|
height,
|
|
37
37
|
children,
|
|
38
38
|
...props
|
|
39
|
-
}: Props): string | number | bigint | boolean | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined> |
|
|
39
|
+
}: Props): string | number | bigint | boolean | react_jsx_runtime0.JSX.Element | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined> | null | undefined;
|
|
40
40
|
Button: ({
|
|
41
41
|
className,
|
|
42
42
|
...props
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Skeleton/index.tsx"],"mappings":";;;;;;UAYiB,KAAA,SAAc,KAAA,CAAM,wBAAA;EACnC,MAAA;EACA,OAAA;EACA,MAAA;EACA,IAAA;EACA,KAAA;EACA,GAAA;EACA,SAAA;EACA,KAAA;EACA,MAAA;EACA,UAAA;IACE,OAAA;IACA,MAAA;IACA,IAAA;EAAA;AAAA;AAAA,cAUE,QAAA;EAAA;;;;;;;;;;;;;;;KAeH,KAAA,wCAAK,QAAA,CAAA,KAAA,CAAA,SAAA,IAAA,OAAA,sCAAA,KAAA,CAAA,WAAA,GAAA,KAAA,CAAA,YAAA,mBAAA,KAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,KAAA,CAAA,SAAA
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Skeleton/index.tsx"],"mappings":";;;;;;UAYiB,KAAA,SAAc,KAAA,CAAM,wBAAA;EACnC,MAAA;EACA,OAAA;EACA,MAAA;EACA,IAAA;EACA,KAAA;EACA,GAAA;EACA,SAAA;EACA,KAAA;EACA,MAAA;EACA,UAAA;IACE,OAAA;IACA,MAAA;IACA,IAAA;EAAA;AAAA;AAAA,cAUE,QAAA;EAAA;;;;;;;;;;;;;;;KAeH,KAAA,wCAAK,kBAAA,CAAA,GAAA,CAAA,OAAA,GAAA,QAAA,CAAA,KAAA,CAAA,SAAA,IAAA,OAAA,sCAAA,KAAA,CAAA,WAAA,GAAA,KAAA,CAAA,YAAA,mBAAA,KAAA,CAAA,qBAAA,SAAA,QAAA,CAAA,KAAA,CAAA,SAAA"}
|
|
@@ -6,17 +6,23 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'button'>, 'onChange
|
|
|
6
6
|
track?: string;
|
|
7
7
|
handle?: string;
|
|
8
8
|
};
|
|
9
|
+
size?: 'small' | 'medium';
|
|
9
10
|
defaultChecked?: boolean;
|
|
10
11
|
checked?: boolean;
|
|
11
12
|
disabled?: boolean;
|
|
12
13
|
onChange?: (checked: boolean) => void;
|
|
14
|
+
checkedChildren?: React.ReactNode;
|
|
15
|
+
unCheckedChildren?: React.ReactNode;
|
|
13
16
|
}
|
|
14
17
|
declare const Switch: ({
|
|
15
18
|
className,
|
|
16
19
|
classNames,
|
|
20
|
+
size,
|
|
17
21
|
defaultChecked,
|
|
18
22
|
checked: _checked,
|
|
19
23
|
onChange: _onChange,
|
|
24
|
+
checkedChildren,
|
|
25
|
+
unCheckedChildren,
|
|
20
26
|
...props
|
|
21
27
|
}: Props) => react_jsx_runtime0.JSX.Element;
|
|
22
28
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"mappings":";;;UAgCU,KAAA,SAAc,IAAA,CACtB,KAAA,CAAM,wBAAA;EAGN,UAAA;IACE,KAAA;IACA,MAAA;EAAA;EAEF,IAAA;EACA,cAAA;EACA,OAAA;EACA,QAAA;EACA,QAAA,IAAY,OAAA;EACZ,eAAA,GAAkB,KAAA,CAAM,SAAA;EACxB,iBAAA,GAAoB,KAAA,CAAM,SAAA;AAAA;AAAA,cAGtB,MAAA;EAAU,SAAA;EAAA,UAAA;EAAA,IAAA;EAAA,cAAA;EAAA,OAAA,EAAA,QAAA;EAAA,QAAA,EAAA,SAAA;EAAA,eAAA;EAAA,iBAAA;EAAA,GAAA;AAAA,GAUb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -4,11 +4,31 @@ import { cn } from "../../../utils.mjs";
|
|
|
4
4
|
import { switch_exports } from "../../../core/switch.mjs";
|
|
5
5
|
import "../../../core.mjs";
|
|
6
6
|
import { useState } from "react";
|
|
7
|
-
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
|
|
9
9
|
//#region src/components/atoms/Switch/index.tsx
|
|
10
10
|
const { Switch: Core } = switch_exports;
|
|
11
|
-
const
|
|
11
|
+
const sizeConfig = {
|
|
12
|
+
medium: {
|
|
13
|
+
core: "default",
|
|
14
|
+
track: "h-8! w-12!",
|
|
15
|
+
handle: "size-6!",
|
|
16
|
+
handleChecked: "data-[state=unchecked]:left-0.5 data-[state=checked]:left-[calc(100%-26px)]",
|
|
17
|
+
fontSize: "text-xs",
|
|
18
|
+
marginChecked: "mr-7 ml-2",
|
|
19
|
+
marginUnchecked: "mr-2 ml-7"
|
|
20
|
+
},
|
|
21
|
+
small: {
|
|
22
|
+
core: "sm",
|
|
23
|
+
track: "h-6! w-10!",
|
|
24
|
+
handle: "size-5!",
|
|
25
|
+
handleChecked: "data-[state=unchecked]:left-0.5 data-[state=checked]:left-[calc(100%-22px)]",
|
|
26
|
+
fontSize: "text-[10px]",
|
|
27
|
+
marginChecked: "mr-6 ml-1.5",
|
|
28
|
+
marginUnchecked: "mr-1.5 ml-6"
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const Switch = ({ className, classNames, size = "medium", defaultChecked, checked: _checked, onChange: _onChange = () => {}, checkedChildren, unCheckedChildren, ...props }) => {
|
|
12
32
|
const [uncontrolledChecked, setUncontrolledChecked] = useState(defaultChecked || false);
|
|
13
33
|
const controlled = _checked !== void 0;
|
|
14
34
|
const checked = controlled ? _checked : uncontrolledChecked;
|
|
@@ -16,14 +36,28 @@ const Switch = ({ className, classNames, defaultChecked, checked: _checked, onCh
|
|
|
16
36
|
if (!controlled) setUncontrolledChecked(next);
|
|
17
37
|
_onChange(next);
|
|
18
38
|
};
|
|
39
|
+
const hasChildren = !!(checkedChildren || unCheckedChildren);
|
|
40
|
+
const config = sizeConfig[size];
|
|
19
41
|
return /* @__PURE__ */ jsx(Core, {
|
|
20
42
|
checked,
|
|
21
|
-
|
|
22
|
-
|
|
43
|
+
size: config.core,
|
|
44
|
+
className: cn("relative", config.track, hasChildren && "w-auto! overflow-hidden", className, classNames?.track),
|
|
45
|
+
handleClassName: cn(config.handle, "!absolute top-1/2 !-translate-y-1/2 !translate-x-0", "transition-[left] duration-200 will-change-[left]", config.handleChecked, classNames?.handle),
|
|
23
46
|
onCheckedChange: (checked) => {
|
|
24
47
|
onChange(checked);
|
|
25
48
|
},
|
|
26
|
-
...props
|
|
49
|
+
...props,
|
|
50
|
+
children: hasChildren && /* @__PURE__ */ jsxs("span", {
|
|
51
|
+
className: cn(`grid leading-none text-white transition-[margin] duration-200
|
|
52
|
+
will-change-[margin]`, config.fontSize, checked ? config.marginChecked : config.marginUnchecked),
|
|
53
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
54
|
+
className: cn("col-start-1 row-start-1 transition-opacity duration-200", checked ? "opacity-100" : "opacity-0"),
|
|
55
|
+
children: checkedChildren
|
|
56
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
57
|
+
className: cn("col-start-1 row-start-1 transition-opacity duration-200", checked ? "opacity-0" : "opacity-100"),
|
|
58
|
+
children: unCheckedChildren
|
|
59
|
+
})]
|
|
60
|
+
})
|
|
27
61
|
});
|
|
28
62
|
};
|
|
29
63
|
|