@jbpark/ui-kit 3.7.0 → 4.0.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 (136) hide show
  1. package/dist/Card.d.mts +1 -1
  2. package/dist/Card.d.mts.map +1 -1
  3. package/dist/Card.mjs.map +1 -1
  4. package/dist/Space.d.mts +1 -1
  5. package/dist/Space.d.mts.map +1 -1
  6. package/dist/Space.mjs.map +1 -1
  7. package/dist/components/atoms/checkbox/group.d.mts.map +1 -1
  8. package/dist/components/atoms/checkbox/group.mjs +4 -3
  9. package/dist/components/atoms/checkbox/group.mjs.map +1 -1
  10. package/dist/components/atoms/color-picker.d.mts +7 -1
  11. package/dist/components/atoms/color-picker.d.mts.map +1 -1
  12. package/dist/components/atoms/color-picker.mjs +8 -1
  13. package/dist/components/atoms/color-picker.mjs.map +1 -1
  14. package/dist/components/atoms/float-button/back-top.d.mts.map +1 -1
  15. package/dist/components/atoms/float-button/back-top.mjs +3 -1
  16. package/dist/components/atoms/float-button/back-top.mjs.map +1 -1
  17. package/dist/components/atoms/input/search.d.mts.map +1 -1
  18. package/dist/components/atoms/input/search.mjs +3 -1
  19. package/dist/components/atoms/input/search.mjs.map +1 -1
  20. package/dist/components/atoms/option-group.mjs +11 -1
  21. package/dist/components/atoms/option-group.mjs.map +1 -1
  22. package/dist/components/atoms/radio/group.d.mts.map +1 -1
  23. package/dist/components/atoms/radio/group.mjs +3 -2
  24. package/dist/components/atoms/radio/group.mjs.map +1 -1
  25. package/dist/components/atoms/skeleton/skeleton.d.mts.map +1 -1
  26. package/dist/components/atoms/skeleton/skeleton.mjs +5 -1
  27. package/dist/components/atoms/skeleton/skeleton.mjs.map +1 -1
  28. package/dist/components/atoms/spin.d.mts +2 -1
  29. package/dist/components/atoms/spin.d.mts.map +1 -1
  30. package/dist/components/atoms/spin.mjs +10 -4
  31. package/dist/components/atoms/spin.mjs.map +1 -1
  32. package/dist/components/molecules/collapse.d.mts +1 -1
  33. package/dist/components/molecules/collapse.d.mts.map +1 -1
  34. package/dist/components/molecules/collapse.mjs.map +1 -1
  35. package/dist/components/molecules/dropdown.d.mts +2 -2
  36. package/dist/components/molecules/dropdown.d.mts.map +1 -1
  37. package/dist/components/molecules/dropdown.mjs +25 -12
  38. package/dist/components/molecules/dropdown.mjs.map +1 -1
  39. package/dist/components/molecules/index.d.mts +9 -6
  40. package/dist/components/molecules/menu/item/item.mjs +27 -11
  41. package/dist/components/molecules/menu/item/item.mjs.map +1 -1
  42. package/dist/components/molecules/menu/menu.d.mts.map +1 -1
  43. package/dist/components/molecules/menu/menu.mjs +9 -7
  44. package/dist/components/molecules/menu/menu.mjs.map +1 -1
  45. package/dist/components/molecules/splitter/splitter.mjs +2 -2
  46. package/dist/components/molecules/splitter/splitter.mjs.map +1 -1
  47. package/dist/components/molecules/upload.d.mts +1 -1
  48. package/dist/components/organisms/drawer.d.mts.map +1 -1
  49. package/dist/components/organisms/drawer.mjs +3 -1
  50. package/dist/components/organisms/drawer.mjs.map +1 -1
  51. package/dist/components/organisms/imperative-stack.mjs +106 -0
  52. package/dist/components/organisms/imperative-stack.mjs.map +1 -0
  53. package/dist/components/organisms/index.d.mts +3 -1
  54. package/dist/components/organisms/list/index.d.mts +1 -1
  55. package/dist/components/organisms/list/index.mjs.map +1 -1
  56. package/dist/components/organisms/list/list.d.mts +2 -2
  57. package/dist/components/organisms/list/list.d.mts.map +1 -1
  58. package/dist/components/organisms/list/list.mjs +20 -11
  59. package/dist/components/organisms/list/list.mjs.map +1 -1
  60. package/dist/components/organisms/modal.d.mts +2 -2
  61. package/dist/components/organisms/modal.d.mts.map +1 -1
  62. package/dist/components/organisms/modal.mjs +21 -101
  63. package/dist/components/organisms/modal.mjs.map +1 -1
  64. package/dist/components/organisms/swiper/index.d.mts +1 -1
  65. package/dist/components/organisms/swiper/index.mjs.map +1 -1
  66. package/dist/components/organisms/swiper/swiper.d.mts +2 -1
  67. package/dist/components/organisms/swiper/swiper.d.mts.map +1 -1
  68. package/dist/components/organisms/swiper/swiper.mjs +5 -3
  69. package/dist/components/organisms/swiper/swiper.mjs.map +1 -1
  70. package/dist/components/organisms/toast.d.mts +1 -1
  71. package/dist/components/organisms/toast.d.mts.map +1 -1
  72. package/dist/components/organisms/toast.mjs +35 -111
  73. package/dist/components/organisms/toast.mjs.map +1 -1
  74. package/dist/components/templates/container.d.mts +19 -0
  75. package/dist/components/templates/container.d.mts.map +1 -0
  76. package/dist/components/templates/container.mjs +32 -0
  77. package/dist/components/templates/container.mjs.map +1 -0
  78. package/dist/components/templates/empty.d.mts +20 -0
  79. package/dist/components/templates/empty.d.mts.map +1 -0
  80. package/dist/components/templates/empty.mjs +34 -0
  81. package/dist/components/templates/empty.mjs.map +1 -0
  82. package/dist/components/templates/grid/col.d.mts +35 -0
  83. package/dist/components/templates/grid/col.d.mts.map +1 -0
  84. package/dist/components/templates/grid/col.mjs +55 -0
  85. package/dist/components/templates/grid/col.mjs.map +1 -0
  86. package/dist/components/templates/grid/index.d.mts +2 -0
  87. package/dist/components/templates/grid/row-context.mjs +13 -0
  88. package/dist/components/templates/grid/row-context.mjs.map +1 -0
  89. package/dist/components/templates/grid/row.d.mts +36 -0
  90. package/dist/components/templates/grid/row.d.mts.map +1 -0
  91. package/dist/components/templates/grid/row.mjs +54 -0
  92. package/dist/components/templates/grid/row.mjs.map +1 -0
  93. package/dist/components/templates/index.d.mts +13 -1
  94. package/dist/components/templates/layout/content.d.mts +4 -1
  95. package/dist/components/templates/layout/content.d.mts.map +1 -1
  96. package/dist/components/templates/layout/content.mjs +3 -2
  97. package/dist/components/templates/layout/content.mjs.map +1 -1
  98. package/dist/components/templates/layout/footer.d.mts +1 -1
  99. package/dist/components/templates/layout/footer.d.mts.map +1 -1
  100. package/dist/components/templates/layout/footer.mjs.map +1 -1
  101. package/dist/components/templates/layout/header.d.mts +4 -1
  102. package/dist/components/templates/layout/header.d.mts.map +1 -1
  103. package/dist/components/templates/layout/header.mjs +2 -2
  104. package/dist/components/templates/layout/header.mjs.map +1 -1
  105. package/dist/components/templates/layout/layout.d.mts +1 -1
  106. package/dist/components/templates/layout/layout.d.mts.map +1 -1
  107. package/dist/components/templates/layout/layout.mjs.map +1 -1
  108. package/dist/components/templates/layout/sider.d.mts +9 -2
  109. package/dist/components/templates/layout/sider.d.mts.map +1 -1
  110. package/dist/components/templates/layout/sider.mjs +40 -13
  111. package/dist/components/templates/layout/sider.mjs.map +1 -1
  112. package/dist/components/templates/page-header.d.mts +30 -0
  113. package/dist/components/templates/page-header.d.mts.map +1 -0
  114. package/dist/components/templates/page-header.mjs +45 -0
  115. package/dist/components/templates/page-header.mjs.map +1 -0
  116. package/dist/components/templates/result.d.mts +24 -0
  117. package/dist/components/templates/result.d.mts.map +1 -0
  118. package/dist/components/templates/result.mjs +46 -0
  119. package/dist/components/templates/result.mjs.map +1 -0
  120. package/dist/index.d.mts +29 -13
  121. package/dist/index.mjs +9 -3
  122. package/dist/providers/Config/context.d.mts +3 -2
  123. package/dist/providers/Config/context.d.mts.map +1 -1
  124. package/dist/providers/Config/context.mjs +13 -2
  125. package/dist/providers/Config/context.mjs.map +1 -1
  126. package/dist/providers/Config/index.d.mts +4 -2
  127. package/dist/providers/Config/index.d.mts.map +1 -1
  128. package/dist/providers/Config/index.mjs +14 -4
  129. package/dist/providers/Config/index.mjs.map +1 -1
  130. package/dist/providers/Config/types.d.mts +10 -1
  131. package/dist/providers/Config/types.d.mts.map +1 -1
  132. package/dist/providers.d.mts +4 -0
  133. package/dist/providers.mjs +4 -0
  134. package/dist/style.css +114 -3
  135. package/package.json +4 -3
  136. package/dist/providers/index.d.mts +0 -3
