@j-solution/components 1.8.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +415 -416
- package/assets/jwms-portal-frontend-Di6lStzZ.css +1 -0
- package/assets/styles/j-components.css +1 -1
- package/assets/styles/main.css +29 -29
- package/assets/styles/themes.css +422 -422
- package/components/atoms/JAvatar.vue.cjs.map +1 -1
- package/components/atoms/JAvatar.vue.js.map +1 -1
- package/components/atoms/JBadge.vue.cjs.map +1 -1
- package/components/atoms/JBadge.vue.js.map +1 -1
- package/components/atoms/JButton.vue.cjs +1 -1
- package/components/atoms/JButton.vue.js +1 -1
- package/components/atoms/JButton.vue2.cjs.map +1 -1
- package/components/atoms/JButton.vue2.js.map +1 -1
- package/components/atoms/JCombo.vue.cjs.map +1 -1
- package/components/atoms/JCombo.vue.js.map +1 -1
- package/components/atoms/JDatepicker.vue.cjs.map +1 -1
- package/components/atoms/JDatepicker.vue.js.map +1 -1
- package/components/atoms/JDivider.vue.cjs.map +1 -1
- package/components/atoms/JDivider.vue.js.map +1 -1
- package/components/atoms/JEditor.vue.cjs +1 -1
- package/components/atoms/JEditor.vue.js +2 -2
- package/components/atoms/JEditor.vue2.cjs.map +1 -1
- package/components/atoms/JEditor.vue2.js.map +1 -1
- package/components/atoms/JGrid.vue.cjs +1 -1
- package/components/atoms/JGrid.vue.js +2 -2
- package/components/atoms/JGrid.vue2.cjs +1 -1
- package/components/atoms/JGrid.vue2.cjs.map +1 -1
- package/components/atoms/JGrid.vue2.js +72 -85
- package/components/atoms/JGrid.vue2.js.map +1 -1
- package/components/atoms/JIcon.vue.cjs.map +1 -1
- package/components/atoms/JIcon.vue.js.map +1 -1
- package/components/atoms/JImage.vue.cjs.map +1 -1
- package/components/atoms/JImage.vue.js.map +1 -1
- package/components/atoms/JKbd.vue.cjs.map +1 -1
- package/components/atoms/JKbd.vue.js.map +1 -1
- package/components/atoms/JLabel.vue.cjs.map +1 -1
- package/components/atoms/JLabel.vue.js.map +1 -1
- package/components/atoms/JPreview.vue.cjs +1 -1
- package/components/atoms/JPreview.vue.js +7 -7
- package/components/atoms/JPreview.vue2.cjs.map +1 -1
- package/components/atoms/JPreview.vue2.js.map +1 -1
- package/components/atoms/JProgress.vue.cjs.map +1 -1
- package/components/atoms/JProgress.vue.js.map +1 -1
- package/components/atoms/JRadio.vue.cjs.map +1 -1
- package/components/atoms/JRadio.vue.js.map +1 -1
- package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
- package/components/atoms/JSearchCombo.vue.js.map +1 -1
- package/components/atoms/JSectionTitle.vue2.cjs +1 -1
- package/components/atoms/JSectionTitle.vue2.cjs.map +1 -1
- package/components/atoms/JSectionTitle.vue2.js +5 -8
- package/components/atoms/JSectionTitle.vue2.js.map +1 -1
- package/components/atoms/JSpinner.vue.cjs.map +1 -1
- package/components/atoms/JSpinner.vue.js.map +1 -1
- package/components/atoms/JToast.vue.cjs.map +1 -1
- package/components/atoms/JToast.vue.js.map +1 -1
- package/components/atoms/JTooltip.vue.cjs.map +1 -1
- package/components/atoms/JTooltip.vue.js.map +1 -1
- package/components/molecules/JAlert.vue.cjs +1 -1
- package/components/molecules/JAlert.vue.cjs.map +1 -1
- package/components/molecules/JAlert.vue.js +2 -5
- package/components/molecules/JAlert.vue.js.map +1 -1
- package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
- package/components/molecules/JBreadcrumb.vue.js.map +1 -1
- package/components/molecules/JEmptyState.vue2.cjs +1 -1
- package/components/molecules/JEmptyState.vue2.cjs.map +1 -1
- package/components/molecules/JEmptyState.vue2.js +15 -18
- package/components/molecules/JEmptyState.vue2.js.map +1 -1
- package/components/molecules/JFormField.vue2.cjs +1 -1
- package/components/molecules/JFormField.vue2.cjs.map +1 -1
- package/components/molecules/JFormField.vue2.js +2 -5
- package/components/molecules/JFormField.vue2.js.map +1 -1
- package/components/molecules/JTabs.vue.cjs +1 -1
- package/components/molecules/JTabs.vue.js +1 -1
- package/components/molecules/JTabs.vue2.cjs.map +1 -1
- package/components/molecules/JTabs.vue2.js.map +1 -1
- package/components/molecules/JTitlebar.vue.cjs +1 -1
- package/components/molecules/JTitlebar.vue.cjs.map +1 -1
- package/components/molecules/JTitlebar.vue.js +16 -19
- package/components/molecules/JTitlebar.vue.js.map +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
- package/components/organisms/JDynamicForm.vue2.js +2 -5
- package/components/organisms/JDynamicForm.vue2.js.map +1 -1
- package/components/organisms/JDynamicTabs.vue.cjs.map +1 -1
- package/components/organisms/JDynamicTabs.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue.cjs +1 -1
- package/components/organisms/JFilterBar.vue.js +2 -2
- package/components/organisms/JFilterBar.vue2.cjs +1 -1
- package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue2.js +14 -12
- package/components/organisms/JFilterBar.vue2.js.map +1 -1
- package/components/organisms/JFormModal.vue.cjs +1 -1
- package/components/organisms/JFormModal.vue.cjs.map +1 -1
- package/components/organisms/JFormModal.vue.js +14 -17
- package/components/organisms/JFormModal.vue.js.map +1 -1
- package/components/organisms/JModal.vue.cjs +1 -1
- package/components/organisms/JModal.vue.cjs.map +1 -1
- package/components/organisms/JModal.vue.js +2 -5
- package/components/organisms/JModal.vue.js.map +1 -1
- package/components/organisms/JPageContainer.vue.cjs.map +1 -1
- package/components/organisms/JPageContainer.vue.js.map +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
- package/components/organisms/JSearchPanel.vue2.js +20 -23
- package/components/organisms/JSearchPanel.vue2.js.map +1 -1
- package/components/organisms/JSidebar/JSidebar.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebar.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue.js +189 -0
- package/components/organisms/JSidebar/JSidebar.vue.js.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue2.cjs +2 -0
- package/components/organisms/JSidebar/JSidebar.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebar.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebar.vue2.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.js +89 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebarGroup.vue2.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.js +79 -0
- package/components/organisms/JSidebar/JSidebarItem.vue.js.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.cjs +2 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.cjs.map +1 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.js +5 -0
- package/components/organisms/JSidebar/JSidebarItem.vue2.js.map +1 -0
- package/components/organisms/JSidebarAdvanced.vue.cjs +1 -1
- package/components/organisms/JSidebarAdvanced.vue.js +7 -7
- package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
- package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
- package/components/organisms/JSidebarSimple.vue.cjs +1 -1
- package/components/organisms/JSidebarSimple.vue.js +2 -2
- package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
- package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
- package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
- package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
- package/components/shadcn/Card.vue.cjs.map +1 -1
- package/components/shadcn/Card.vue.js.map +1 -1
- package/components/shadcn/CardContent.vue.cjs.map +1 -1
- package/components/shadcn/CardContent.vue.js.map +1 -1
- package/components/shadcn/CardDescription.vue.cjs.map +1 -1
- package/components/shadcn/CardDescription.vue.js.map +1 -1
- package/components/shadcn/CardFooter.vue.cjs.map +1 -1
- package/components/shadcn/CardFooter.vue.js.map +1 -1
- package/components/shadcn/CardHeader.vue.cjs.map +1 -1
- package/components/shadcn/CardHeader.vue.js.map +1 -1
- package/components/shadcn/CardTitle.vue.cjs.map +1 -1
- package/components/shadcn/CardTitle.vue.js.map +1 -1
- package/components/shadcn/Checkbox.vue.cjs.map +1 -1
- package/components/shadcn/Checkbox.vue.js.map +1 -1
- package/components/shadcn/Combobox.vue.cjs.map +1 -1
- package/components/shadcn/Combobox.vue.js.map +1 -1
- package/components/shadcn/ComboboxAnchor.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxAnchor.vue.js.map +1 -1
- package/components/shadcn/ComboboxEmpty.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxEmpty.vue.js.map +1 -1
- package/components/shadcn/ComboboxGroup.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxGroup.vue.js.map +1 -1
- package/components/shadcn/ComboboxInput.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxInput.vue.js.map +1 -1
- package/components/shadcn/ComboboxItem.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxItem.vue.js.map +1 -1
- package/components/shadcn/ComboboxList.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxList.vue.js.map +1 -1
- package/components/shadcn/ComboboxTrigger.vue.cjs.map +1 -1
- package/components/shadcn/ComboboxTrigger.vue.js.map +1 -1
- package/components/shadcn/ContextMenu.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenu.vue.js.map +1 -1
- package/components/shadcn/ContextMenuContent.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuContent.vue.js.map +1 -1
- package/components/shadcn/ContextMenuGroup.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuGroup.vue.js.map +1 -1
- package/components/shadcn/ContextMenuItem.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuItem.vue.js.map +1 -1
- package/components/shadcn/ContextMenuLabel.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuLabel.vue.js.map +1 -1
- package/components/shadcn/ContextMenuSeparator.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuSeparator.vue.js.map +1 -1
- package/components/shadcn/ContextMenuSub.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuSub.vue.js.map +1 -1
- package/components/shadcn/ContextMenuSubContent.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuSubContent.vue.js.map +1 -1
- package/components/shadcn/ContextMenuSubTrigger.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuSubTrigger.vue.js.map +1 -1
- package/components/shadcn/ContextMenuTrigger.vue.cjs.map +1 -1
- package/components/shadcn/ContextMenuTrigger.vue.js.map +1 -1
- package/components/shadcn/Field.vue.cjs.map +1 -1
- package/components/shadcn/Field.vue.js.map +1 -1
- package/components/shadcn/FieldContent.vue.cjs.map +1 -1
- package/components/shadcn/FieldContent.vue.js.map +1 -1
- package/components/shadcn/FieldDescription.vue.cjs.map +1 -1
- package/components/shadcn/FieldDescription.vue.js.map +1 -1
- package/components/shadcn/FieldError.vue.cjs.map +1 -1
- package/components/shadcn/FieldError.vue.js.map +1 -1
- package/components/shadcn/FieldGroup.vue.cjs.map +1 -1
- package/components/shadcn/FieldGroup.vue.js.map +1 -1
- package/components/shadcn/FieldLabel.vue.cjs.map +1 -1
- package/components/shadcn/FieldLabel.vue.js.map +1 -1
- package/components/shadcn/Input.vue.cjs.map +1 -1
- package/components/shadcn/Input.vue.js.map +1 -1
- package/components/shadcn/Label.vue.cjs.map +1 -1
- package/components/shadcn/Label.vue.js.map +1 -1
- package/components/shadcn/RadioGroup.vue.cjs.map +1 -1
- package/components/shadcn/RadioGroup.vue.js.map +1 -1
- package/components/shadcn/RadioGroupItem.vue.cjs.map +1 -1
- package/components/shadcn/RadioGroupItem.vue.js.map +1 -1
- package/components/shadcn/Select.vue.cjs.map +1 -1
- package/components/shadcn/Select.vue.js.map +1 -1
- package/components/shadcn/SelectContent.vue.cjs.map +1 -1
- package/components/shadcn/SelectContent.vue.js.map +1 -1
- package/components/shadcn/SelectGroup.vue.cjs.map +1 -1
- package/components/shadcn/SelectGroup.vue.js.map +1 -1
- package/components/shadcn/SelectItem.vue.cjs.map +1 -1
- package/components/shadcn/SelectItem.vue.js.map +1 -1
- package/components/shadcn/SelectLabel.vue.cjs.map +1 -1
- package/components/shadcn/SelectLabel.vue.js.map +1 -1
- package/components/shadcn/SelectScrollDownButton.vue2.cjs.map +1 -1
- package/components/shadcn/SelectScrollDownButton.vue2.js.map +1 -1
- package/components/shadcn/SelectScrollUpButton.vue2.cjs.map +1 -1
- package/components/shadcn/SelectScrollUpButton.vue2.js.map +1 -1
- package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
- package/components/shadcn/SelectTrigger.vue.js.map +1 -1
- package/components/shadcn/SelectValue.vue.cjs.map +1 -1
- package/components/shadcn/SelectValue.vue.js.map +1 -1
- package/components/shadcn/Separator.vue.cjs.map +1 -1
- package/components/shadcn/Separator.vue.js.map +1 -1
- package/components/shadcn/Switch.vue.cjs.map +1 -1
- package/components/shadcn/Switch.vue.js.map +1 -1
- package/components/shadcn/Tabs.vue.cjs.map +1 -1
- package/components/shadcn/Tabs.vue.js.map +1 -1
- package/components/shadcn/TabsContent.vue.cjs.map +1 -1
- package/components/shadcn/TabsContent.vue.js.map +1 -1
- package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
- package/components/shadcn/TabsTrigger.vue.js.map +1 -1
- package/components/shadcn/Textarea.vue.cjs.map +1 -1
- package/components/shadcn/Textarea.vue.js.map +1 -1
- package/components/shadcn/Toaster.vue.cjs.map +1 -1
- package/components/shadcn/Toaster.vue.js.map +1 -1
- package/components/shadcn/index.cjs.map +1 -1
- package/components/shadcn/index.js.map +1 -1
- package/components/shadcn/resizable/ResizableHandle.vue.cjs.map +1 -1
- package/components/shadcn/resizable/ResizableHandle.vue.js.map +1 -1
- package/components/shadcn/resizable/ResizablePanelGroup.vue.cjs.map +1 -1
- package/components/shadcn/resizable/ResizablePanelGroup.vue.js.map +1 -1
- package/components/templates/JLayout.vue.cjs.map +1 -1
- package/components/templates/JLayout.vue.js.map +1 -1
- package/components/templates/JLayoutSimple.vue.cjs +1 -1
- package/components/templates/JLayoutSimple.vue.cjs.map +1 -1
- package/components/templates/JLayoutSimple.vue.js +36 -30
- package/components/templates/JLayoutSimple.vue.js.map +1 -1
- package/index.cjs +1 -1
- package/index.js +22 -20
- package/lib/styleTypePreset.cjs.map +1 -1
- package/lib/styleTypePreset.js.map +1 -1
- package/lib/theme-utils.cjs.map +1 -1
- package/lib/theme-utils.js.map +1 -1
- package/package.json +1 -1
- package/tailwind.config.js +81 -81
- package/types/index.d.ts +119 -107
- package/types/sidebar.types.cjs +2 -0
- package/types/sidebar.types.cjs.map +1 -0
- package/types/sidebar.types.js +5 -0
- package/types/sidebar.types.js.map +1 -0
- package/assets/jwms-portal-frontend-BtHTA-UF.css +0 -1
|
@@ -1,51 +1,57 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
const
|
|
1
|
+
import { defineComponent as f, ref as g, createBlock as y, openBlock as v, normalizeProps as b, guardReactiveProps as S, withCtx as l, renderSlot as s, createVNode as r, createElementVNode as n } from "vue";
|
|
2
|
+
import k from "./JLayout.vue.js";
|
|
3
|
+
import _ from "../organisms/JHeader.vue.js";
|
|
4
|
+
import $ from "../organisms/JSidebar/JSidebar.vue.js";
|
|
5
|
+
import h from "../organisms/JPageContainer.vue.js";
|
|
6
|
+
const w = /* @__PURE__ */ f({
|
|
7
7
|
__name: "JLayoutSimple",
|
|
8
8
|
props: {
|
|
9
9
|
styletype: { default: "default" },
|
|
10
10
|
contentScroll: { type: Boolean, default: !0 },
|
|
11
11
|
class: {},
|
|
12
12
|
menuItems: { default: () => [] },
|
|
13
|
-
|
|
13
|
+
activePath: {},
|
|
14
|
+
storageKey: {}
|
|
14
15
|
},
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
emits: ["menu-click"],
|
|
17
|
+
setup(d, { emit: p }) {
|
|
18
|
+
const a = d, m = p, e = g(!1), i = () => {
|
|
17
19
|
e.value = !e.value;
|
|
20
|
+
}, u = (t, o) => {
|
|
21
|
+
m("menu-click", t, o);
|
|
18
22
|
};
|
|
19
|
-
return (
|
|
20
|
-
header:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
return (t, o) => (v(), y(k, b(S(a)), {
|
|
24
|
+
header: l(() => [
|
|
25
|
+
s(t.$slots, "header", {
|
|
26
|
+
isSidebarCollapsed: e.value,
|
|
23
27
|
onSidebarToggle: i
|
|
24
28
|
}, () => [
|
|
25
|
-
r(
|
|
29
|
+
r(_, {
|
|
26
30
|
"logo-text": "JWMS Portal",
|
|
27
|
-
styletype:
|
|
31
|
+
styletype: a.styletype,
|
|
28
32
|
"show-sidebar-toggle": !0,
|
|
29
|
-
"is-sidebar-open": e.value,
|
|
33
|
+
"is-sidebar-open": !e.value,
|
|
30
34
|
onSidebarToggle: i
|
|
31
35
|
}, null, 8, ["styletype", "is-sidebar-open"])
|
|
32
36
|
])
|
|
33
37
|
]),
|
|
34
|
-
sidebar:
|
|
35
|
-
|
|
36
|
-
r(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
|
|
38
|
+
sidebar: l(() => [
|
|
39
|
+
s(t.$slots, "sidebar", { isSidebarCollapsed: e.value }, () => [
|
|
40
|
+
r($, {
|
|
41
|
+
collapsed: e.value,
|
|
42
|
+
"onUpdate:collapsed": o[0] || (o[0] = (c) => e.value = c),
|
|
43
|
+
items: a.menuItems,
|
|
44
|
+
"active-path": a.activePath,
|
|
45
|
+
"storage-key": a.storageKey,
|
|
46
|
+
onMenuClick: u
|
|
47
|
+
}, null, 8, ["collapsed", "items", "active-path", "storage-key"])
|
|
42
48
|
])
|
|
43
49
|
]),
|
|
44
|
-
content:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
r(
|
|
48
|
-
default:
|
|
50
|
+
content: l(() => [
|
|
51
|
+
s(t.$slots, "content", {}, () => [
|
|
52
|
+
s(t.$slots, "default", {}, () => [
|
|
53
|
+
r(h, { title: "페이지 제목" }, {
|
|
54
|
+
default: l(() => [...o[1] || (o[1] = [
|
|
49
55
|
n("div", { class: "p-6" }, [
|
|
50
56
|
n("p", { class: "text-muted-foreground" }, "콘텐츠를 배치해주세요.")
|
|
51
57
|
], -1)
|
|
@@ -60,6 +66,6 @@ const O = /* @__PURE__ */ m({
|
|
|
60
66
|
}
|
|
61
67
|
});
|
|
62
68
|
export {
|
|
63
|
-
|
|
69
|
+
w as default
|
|
64
70
|
};
|
|
65
71
|
//# sourceMappingURL=JLayoutSimple.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JLayoutSimple.vue.js","sources":["../../../../src/components/templates/JLayoutSimple.vue"],"sourcesContent":["<script setup lang=\"ts\">\
|
|
1
|
+
{"version":3,"file":"JLayoutSimple.vue.js","sources":["../../../../src/components/templates/JLayoutSimple.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport JLayout from './JLayout.vue'\nimport JHeader from '@/components/organisms/JHeader.vue'\nimport JSidebar from '@/components/organisms/JSidebar/JSidebar.vue'\nimport JPageContainer from '@/components/organisms/JPageContainer.vue'\nimport type { SidebarMenuItem } from '@/types/sidebar.types'\n\n/**\n * JLayoutSimple - JSidebar + 일반 PageContainer 조합 템플릿\n *\n * @example\n * ```vue\n * <JLayoutSimple :menu-items=\"menuItems\" storage-key=\"my-app-favorites\">\n * <template #content>\n * <RouterView />\n * </template>\n * </JLayoutSimple>\n * ```\n */\n\nconst props = withDefaults(\n defineProps<{\n /** 레이아웃 스타일 타입 */\n styletype?: 'default' | 'minimal'\n /** 콘텐츠 영역 스크롤 가능 여부 */\n contentScroll?: boolean\n /** 추가 CSS 클래스 */\n class?: string\n /** 메뉴 아이템 목록 */\n menuItems?: SidebarMenuItem[]\n /** 현재 활성 경로 */\n activePath?: string\n /** 즐겨찾기 localStorage 키 */\n storageKey?: string\n }>(),\n {\n styletype: 'default',\n contentScroll: true,\n menuItems: () => [],\n }\n)\n\nconst emit = defineEmits<{\n 'menu-click': [item: SidebarMenuItem, event: MouseEvent]\n}>()\n\nconst isSidebarCollapsed = ref(false)\n\nconst handleSidebarToggle = () => {\n isSidebarCollapsed.value = !isSidebarCollapsed.value\n}\n\nconst handleMenuClick = (item: SidebarMenuItem, event: MouseEvent) => {\n emit('menu-click', item, event)\n}\n</script>\n\n<template>\n <JLayout v-bind=\"props\">\n <template #header>\n <slot name=\"header\" :is-sidebar-collapsed=\"isSidebarCollapsed\" :on-sidebar-toggle=\"handleSidebarToggle\">\n <JHeader\n logo-text=\"JWMS Portal\"\n :styletype=\"props.styletype\"\n :show-sidebar-toggle=\"true\"\n :is-sidebar-open=\"!isSidebarCollapsed\"\n @sidebar-toggle=\"handleSidebarToggle\"\n />\n </slot>\n </template>\n <template #sidebar>\n <slot name=\"sidebar\" :is-sidebar-collapsed=\"isSidebarCollapsed\">\n <JSidebar\n v-model:collapsed=\"isSidebarCollapsed\"\n :items=\"props.menuItems\"\n :active-path=\"props.activePath\"\n :storage-key=\"props.storageKey\"\n @menu-click=\"handleMenuClick\"\n />\n </slot>\n </template>\n <template #content>\n <slot name=\"content\">\n <slot>\n <!-- 기본 콘텐츠 예시 -->\n <JPageContainer title=\"페이지 제목\">\n <div class=\"p-6\">\n <p class=\"text-muted-foreground\">콘텐츠를 배치해주세요.</p>\n </div>\n </JPageContainer>\n </slot>\n </slot>\n </template>\n </JLayout>\n</template>\n"],"names":["props","__props","emit","__emit","isSidebarCollapsed","ref","handleSidebarToggle","handleMenuClick","item","event","_openBlock","_createBlock","JLayout","_renderSlot","_ctx","_createVNode","JHeader","JSidebar","$event","JPageContainer","_cache","_createElementVNode"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,UAAMA,IAAQC,GAsBRC,IAAOC,GAIPC,IAAqBC,EAAI,EAAK,GAE9BC,IAAsB,MAAM;AAChC,MAAAF,EAAmB,QAAQ,CAACA,EAAmB;AAAA,IACjD,GAEMG,IAAkB,CAACC,GAAuBC,MAAsB;AACpE,MAAAP,EAAK,cAAcM,GAAMC,CAAK;AAAA,IAChC;sBAIEC,EAAA,GAAAC,EAmCUC,OAnCOZ,CAAK,CAAA,GAAA;AAAA,MACT,UACT,MAQO;AAAA,QARPa,EAQOC,EAAA,QAAA,UAAA;AAAA,UARc,oBAAsBV,EAAA;AAAA,UAAqB,iBAAmBE;AAAA,QAAA,GAAnF,MAQO;AAAA,UAPLS,EAMEC,GAAA;AAAA,YALA,aAAU;AAAA,YACT,WAAWhB,EAAM;AAAA,YACjB,uBAAqB;AAAA,YACrB,oBAAkBI,EAAA;AAAA,YAClB,iBAAgBE;AAAA,UAAA;;;MAIZ,WACT,MAQO;AAAA,QARPO,EAQOC,EAAA,QAAA,WAAA,EARe,oBAAsBV,EAAA,MAAA,GAA5C,MAQO;AAAA,UAPLW,EAMEE,GAAA;AAAA,YALQ,WAAWb,EAAA;AAAA,yDAAAA,EAAkB,QAAAc;AAAA,YACpC,OAAOlB,EAAM;AAAA,YACb,eAAaA,EAAM;AAAA,YACnB,eAAaA,EAAM;AAAA,YACnB,aAAYO;AAAA,UAAA;;;MAIR,WACT,MASO;AAAA,QATPM,EASOC,yBATP,MASO;AAAA,UARLD,EAOOC,yBAPP,MAOO;AAAA,YALLC,EAIiBI,GAAA,EAJD,OAAM,YAAQ;AAAA,yBAC5B,MAEM,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBAFNC,EAEM,OAAA,EAFD,OAAM,SAAK;AAAA,kBACdA,EAAiD,KAAA,EAA9C,OAAM,wBAAA,GAAwB,cAAY;AAAA,gBAAA;;;;;;;;;;;"}
|
package/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
require('./assets/styles/j-components.css');
|
|
2
2
|
require('./assets/styles/themes.css');
|
|
3
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */;/* empty css */;/* empty css */;/* empty css */const e=require("./components/atoms/JButton.vue.cjs"),t=require("./components/atoms/JInput.vue.cjs"),u=require("./components/atoms/JTextarea.vue.cjs"),r=require("./components/atoms/JCheckbox.vue.cjs"),_=require("./components/atoms/JCombo.vue.cjs"),a=require("./components/atoms/JSearchCombo.vue.cjs"),i=require("./components/atoms/JRadio.vue.cjs"),p=require("./components/atoms/JSwitch.vue.cjs"),s=require("./components/atoms/JDatepicker.vue.cjs"),n=require("./components/atoms/JDivider.vue.cjs"),l=require("./components/atoms/JEditor.vue.cjs"),o=require("./components/atoms/JLink.vue.cjs"),c=require("./components/atoms/JImage.vue.cjs"),J=require("./components/atoms/JBadge.vue.cjs"),d=require("./components/atoms/JProgress.vue.cjs");;/* empty css */const v=require("./components/atoms/JSpinner.vue.cjs"),q=require("./components/atoms/JAvatar.vue.cjs"),f=require("./components/atoms/JKbd.vue.cjs"),g=require("./components/atoms/JTooltip.vue.cjs"),y=require("./components/atoms/JIcon.vue.cjs"),
|
|
3
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */;/* empty css */;/* empty css */;/* empty css */const e=require("./components/atoms/JButton.vue.cjs"),t=require("./components/atoms/JInput.vue.cjs"),u=require("./components/atoms/JTextarea.vue.cjs"),r=require("./components/atoms/JCheckbox.vue.cjs"),_=require("./components/atoms/JCombo.vue.cjs"),a=require("./components/atoms/JSearchCombo.vue.cjs"),i=require("./components/atoms/JRadio.vue.cjs"),p=require("./components/atoms/JSwitch.vue.cjs"),s=require("./components/atoms/JDatepicker.vue.cjs"),n=require("./components/atoms/JDivider.vue.cjs"),l=require("./components/atoms/JEditor.vue.cjs"),o=require("./components/atoms/JLink.vue.cjs"),c=require("./components/atoms/JImage.vue.cjs"),J=require("./components/atoms/JBadge.vue.cjs"),d=require("./components/atoms/JProgress.vue.cjs");;/* empty css */const v=require("./components/atoms/JSpinner.vue.cjs"),q=require("./components/atoms/JAvatar.vue.cjs"),f=require("./components/atoms/JKbd.vue.cjs"),g=require("./components/atoms/JTooltip.vue.cjs"),y=require("./components/atoms/JIcon.vue.cjs"),b=require("./components/atoms/JLabel.vue.cjs"),m=require("./components/atoms/JPopover.vue.cjs"),S=require("./components/atoms/JPreview.vue.cjs"),T=require("./components/atoms/JGrid.vue.cjs"),C=require("./components/atoms/JSplitter.vue.cjs"),P=require("./components/atoms/JSectionTitle.vue.cjs"),h=require("vue-sonner"),A=require("./components/atoms/JToast.vue.cjs"),x=require("./components/molecules/JFormField.vue.cjs"),B=require("./components/molecules/JGroupCombo.vue.cjs"),F=require("./components/molecules/JTabs.vue.cjs"),L=require("./components/molecules/JSearchAddr.vue.cjs"),M=require("./components/molecules/JContextMenu.vue.cjs"),D=require("./components/molecules/JCard.vue.cjs"),E=require("./components/molecules/JAlert.vue.cjs"),k=require("./components/molecules/JAccordion.vue.cjs"),G=require("./components/molecules/JTitlebar.vue.cjs"),I=require("./components/molecules/JButtonGroup.vue.cjs"),w=require("./components/molecules/JBreadcrumb.vue.cjs"),j=require("./components/molecules/JEmptyState.vue.cjs"),H=require("./components/organisms/JDynamicTabs.vue.cjs"),K=require("./components/organisms/JModal.vue.cjs"),O=require("./components/organisms/JFormModal.vue.cjs"),R=require("./components/organisms/JDynamicForm.vue.cjs"),z=require("./components/organisms/JSearchPanel.vue.cjs"),N=require("./components/organisms/JFilterBar.vue.cjs"),Q=require("./components/organisms/JHeader.vue.cjs"),U=require("./components/organisms/JSidebar/JSidebar.vue.cjs"),V=require("./components/organisms/JSidebarSimple.vue.cjs"),W=require("./components/organisms/JSidebarAdvanced.vue.cjs"),X=require("./components/organisms/JPageContainer.vue.cjs"),Y=require("./components/organisms/JTree.vue.cjs"),Z=require("./components/organisms/JShuttle.vue.cjs"),$=require("./components/templates/JLayout.vue.cjs"),ee=require("./components/templates/JLayoutSimple.vue.cjs"),te=require("./components/templates/JLayoutAdvanced.vue.cjs"),ue=require("./components/examples/ExampleCrudPage.vue.cjs"),re=require("./components/examples/ExampleTabMappingPage.vue.cjs");exports.JButton=e.default;exports.JInput=t.default;exports.JTextarea=u.default;exports.JCheckbox=r.default;exports.JCombo=_.default;exports.JSearchCombo=a.default;exports.JRadio=i.default;exports.JSwitch=p.default;exports.JDatepicker=s.default;exports.JDivider=n.default;exports.JEditor=l.default;exports.JLink=o.default;exports.JImage=c.default;exports.JBadge=J.default;exports.JProgress=d.default;exports.JSpinner=v.default;exports.JAvatar=q.default;exports.JKbd=f.default;exports.JTooltip=g.default;exports.JIcon=y.default;exports.JLabel=b.default;exports.JPopover=m.default;exports.JPreview=S.default;exports.JGrid=T.default;exports.JSplitter=C.default;exports.JSectionTitle=P.default;Object.defineProperty(exports,"JToast",{enumerable:!0,get:()=>h.toast});exports.JToaster=A.default;exports.JFormField=x.default;exports.JGroupCombo=B.default;exports.JTabs=F.default;exports.JSearchAddr=L.default;exports.JContextMenu=M.default;exports.JCard=D.default;exports.JAlert=E.default;exports.JAccordion=k.default;exports.JTitlebar=G.default;exports.JButtonGroup=I.default;exports.JBreadcrumb=w.default;exports.JEmptyState=j.default;exports.JDynamicTabs=H.default;exports.JModal=K.default;exports.JFormModal=O.default;exports.JDynamicForm=R.default;exports.JSearchPanel=z.default;exports.JFilterBar=N.default;exports.JHeader=Q.default;exports.JSidebar=U.default;exports.JSidebarSimple=V.default;exports.JSidebarAdvanced=W.default;exports.JPageContainer=X.default;exports.JTree=Y.default;exports.JShuttle=Z.default;exports.JLayout=$.default;exports.JLayoutSimple=ee.default;exports.JLayoutAdvanced=te.default;exports.ExampleCrudPage=ue.default;exports.ExampleTabMappingPage=re.default;
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|
package/index.js
CHANGED
|
@@ -52,19 +52,20 @@ import { default as Re } from "./components/organisms/JDynamicForm.vue.js";
|
|
|
52
52
|
import { default as qe } from "./components/organisms/JSearchPanel.vue.js";
|
|
53
53
|
import { default as Ne } from "./components/organisms/JFilterBar.vue.js";
|
|
54
54
|
import { default as Qe } from "./components/organisms/JHeader.vue.js";
|
|
55
|
-
import { default as Ve } from "./components/organisms/
|
|
56
|
-
import { default as Xe } from "./components/organisms/
|
|
57
|
-
import { default as Ze } from "./components/organisms/
|
|
58
|
-
import { default as $e } from "./components/organisms/
|
|
59
|
-
import { default as aa } from "./components/organisms/
|
|
60
|
-
import { default as oa } from "./components/
|
|
61
|
-
import { default as fa } from "./components/templates/
|
|
62
|
-
import { default as ma } from "./components/templates/
|
|
63
|
-
import { default as la } from "./components/
|
|
64
|
-
import { default as sa } from "./components/examples/
|
|
55
|
+
import { default as Ve } from "./components/organisms/JSidebar/JSidebar.vue.js";
|
|
56
|
+
import { default as Xe } from "./components/organisms/JSidebarSimple.vue.js";
|
|
57
|
+
import { default as Ze } from "./components/organisms/JSidebarAdvanced.vue.js";
|
|
58
|
+
import { default as $e } from "./components/organisms/JPageContainer.vue.js";
|
|
59
|
+
import { default as aa } from "./components/organisms/JTree.vue.js";
|
|
60
|
+
import { default as oa } from "./components/organisms/JShuttle.vue.js";
|
|
61
|
+
import { default as fa } from "./components/templates/JLayout.vue.js";
|
|
62
|
+
import { default as ma } from "./components/templates/JLayoutSimple.vue.js";
|
|
63
|
+
import { default as la } from "./components/templates/JLayoutAdvanced.vue.js";
|
|
64
|
+
import { default as sa } from "./components/examples/ExampleCrudPage.vue.js";
|
|
65
|
+
import { default as Ja } from "./components/examples/ExampleTabMappingPage.vue.js";
|
|
65
66
|
export {
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
sa as ExampleCrudPage,
|
|
68
|
+
Ja as ExampleTabMappingPage,
|
|
68
69
|
he as JAccordion,
|
|
69
70
|
ge as JAlert,
|
|
70
71
|
R as JAvatar,
|
|
@@ -93,12 +94,12 @@ export {
|
|
|
93
94
|
l as JInput,
|
|
94
95
|
q as JKbd,
|
|
95
96
|
V as JLabel,
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
fa as JLayout,
|
|
98
|
+
la as JLayoutAdvanced,
|
|
99
|
+
ma as JLayoutSimple,
|
|
99
100
|
L as JLink,
|
|
100
101
|
Ie as JModal,
|
|
101
|
-
|
|
102
|
+
$e as JPageContainer,
|
|
102
103
|
X as JPopover,
|
|
103
104
|
Z as JPreview,
|
|
104
105
|
I as JProgress,
|
|
@@ -107,9 +108,10 @@ export {
|
|
|
107
108
|
b as JSearchCombo,
|
|
108
109
|
qe as JSearchPanel,
|
|
109
110
|
oe as JSectionTitle,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
oa as JShuttle,
|
|
112
|
+
Ve as JSidebar,
|
|
113
|
+
Ze as JSidebarAdvanced,
|
|
114
|
+
Xe as JSidebarSimple,
|
|
113
115
|
H as JSpinner,
|
|
114
116
|
ae as JSplitter,
|
|
115
117
|
g as JSwitch,
|
|
@@ -119,6 +121,6 @@ export {
|
|
|
119
121
|
fe as JToast,
|
|
120
122
|
me as JToaster,
|
|
121
123
|
N as JTooltip,
|
|
122
|
-
|
|
124
|
+
aa as JTree
|
|
123
125
|
};
|
|
124
126
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styleTypePreset.cjs","sources":["../../../src/lib/styleTypePreset.ts"],"sourcesContent":["import type { ControlStyleType, StyleTypePreset } from '@/types/dynamic-form'; \
|
|
1
|
+
{"version":3,"file":"styleTypePreset.cjs","sources":["../../../src/lib/styleTypePreset.ts"],"sourcesContent":["import type { ControlStyleType, StyleTypePreset } from '@/types/dynamic-form'; \n\n/**\n * styleType에 따른 자동 프리셋 매핑\n * styleType을 선택하면 자동으로 controlSize와 variant가 설정됨 \n */\nexport const STYLETYPE_PRESETS: Record<ControlStyleType, StyleTypePreset> = { \n typeA: {\n controlSize: 'md',\n variant: 'default'\n },\n typeB: {\n controlSize: 'sm',\n variant: 'outline'\n },\n typeC: {\n controlSize: 'lg',\n variant: 'secondary'\n }\n};\n\n/**\n * styleType에 따라 controlSize와 variant를 자동으로 반환\n */\nexport function getStyleTypePreset(styleType?: ControlStyleType): StyleTypePreset { \n if (!styleType) {\n return STYLETYPE_PRESETS.typeA; // 기본값\n }\n return STYLETYPE_PRESETS[styleType] || STYLETYPE_PRESETS.typeA; \n}\n\n/**\n * GlobalStyle에서 최종 controlSize와 variant를 계산\n * styleType이 있으면 그것을 우선하고, 없으면 직접 지정된 값을 사용\n */\nexport function resolveGlobalStyle(globalStyle?: {\n styleType?: ControlStyleType;\n controlSize?: 'sm' | 'md' | 'lg';\n variant?: 'default' | 'outline' | 'secondary' | 'destructive' | 'ghost'; \n}): { controlSize: 'sm' | 'md' | 'lg'; variant: 'default' | 'outline' | 'secondary' | 'destructive' | 'ghost' } { \n if (globalStyle?.styleType) {\n const preset = getStyleTypePreset(globalStyle.styleType); \n return {\n controlSize: globalStyle.controlSize || preset.controlSize, \n variant: globalStyle.variant || preset.variant\n };\n }\n\n return {\n controlSize: globalStyle?.controlSize || 'md',\n variant: globalStyle?.variant || 'default'\n };\n}\n\n"],"names":["STYLETYPE_PRESETS","getStyleTypePreset","styleType","resolveGlobalStyle","globalStyle","preset"],"mappings":"gFAMO,MAAMA,EAA+D,CAC1E,MAAO,CACL,YAAa,KACb,QAAS,SAAA,EAEX,MAAO,CACL,YAAa,KACb,QAAS,SAAA,EAEX,MAAO,CACL,YAAa,KACb,QAAS,WAAA,CAEb,EAKO,SAASC,EAAmBC,EAA+C,CAChF,OAAKA,GAGEF,EAAkBE,CAAS,GAAKF,EAAkB,KAC3D,CAMO,SAASG,EAAmBC,EAI6E,CAC9G,GAAIA,GAAa,UAAW,CAC1B,MAAMC,EAASJ,EAAmBG,EAAY,SAAS,EACvD,MAAO,CACL,YAAaA,EAAY,aAAeC,EAAO,YAC/C,QAASD,EAAY,SAAWC,EAAO,OAAA,CAE3C,CAEA,MAAO,CACL,YAAaD,GAAa,aAAe,KACzC,QAASA,GAAa,SAAW,SAAA,CAErC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styleTypePreset.js","sources":["../../../src/lib/styleTypePreset.ts"],"sourcesContent":["import type { ControlStyleType, StyleTypePreset } from '@/types/dynamic-form'; \
|
|
1
|
+
{"version":3,"file":"styleTypePreset.js","sources":["../../../src/lib/styleTypePreset.ts"],"sourcesContent":["import type { ControlStyleType, StyleTypePreset } from '@/types/dynamic-form'; \n\n/**\n * styleType에 따른 자동 프리셋 매핑\n * styleType을 선택하면 자동으로 controlSize와 variant가 설정됨 \n */\nexport const STYLETYPE_PRESETS: Record<ControlStyleType, StyleTypePreset> = { \n typeA: {\n controlSize: 'md',\n variant: 'default'\n },\n typeB: {\n controlSize: 'sm',\n variant: 'outline'\n },\n typeC: {\n controlSize: 'lg',\n variant: 'secondary'\n }\n};\n\n/**\n * styleType에 따라 controlSize와 variant를 자동으로 반환\n */\nexport function getStyleTypePreset(styleType?: ControlStyleType): StyleTypePreset { \n if (!styleType) {\n return STYLETYPE_PRESETS.typeA; // 기본값\n }\n return STYLETYPE_PRESETS[styleType] || STYLETYPE_PRESETS.typeA; \n}\n\n/**\n * GlobalStyle에서 최종 controlSize와 variant를 계산\n * styleType이 있으면 그것을 우선하고, 없으면 직접 지정된 값을 사용\n */\nexport function resolveGlobalStyle(globalStyle?: {\n styleType?: ControlStyleType;\n controlSize?: 'sm' | 'md' | 'lg';\n variant?: 'default' | 'outline' | 'secondary' | 'destructive' | 'ghost'; \n}): { controlSize: 'sm' | 'md' | 'lg'; variant: 'default' | 'outline' | 'secondary' | 'destructive' | 'ghost' } { \n if (globalStyle?.styleType) {\n const preset = getStyleTypePreset(globalStyle.styleType); \n return {\n controlSize: globalStyle.controlSize || preset.controlSize, \n variant: globalStyle.variant || preset.variant\n };\n }\n\n return {\n controlSize: globalStyle?.controlSize || 'md',\n variant: globalStyle?.variant || 'default'\n };\n}\n\n"],"names":["STYLETYPE_PRESETS","getStyleTypePreset","styleType","resolveGlobalStyle","globalStyle","preset"],"mappings":"AAMO,MAAMA,IAA+D;AAAA,EAC1E,OAAO;AAAA,IACL,aAAa;AAAA,IACb,SAAS;AAAA,EAAA;AAAA,EAEX,OAAO;AAAA,IACL,aAAa;AAAA,IACb,SAAS;AAAA,EAAA;AAAA,EAEX,OAAO;AAAA,IACL,aAAa;AAAA,IACb,SAAS;AAAA,EAAA;AAEb;AAKO,SAASC,EAAmBC,GAA+C;AAChF,SAAKA,KAGEF,EAAkBE,CAAS,KAAKF,EAAkB;AAC3D;AAMO,SAASG,EAAmBC,GAI6E;AAC9G,MAAIA,GAAa,WAAW;AAC1B,UAAMC,IAASJ,EAAmBG,EAAY,SAAS;AACvD,WAAO;AAAA,MACL,aAAaA,EAAY,eAAeC,EAAO;AAAA,MAC/C,SAASD,EAAY,WAAWC,EAAO;AAAA,IAAA;AAAA,EAE3C;AAEA,SAAO;AAAA,IACL,aAAaD,GAAa,eAAe;AAAA,IACzC,SAASA,GAAa,WAAW;AAAA,EAAA;AAErC;"}
|
package/lib/theme-utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-utils.cjs","sources":["../../../src/lib/theme-utils.ts"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"theme-utils.cjs","sources":["../../../src/lib/theme-utils.ts"],"sourcesContent":["/**\n * 테마 유틸리티 함수\n * Theme utility functions for tweakcn custom theme support\n */\n\n/**\n * CSS 스타일시트에서 theme-* 클래스를 자동으로 감지합니다.\n * Detects theme-* classes from CSS stylesheets\n * \n * @returns 감지된 테마 이름 배열 (예: ['default', 'slate', 'rose', ...])\n */\nexport function detectThemeClasses(): string[] {\n const themeClasses: Set<string> = new Set()\n \n try {\n // 모든 스타일시트 순회\n const styleSheets = Array.from(document.styleSheets)\n \n for (const styleSheet of styleSheets) {\n try {\n // CORS 제한으로 인해 접근 불가능한 스타일시트는 건너뛰기\n const rules = styleSheet.cssRules || styleSheet.rules\n \n if (!rules) continue\n \n for (const rule of Array.from(rules)) {\n if (rule instanceof CSSStyleRule) {\n const selector = rule.selectorText\n \n // .theme-{name} 형식의 클래스 선택자 찾기\n const themeMatch = selector.match(/\\.theme-([a-zA-Z0-9_-]+)/)\n if (themeMatch && themeMatch[1]) {\n themeClasses.add(themeMatch[1])\n }\n }\n }\n } catch (e) {\n // CORS 오류 등으로 인한 접근 불가 스타일시트는 무시\n continue\n }\n }\n \n // document에서 직접 클래스 찾기 (동적으로 추가된 스타일)\n const allClasses = Array.from(document.querySelectorAll('[class*=\"theme-\"]'))\n for (const element of allClasses) {\n const classList = Array.from(element.classList)\n for (const className of classList) {\n const themeMatch = className.match(/^theme-([a-zA-Z0-9_-]+)$/)\n if (themeMatch && themeMatch[1]) {\n themeClasses.add(themeMatch[1])\n }\n }\n }\n } catch (error) {\n console.warn('[theme-utils] Failed to detect theme classes:', error)\n }\n \n return Array.from(themeClasses)\n}\n\n/**\n * 현재 문서의 모든 테마 클래스를 반환합니다.\n * Returns all theme classes currently in the document\n * \n * @returns 테마 이름 배열\n */\nexport function getAllThemeClasses(): string[] {\n return detectThemeClasses()\n}\n\n/**\n * 테마 이름이 유효한지 검사합니다.\n * Validates if a theme name is valid\n * \n * @param theme - 검사할 테마 이름\n * @returns 유효하면 true\n */\nexport function isValidTheme(theme: string): boolean {\n if (!theme || typeof theme !== 'string') {\n return false\n }\n \n // theme-{name} 형식인지 확인\n const themeClasses = detectThemeClasses()\n return themeClasses.includes(theme)\n}\n\n/**\n * 디폴트 테마가 항상 포함되도록 보장합니다.\n * Ensures that the default theme is always included\n * \n * @param themes - 테마 이름 배열\n * @returns 디폴트 테마가 포함된 테마 배열 (default가 맨 앞에 위치)\n */\nexport function ensureDefaultTheme(themes: string[]): string[] {\n const uniqueThemes = Array.from(new Set(themes))\n \n // default가 없으면 경고하고 추가\n if (!uniqueThemes.includes('default')) {\n console.warn('[theme-utils] Default theme not found. Adding default theme to list.')\n return ['default', ...uniqueThemes]\n }\n \n // default를 맨 앞에 배치\n const otherThemes = uniqueThemes.filter(t => t !== 'default')\n return ['default', ...otherThemes]\n}\n\n/**\n * 디폴트 테마 이름을 반환합니다.\n * Returns the default theme name\n * \n * @returns 항상 'default'\n */\nexport function getDefaultTheme(): string {\n return 'default'\n}\n\n/**\n * 테마가 존재하는지 검증하고, 없으면 디폴트 테마를 반환합니다.\n * Validates if a theme exists, returns default if not found\n * \n * @param theme - 검증할 테마 이름\n * @returns 유효한 테마 이름 (없으면 'default')\n */\nexport function validateThemeExists(theme: string): string {\n if (!theme || typeof theme !== 'string') {\n return getDefaultTheme()\n }\n \n const themeClasses = detectThemeClasses()\n \n if (themeClasses.includes(theme)) {\n return theme\n }\n \n console.warn(`[theme-utils] Theme '${theme}' not found. Using default theme.`)\n return getDefaultTheme()\n}\n\n/**\n * 로컬 스토리지에서 저장된 테마를 가져옵니다.\n * Gets stored theme from localStorage\n * \n * @param storageKey - 스토리지 키 (기본값: 'tweakcn-theme')\n * @returns 저장된 테마 이름 또는 null\n */\nexport function getStoredTheme(storageKey: string = 'tweakcn-theme'): string | null {\n try {\n return localStorage.getItem(storageKey)\n } catch (error) {\n console.warn('[theme-utils] Failed to get stored theme:', error)\n return null\n }\n}\n\n/**\n * 테마를 로컬 스토리지에 저장합니다.\n * Saves theme to localStorage\n * \n * @param theme - 저장할 테마 이름\n * @param storageKey - 스토리지 키 (기본값: 'tweakcn-theme')\n */\nexport function setStoredTheme(theme: string, storageKey: string = 'tweakcn-theme'): void {\n try {\n localStorage.setItem(storageKey, theme)\n } catch (error) {\n console.warn('[theme-utils] Failed to save theme:', error)\n }\n}\n\n/**\n * 문서의 루트 요소에 테마 클래스를 적용합니다.\n * Applies theme class to document root element\n * \n * @param theme - 적용할 테마 이름\n * @returns 성공 여부\n */\nexport function applyTheme(theme: string): boolean {\n if (!theme || typeof theme !== 'string') {\n return false\n }\n \n try {\n const root = document.documentElement\n \n // 모든 theme-* 클래스 제거\n const themeClasses = detectThemeClasses()\n for (const themeClass of themeClasses) {\n root.classList.remove(`theme-${themeClass}`)\n }\n \n // 새 테마 클래스 추가\n root.classList.add(`theme-${theme}`)\n \n return true\n } catch (error) {\n console.error('[theme-utils] Failed to apply theme:', error)\n return false\n }\n}\n"],"names":["detectThemeClasses","themeClasses","styleSheets","styleSheet","rules","rule","themeMatch","allClasses","element","classList","className","error","ensureDefaultTheme","themes","uniqueThemes","t","getDefaultTheme","validateThemeExists","theme","getStoredTheme","storageKey","setStoredTheme","applyTheme","root","themeClass"],"mappings":"gFAWO,SAASA,GAA+B,CAC7C,MAAMC,MAAgC,IAEtC,GAAI,CAEF,MAAMC,EAAc,MAAM,KAAK,SAAS,WAAW,EAEnD,UAAWC,KAAcD,EACvB,GAAI,CAEF,MAAME,EAAQD,EAAW,UAAYA,EAAW,MAEhD,GAAI,CAACC,EAAO,SAEZ,UAAWC,KAAQ,MAAM,KAAKD,CAAK,EACjC,GAAIC,aAAgB,aAAc,CAIhC,MAAMC,EAHWD,EAAK,aAGM,MAAM,0BAA0B,EACxDC,GAAcA,EAAW,CAAC,GAC5BL,EAAa,IAAIK,EAAW,CAAC,CAAC,CAElC,CAEJ,MAAY,CAEV,QACF,CAIF,MAAMC,EAAa,MAAM,KAAK,SAAS,iBAAiB,mBAAmB,CAAC,EAC5E,UAAWC,KAAWD,EAAY,CAChC,MAAME,EAAY,MAAM,KAAKD,EAAQ,SAAS,EAC9C,UAAWE,KAAaD,EAAW,CACjC,MAAMH,EAAaI,EAAU,MAAM,0BAA0B,EACzDJ,GAAcA,EAAW,CAAC,GAC5BL,EAAa,IAAIK,EAAW,CAAC,CAAC,CAElC,CACF,CACF,OAASK,EAAO,CACd,QAAQ,KAAK,gDAAiDA,CAAK,CACrE,CAEA,OAAO,MAAM,KAAKV,CAAY,CAChC,CAoCO,SAASW,EAAmBC,EAA4B,CAC7D,MAAMC,EAAe,MAAM,KAAK,IAAI,IAAID,CAAM,CAAC,EAG/C,OAAKC,EAAa,SAAS,SAAS,EAO7B,CAAC,UAAW,GADCA,EAAa,OAAOC,GAAKA,IAAM,SAAS,CAC3B,GAN/B,QAAQ,KAAK,sEAAsE,EAC5E,CAAC,UAAW,GAAGD,CAAY,EAMtC,CAQO,SAASE,GAA0B,CACxC,MAAO,SACT,CASO,SAASC,EAAoBC,EAAuB,CACzD,MAAI,CAACA,GAAS,OAAOA,GAAU,SACtBF,EAAA,EAGYhB,EAAA,EAEJ,SAASkB,CAAK,EACtBA,GAGT,QAAQ,KAAK,wBAAwBA,CAAK,mCAAmC,EACtEF,EAAA,EACT,CASO,SAASG,EAAeC,EAAqB,gBAAgC,CAClF,GAAI,CACF,OAAO,aAAa,QAAQA,CAAU,CACxC,OAAST,EAAO,CACd,eAAQ,KAAK,4CAA6CA,CAAK,EACxD,IACT,CACF,CASO,SAASU,EAAeH,EAAeE,EAAqB,gBAAuB,CACxF,GAAI,CACF,aAAa,QAAQA,EAAYF,CAAK,CACxC,OAASP,EAAO,CACd,QAAQ,KAAK,sCAAuCA,CAAK,CAC3D,CACF,CASO,SAASW,EAAWJ,EAAwB,CACjD,GAAI,CAACA,GAAS,OAAOA,GAAU,SAC7B,MAAO,GAGT,GAAI,CACF,MAAMK,EAAO,SAAS,gBAGhBtB,EAAeD,EAAA,EACrB,UAAWwB,KAAcvB,EACvBsB,EAAK,UAAU,OAAO,SAASC,CAAU,EAAE,EAI7C,OAAAD,EAAK,UAAU,IAAI,SAASL,CAAK,EAAE,EAE5B,EACT,OAASP,EAAO,CACd,eAAQ,MAAM,uCAAwCA,CAAK,EACpD,EACT,CACF"}
|
package/lib/theme-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-utils.js","sources":["../../../src/lib/theme-utils.ts"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"theme-utils.js","sources":["../../../src/lib/theme-utils.ts"],"sourcesContent":["/**\n * 테마 유틸리티 함수\n * Theme utility functions for tweakcn custom theme support\n */\n\n/**\n * CSS 스타일시트에서 theme-* 클래스를 자동으로 감지합니다.\n * Detects theme-* classes from CSS stylesheets\n * \n * @returns 감지된 테마 이름 배열 (예: ['default', 'slate', 'rose', ...])\n */\nexport function detectThemeClasses(): string[] {\n const themeClasses: Set<string> = new Set()\n \n try {\n // 모든 스타일시트 순회\n const styleSheets = Array.from(document.styleSheets)\n \n for (const styleSheet of styleSheets) {\n try {\n // CORS 제한으로 인해 접근 불가능한 스타일시트는 건너뛰기\n const rules = styleSheet.cssRules || styleSheet.rules\n \n if (!rules) continue\n \n for (const rule of Array.from(rules)) {\n if (rule instanceof CSSStyleRule) {\n const selector = rule.selectorText\n \n // .theme-{name} 형식의 클래스 선택자 찾기\n const themeMatch = selector.match(/\\.theme-([a-zA-Z0-9_-]+)/)\n if (themeMatch && themeMatch[1]) {\n themeClasses.add(themeMatch[1])\n }\n }\n }\n } catch (e) {\n // CORS 오류 등으로 인한 접근 불가 스타일시트는 무시\n continue\n }\n }\n \n // document에서 직접 클래스 찾기 (동적으로 추가된 스타일)\n const allClasses = Array.from(document.querySelectorAll('[class*=\"theme-\"]'))\n for (const element of allClasses) {\n const classList = Array.from(element.classList)\n for (const className of classList) {\n const themeMatch = className.match(/^theme-([a-zA-Z0-9_-]+)$/)\n if (themeMatch && themeMatch[1]) {\n themeClasses.add(themeMatch[1])\n }\n }\n }\n } catch (error) {\n console.warn('[theme-utils] Failed to detect theme classes:', error)\n }\n \n return Array.from(themeClasses)\n}\n\n/**\n * 현재 문서의 모든 테마 클래스를 반환합니다.\n * Returns all theme classes currently in the document\n * \n * @returns 테마 이름 배열\n */\nexport function getAllThemeClasses(): string[] {\n return detectThemeClasses()\n}\n\n/**\n * 테마 이름이 유효한지 검사합니다.\n * Validates if a theme name is valid\n * \n * @param theme - 검사할 테마 이름\n * @returns 유효하면 true\n */\nexport function isValidTheme(theme: string): boolean {\n if (!theme || typeof theme !== 'string') {\n return false\n }\n \n // theme-{name} 형식인지 확인\n const themeClasses = detectThemeClasses()\n return themeClasses.includes(theme)\n}\n\n/**\n * 디폴트 테마가 항상 포함되도록 보장합니다.\n * Ensures that the default theme is always included\n * \n * @param themes - 테마 이름 배열\n * @returns 디폴트 테마가 포함된 테마 배열 (default가 맨 앞에 위치)\n */\nexport function ensureDefaultTheme(themes: string[]): string[] {\n const uniqueThemes = Array.from(new Set(themes))\n \n // default가 없으면 경고하고 추가\n if (!uniqueThemes.includes('default')) {\n console.warn('[theme-utils] Default theme not found. Adding default theme to list.')\n return ['default', ...uniqueThemes]\n }\n \n // default를 맨 앞에 배치\n const otherThemes = uniqueThemes.filter(t => t !== 'default')\n return ['default', ...otherThemes]\n}\n\n/**\n * 디폴트 테마 이름을 반환합니다.\n * Returns the default theme name\n * \n * @returns 항상 'default'\n */\nexport function getDefaultTheme(): string {\n return 'default'\n}\n\n/**\n * 테마가 존재하는지 검증하고, 없으면 디폴트 테마를 반환합니다.\n * Validates if a theme exists, returns default if not found\n * \n * @param theme - 검증할 테마 이름\n * @returns 유효한 테마 이름 (없으면 'default')\n */\nexport function validateThemeExists(theme: string): string {\n if (!theme || typeof theme !== 'string') {\n return getDefaultTheme()\n }\n \n const themeClasses = detectThemeClasses()\n \n if (themeClasses.includes(theme)) {\n return theme\n }\n \n console.warn(`[theme-utils] Theme '${theme}' not found. Using default theme.`)\n return getDefaultTheme()\n}\n\n/**\n * 로컬 스토리지에서 저장된 테마를 가져옵니다.\n * Gets stored theme from localStorage\n * \n * @param storageKey - 스토리지 키 (기본값: 'tweakcn-theme')\n * @returns 저장된 테마 이름 또는 null\n */\nexport function getStoredTheme(storageKey: string = 'tweakcn-theme'): string | null {\n try {\n return localStorage.getItem(storageKey)\n } catch (error) {\n console.warn('[theme-utils] Failed to get stored theme:', error)\n return null\n }\n}\n\n/**\n * 테마를 로컬 스토리지에 저장합니다.\n * Saves theme to localStorage\n * \n * @param theme - 저장할 테마 이름\n * @param storageKey - 스토리지 키 (기본값: 'tweakcn-theme')\n */\nexport function setStoredTheme(theme: string, storageKey: string = 'tweakcn-theme'): void {\n try {\n localStorage.setItem(storageKey, theme)\n } catch (error) {\n console.warn('[theme-utils] Failed to save theme:', error)\n }\n}\n\n/**\n * 문서의 루트 요소에 테마 클래스를 적용합니다.\n * Applies theme class to document root element\n * \n * @param theme - 적용할 테마 이름\n * @returns 성공 여부\n */\nexport function applyTheme(theme: string): boolean {\n if (!theme || typeof theme !== 'string') {\n return false\n }\n \n try {\n const root = document.documentElement\n \n // 모든 theme-* 클래스 제거\n const themeClasses = detectThemeClasses()\n for (const themeClass of themeClasses) {\n root.classList.remove(`theme-${themeClass}`)\n }\n \n // 새 테마 클래스 추가\n root.classList.add(`theme-${theme}`)\n \n return true\n } catch (error) {\n console.error('[theme-utils] Failed to apply theme:', error)\n return false\n }\n}\n"],"names":["detectThemeClasses","themeClasses","styleSheets","styleSheet","rules","rule","themeMatch","allClasses","element","classList","className","error","ensureDefaultTheme","themes","uniqueThemes","t","getDefaultTheme","validateThemeExists","theme","getStoredTheme","storageKey","setStoredTheme","applyTheme","root","themeClass"],"mappings":"AAWO,SAASA,IAA+B;AAC7C,QAAMC,wBAAgC,IAAA;AAEtC,MAAI;AAEF,UAAMC,IAAc,MAAM,KAAK,SAAS,WAAW;AAEnD,eAAWC,KAAcD;AACvB,UAAI;AAEF,cAAME,IAAQD,EAAW,YAAYA,EAAW;AAEhD,YAAI,CAACC,EAAO;AAEZ,mBAAWC,KAAQ,MAAM,KAAKD,CAAK;AACjC,cAAIC,aAAgB,cAAc;AAIhC,kBAAMC,IAHWD,EAAK,aAGM,MAAM,0BAA0B;AAC5D,YAAIC,KAAcA,EAAW,CAAC,KAC5BL,EAAa,IAAIK,EAAW,CAAC,CAAC;AAAA,UAElC;AAAA,MAEJ,QAAY;AAEV;AAAA,MACF;AAIF,UAAMC,IAAa,MAAM,KAAK,SAAS,iBAAiB,mBAAmB,CAAC;AAC5E,eAAWC,KAAWD,GAAY;AAChC,YAAME,IAAY,MAAM,KAAKD,EAAQ,SAAS;AAC9C,iBAAWE,KAAaD,GAAW;AACjC,cAAMH,IAAaI,EAAU,MAAM,0BAA0B;AAC7D,QAAIJ,KAAcA,EAAW,CAAC,KAC5BL,EAAa,IAAIK,EAAW,CAAC,CAAC;AAAA,MAElC;AAAA,IACF;AAAA,EACF,SAASK,GAAO;AACd,YAAQ,KAAK,iDAAiDA,CAAK;AAAA,EACrE;AAEA,SAAO,MAAM,KAAKV,CAAY;AAChC;AAoCO,SAASW,EAAmBC,GAA4B;AAC7D,QAAMC,IAAe,MAAM,KAAK,IAAI,IAAID,CAAM,CAAC;AAG/C,SAAKC,EAAa,SAAS,SAAS,IAO7B,CAAC,WAAW,GADCA,EAAa,OAAO,CAAAC,MAAKA,MAAM,SAAS,CAC3B,KAN/B,QAAQ,KAAK,sEAAsE,GAC5E,CAAC,WAAW,GAAGD,CAAY;AAMtC;AAQO,SAASE,IAA0B;AACxC,SAAO;AACT;AASO,SAASC,EAAoBC,GAAuB;AACzD,SAAI,CAACA,KAAS,OAAOA,KAAU,WACtBF,EAAA,IAGYhB,EAAA,EAEJ,SAASkB,CAAK,IACtBA,KAGT,QAAQ,KAAK,wBAAwBA,CAAK,mCAAmC,GACtEF,EAAA;AACT;AASO,SAASG,EAAeC,IAAqB,iBAAgC;AAClF,MAAI;AACF,WAAO,aAAa,QAAQA,CAAU;AAAA,EACxC,SAAST,GAAO;AACd,mBAAQ,KAAK,6CAA6CA,CAAK,GACxD;AAAA,EACT;AACF;AASO,SAASU,EAAeH,GAAeE,IAAqB,iBAAuB;AACxF,MAAI;AACF,iBAAa,QAAQA,GAAYF,CAAK;AAAA,EACxC,SAASP,GAAO;AACd,YAAQ,KAAK,uCAAuCA,CAAK;AAAA,EAC3D;AACF;AASO,SAASW,EAAWJ,GAAwB;AACjD,MAAI,CAACA,KAAS,OAAOA,KAAU;AAC7B,WAAO;AAGT,MAAI;AACF,UAAMK,IAAO,SAAS,iBAGhBtB,IAAeD,EAAA;AACrB,eAAWwB,KAAcvB;AACvB,MAAAsB,EAAK,UAAU,OAAO,SAASC,CAAU,EAAE;AAI7C,WAAAD,EAAK,UAAU,IAAI,SAASL,CAAK,EAAE,GAE5B;AAAA,EACT,SAASP,GAAO;AACd,mBAAQ,MAAM,wCAAwCA,CAAK,GACpD;AAAA,EACT;AACF;"}
|
package/package.json
CHANGED
package/tailwind.config.js
CHANGED
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
import containerQueries from '@tailwindcss/container-queries'
|
|
2
|
-
import typography from '@tailwindcss/typography'
|
|
3
|
-
|
|
4
|
-
/** @type {import('tailwindcss').Config} */
|
|
5
|
-
export default {
|
|
6
|
-
darkMode: ["class"],
|
|
7
|
-
content: [
|
|
8
|
-
"./index.html",
|
|
9
|
-
"./src/**/*.{vue,js,ts,jsx,tsx}",
|
|
10
|
-
"./docs/**/*.{vue,js,ts,jsx,tsx,md}",
|
|
11
|
-
],
|
|
12
|
-
theme: {
|
|
13
|
-
extend: {
|
|
14
|
-
colors: {
|
|
15
|
-
border: 'hsl(var(--border))',
|
|
16
|
-
input: 'hsl(var(--input))',
|
|
17
|
-
ring: 'hsl(var(--ring))',
|
|
18
|
-
background: 'hsl(var(--background))',
|
|
19
|
-
foreground: 'hsl(var(--foreground))',
|
|
20
|
-
primary: {
|
|
21
|
-
DEFAULT: 'hsl(var(--primary))',
|
|
22
|
-
foreground: 'hsl(var(--primary-foreground))'
|
|
23
|
-
},
|
|
24
|
-
secondary: {
|
|
25
|
-
DEFAULT: 'hsl(var(--secondary))',
|
|
26
|
-
foreground: 'hsl(var(--secondary-foreground))'
|
|
27
|
-
},
|
|
28
|
-
destructive: {
|
|
29
|
-
DEFAULT: 'hsl(var(--destructive))',
|
|
30
|
-
foreground: 'hsl(var(--destructive-foreground))'
|
|
31
|
-
},
|
|
32
|
-
muted: {
|
|
33
|
-
DEFAULT: 'hsl(var(--muted))',
|
|
34
|
-
foreground: 'hsl(var(--muted-foreground))'
|
|
35
|
-
},
|
|
36
|
-
accent: {
|
|
37
|
-
DEFAULT: 'hsl(var(--accent))',
|
|
38
|
-
foreground: 'hsl(var(--accent-foreground))'
|
|
39
|
-
},
|
|
40
|
-
popover: {
|
|
41
|
-
DEFAULT: 'hsl(var(--popover))',
|
|
42
|
-
foreground: 'hsl(var(--popover-foreground))'
|
|
43
|
-
},
|
|
44
|
-
card: {
|
|
45
|
-
DEFAULT: 'hsl(var(--card))',
|
|
46
|
-
foreground: 'hsl(var(--card-foreground))'
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
borderRadius: {
|
|
50
|
-
lg: 'var(--radius)',
|
|
51
|
-
md: 'calc(var(--radius) - 2px)',
|
|
52
|
-
sm: 'calc(var(--radius) - 4px)'
|
|
53
|
-
},
|
|
54
|
-
keyframes: {
|
|
55
|
-
'accordion-down': {
|
|
56
|
-
from: {
|
|
57
|
-
height: '0'
|
|
58
|
-
},
|
|
59
|
-
to: {
|
|
60
|
-
height: 'var(--reka-accordion-content-height)'
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
'accordion-up': {
|
|
64
|
-
from: {
|
|
65
|
-
height: 'var(--reka-accordion-content-height)'
|
|
66
|
-
},
|
|
67
|
-
to: {
|
|
68
|
-
height: '0'
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
animation: {
|
|
73
|
-
'accordion-down': 'accordion-down 0.2s ease-out',
|
|
74
|
-
'accordion-up': 'accordion-up 0.2s ease-out'
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
plugins: [containerQueries, typography],
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
1
|
+
import containerQueries from '@tailwindcss/container-queries'
|
|
2
|
+
import typography from '@tailwindcss/typography'
|
|
3
|
+
|
|
4
|
+
/** @type {import('tailwindcss').Config} */
|
|
5
|
+
export default {
|
|
6
|
+
darkMode: ["class"],
|
|
7
|
+
content: [
|
|
8
|
+
"./index.html",
|
|
9
|
+
"./src/**/*.{vue,js,ts,jsx,tsx}",
|
|
10
|
+
"./docs/**/*.{vue,js,ts,jsx,tsx,md}",
|
|
11
|
+
],
|
|
12
|
+
theme: {
|
|
13
|
+
extend: {
|
|
14
|
+
colors: {
|
|
15
|
+
border: 'hsl(var(--border))',
|
|
16
|
+
input: 'hsl(var(--input))',
|
|
17
|
+
ring: 'hsl(var(--ring))',
|
|
18
|
+
background: 'hsl(var(--background))',
|
|
19
|
+
foreground: 'hsl(var(--foreground))',
|
|
20
|
+
primary: {
|
|
21
|
+
DEFAULT: 'hsl(var(--primary))',
|
|
22
|
+
foreground: 'hsl(var(--primary-foreground))'
|
|
23
|
+
},
|
|
24
|
+
secondary: {
|
|
25
|
+
DEFAULT: 'hsl(var(--secondary))',
|
|
26
|
+
foreground: 'hsl(var(--secondary-foreground))'
|
|
27
|
+
},
|
|
28
|
+
destructive: {
|
|
29
|
+
DEFAULT: 'hsl(var(--destructive))',
|
|
30
|
+
foreground: 'hsl(var(--destructive-foreground))'
|
|
31
|
+
},
|
|
32
|
+
muted: {
|
|
33
|
+
DEFAULT: 'hsl(var(--muted))',
|
|
34
|
+
foreground: 'hsl(var(--muted-foreground))'
|
|
35
|
+
},
|
|
36
|
+
accent: {
|
|
37
|
+
DEFAULT: 'hsl(var(--accent))',
|
|
38
|
+
foreground: 'hsl(var(--accent-foreground))'
|
|
39
|
+
},
|
|
40
|
+
popover: {
|
|
41
|
+
DEFAULT: 'hsl(var(--popover))',
|
|
42
|
+
foreground: 'hsl(var(--popover-foreground))'
|
|
43
|
+
},
|
|
44
|
+
card: {
|
|
45
|
+
DEFAULT: 'hsl(var(--card))',
|
|
46
|
+
foreground: 'hsl(var(--card-foreground))'
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
borderRadius: {
|
|
50
|
+
lg: 'var(--radius)',
|
|
51
|
+
md: 'calc(var(--radius) - 2px)',
|
|
52
|
+
sm: 'calc(var(--radius) - 4px)'
|
|
53
|
+
},
|
|
54
|
+
keyframes: {
|
|
55
|
+
'accordion-down': {
|
|
56
|
+
from: {
|
|
57
|
+
height: '0'
|
|
58
|
+
},
|
|
59
|
+
to: {
|
|
60
|
+
height: 'var(--reka-accordion-content-height)'
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
'accordion-up': {
|
|
64
|
+
from: {
|
|
65
|
+
height: 'var(--reka-accordion-content-height)'
|
|
66
|
+
},
|
|
67
|
+
to: {
|
|
68
|
+
height: '0'
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
animation: {
|
|
73
|
+
'accordion-down': 'accordion-down 0.2s ease-out',
|
|
74
|
+
'accordion-up': 'accordion-up 0.2s ease-out'
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
plugins: [containerQueries, typography],
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|