@jbpark/ui-kit 2.4.0 → 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.
Files changed (33) hide show
  1. package/dist/Menu.d.mts +2 -2
  2. package/dist/Menu.d.mts.map +1 -1
  3. package/dist/Menu.mjs +4 -4
  4. package/dist/Menu.mjs.map +1 -1
  5. package/dist/components/atoms/Button/index.mjs +3 -3
  6. package/dist/components/atoms/Button/index.mjs.map +1 -1
  7. package/dist/components/atoms/Skeleton/index.d.mts +1 -1
  8. package/dist/components/atoms/Skeleton/index.d.mts.map +1 -1
  9. package/dist/components/atoms/Switch/index.d.mts.map +1 -1
  10. package/dist/components/atoms/Switch/index.mjs +16 -15
  11. package/dist/components/atoms/Switch/index.mjs.map +1 -1
  12. package/dist/components/organisms/List/index.d.mts +1 -1
  13. package/dist/components/organisms/List/index.d.mts.map +1 -1
  14. package/dist/index.d.mts +5 -1
  15. package/dist/index.mjs +4 -1
  16. package/dist/providers/ConfigProvider/ConfigContext.d.mts +8 -0
  17. package/dist/providers/ConfigProvider/ConfigContext.d.mts.map +1 -0
  18. package/dist/providers/ConfigProvider/ConfigContext.mjs +11 -0
  19. package/dist/providers/ConfigProvider/ConfigContext.mjs.map +1 -0
  20. package/dist/providers/ConfigProvider/index.d.mts +18 -0
  21. package/dist/providers/ConfigProvider/index.d.mts.map +1 -0
  22. package/dist/providers/ConfigProvider/index.mjs +67 -0
  23. package/dist/providers/ConfigProvider/index.mjs.map +1 -0
  24. package/dist/providers/ConfigProvider/types.d.mts +32 -0
  25. package/dist/providers/ConfigProvider/types.d.mts.map +1 -0
  26. package/dist/providers/index.d.mts +3 -0
  27. package/dist/providers/index.mjs +4 -0
  28. package/dist/style.css +57 -47
  29. package/dist/utils.d.mts +2 -2
  30. package/dist/utils.d.mts.map +1 -1
  31. package/dist/utils.mjs +4 -4
  32. package/dist/utils.mjs.map +1 -1
  33. 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 function buildSelectionMap(items: MenuItem[], selectedKeysSet: ReadonlySet<React.Key>): SelectionMap;