@@ -1,15 +1,17 @@
1
- import { ThemeConfig, ThemeToken } from "./types.mjs";
2
- import { useConfig } from "./context.mjs";
1
+ import { Locale, ThemeConfig, ThemeToken } from "./types.mjs";
2
+ import { DEFAULT_LOCALE, useConfig } from "./context.mjs";
3
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/providers/Config/index.d.ts
6
6
  interface Props {
7
7
  theme?: ThemeConfig;
8
+ locale?: Locale;
8
9
  className?: string;
9
10
  children: React.ReactNode;
10
11
  }
11
12
  declare const Config: ({
12
13
  theme,
14
+ locale,
13
15
  className,
14
16
  children
15
17
  }: Props) => react_jsx_runtime0.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/providers/Config/index.tsx"],"mappings":";;;;;UAmDU,KAAA;EACR,KAAA,GAAQ,WAAA;EACR,SAAA;EACA,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA;AAAA,cAGZ,MAAA;EAAU,KAAA;EAAA,SAAA;EAAA;AAAA,GAAqC,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/providers/Config/index.tsx"],"mappings":";;;;;UAmDU,KAAA;EACR,KAAA,GAAQ,WAAA;EACR,MAAA,GAAS,MAAA;EACT,SAAA;EACA,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA;AAAA,cAGZ,MAAA;EAAU,KAAA;EAAA,MAAA;EAAA,SAAA;EAAA;AAAA,GAAkD,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { cn } from "../../utils.mjs";
4
- import { Context, useConfig } from "./context.mjs";
4
+ import { Context, DEFAULT_LOCALE, useConfig } from "./context.mjs";
5
5
  import { useMemo } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
 
@@ -37,9 +37,12 @@ const buildCssVars = (token) => {
37
37
  }
38
38
  return vars;
39
39
  };
40
- const Config = ({ theme = {}, className, children }) => {
40
+ const Config = ({ theme = {}, locale = {}, className, children }) => {
41
41
  const parent = useConfig();
42
42
  const themeKey = JSON.stringify(theme);
43
+ const parentThemeKey = JSON.stringify(parent.theme);
44
+ const localeKey = JSON.stringify(locale);
45
+ const parentLocaleKey = JSON.stringify(parent.locale);
43
46
  const mergedTheme = useMemo(() => ({
44
47
  ...parent.theme,
45
48
  ...theme,
@@ -47,8 +50,15 @@ const Config = ({ theme = {}, className, children }) => {
47
50
  ...parent.theme.token,
48
51
  ...theme.token
49
52
  }
50
- }), [JSON.stringify(parent.theme), themeKey]);
51
- const contextValue = useMemo(() => ({ theme: mergedTheme }), [mergedTheme]);
53
+ }), [parentThemeKey, themeKey]);
54
+ const mergedLocale = useMemo(() => ({
55
+ ...parent.locale,
56
+ ...locale
57
+ }), [parentLocaleKey, localeKey]);
58
+ const contextValue = useMemo(() => ({
59
+ theme: mergedTheme,
60
+ locale: mergedLocale
61
+ }), [mergedTheme, mergedLocale]);
52
62
  const cssVars = useMemo(() => buildCssVars(mergedTheme.token), [mergedTheme.token]);