45
- declare function findKey(menu: MenuItem, targetKeys: ReadonlySet<React.Key>): boolean;
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,
@@ -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,iBAE7B,iBAAA,CACd,KAAA,EAAO,QAAA,IACP,eAAA,EAAiB,WAAA,CAAY,KAAA,CAAM,GAAA,IAClC,YAAA;AAAA,iBAea,OAAA,CACd,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"}
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
- function buildSelectionMap(items, selectedKeysSet) {
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
- function findKey(menu, targetKeys) {
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 function 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 function 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,SAAgB,kBACd,OACA,iBACc;CACd,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,SAAgB,QACd,MACA,YACS;AACT,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"}
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"}
@@ -10,8 +10,8 @@ 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-[rgb(var(--btn-border)/0.5)]", "bg-background text-foreground", "hover:bg-accent"),
14
- dashed: cn("border border-dashed border-[rgb(var(--btn-border)/0.5)]", "bg-background text-foreground", "hover:bg-accent"),
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")
@@ -54,7 +54,7 @@ const Button = ({ icon, className, type = "default", variant, size = "middle", c
54
54
  "active:bg-(--btn-bg-active)",
55
55
  "text-(--btn-fg)",
56
56
  "border-(--btn-border)"
57
- ] : ["text-(--btn-bg)", "border-[rgb(var(--btn-border)/0.5)]"]), className),
57
+ ] : ["text-(--btn-bg)", "border-[color-mix(in_oklch,var(--btn-border),transparent_50%)]"]), className),
58
58
  onMouseDown: (e) => {
59
59
  e.preventDefault();
60
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' | '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-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n dashed: cn(\n 'border border-dashed border-[rgb(var(--btn-border)/0.5)]',\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-[rgb(var(--btn-border)/0.5)]',\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,8CACA,iCACA,kBACD;CACD,QAAQ,GACN,4DACA,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,sCAED,GACP,UAED;EACD,cAAa,MAAK;AAChB,KAAE,gBAAgB;AAClB,iBAAc,EAAE;;EAElB,GAAI;aAEH,aACA;GACI"}
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"}
@@ -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> | react_jsx_runtime0.JSX.Element | 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,wBAAA,kBAAA,CAAA,GAAA,CAAA,OAAA"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"mappings":";;;UA4BU,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"}
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"}
@@ -11,17 +11,21 @@ const { Switch: Core } = switch_exports;
11
11
  const sizeConfig = {
12
12
  medium: {
13
13
  core: "default",
14
- handleChecked: "data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-16px)]",
15
- fontSize: "text-[9px]",
16
- marginChecked: "mr-4.5 ml-1",
17
- marginUnchecked: "mr-1 ml-4.5"
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"
18
20
  },
19
21
  small: {
20
22
  core: "sm",
21
- handleChecked: "data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-12px)]",
22
- fontSize: "text-[7px]",
23
- marginChecked: "mr-3.5 ml-0.5",
24
- marginUnchecked: "mr-0.5 ml-3.5"
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"
25
29
  }
26
30
  };
27
31
  const Switch = ({ className, classNames, size = "medium", defaultChecked, checked: _checked, onChange: _onChange = () => {}, checkedChildren, unCheckedChildren, ...props }) => {
@@ -37,18 +41,15 @@ const Switch = ({ className, classNames, size = "medium", defaultChecked, checke
37
41
  return /* @__PURE__ */ jsx(Core, {
38
42
  checked,
39
43
  size: config.core,
40
- className: cn("relative", hasChildren && "w-auto! overflow-hidden", className, classNames?.track),
41
- handleClassName: cn(hasChildren && [
42
- "!absolute top-1/2 !-translate-y-1/2 !translate-x-0",
43
- "transition-[left] duration-200",
44
- config.handleChecked
45
- ], classNames?.handle),
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),
46
46
  onCheckedChange: (checked) => {
47
47
  onChange(checked);
48
48
  },
49
49
  ...props,
50
50
  children: hasChildren && /* @__PURE__ */ jsxs("span", {
51
- className: cn("grid leading-none text-white transition-[margin] duration-200", config.fontSize, checked ? config.marginChecked : config.marginUnchecked),
51
+ className: cn(`grid leading-none text-white transition-[margin] duration-200
52
+ will-change-[margin]`, config.fontSize, checked ? config.marginChecked : config.marginUnchecked),
52
53
  children: [/* @__PURE__ */ jsx("span", {
53
54
  className: cn("col-start-1 row-start-1 transition-opacity duration-200", checked ? "opacity-100" : "opacity-0"),
54
55
  children: checkedChildren
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["switchComponent"],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { switchComponent } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { Switch: Core } = switchComponent;\n\nconst sizeConfig = {\n medium: {\n core: 'default' as const,\n handleChecked:\n 'data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-16px)]',\n fontSize: 'text-[9px]',\n marginChecked: 'mr-4.5 ml-1',\n marginUnchecked: 'mr-1 ml-4.5',\n },\n small: {\n core: 'sm' as const,\n handleChecked:\n 'data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-12px)]',\n fontSize: 'text-[7px]',\n marginChecked: 'mr-3.5 ml-0.5',\n marginUnchecked: 'mr-0.5 ml-3.5',\n },\n};\n\ninterface Props extends Omit<\n React.ComponentPropsWithoutRef<'button'>,\n 'onChange'\n> {\n classNames?: {\n track?: string;\n handle?: string;\n };\n size?: 'small' | 'medium';\n defaultChecked?: boolean;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n checkedChildren?: React.ReactNode;\n unCheckedChildren?: React.ReactNode;\n}\n\nconst Switch = ({\n className,\n classNames,\n size = 'medium',\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n checkedChildren,\n unCheckedChildren,\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const onChange = (next: boolean) => {\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const hasChildren = !!(checkedChildren || unCheckedChildren);\n const config = sizeConfig[size];\n\n return (\n <Core\n checked={checked}\n size={config.core}\n className={cn(\n 'relative',\n hasChildren && 'w-auto! overflow-hidden',\n className,\n classNames?.track,\n //\n )}\n handleClassName={cn(\n hasChildren && [\n '!absolute top-1/2 !-translate-y-1/2 !translate-x-0',\n 'transition-[left] duration-200',\n config.handleChecked,\n ],\n classNames?.handle,\n //\n )}\n onCheckedChange={checked => {\n onChange(checked);\n }}\n {...props}\n >\n {hasChildren && (\n <span\n className={cn(\n 'grid leading-none text-white transition-[margin] duration-200',\n config.fontSize,\n checked ? config.marginChecked : config.marginUnchecked,\n //\n )}\n >\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-100' : 'opacity-0',\n )}\n >\n {checkedChildren}\n </span>\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-0' : 'opacity-100',\n )}\n >\n {unCheckedChildren}\n </span>\n </span>\n )}\n </Core>\n );\n};\n\nexport default Switch;\n"],"mappings":";;;;;;;;;AAOA,MAAM,EAAE,QAAQ,SAASA;AAEzB,MAAM,aAAa;CACjB,QAAQ;EACN,MAAM;EACN,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;EAClB;CACD,OAAO;EACL,MAAM;EACN,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;EAClB;CACF;AAmBD,MAAM,UAAU,EACd,WACA,YACA,OAAO,UACP,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,iBACA,mBACA,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,YAAY,SAAkB;AAClC,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,cAAc,CAAC,EAAE,mBAAmB;CAC1C,MAAM,SAAS,WAAW;AAE1B,QACE,oBAAC;EACU;EACT,MAAM,OAAO;EACb,WAAW,GACT,YACA,eAAe,2BACf,WACA,YAAY,MAEb;EACD,iBAAiB,GACf,eAAe;GACb;GACA;GACA,OAAO;GACR,EACD,YAAY,OAEb;EACD,kBAAiB,YAAW;AAC1B,YAAS,QAAQ;;EAEnB,GAAI;YAEH,eACC,qBAAC;GACC,WAAW,GACT,iEACA,OAAO,UACP,UAAU,OAAO,gBAAgB,OAAO,gBAEzC;cAED,oBAAC;IACC,WAAW,GACT,2DACA,UAAU,gBAAgB,YAC3B;cAEA;KACI,EACP,oBAAC;IACC,WAAW,GACT,2DACA,UAAU,cAAc,cACzB;cAEA;KACI;IACF;GAEJ"}
1
+ {"version":3,"file":"index.mjs","names":["switchComponent"],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { switchComponent } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { Switch: Core } = switchComponent;\n\nconst sizeConfig = {\n medium: {\n core: 'default' as const,\n track: 'h-8! w-12!',\n handle: 'size-6!',\n handleChecked:\n 'data-[state=unchecked]:left-0.5 data-[state=checked]:left-[calc(100%-26px)]',\n fontSize: 'text-xs',\n marginChecked: 'mr-7 ml-2',\n marginUnchecked: 'mr-2 ml-7',\n },\n small: {\n core: 'sm' as const,\n track: 'h-6! w-10!',\n handle: 'size-5!',\n handleChecked:\n 'data-[state=unchecked]:left-0.5 data-[state=checked]:left-[calc(100%-22px)]',\n fontSize: 'text-[10px]',\n marginChecked: 'mr-6 ml-1.5',\n marginUnchecked: 'mr-1.5 ml-6',\n },\n};\n\ninterface Props extends Omit<\n React.ComponentPropsWithoutRef<'button'>,\n 'onChange'\n> {\n classNames?: {\n track?: string;\n handle?: string;\n };\n size?: 'small' | 'medium';\n defaultChecked?: boolean;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n checkedChildren?: React.ReactNode;\n unCheckedChildren?: React.ReactNode;\n}\n\nconst Switch = ({\n className,\n classNames,\n size = 'medium',\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n checkedChildren,\n unCheckedChildren,\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const onChange = (next: boolean) => {\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const hasChildren = !!(checkedChildren || unCheckedChildren);\n const config = sizeConfig[size];\n\n return (\n <Core\n checked={checked}\n size={config.core}\n className={cn(\n 'relative',\n config.track,\n hasChildren && 'w-auto! overflow-hidden',\n className,\n classNames?.track,\n //\n )}\n handleClassName={cn(\n config.handle,\n '!absolute top-1/2 !-translate-y-1/2 !translate-x-0',\n 'transition-[left] duration-200 will-change-[left]',\n config.handleChecked,\n classNames?.handle,\n //\n )}\n onCheckedChange={checked => {\n onChange(checked);\n }}\n {...props}\n >\n {hasChildren && (\n <span\n className={cn(\n `grid leading-none text-white transition-[margin] duration-200\n will-change-[margin]`,\n config.fontSize,\n checked ? config.marginChecked : config.marginUnchecked,\n //\n )}\n >\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-100' : 'opacity-0',\n )}\n >\n {checkedChildren}\n </span>\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-0' : 'opacity-100',\n )}\n >\n {unCheckedChildren}\n </span>\n </span>\n )}\n </Core>\n );\n};\n\nexport default Switch;\n"],"mappings":";;;;;;;;;AAOA,MAAM,EAAE,QAAQ,SAASA;AAEzB,MAAM,aAAa;CACjB,QAAQ;EACN,MAAM;EACN,OAAO;EACP,QAAQ;EACR,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;EAClB;CACD,OAAO;EACL,MAAM;EACN,OAAO;EACP,QAAQ;EACR,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;EAClB;CACF;AAmBD,MAAM,UAAU,EACd,WACA,YACA,OAAO,UACP,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,iBACA,mBACA,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,YAAY,SAAkB;AAClC,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,cAAc,CAAC,EAAE,mBAAmB;CAC1C,MAAM,SAAS,WAAW;AAE1B,QACE,oBAAC;EACU;EACT,MAAM,OAAO;EACb,WAAW,GACT,YACA,OAAO,OACP,eAAe,2BACf,WACA,YAAY,MAEb;EACD,iBAAiB,GACf,OAAO,QACP,sDACA,qDACA,OAAO,eACP,YAAY,OAEb;EACD,kBAAiB,YAAW;AAC1B,YAAS,QAAQ;;EAEnB,GAAI;YAEH,eACC,qBAAC;GACC,WAAW,GACT;mCAEA,OAAO,UACP,UAAU,OAAO,gBAAgB,OAAO,gBAEzC;cAED,oBAAC;IACC,WAAW,GACT,2DACA,UAAU,gBAAgB,YAC3B;cAEA;KACI,EACP,oBAAC;IACC,WAAW,GACT,2DACA,UAAU,cAAc,cACzB;cAEA;KACI;IACF;GAEJ"}
@@ -40,7 +40,7 @@ declare const List: {
40
40
  classNames,
41
41
  renderItem,
42
42
  ...props
43
- }: Props<T>): string | number | bigint | true | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | react_jsx_runtime0.JSX.Element;
43
+ }: Props<T>): string | number | bigint | true | 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>;
44
44
  Item: ({
45
45
  children,
46
46
  className,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/organisms/List/index.tsx"],"mappings":";;;;;;UAWU,KAAA,YAAiB,IAAA,CACzB,KAAA,CAAM,wBAAA;EAGN,OAAA;EACA,WAAA,GAAc,KAAA,CAAM,cAAA,QAAsB,QAAA;EAC1C,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,UAAA;IACE,KAAA;IACA,MAAA;IACA,IAAA;EAAA;EAEF,MAAA;IACE,OAAA;IACA,OAAA;IACA,MAAA,GAAS,KAAA,CAAM,SAAA;IACf,OAAA,GAAU,wBAAA;IACV,IAAA;EAAA;EAEF,IAAA,GAAO,CAAA;EACP,UAAA,IAAc,IAAA,EAAM,CAAA,EAAG,KAAA,aAAkB,KAAA,CAAM,SAAA;AAAA;AAAA,cAG3C,IAAA;EAAA;IAAS,OAAA;IAAA,WAAA;IAAA,MAAA;IAAA,MAAA;IAAA,KAAA;IAAA,KAAA;IAAA,MAAA;IAAA,IAAA;IAAA,SAAA;IAAA,UAAA;IAAA,UAAA;IAAA,GAAA;EAAA,GAaZ,KAAA,CAAM,CAAA,sCAAE,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,wBAAA,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/organisms/List/index.tsx"],"mappings":";;;;;;UAWU,KAAA,YAAiB,IAAA,CACzB,KAAA,CAAM,wBAAA;EAGN,OAAA;EACA,WAAA,GAAc,KAAA,CAAM,cAAA,QAAsB,QAAA;EAC1C,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,MAAA,GAAS,KAAA,CAAM,SAAA;EACf,KAAA,GAAQ,KAAA,CAAM,SAAA;EACd,UAAA;IACE,KAAA;IACA,MAAA;IACA,IAAA;EAAA;EAEF,MAAA;IACE,OAAA;IACA,OAAA;IACA,MAAA,GAAS,KAAA,CAAM,SAAA;IACf,OAAA,GAAU,wBAAA;IACV,IAAA;EAAA;EAEF,IAAA,GAAO,CAAA;EACP,UAAA,IAAc,IAAA,EAAM,CAAA,EAAG,KAAA,aAAkB,KAAA,CAAM,SAAA;AAAA;AAAA,cAG3C,IAAA;EAAA;IAAS,OAAA;IAAA,WAAA;IAAA,MAAA;IAAA,MAAA;IAAA,KAAA;IAAA,KAAA;IAAA,MAAA;IAAA,IAAA;IAAA,SAAA;IAAA,UAAA;IAAA,UAAA;IAAA,GAAA;EAAA,GAaZ,KAAA,CAAM,CAAA,sCAAE,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"}
package/dist/index.d.mts CHANGED
@@ -27,4 +27,8 @@ import { Swiper } from "./components/organisms/Swiper/index.mjs";
27
27
  import "./components/organisms/index.mjs";
28
28
  import { Layout } from "./components/templates/Layout/index.mjs";
29
29
  import "./components/templates/index.mjs";
30
- export { Button, Card, Checkbox, Collapse, ColorPicker, Drawer, Dropdown, FloatButton, Input, Layout, List, Marquees, Menu, Modal, Popover, Progress, Radio, Reveals, Select, Skeleton, Space, Spin, Swiper, Switch, Typography };
30
+ import { ThemeConfig, ThemeToken } from "./providers/ConfigProvider/types.mjs";
31
+ import { useConfig } from "./providers/ConfigProvider/ConfigContext.mjs";
32
+ import { ConfigProvider, Props } from "./providers/ConfigProvider/index.mjs";
33
+ import "./providers/index.mjs";
34
+ export { Button, Card, Checkbox, Collapse, ColorPicker, ConfigProvider, Props as ConfigProviderProps, Drawer, Dropdown, FloatButton, Input, Layout, List, Marquees, Menu, Modal, Popover, Progress, Radio, Reveals, Select, Skeleton, Space, Spin, Swiper, Switch, ThemeConfig, ThemeToken, Typography, useConfig };
package/dist/index.mjs CHANGED
@@ -28,5 +28,8 @@ import Swiper from "./components/organisms/Swiper/index.mjs";
28
28
  import "./components/organisms/index.mjs";
29
29
  import Layout from "./components/templates/Layout/index.mjs";
30
30
  import "./components/templates/index.mjs";
31
+ import { useConfig } from "./providers/ConfigProvider/ConfigContext.mjs";
32
+ import ConfigProvider from "./providers/ConfigProvider/index.mjs";
33
+ import "./providers/index.mjs";
31
34
 
32
- export { Button, Card, Checkbox, Collapse, ColorPicker, Drawer, Dropdown, FloatButton, Input, Layout, List, Marquees, Menu, Modal, Popover, Progress, Radio, Reveals, Select, Skeleton, Space, Spin, Swiper, Switch, Typography };
35
+ export { Button, Card, Checkbox, Collapse, ColorPicker, ConfigProvider, Drawer, Dropdown, FloatButton, Input, Layout, List, Marquees, Menu, Modal, Popover, Progress, Radio, Reveals, Select, Skeleton, Space, Spin, Swiper, Switch, Typography, useConfig };
@@ -0,0 +1,8 @@
1
+ import { ConfigContextValue } from "./types.mjs";
2
+ import "react";
3
+
4
+ //#region src/providers/ConfigProvider/ConfigContext.d.ts
5
+ declare const useConfig: () => ConfigContextValue;
6
+ //#endregion
7
+ export { useConfig };
8
+ //# sourceMappingURL=ConfigContext.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigContext.d.mts","names":[],"sources":["../../../src/providers/ConfigProvider/ConfigContext.ts"],"mappings":";;;;cAUa,SAAA,QAAS,kBAAA"}
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+
3
+ import { createContext, useContext } from "react";
4
+
5
+ //#region src/providers/ConfigProvider/ConfigContext.ts
6
+ const ConfigContext = createContext({ theme: {} });
7
+ const useConfig = () => useContext(ConfigContext);
8
+
9
+ //#endregion
10
+ export { ConfigContext, useConfig };
11
+ //# sourceMappingURL=ConfigContext.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigContext.mjs","names":[],"sources":["../../../src/providers/ConfigProvider/ConfigContext.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport type { ConfigContextValue } from './types';\n\nexport const ConfigContext = createContext<ConfigContextValue>({\n theme: {},\n});\n\nexport const useConfig = () => useContext(ConfigContext);\n"],"mappings":";;;;;AAMA,MAAa,gBAAgB,cAAkC,EAC7D,OAAO,EAAE,EACV,CAAC;AAEF,MAAa,kBAAkB,WAAW,cAAc"}
@@ -0,0 +1,18 @@
1
+ import { ThemeConfig, ThemeToken } from "./types.mjs";
2
+ import { useConfig } from "./ConfigContext.mjs";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region src/providers/ConfigProvider/index.d.ts
6
+ interface Props {
7
+ theme?: ThemeConfig;
8
+ className?: string;
9
+ children: React.ReactNode;
10
+ }
11
+ declare const ConfigProvider: ({
12
+ theme,
13
+ className,
14
+ children
15
+ }: Props) => react_jsx_runtime0.JSX.Element;
16
+ //#endregion
17
+ export { ConfigProvider, type Props };
18
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/providers/ConfigProvider/index.tsx"],"mappings":";;;;;UAmDU,KAAA;EACR,KAAA,GAAQ,WAAA;EACR,SAAA;EACA,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA;AAAA,cAGZ,cAAA;EAAkB,KAAA;EAAA,SAAA;EAAA;AAAA,GAAqC,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,67 @@
1
+ 'use client';
2
+
3
+ import { cn } from "../../utils.mjs";
4
+ import { ConfigContext, useConfig } from "./ConfigContext.mjs";
5
+ import { useMemo } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+
8
+ //#region src/providers/ConfigProvider/index.tsx
9
+ const tokenToCssVar = {
10
+ colorPrimary: "--primary",
11
+ colorPrimaryForeground: "--primary-foreground",
12
+ colorBackground: "--background",
13
+ colorForeground: "--foreground",
14
+ colorCard: "--card",
15
+ colorCardForeground: "--card-foreground",
16
+ colorPopover: "--popover",
17
+ colorPopoverForeground: "--popover-foreground",
18
+ colorSecondary: "--secondary",
19
+ colorSecondaryForeground: "--secondary-foreground",
20
+ colorMuted: "--muted",
21
+ colorMutedForeground: "--muted-foreground",
22
+ colorAccent: "--accent",
23
+ colorAccentForeground: "--accent-foreground",
24
+ colorDestructive: "--destructive",
25
+ colorBorder: "--border",
26
+ colorInput: "--input",
27
+ colorRing: "--ring",
28
+ borderRadius: "--radius"
29
+ };
30
+ const buildCssVars = (token) => {
31
+ if (!token) return {};
32
+ const vars = {};
33
+ for (const [key, value] of Object.entries(token)) {
34
+ if (value === void 0) continue;
35
+ const cssVar = tokenToCssVar[key];
36
+ if (cssVar) vars[cssVar] = value;
37
+ }
38
+ return vars;
39
+ };
40
+ const ConfigProvider = ({ theme = {}, className, children }) => {
41
+ const parent = useConfig();
42
+ const mergedTheme = useMemo(() => ({
43
+ ...parent.theme,
44
+ ...theme,
45
+ token: {
46
+ ...parent.theme.token,
47
+ ...theme.token
48
+ }
49
+ }), [parent.theme, theme]);
50
+ const contextValue = useMemo(() => ({ theme: mergedTheme }), [mergedTheme]);
51
+ const cssVars = useMemo(() => buildCssVars(mergedTheme.token), [mergedTheme.token]);
52
+ const hasCssVars = Object.keys(cssVars).length > 0;
53
+ const hasDarkMode = mergedTheme.dark !== void 0;
54
+ const needsWrapper = hasCssVars || hasDarkMode || className;
55
+ return /* @__PURE__ */ jsx(ConfigContext.Provider, {
56
+ value: contextValue,
57
+ children: needsWrapper ? /* @__PURE__ */ jsx("div", {
58
+ className: cn(mergedTheme.dark && "dark", className),
59
+ style: hasCssVars ? cssVars : void 0,
60
+ children
61
+ }) : children
62
+ });
63
+ };
64
+
65
+ //#endregion
66
+ export { ConfigProvider as default };
67
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/providers/ConfigProvider/index.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { ConfigContext, useConfig } from './ConfigContext';\nimport type { ThemeConfig, ThemeToken } from './types';\n\nconst tokenToCssVar: Record<keyof ThemeToken, string> = {\n colorPrimary: '--primary',\n colorPrimaryForeground: '--primary-foreground',\n colorBackground: '--background',\n colorForeground: '--foreground',\n colorCard: '--card',\n colorCardForeground: '--card-foreground',\n colorPopover: '--popover',\n colorPopoverForeground: '--popover-foreground',\n colorSecondary: '--secondary',\n colorSecondaryForeground: '--secondary-foreground',\n colorMuted: '--muted',\n colorMutedForeground: '--muted-foreground',\n colorAccent: '--accent',\n colorAccentForeground: '--accent-foreground',\n colorDestructive: '--destructive',\n colorBorder: '--border',\n colorInput: '--input',\n colorRing: '--ring',\n borderRadius: '--radius',\n};\n\nconst buildCssVars = (token?: ThemeToken): React.CSSProperties => {\n if (!token) {\n return {};\n }\n\n const vars: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(token)) {\n if (value === undefined) {\n continue;\n }\n const cssVar = tokenToCssVar[key as keyof ThemeToken];\n if (cssVar) {\n vars[cssVar] = value;\n }\n }\n\n return vars as React.CSSProperties;\n};\n\ninterface Props {\n theme?: ThemeConfig;\n className?: string;\n children: React.ReactNode;\n}\n\nconst ConfigProvider = ({ theme = {}, className, children }: Props) => {\n const parent = useConfig();\n\n const mergedTheme = useMemo<ThemeConfig>(\n () => ({\n ...parent.theme,\n ...theme,\n token: {\n ...parent.theme.token,\n ...theme.token,\n },\n }),\n [parent.theme, theme],\n );\n\n const contextValue = useMemo(() => ({ theme: mergedTheme }), [mergedTheme]);\n\n const cssVars = useMemo(\n () => buildCssVars(mergedTheme.token),\n [mergedTheme.token],\n );\n\n const hasCssVars = Object.keys(cssVars).length > 0;\n const hasDarkMode = mergedTheme.dark !== undefined;\n const needsWrapper = hasCssVars || hasDarkMode || className;\n\n return (\n <ConfigContext.Provider value={contextValue}>\n {needsWrapper ? (\n <div\n className={cn(mergedTheme.dark && 'dark', className)}\n style={hasCssVars ? cssVars : undefined}\n >\n {children}\n </div>\n ) : (\n children\n )}\n </ConfigContext.Provider>\n );\n};\n\nexport default ConfigProvider;\nexport { useConfig };\nexport type { Props, ThemeConfig, ThemeToken };\n"],"mappings":";;;;;;;;AASA,MAAM,gBAAkD;CACtD,cAAc;CACd,wBAAwB;CACxB,iBAAiB;CACjB,iBAAiB;CACjB,WAAW;CACX,qBAAqB;CACrB,cAAc;CACd,wBAAwB;CACxB,gBAAgB;CAChB,0BAA0B;CAC1B,YAAY;CACZ,sBAAsB;CACtB,aAAa;CACb,uBAAuB;CACvB,kBAAkB;CAClB,aAAa;CACb,YAAY;CACZ,WAAW;CACX,cAAc;CACf;AAED,MAAM,gBAAgB,UAA4C;AAChE,KAAI,CAAC,MACH,QAAO,EAAE;CAGX,MAAM,OAA+B,EAAE;AAEvC,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE;AAChD,MAAI,UAAU,OACZ;EAEF,MAAM,SAAS,cAAc;AAC7B,MAAI,OACF,MAAK,UAAU;;AAInB,QAAO;;AAST,MAAM,kBAAkB,EAAE,QAAQ,EAAE,EAAE,WAAW,eAAsB;CACrE,MAAM,SAAS,WAAW;CAE1B,MAAM,cAAc,eACX;EACL,GAAG,OAAO;EACV,GAAG;EACH,OAAO;GACL,GAAG,OAAO,MAAM;GAChB,GAAG,MAAM;GACV;EACF,GACD,CAAC,OAAO,OAAO,MAAM,CACtB;CAED,MAAM,eAAe,eAAe,EAAE,OAAO,aAAa,GAAG,CAAC,YAAY,CAAC;CAE3E,MAAM,UAAU,cACR,aAAa,YAAY,MAAM,EACrC,CAAC,YAAY,MAAM,CACpB;CAED,MAAM,aAAa,OAAO,KAAK,QAAQ,CAAC,SAAS;CACjD,MAAM,cAAc,YAAY,SAAS;CACzC,MAAM,eAAe,cAAc,eAAe;AAElD,QACE,oBAAC,cAAc;EAAS,OAAO;YAC5B,eACC,oBAAC;GACC,WAAW,GAAG,YAAY,QAAQ,QAAQ,UAAU;GACpD,OAAO,aAAa,UAAU;GAE7B;IACG,GAEN;GAEqB"}
@@ -0,0 +1,32 @@
1
+ //#region src/providers/ConfigProvider/types.d.ts
2
+ interface ThemeToken {
3
+ colorPrimary?: string;
4
+ colorPrimaryForeground?: string;
5
+ colorBackground?: string;
6
+ colorForeground?: string;
7
+ colorCard?: string;
8
+ colorCardForeground?: string;
9
+ colorPopover?: string;
10
+ colorPopoverForeground?: string;
11
+ colorSecondary?: string;
12
+ colorSecondaryForeground?: string;
13
+ colorMuted?: string;
14
+ colorMutedForeground?: string;
15
+ colorAccent?: string;
16
+ colorAccentForeground?: string;
17
+ colorDestructive?: string;
18
+ colorBorder?: string;
19
+ colorInput?: string;
20
+ colorRing?: string;
21
+ borderRadius?: string;
22
+ }
23
+ interface ThemeConfig {
24
+ token?: ThemeToken;
25
+ dark?: boolean;
26
+ }
27
+ interface ConfigContextValue {
28
+ theme: ThemeConfig;
29
+ }
30
+ //#endregion
31
+ export { ConfigContextValue, ThemeConfig, ThemeToken };
32
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/providers/ConfigProvider/types.ts"],"mappings":";UAAiB,UAAA;EAEf,YAAA;EACA,sBAAA;EACA,eAAA;EACA,eAAA;EACA,SAAA;EACA,mBAAA;EACA,YAAA;EACA,sBAAA;EACA,cAAA;EACA,wBAAA;EACA,UAAA;EACA,oBAAA;EACA,WAAA;EACA,qBAAA;EACA,gBAAA;EACA,WAAA;EACA,UAAA;EACA,SAAA;EAGA,YAAA;AAAA;AAAA,UAGe,WAAA;EACf,KAAA,GAAQ,UAAA;EACR,IAAA;AAAA;AAAA,UAGe,kBAAA;EACf,KAAA,EAAO,WAAA;AAAA"}
@@ -0,0 +1,3 @@
1
+ import { ThemeConfig, ThemeToken } from "./ConfigProvider/types.mjs";
2
+ import { useConfig } from "./ConfigProvider/ConfigContext.mjs";
3
+ import { ConfigProvider, Props } from "./ConfigProvider/index.mjs";
@@ -0,0 +1,4 @@
1
+ import { useConfig } from "./ConfigProvider/ConfigContext.mjs";
2
+ import ConfigProvider from "./ConfigProvider/index.mjs";
3
+
4
+ export { };
package/dist/style.css CHANGED
@@ -353,17 +353,17 @@
353
353
  .mt-auto {
354
354
  margin-top: auto;
355
355
  }
356
- .mr-0\.5 {
357
- margin-right: calc(var(--spacing) * 0.5);
356
+ .mr-1\.5 {
357
+ margin-right: calc(var(--spacing) * 1.5);
358
358
  }
359
- .mr-1 {
360
- margin-right: calc(var(--spacing) * 1);
359
+ .mr-2 {
360
+ margin-right: calc(var(--spacing) * 2);
361
361
  }
362
- .mr-3\.5 {
363
- margin-right: calc(var(--spacing) * 3.5);
362
+ .mr-6 {
363
+ margin-right: calc(var(--spacing) * 6);
364
364
  }
365
- .mr-4\.5 {
366
- margin-right: calc(var(--spacing) * 4.5);
365
+ .mr-7 {
366
+ margin-right: calc(var(--spacing) * 7);
367
367
  }
368
368
  .mb-3 {
369
369
  margin-bottom: calc(var(--spacing) * 3);
@@ -371,20 +371,20 @@
371
371
  .mb-4 {
372
372
  margin-bottom: calc(var(--spacing) * 4);
373
373
  }
374
- .ml-0\.5 {
375
- margin-left: calc(var(--spacing) * 0.5);
374
+ .ml-1\.5 {
375
+ margin-left: calc(var(--spacing) * 1.5);
376
376
  }
377
- .ml-1 {
378
- margin-left: calc(var(--spacing) * 1);
379
- }
380
- .ml-3\.5 {
381
- margin-left: calc(var(--spacing) * 3.5);
377
+ .ml-2 {
378
+ margin-left: calc(var(--spacing) * 2);
382
379
  }
383
380
  .ml-4 {
384
381
  margin-left: calc(var(--spacing) * 4);
385
382
  }
386
- .ml-4\.5 {
387
- margin-left: calc(var(--spacing) * 4.5);
383
+ .ml-6 {
384
+ margin-left: calc(var(--spacing) * 6);
385
+ }
386
+ .ml-7 {
387
+ margin-left: calc(var(--spacing) * 7);
388
388
  }
389
389
  .box-content {
390
390
  box-sizing: content-box;
@@ -428,10 +428,18 @@
428
428
  width: calc(var(--spacing) * 4);
429
429
  height: calc(var(--spacing) * 4);
430
430
  }
431
+ .size-5\! {
432
+ width: calc(var(--spacing) * 5) !important;
433
+ height: calc(var(--spacing) * 5) !important;
434
+ }
431
435
  .size-6 {
432
436
  width: calc(var(--spacing) * 6);
433
437
  height: calc(var(--spacing) * 6);
434
438
  }
439
+ .size-6\! {
440
+ width: calc(var(--spacing) * 6) !important;
441
+ height: calc(var(--spacing) * 6) !important;
442
+ }
435
443
  .size-8 {
436
444
  width: calc(var(--spacing) * 8);
437
445
  height: calc(var(--spacing) * 8);
@@ -456,9 +464,15 @@
456
464
  .h-6 {
457
465
  height: calc(var(--spacing) * 6);
458
466
  }
467
+ .h-6\! {
468
+ height: calc(var(--spacing) * 6) !important;
469
+ }
459
470
  .h-8 {
460
471
  height: calc(var(--spacing) * 8);
461
472
  }
473
+ .h-8\! {
474
+ height: calc(var(--spacing) * 8) !important;
475
+ }
462
476
  .h-9 {
463
477
  height: calc(var(--spacing) * 9);
464
478
  }
@@ -495,9 +509,15 @@
495
509
  .w-4 {
496
510
  width: calc(var(--spacing) * 4);
497
511
  }
512
+ .w-10\! {
513
+ width: calc(var(--spacing) * 10) !important;
514
+ }
498
515
  .w-12 {
499
516
  width: calc(var(--spacing) * 12);
500
517
  }
518
+ .w-12\! {
519
+ width: calc(var(--spacing) * 12) !important;
520
+ }
501
521
  .w-15 {
502
522
  width: calc(var(--spacing) * 15);
503
523
  }
@@ -835,8 +855,11 @@
835
855
  .border-\(--btn-border\) {
836
856
  border-color: var(--btn-border);
837
857
  }
838
- .border-\[rgb\(var\(--btn-border\)\/0\.5\)\] {
839
- border-color: rgb(var(--btn-border)/0.5);
858
+ .border-\[color-mix\(in_oklch\,var\(--btn-border\)\,transparent_50\%\)\] {
859
+ border-color: var(--btn-border);
860
+ @supports (color: color-mix(in lab, red, red)) {
861
+ border-color: color-mix(in oklch,var(--btn-border),transparent 50%);
862
+ }
840
863
  }
841
864
  .border-current {
842
865
  border-color: currentcolor;
@@ -1046,11 +1069,8 @@
1046
1069
  font-size: var(--text-xs);
1047
1070
  line-height: var(--tw-leading, var(--text-xs--line-height));
1048
1071
  }
1049
- .text-\[7px\] {
1050
- font-size: 7px;
1051
- }
1052
- .text-\[9px\] {
1053
- font-size: 9px;
1072
+ .text-\[10px\] {
1073
+ font-size: 10px;
1054
1074
  }
1055
1075
  .leading-5\.75 {
1056
1076
  --tw-leading: calc(var(--spacing) * 5.75);
@@ -1255,6 +1275,12 @@
1255
1275
  --tw-duration: 200ms;
1256
1276
  transition-duration: 200ms;
1257
1277
  }
1278
+ .will-change-\[left\] {
1279
+ will-change: left;
1280
+ }
1281
+ .will-change-\[margin\] {
1282
+ will-change: margin;
1283
+ }
1258
1284
  .outline-none {
1259
1285
  --tw-outline-style: none;
1260
1286
  outline-style: none;
@@ -2135,14 +2161,14 @@
2135
2161
  }
2136
2162
  }
2137
2163
  }
2138
- .data-\[state\=checked\]\:left-\[calc\(100\%-12px\)\] {
2164
+ .data-\[state\=checked\]\:left-\[calc\(100\%-22px\)\] {
2139
2165
  &[data-state="checked"] {
2140
- left: calc(100% - 12px);
2166
+ left: calc(100% - 22px);
2141
2167
  }
2142
2168
  }
2143
- .data-\[state\=checked\]\:left-\[calc\(100\%-16px\)\] {
2169
+ .data-\[state\=checked\]\:left-\[calc\(100\%-26px\)\] {
2144
2170
  &[data-state="checked"] {
2145
- left: calc(100% - 16px);
2171
+ left: calc(100% - 26px);
2146
2172
  }
2147
2173
  }
2148
2174
  .data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\] {
@@ -2176,9 +2202,9 @@
2176
2202
  color: var(--muted-foreground);
2177
2203
  }
2178
2204
  }
2179
- .data-\[state\=unchecked\]\:left-0 {
2205
+ .data-\[state\=unchecked\]\:left-0\.5 {
2180
2206
  &[data-state="unchecked"] {
2181
- left: calc(var(--spacing) * 0);
2207
+ left: calc(var(--spacing) * 0.5);
2182
2208
  }
2183
2209
  }
2184
2210
  .data-\[state\=unchecked\]\:translate-x-0 {
@@ -2746,69 +2772,53 @@
2746
2772
  }
2747
2773
  [data-slot='button'][data-color='default'] {
2748
2774
  --btn-bg: var(--muted);
2749
- --btn-border: 107 114 128;
2775
+ --btn-border: var(--muted-foreground);
2750
2776
  }
2751
2777
  [data-slot='button'][data-color='primary'] {
2752
2778
  --btn-bg: var(--primary);
2753
- --btn-border: var(--primary);
2754
2779
  --btn-fg: var(--primary-foreground);
2755
2780
  }
2756
2781
  [data-slot='button'][data-color='danger'] {
2757
2782
  --btn-bg: var(--destructive);
2758
- --btn-border: 239 68 68;
2759
- --btn-fg: white;
2760
2783
  }
2761
2784
  [data-slot='button'][data-color='blue'] {
2762
2785
  --btn-bg: #3b82f6;
2763
- --btn-border: 59 130 246;
2764
2786
  }
2765
2787
  [data-slot='button'][data-color='purple'] {
2766
2788
  --btn-bg: #a855f7;
2767
- --btn-border: 168 85 247;
2768
2789
  }
2769
2790
  [data-slot='button'][data-color='cyan'] {
2770
2791
  --btn-bg: #06b6d4;
2771
- --btn-border: 6 182 212;
2772
2792
  }
2773
2793
  [data-slot='button'][data-color='green'] {
2774
2794
  --btn-bg: #22c55e;
2775
- --btn-border: 34 197 94;
2776
2795
  }
2777
2796
  [data-slot='button'][data-color='magenta'] {
2778
2797
  --btn-bg: #d946ef;
2779
- --btn-border: 217 70 239;
2780
2798
  }
2781
2799
  [data-slot='button'][data-color='pink'] {
2782
2800
  --btn-bg: #ec4899;
2783
- --btn-border: 236 72 153;
2784
2801
  }
2785
2802
  [data-slot='button'][data-color='red'] {
2786
2803
  --btn-bg: #ef4444;
2787
- --btn-border: 239 68 68;
2788
2804
  }
2789
2805
  [data-slot='button'][data-color='orange'] {
2790
2806
  --btn-bg: #f97316;
2791
- --btn-border: 249 115 22;
2792
2807
  }
2793
2808
  [data-slot='button'][data-color='yellow'] {
2794
2809
  --btn-bg: #eab308;
2795
- --btn-border: 234 179 8;
2796
2810
  }
2797
2811
  [data-slot='button'][data-color='volcano'] {
2798
2812
  --btn-bg: #ea580c;
2799
- --btn-border: 234 88 12;
2800
2813
  }
2801
2814
  [data-slot='button'][data-color='geekblue'] {
2802
2815
  --btn-bg: #6366f1;
2803
- --btn-border: 99 102 241;
2804
2816
  }
2805
2817
  [data-slot='button'][data-color='lime'] {
2806
2818
  --btn-bg: #84cc16;
2807
- --btn-border: 132 204 22;
2808
2819
  }
2809
2820
  [data-slot='button'][data-color='gold'] {
2810
2821
  --btn-bg: #f59e0b;
2811
- --btn-border: 245 158 11;
2812
2822
  }
2813
2823
  }
2814
2824
  @property --tw-translate-x {
package/dist/utils.d.mts CHANGED
@@ -2,8 +2,8 @@ import * as React$1 from "react";
2
2
  import { ClassValue } from "clsx";
3
3
 
4
4
  //#region src/lib/utils/index.d.ts
5
- declare function cn(...inputs: ClassValue[]): string;
6
- declare function renderConditional<T extends React$1.ReactNode>(value: T, wrapper?: (value: NonNullable<T>) => React$1.ReactNode): React$1.ReactNode;
5
+ declare const cn: (...inputs: ClassValue[]) => string;
6
+ declare const renderConditional: <T extends React$1.ReactNode>(value: T, wrapper?: (value: NonNullable<T>) => React$1.ReactNode) => React$1.ReactNode;
7
7
  //#endregion
8
8
  export { cn, renderConditional };
9
9
  //# sourceMappingURL=utils.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.mts","names":[],"sources":["../src/lib/utils/index.ts"],"mappings":";;;;iBAKgB,EAAA,CAAA,GAAM,MAAA,EAAQ,UAAA;AAAA,iBAId,iBAAA,WAA4B,OAAA,CAAM,SAAA,CAAA,CAChD,KAAA,EAAO,CAAA,EACP,OAAA,IAAW,KAAA,EAAO,WAAA,CAAY,CAAA,MAAO,OAAA,CAAM,SAAA,GAC1C,OAAA,CAAM,SAAA"}
1
+ {"version":3,"file":"utils.d.mts","names":[],"sources":["../src/lib/utils/index.ts"],"mappings":";;;;cAKa,EAAA,MAAS,MAAA,EAAQ,UAAA;AAAA,cAIjB,iBAAA,aAA+B,OAAA,CAAM,SAAA,EAChD,KAAA,EAAO,CAAA,EACP,OAAA,IAAW,KAAA,EAAO,WAAA,CAAY,CAAA,MAAO,OAAA,CAAM,SAAA,KAC1C,OAAA,CAAM,SAAA"}
package/dist/utils.mjs CHANGED
@@ -3,14 +3,14 @@ import { clsx } from "clsx";
3
3
  import { twMerge } from "tailwind-merge";
4
4
 
5
5
  //#region src/lib/utils/index.ts
6
- function cn(...inputs) {
6
+ const cn = (...inputs) => {
7
7
  return twMerge(clsx(inputs));
8
- }
9
- function renderConditional(value, wrapper) {
8
+ };
9
+ const renderConditional = (value, wrapper) => {
10
10
  if (value === null || value === void 0) return null;
11
11
  if (React$1.isValidElement(value)) return value;
12
12
  return wrapper ? wrapper(value) : value;
13
- }
13
+ };
14
14
 
15
15
  //#endregion
16
16
  export { cn, renderConditional };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","names":["React"],"sources":["../src/lib/utils/index.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function renderConditional<T extends React.ReactNode>(\n value: T,\n wrapper?: (value: NonNullable<T>) => React.ReactNode,\n): React.ReactNode {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (React.isValidElement(value)) {\n return value;\n }\n\n return wrapper ? wrapper(value as NonNullable<T>) : value;\n}\n"],"mappings":";;;;;AAKA,SAAgB,GAAG,GAAG,QAAsB;AAC1C,QAAO,QAAQ,KAAK,OAAO,CAAC;;AAG9B,SAAgB,kBACd,OACA,SACiB;AACjB,KAAI,UAAU,QAAQ,UAAU,OAC9B,QAAO;AAGT,KAAIA,QAAM,eAAe,MAAM,CAC7B,QAAO;AAGT,QAAO,UAAU,QAAQ,MAAwB,GAAG"}
1
+ {"version":3,"file":"utils.mjs","names":["React"],"sources":["../src/lib/utils/index.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport const cn = (...inputs: ClassValue[]) => {\n return twMerge(clsx(inputs));\n};\n\nexport const renderConditional = <T extends React.ReactNode>(\n value: T,\n wrapper?: (value: NonNullable<T>) => React.ReactNode,\n): React.ReactNode => {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (React.isValidElement(value)) {\n return value;\n }\n\n return wrapper ? wrapper(value as NonNullable<T>) : value;\n};\n"],"mappings":";;;;;AAKA,MAAa,MAAM,GAAG,WAAyB;AAC7C,QAAO,QAAQ,KAAK,OAAO,CAAC;;AAG9B,MAAa,qBACX,OACA,YACoB;AACpB,KAAI,UAAU,QAAQ,UAAU,OAC9B,QAAO;AAGT,KAAIA,QAAM,eAAe,MAAM,CAC7B,QAAO;AAGT,QAAO,UAAU,QAAQ,MAAwB,GAAG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbpark/ui-kit",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Modern React UI component library built with TypeScript, Tailwind CSS, and Radix UI. Featuring atoms, molecules, organisms and layout templates for building beautiful interfaces.",
5
5
  "keywords": [
6
6
  "react",