53
63
  const hasCssVars = Object.keys(cssVars).length > 0;
54
64
  const hasDarkMode = mergedTheme.dark !== void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/providers/Config/index.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { Context, useConfig } from './context';\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 Config = ({ theme = {}, className, children }: Props) => {\n const parent = useConfig();\n\n // `theme` is typically a fresh inline object literal at the call site\n // (and `parent.theme` inherits the same problem from its own Config\n // ancestor), so depending on them directly meant mergedTheme/contextValue\n // got a new identity on every render regardless of whether the actual\n // values changed — every useConfig() consumer in the tree re-rendered on\n // every render of whatever's above this Config, which for the common\n // app-root usage is everything. Depend on a serialized key instead so\n // the memo only invalidates when the content actually changes; these\n // are small, string/boolean-only objects, so JSON.stringify is cheap.\n const themeKey = JSON.stringify(theme);\n const parentThemeKey = JSON.stringify(parent.theme);\n\n const mergedTheme = useMemo<ThemeConfig>(\n () => ({\n ...parent.theme,\n ...theme,\n token: {\n ...parent.theme.token,\n ...theme.token,\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [parentThemeKey, themeKey],\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 <Context.Provider value={contextValue}>\n {needsWrapper ? (\n <div\n className={cn(mergedTheme.dark && 'dark', className)}\n style={{\n ...(hasCssVars ? cssVars : undefined),\n // Keeps this element out of the layout box tree — so it\n // doesn't intercept flex/grid child relationships or break\n // height chains like min-h-screen — while custom properties\n // and the `dark` class selector still cascade to children\n // normally (inheritance and box generation are separate\n // mechanisms in CSS). Note this means className shouldn't be\n // used here for anything that needs a real box (padding,\n // background, borders); Config's className is meant for\n // theming hooks (the `dark` class, arbitrary selector hooks),\n // not layout.\n display: 'contents',\n }}\n >\n {children}\n </div>\n ) : (\n children\n )}\n </Context.Provider>\n );\n};\n\nexport default Config;\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,UAAU,EAAE,QAAQ,EAAE,EAAE,WAAW,eAAsB;CAC7D,MAAM,SAAS,WAAW;CAW1B,MAAM,WAAW,KAAK,UAAU,MAAM;CAGtC,MAAM,cAAc,eACX;EACL,GAAG,OAAO;EACV,GAAG;EACH,OAAO;GACL,GAAG,OAAO,MAAM;GAChB,GAAG,MAAM;GACV;EACF,GAED,CAZqB,KAAK,UAAU,OAAO,MAAM,EAYhC,SAAS,CAC3B;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,QAAQ;EAAS,OAAO;YACtB,eACC,oBAAC;GACC,WAAW,GAAG,YAAY,QAAQ,QAAQ,UAAU;GACpD,OAAO;IACL,GAAI,aAAa,UAAU;IAW3B,SAAS;IACV;GAEA;IACG,GAEN;GAEe"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/providers/Config/index.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { Context, DEFAULT_LOCALE, useConfig } from './context';\nimport type { Locale, 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 locale?: Locale;\n className?: string;\n children: React.ReactNode;\n}\n\nconst Config = ({ theme = {}, locale = {}, className, children }: Props) => {\n const parent = useConfig();\n\n // `theme` is typically a fresh inline object literal at the call site\n // (and `parent.theme` inherits the same problem from its own Config\n // ancestor), so depending on them directly meant mergedTheme/contextValue\n // got a new identity on every render regardless of whether the actual\n // values changed — every useConfig() consumer in the tree re-rendered on\n // every render of whatever's above this Config, which for the common\n // app-root usage is everything. Depend on a serialized key instead so\n // the memo only invalidates when the content actually changes; these\n // are small, string/boolean-only objects, so JSON.stringify is cheap.\n const themeKey = JSON.stringify(theme);\n const parentThemeKey = JSON.stringify(parent.theme);\n const localeKey = JSON.stringify(locale);\n const parentLocaleKey = JSON.stringify(parent.locale);\n\n const mergedTheme = useMemo<ThemeConfig>(\n () => ({\n ...parent.theme,\n ...theme,\n token: {\n ...parent.theme.token,\n ...theme.token,\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [parentThemeKey, themeKey],\n );\n\n const mergedLocale = useMemo<Locale>(\n () => ({\n ...parent.locale,\n ...locale,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [parentLocaleKey, localeKey],\n );\n\n const contextValue = useMemo(\n () => ({ theme: mergedTheme, locale: mergedLocale }),\n [mergedTheme, mergedLocale],\n );\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 <Context.Provider value={contextValue}>\n {needsWrapper ? (\n <div\n className={cn(mergedTheme.dark && 'dark', className)}\n style={{\n ...(hasCssVars ? cssVars : undefined),\n // Keeps this element out of the layout box tree — so it\n // doesn't intercept flex/grid child relationships or break\n // height chains like min-h-screen — while custom properties\n // and the `dark` class selector still cascade to children\n // normally (inheritance and box generation are separate\n // mechanisms in CSS). Note this means className shouldn't be\n // used here for anything that needs a real box (padding,\n // background, borders); Config's className is meant for\n // theming hooks (the `dark` class, arbitrary selector hooks),\n // not layout.\n display: 'contents',\n }}\n >\n {children}\n </div>\n ) : (\n children\n )}\n </Context.Provider>\n );\n};\n\nexport default Config;\nexport { useConfig, DEFAULT_LOCALE };\nexport type { Props, Locale, 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;;AAUT,MAAM,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,eAAsB;CAC1E,MAAM,SAAS,WAAW;CAW1B,MAAM,WAAW,KAAK,UAAU,MAAM;CACtC,MAAM,iBAAiB,KAAK,UAAU,OAAO,MAAM;CACnD,MAAM,YAAY,KAAK,UAAU,OAAO;CACxC,MAAM,kBAAkB,KAAK,UAAU,OAAO,OAAO;CAErD,MAAM,cAAc,eACX;EACL,GAAG,OAAO;EACV,GAAG;EACH,OAAO;GACL,GAAG,OAAO,MAAM;GAChB,GAAG,MAAM;GACV;EACF,GAED,CAAC,gBAAgB,SAAS,CAC3B;CAED,MAAM,eAAe,eACZ;EACL,GAAG,OAAO;EACV,GAAG;EACJ,GAED,CAAC,iBAAiB,UAAU,CAC7B;CAED,MAAM,eAAe,eACZ;EAAE,OAAO;EAAa,QAAQ;EAAc,GACnD,CAAC,aAAa,aAAa,CAC5B;CAED,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,QAAQ;EAAS,OAAO;YACtB,eACC,oBAAC;GACC,WAAW,GAAG,YAAY,QAAQ,QAAQ,UAAU;GACpD,OAAO;IACL,GAAI,aAAa,UAAU;IAW3B,SAAS;IACV;GAEA;IACG,GAEN;GAEe"}
@@ -24,9 +24,18 @@ interface ThemeConfig {
24
24
  token?: ThemeToken;
25
25
  dark?: boolean;
26
26
  }
27
+ interface Locale {
28
+ close?: string;
29
+ clear?: string;
30
+ backToTop?: string;
31
+ loading?: string;
32
+ expand?: string;
33
+ collapse?: string;
34
+ }
27
35
  interface ContextValue {
28
36
  theme: ThemeConfig;
37
+ locale: Locale;
29
38
  }
30
39
  //#endregion
31
- export { ContextValue, ThemeConfig, ThemeToken };
40
+ export { ContextValue, Locale, ThemeConfig, ThemeToken };
32
41
  //# sourceMappingURL=types.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/providers/Config/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,YAAA;EACf,KAAA,EAAO,WAAA;AAAA"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/providers/Config/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,UAQe,MAAA;EACf,KAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA;EACA,MAAA;EACA,QAAA;AAAA;AAAA,UAGe,YAAA;EACf,KAAA,EAAO,WAAA;EACP,MAAA,EAAQ,MAAA;AAAA"}
@@ -0,0 +1,4 @@
1
+ import { Locale, ThemeConfig, ThemeToken } from "./providers/Config/types.mjs";
2
+ import { DEFAULT_LOCALE, useConfig } from "./providers/Config/context.mjs";
3
+ import { Config, Props } from "./providers/Config/index.mjs";
4
+ export { Config, type Props as ConfigProps, DEFAULT_LOCALE, type Locale, type ThemeConfig, type ThemeToken, useConfig };
@@ -0,0 +1,4 @@
1
+ import { DEFAULT_LOCALE, useConfig } from "./providers/Config/context.mjs";
2
+ import Config from "./providers/Config/index.mjs";
3
+
4
+ export { Config, DEFAULT_LOCALE, useConfig };
package/dist/style.css CHANGED
@@ -14,8 +14,19 @@
14
14
  --color-black: #000;
15
15
  --color-white: #fff;
16
16
  --spacing: 0.25rem;
17
+ --container-3xs: 16rem;
18
+ --container-2xs: 18rem;
19
+ --container-xs: 20rem;
17
20
  --container-sm: 24rem;
21
+ --container-md: 28rem;
18
22
  --container-lg: 32rem;
23
+ --container-xl: 36rem;
24
+ --container-2xl: 42rem;
25
+ --container-3xl: 48rem;
26
+ --container-4xl: 56rem;
27
+ --container-5xl: 64rem;
28
+ --container-6xl: 72rem;
29
+ --container-7xl: 80rem;
19
30
  --text-xs: 0.75rem;
20
31
  --text-xs--line-height: calc(1 / 0.75);
21
32
  --text-sm: 0.875rem;
@@ -210,6 +221,9 @@
210
221
  .pointer-events-none {
211
222
  pointer-events: none;
212
223
  }
224
+ .collapse {
225
+ visibility: collapse;
226
+ }
213
227
  .invisible {
214
228
  visibility: hidden;
215
229
  }
@@ -302,9 +316,6 @@
302
316
  .left-full {
303
317
  left: 100%;
304
318
  }
305
- .z-0 {
306
- z-index: 0;
307
- }
308
319
  .z-10 {
309
320
  z-index: 10;
310
321
  }
@@ -314,6 +325,9 @@
314
325
  .z-10000 {
315
326
  z-index: 10000;
316
327
  }
328
+ .order-last {
329
+ order: 9999;
330
+ }
317
331
  .col-span-2 {
318
332
  grid-column: span 2 / span 2;
319
333
  }
@@ -359,6 +373,9 @@
359
373
  .mt-0\.5 {
360
374
  margin-top: calc(var(--spacing) * 0.5);
361
375
  }
376
+ .mt-1 {
377
+ margin-top: calc(var(--spacing) * 1);
378
+ }
362
379
  .mt-2 {
363
380
  margin-top: calc(var(--spacing) * 2);
364
381
  }
@@ -386,6 +403,9 @@
386
403
  .mr-7 {
387
404
  margin-right: calc(var(--spacing) * 7);
388
405
  }
406
+ .mb-2 {
407
+ margin-bottom: calc(var(--spacing) * 2);
408
+ }
389
409
  .mb-3 {
390
410
  margin-bottom: calc(var(--spacing) * 3);
391
411
  }
@@ -407,6 +427,9 @@
407
427
  .ml-7 {
408
428
  margin-left: calc(var(--spacing) * 7);
409
429
  }
430
+ .box-border {
431
+ box-sizing: border-box;
432
+ }
410
433
  .box-content {
411
434
  box-sizing: content-box;
412
435
  }
@@ -613,12 +636,57 @@
613
636
  .w-px {
614
637
  width: 1px;
615
638
  }
639
+ .max-w-2xl {
640
+ max-width: var(--container-2xl);
641
+ }
642
+ .max-w-2xs {
643
+ max-width: var(--container-2xs);
644
+ }
645
+ .max-w-3xl {
646
+ max-width: var(--container-3xl);
647
+ }
648
+ .max-w-3xs {
649
+ max-width: var(--container-3xs);
650
+ }
651
+ .max-w-4xl {
652
+ max-width: var(--container-4xl);
653
+ }
654
+ .max-w-5xl {
655
+ max-width: var(--container-5xl);
656
+ }
657
+ .max-w-6xl {
658
+ max-width: var(--container-6xl);
659
+ }
660
+ .max-w-7xl {
661
+ max-width: var(--container-7xl);
662
+ }
616
663
  .max-w-48 {
617
664
  max-width: calc(var(--spacing) * 48);
618
665
  }
619
666
  .max-w-\[calc\(100\%-2rem\)\] {
620
667
  max-width: calc(100% - 2rem);
621
668
  }
669
+ .max-w-full {
670
+ max-width: 100%;
671
+ }
672
+ .max-w-lg {
673
+ max-width: var(--container-lg);
674
+ }
675
+ .max-w-md {
676
+ max-width: var(--container-md);
677
+ }
678
+ .max-w-none {
679
+ max-width: none;
680
+ }
681
+ .max-w-sm {
682
+ max-width: var(--container-sm);
683
+ }
684
+ .max-w-xl {
685
+ max-width: var(--container-xl);
686
+ }
687
+ .max-w-xs {
688
+ max-width: var(--container-xs);
689
+ }
622
690
  .min-w-\(--cell-size\) {
623
691
  min-width: var(--cell-size);
624
692
  }
@@ -655,6 +723,9 @@
655
723
  .grow {
656
724
  flex-grow: 1;
657
725
  }
726
+ .grow-0 {
727
+ flex-grow: 0;
728
+ }
658
729
  .basis-auto {
659
730
  flex-basis: auto;
660
731
  }
@@ -732,6 +803,9 @@
732
803
  .cursor-pointer {
733
804
  cursor: pointer;
734
805
  }
806
+ .resize {
807
+ resize: both;
808
+ }
735
809
  .scroll-my-1 {
736
810
  scroll-margin-block: calc(var(--spacing) * 1);
737
811
  }
@@ -774,6 +848,12 @@
774
848
  .items-start {
775
849
  align-items: flex-start;
776
850
  }
851
+ .items-stretch {
852
+ align-items: stretch;
853
+ }
854
+ .justify-around {
855
+ justify-content: space-around;
856
+ }
777
857
  .justify-between {
778
858
  justify-content: space-between;
779
859
  }
@@ -783,6 +863,9 @@
783
863
  .justify-end {
784
864
  justify-content: flex-end;
785
865
  }
866
+ .justify-evenly {
867
+ justify-content: space-evenly;
868
+ }
786
869
  .justify-start {
787
870
  justify-content: flex-start;
788
871
  }
@@ -1159,6 +1242,12 @@
1159
1242
  .py-4 {
1160
1243
  padding-block: calc(var(--spacing) * 4);
1161
1244
  }
1245
+ .py-12 {
1246
+ padding-block: calc(var(--spacing) * 12);
1247
+ }
1248
+ .py-16 {
1249
+ padding-block: calc(var(--spacing) * 16);
1250
+ }
1162
1251
  .pt-0 {
1163
1252
  padding-top: calc(var(--spacing) * 0);
1164
1253
  }
@@ -2797,6 +2886,11 @@
2797
2886
  justify-content: flex-end;
2798
2887
  }
2799
2888
  }
2889
+ .sm\:px-6 {
2890
+ @media (width >= 40rem) {
2891
+ padding-inline: calc(var(--spacing) * 6);
2892
+ }
2893
+ }
2800
2894
  .sm\:text-left {
2801
2895
  @media (width >= 40rem) {
2802
2896
  text-align: left;
@@ -2873,6 +2967,11 @@
2873
2967
  line-height: var(--tw-leading, var(--text-sm--line-height));
2874
2968
  }
2875
2969
  }
2970
+ .lg\:px-8 {
2971
+ @media (width >= 64rem) {
2972
+ padding-inline: calc(var(--spacing) * 8);
2973
+ }
2974
+ }
2876
2975
  .lg\:text-2xl {
2877
2976
  @media (width >= 64rem) {
2878
2977
  font-size: var(--text-2xl);
@@ -3053,6 +3152,18 @@
3053
3152
  height: calc(var(--spacing) * 5);
3054
3153
  }
3055
3154
  }
3155
+ .\[\&_svg\]\:size-12 {
3156
+ & svg {
3157
+ width: calc(var(--spacing) * 12);
3158
+ height: calc(var(--spacing) * 12);
3159
+ }
3160
+ }
3161
+ .\[\&_svg\]\:size-16 {
3162
+ & svg {
3163
+ width: calc(var(--spacing) * 16);
3164
+ height: calc(var(--spacing) * 16);
3165
+ }
3166
+ }
3056
3167
  .\[\&_svg\]\:shrink-0 {
3057
3168
  & svg {
3058
3169
  flex-shrink: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbpark/ui-kit",
3
- "version": "3.7.0",
3
+ "version": "4.0.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",
@@ -107,6 +107,7 @@
107
107
  "scripts": {
108
108
  "build": "tsdown",
109
109
  "lint": "eslint .",
110
+ "check-dynamic-classes": "node scripts/check-dynamic-tailwind-classes.mjs",
110
111
  "generate:component": "turbo gen react-component",
111
112
  "check-types": "tsc -b",
112
113
  "prepublishOnly": "node scripts/prepare-publish.mjs",
@@ -153,7 +154,7 @@
153
154
  "vaul": "^1.1.2"
154
155
  },
155
156
  "peerDependencies": {
156
- "react": "^18.0.0 || ^19.0.0",
157
- "react-dom": "^18.0.0 || ^19.0.0"
157
+ "react": "^19.0.0",
158
+ "react-dom": "^19.0.0"
158
159
  }
159
160
  }
@@ -1,3 +0,0 @@
1
- import { ThemeConfig, ThemeToken } from "./Config/types.mjs";
2
- import { useConfig } from "./Config/context.mjs";
3
- import { Config, Props } from "./Config/index.mjs";