@j-solution/components 2.0.4 → 2.0.6
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 +8 -7
- package/assets/jwms-portal-frontend-Cu-V5XAR.css +1 -0
- package/assets/styles/j-components.css +1 -1
- package/assets/styles/main.css +22 -0
- package/components/atoms/JCombo.vue.cjs +1 -1
- package/components/atoms/JCombo.vue.cjs.map +1 -1
- package/components/atoms/JCombo.vue.js +1 -1
- package/components/atoms/JCombo.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/JSplitter.vue.cjs +1 -1
- package/components/atoms/JSplitter.vue.js +2 -2
- package/components/atoms/JSplitter.vue2.cjs +1 -1
- package/components/atoms/JSplitter.vue2.cjs.map +1 -1
- package/components/atoms/JSplitter.vue2.js +30 -28
- package/components/atoms/JSplitter.vue2.js.map +1 -1
- package/components/molecules/JFormField.vue.cjs +1 -1
- package/components/molecules/JFormField.vue.js +2 -2
- package/components/molecules/JFormField.vue2.cjs +1 -1
- package/components/molecules/JFormField.vue2.cjs.map +1 -1
- package/components/molecules/JFormField.vue2.js +80 -79
- package/components/molecules/JFormField.vue2.js.map +1 -1
- package/components/molecules/JTabs.vue.cjs +1 -1
- package/components/molecules/JTabs.vue.js +2 -2
- package/components/molecules/JTabs.vue2.cjs +1 -1
- package/components/molecules/JTabs.vue2.cjs.map +1 -1
- package/components/molecules/JTabs.vue2.js +62 -69
- package/components/molecules/JTabs.vue2.js.map +1 -1
- package/components/templates/JLayout.vue.cjs +6 -1
- package/components/templates/JLayout.vue.cjs.map +1 -1
- package/components/templates/JLayout.vue.js +10 -43
- package/components/templates/JLayout.vue.js.map +1 -1
- package/components/templates/JLayout.vue2.cjs +1 -1
- package/components/templates/JLayout.vue2.cjs.map +1 -1
- package/components/templates/JLayout.vue2.js +71 -2
- package/components/templates/JLayout.vue2.js.map +1 -1
- package/components/templates/JLayoutAdvanced.vue.cjs +1 -1
- package/components/templates/JLayoutAdvanced.vue.js +12 -12
- package/components/templates/JLayoutSimple.vue.cjs +1 -1
- package/components/templates/JLayoutSimple.vue.cjs.map +1 -1
- package/components/templates/JLayoutSimple.vue.js +32 -22
- package/components/templates/JLayoutSimple.vue.js.map +1 -1
- package/index.cjs +1 -1
- package/index.js +30 -28
- package/package.json +1 -1
- package/types/index.d.ts +22 -8
- package/assets/jwms-portal-frontend-B5GA5JuZ.css +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),A=require("./JLayout.vue.cjs"),k=require("../organisms/JHeader.vue.cjs"),S=require("../organisms/JSidebarAdvanced.vue.cjs"),x=require("../organisms/JDynamicTabs.vue.cjs"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),A=require("./JLayout.vue.cjs"),k=require("../organisms/JHeader.vue.cjs"),S=require("../organisms/JSidebarAdvanced.vue.cjs"),x=require("../organisms/JDynamicTabs.vue.cjs"),y=require("vue-router"),P={key:1,class:"flex-1 p-6"},w={class:"text-muted-foreground"},B={key:0,class:"text-xs text-gray-400 mt-2"},R=e.defineComponent({__name:"JLayoutAdvanced",props:{styletype:{default:"minimal"},contentScroll:{type:Boolean,default:!0},class:{},menuItems:{default:()=>[]},favorites:{default:()=>[]},permissions:{default:()=>[]}},emits:["menuClick","tabAdd","tabChange","tabClose","favoriteChange"],setup(m,{emit:b}){const o=m,s=b,u=e.ref(!0),f=()=>{u.value=!u.value},c=e.ref(null),l=e.ref([]),n=e.ref(void 0),h=t=>t?`tab-${t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")}`:"";let i=null;try{i=y.useRouter()}catch{i=null}const g=async t=>{const a=t.menuItem;if(!a||a.menuType!=="L"){s("menuClick",t);return}if(!a.path){s("menuClick",t);return}const r=h(a.path);if(await e.nextTick(),await e.nextTick(),c.value&&typeof c.value.addTab=="function")try{c.value.addTab({id:r,label:a.label||"제목 없음",icon:a.icon,closable:!0,meta:{path:a.path,menuKey:a.menuKey}}),s("tabAdd",{id:r,label:a.label||"제목 없음",icon:a.icon,closable:!0}),i&&i.push({path:a.path});return}catch(p){console.error("탭 추가 실패:",p)}const d={id:r,label:a.label||"제목 없음",icon:a.icon,closable:!0,meta:{path:a.path,menuKey:a.menuKey}};Array.isArray(l.value)||(l.value=[]),l.value.find(p=>p.id===r)?n.value=r:(l.value=[...l.value,d],n.value=r,s("tabAdd",d)),i&&i.push({path:a.path})},_=t=>{Array.isArray(l.value)||(l.value=[]),l.value.find(r=>r.id===t.id)||l.value.push(t),n.value=t.id,s("tabAdd",t)},C=t=>{!l.value||!Array.isArray(l.value)||l.value.length===0||(l.value=l.value.filter(a=>a.id!==t),n.value===t&&Array.isArray(l.value)&&l.value.length>0&&l.value[0]?n.value=l.value[0].id:Array.isArray(l.value)&&l.value.length===0&&(n.value=void 0),s("tabClose",t))},T=t=>{n.value=t,s("tabChange",t)},v=e.computed(()=>Array.isArray(l.value)?l.value:[]);return(t,a)=>(e.openBlock(),e.createBlock(A.default,e.normalizeProps(e.guardReactiveProps(o)),{header:e.withCtx(()=>[e.renderSlot(t.$slots,"header",{isSidebarOpen:u.value,onSidebarToggle:f},()=>[e.createVNode(k.default,{"logo-text":"JWMS Portal",styletype:o.styletype,"show-sidebar-toggle":!0,"is-sidebar-open":u.value,onSidebarToggle:f},null,8,["styletype","is-sidebar-open"])])]),sidebar:e.withCtx(()=>[e.renderSlot(t.$slots,"sidebar",{isSidebarOpen:u.value},()=>[e.createVNode(S.default,{"menu-items":o.menuItems,favorites:o.favorites,permissions:o.permissions,styletype:o.styletype,"is-visible":u.value,onMenuClick:g,onFavoriteChange:a[0]||(a[0]=(r,d)=>s("favoriteChange",r,d))},null,8,["menu-items","favorites","permissions","styletype","is-visible"])])]),content:e.withCtx(()=>[e.renderSlot(t.$slots,"content",{tabs:v.value,activeTabId:n.value,tabsRef:c.value},()=>[e.createVNode(x.default,{ref_key:"tabsRef",ref:c,"initial-tabs":v.value,"default-active-id":n.value,styletype:o.styletype||"minimal",onTabAdd:_,onTabClose:C,onTabChange:T},e.createSlots({_:2},[e.renderList(v.value,r=>({name:`content-${r.id}`,fn:e.withCtx(d=>[e.renderSlot(t.$slots,`content-${r.id}`,e.normalizeProps(e.guardReactiveProps(d)),()=>[r.meta?.path&&e.unref(i)?(e.openBlock(),e.createBlock(e.unref(y.RouterView),{key:r.id})):(e.openBlock(),e.createElementBlock("div",P,[e.createElementVNode("p",w,"콘텐츠를 배치해주세요. (Path: "+e.toDisplayString(r.meta?.path||"N/A")+")",1),e.unref(i)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("p",B," Router가 없어서 슬롯으로 콘텐츠를 제공해야 합니다. "))]))])])}))]),1032,["initial-tabs","default-active-id","styletype"])])]),_:3},16))}});exports.default=R;
|
|
2
2
|
//# sourceMappingURL=JLayoutAdvanced.vue.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as B, ref as c, computed as
|
|
1
|
+
import { defineComponent as B, ref as c, computed as J, createBlock as A, openBlock as m, normalizeProps as C, guardReactiveProps as T, withCtx as v, renderSlot as p, createVNode as b, createSlots as K, renderList as L, createElementBlock as k, unref as h, createElementVNode as N, createCommentVNode as V, toDisplayString as M, nextTick as _ } from "vue";
|
|
2
2
|
import O from "./JLayout.vue.js";
|
|
3
3
|
import E from "../organisms/JHeader.vue.js";
|
|
4
4
|
import F from "../organisms/JSidebarAdvanced.vue.js";
|
|
@@ -21,10 +21,10 @@ const j = {
|
|
|
21
21
|
permissions: { default: () => [] }
|
|
22
22
|
},
|
|
23
23
|
emits: ["menuClick", "tabAdd", "tabChange", "tabClose", "favoriteChange"],
|
|
24
|
-
setup(S, { emit:
|
|
25
|
-
const r = S, s =
|
|
24
|
+
setup(S, { emit: x }) {
|
|
25
|
+
const r = S, s = x, o = c(!0), g = () => {
|
|
26
26
|
o.value = !o.value;
|
|
27
|
-
}, d = c(null), t = c([]), n = c(void 0),
|
|
27
|
+
}, d = c(null), t = c([]), n = c(void 0), $ = (e) => e ? `tab-${e.replace(/^\/+|\/+$/g, "").replace(/\//g, "-")}` : "";
|
|
28
28
|
let i = null;
|
|
29
29
|
try {
|
|
30
30
|
i = D();
|
|
@@ -41,8 +41,8 @@ const j = {
|
|
|
41
41
|
s("menuClick", e);
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
const l =
|
|
45
|
-
if (await
|
|
44
|
+
const l = $(a.path);
|
|
45
|
+
if (await _(), await _(), d.value && typeof d.value.addTab == "function")
|
|
46
46
|
try {
|
|
47
47
|
d.value.addTab({
|
|
48
48
|
id: l,
|
|
@@ -75,7 +75,7 @@ const j = {
|
|
|
75
75
|
!t.value || !Array.isArray(t.value) || t.value.length === 0 || (t.value = t.value.filter((a) => a.id !== e), n.value === e && Array.isArray(t.value) && t.value.length > 0 && t.value[0] ? n.value = t.value[0].id : Array.isArray(t.value) && t.value.length === 0 && (n.value = void 0), s("tabClose", e));
|
|
76
76
|
}, w = (e) => {
|
|
77
77
|
n.value = e, s("tabChange", e);
|
|
78
|
-
}, f =
|
|
78
|
+
}, f = J(() => Array.isArray(t.value) ? t.value : []);
|
|
79
79
|
return (e, a) => (m(), A(O, C(T(r)), {
|
|
80
80
|
header: v(() => [
|
|
81
81
|
p(e.$slots, "header", {
|
|
@@ -119,16 +119,16 @@ const j = {
|
|
|
119
119
|
onTabAdd: P,
|
|
120
120
|
onTabClose: R,
|
|
121
121
|
onTabChange: w
|
|
122
|
-
},
|
|
123
|
-
|
|
122
|
+
}, K({ _: 2 }, [
|
|
123
|
+
L(f.value, (l) => ({
|
|
124
124
|
name: `content-${l.id}`,
|
|
125
125
|
fn: v((u) => [
|
|
126
126
|
p(e.$slots, `content-${l.id}`, C(T(u)), () => [
|
|
127
127
|
l.meta?.path && h(i) ? (m(), A(h(W), {
|
|
128
128
|
key: l.id
|
|
129
|
-
})) : (m(),
|
|
130
|
-
|
|
131
|
-
h(i) ?
|
|
129
|
+
})) : (m(), k("div", j, [
|
|
130
|
+
N("p", q, "콘텐츠를 배치해주세요. (Path: " + M(l.meta?.path || "N/A") + ")", 1),
|
|
131
|
+
h(i) ? V("", !0) : (m(), k("p", G, " Router가 없어서 슬롯으로 콘텐츠를 제공해야 합니다. "))
|
|
132
132
|
]))
|
|
133
133
|
])
|
|
134
134
|
])
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),v=require("./JLayout.vue.cjs"),_=require("../organisms/JHeader.vue.cjs"),g=require("../organisms/JSidebar/JSidebar.vue.cjs"),m=require("../organisms/JPageContainer.vue.cjs"),f=require("../../composables/useBreakpoint.cjs"),y=e.defineComponent({__name:"JLayoutSimple",props:{styletype:{default:"default"},contentScroll:{type:Boolean,default:!0},class:{},menuItems:{default:()=>[]},activePath:{},storageKey:{}},emits:["menu-click"],setup(u,{emit:n}){const o=u,i=n,{isMobile:r}=f.useBreakpoint(),t=e.ref(!1);e.watch(r,a=>{a&&(t.value=!0)});const s=()=>{t.value=!t.value},d=(a,l)=>{i("menu-click",a,l),r.value&&(t.value=!0)},c=()=>{t.value=!0};return(a,l)=>(e.openBlock(),e.createBlock(v.default,e.mergeProps(o,{"sidebar-open":!t.value,onBackdropClick:c}),{header:e.withCtx(()=>[e.renderSlot(a.$slots,"header",{isSidebarCollapsed:t.value,onSidebarToggle:s},()=>[e.createVNode(_.default,{"logo-text":"JWMS Portal",styletype:o.styletype,"show-sidebar-toggle":!0,"is-sidebar-open":!t.value,onSidebarToggle:s},null,8,["styletype","is-sidebar-open"])])]),sidebar:e.withCtx(()=>[e.renderSlot(a.$slots,"sidebar",{isSidebarCollapsed:t.value},()=>[e.createVNode(g.default,{collapsed:t.value,"onUpdate:collapsed":l[0]||(l[0]=p=>t.value=p),items:o.menuItems,"active-path":o.activePath,"storage-key":o.storageKey,onMenuClick:d},null,8,["collapsed","items","active-path","storage-key"])])]),content:e.withCtx(()=>[e.renderSlot(a.$slots,"content",{},()=>[e.renderSlot(a.$slots,"default",{},()=>[e.createVNode(m.default,{title:"페이지 제목"},{default:e.withCtx(()=>[...l[1]||(l[1]=[e.createElementVNode("div",{class:"p-6"},[e.createElementVNode("p",{class:"text-muted-foreground"},"콘텐츠를 배치해주세요.")],-1)])]),_:1})])])]),_:3},16,["sidebar-open"]))}});exports.default=y;
|
|
2
2
|
//# sourceMappingURL=JLayoutSimple.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JLayoutSimple.vue.cjs","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
|
|
1
|
+
{"version":3,"file":"JLayoutSimple.vue.cjs","sources":["../../../../src/components/templates/JLayoutSimple.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch } 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 { useBreakpoint } from '@/composables/useBreakpoint'\nimport type { SidebarMenuItem } from '@/types/sidebar.types'\n\n/**\n * JLayoutSimple - JSidebar + 일반 PageContainer 조합 템플릿\n *\n * 모바일에서는 사이드바가 오버레이 드로어로 전환되며,\n * 메뉴 클릭 시 자동으로 닫힙니다.\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 { isMobile } = useBreakpoint()\nconst isSidebarCollapsed = ref(false)\n\n// 모바일 전환 시 사이드바 자동 닫기\nwatch(isMobile, (mobile) => {\n if (mobile) isSidebarCollapsed.value = true\n})\n\nconst handleSidebarToggle = () => {\n isSidebarCollapsed.value = !isSidebarCollapsed.value\n}\n\nconst handleMenuClick = (item: SidebarMenuItem, event: MouseEvent) => {\n emit('menu-click', item, event)\n // 모바일에서 메뉴 클릭 시 사이드바 자동 닫기\n if (isMobile.value) isSidebarCollapsed.value = true\n}\n\nconst handleBackdropClick = () => {\n isSidebarCollapsed.value = true\n}\n</script>\n\n<template>\n <JLayout\n v-bind=\"props\"\n :sidebar-open=\"!isSidebarCollapsed\"\n @backdrop-click=\"handleBackdropClick\"\n >\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","isMobile","useBreakpoint","isSidebarCollapsed","ref","watch","mobile","handleSidebarToggle","handleMenuClick","item","event","handleBackdropClick","_createBlock","JLayout","_mergeProps","_renderSlot","_ctx","_createVNode","JHeader","JSidebar","$event","JPageContainer","_cache","_createElementVNode"],"mappings":"mkBAyBA,MAAMA,EAAQC,EAsBRC,EAAOC,EAIP,CAAE,SAAAC,CAAA,EAAaC,gBAAA,EACfC,EAAqBC,EAAAA,IAAI,EAAK,EAGpCC,QAAMJ,EAAWK,GAAW,CACtBA,MAA2B,MAAQ,GACzC,CAAC,EAED,MAAMC,EAAsB,IAAM,CAChCJ,EAAmB,MAAQ,CAACA,EAAmB,KACjD,EAEMK,EAAkB,CAACC,EAAuBC,IAAsB,CACpEX,EAAK,aAAcU,EAAMC,CAAK,EAE1BT,EAAS,QAAOE,EAAmB,MAAQ,GACjD,EAEMQ,EAAsB,IAAM,CAChCR,EAAmB,MAAQ,EAC7B,8BAIES,EAAAA,YAuCUC,EAAAA,QAvCVC,EAAAA,WAuCUjB,EAtCK,CACZ,gBAAeM,EAAA,MACf,gBAAgBQ,CAAA,IAEN,iBACT,IAQO,CARPI,aAQOC,EAAA,OAAA,SAAA,CARc,mBAAsBb,EAAA,MAAqB,gBAAmBI,CAAA,EAAnF,IAQO,CAPLU,EAAAA,YAMEC,EAAAA,QAAA,CALA,YAAU,cACT,UAAWrB,EAAM,UACjB,sBAAqB,GACrB,mBAAkBM,EAAA,MAClB,gBAAgBI,CAAA,8CAIZ,kBACT,IAQO,CARPQ,aAQOC,EAAA,OAAA,UAAA,CARe,mBAAsBb,EAAA,KAAA,EAA5C,IAQO,CAPLc,EAAAA,YAMEE,EAAAA,QAAA,CALQ,UAAWhB,EAAA,0CAAAA,EAAkB,MAAAiB,GACpC,MAAOvB,EAAM,UACb,cAAaA,EAAM,WACnB,cAAaA,EAAM,WACnB,YAAYW,CAAA,gEAIR,kBACT,IASO,CATPO,EAAAA,WASOC,sBATP,IASO,CARLD,EAAAA,WAOOC,sBAPP,IAOO,CALLC,EAAAA,YAIiBI,EAAAA,QAAA,CAJD,MAAM,UAAQ,mBAC5B,IAEM,CAAA,GAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAFNC,EAAAA,mBAEM,MAAA,CAFD,MAAM,OAAK,CACdA,EAAAA,mBAAiD,IAAA,CAA9C,MAAM,uBAAA,EAAwB,cAAY,CAAA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
1
|
+
import { defineComponent as g, ref as y, watch as b, createBlock as k, openBlock as S, mergeProps as h, withCtx as l, renderSlot as s, createVNode as r, createElementVNode as d } from "vue";
|
|
2
|
+
import C from "./JLayout.vue.js";
|
|
3
|
+
import $ from "../organisms/JHeader.vue.js";
|
|
4
|
+
import B from "../organisms/JSidebar/JSidebar.vue.js";
|
|
5
|
+
import _ from "../organisms/JPageContainer.vue.js";
|
|
6
|
+
import { useBreakpoint as M } from "../../composables/useBreakpoint.js";
|
|
7
|
+
const L = /* @__PURE__ */ g({
|
|
7
8
|
__name: "JLayoutSimple",
|
|
8
9
|
props: {
|
|
9
10
|
styletype: { default: "default" },
|
|
@@ -14,46 +15,55 @@ const w = /* @__PURE__ */ f({
|
|
|
14
15
|
storageKey: {}
|
|
15
16
|
},
|
|
16
17
|
emits: ["menu-click"],
|
|
17
|
-
setup(
|
|
18
|
-
const a =
|
|
18
|
+
setup(u, { emit: p }) {
|
|
19
|
+
const a = u, c = p, { isMobile: i } = M(), e = y(!1);
|
|
20
|
+
b(i, (t) => {
|
|
21
|
+
t && (e.value = !0);
|
|
22
|
+
});
|
|
23
|
+
const n = () => {
|
|
19
24
|
e.value = !e.value;
|
|
20
|
-
},
|
|
21
|
-
|
|
25
|
+
}, m = (t, o) => {
|
|
26
|
+
c("menu-click", t, o), i.value && (e.value = !0);
|
|
27
|
+
}, f = () => {
|
|
28
|
+
e.value = !0;
|
|
22
29
|
};
|
|
23
|
-
return (t, o) => (
|
|
30
|
+
return (t, o) => (S(), k(C, h(a, {
|
|
31
|
+
"sidebar-open": !e.value,
|
|
32
|
+
onBackdropClick: f
|
|
33
|
+
}), {
|
|
24
34
|
header: l(() => [
|
|
25
35
|
s(t.$slots, "header", {
|
|
26
36
|
isSidebarCollapsed: e.value,
|
|
27
|
-
onSidebarToggle:
|
|
37
|
+
onSidebarToggle: n
|
|
28
38
|
}, () => [
|
|
29
|
-
r(
|
|
39
|
+
r($, {
|
|
30
40
|
"logo-text": "JWMS Portal",
|
|
31
41
|
styletype: a.styletype,
|
|
32
42
|
"show-sidebar-toggle": !0,
|
|
33
43
|
"is-sidebar-open": !e.value,
|
|
34
|
-
onSidebarToggle:
|
|
44
|
+
onSidebarToggle: n
|
|
35
45
|
}, null, 8, ["styletype", "is-sidebar-open"])
|
|
36
46
|
])
|
|
37
47
|
]),
|
|
38
48
|
sidebar: l(() => [
|
|
39
49
|
s(t.$slots, "sidebar", { isSidebarCollapsed: e.value }, () => [
|
|
40
|
-
r(
|
|
50
|
+
r(B, {
|
|
41
51
|
collapsed: e.value,
|
|
42
|
-
"onUpdate:collapsed": o[0] || (o[0] = (
|
|
52
|
+
"onUpdate:collapsed": o[0] || (o[0] = (v) => e.value = v),
|
|
43
53
|
items: a.menuItems,
|
|
44
54
|
"active-path": a.activePath,
|
|
45
55
|
"storage-key": a.storageKey,
|
|
46
|
-
onMenuClick:
|
|
56
|
+
onMenuClick: m
|
|
47
57
|
}, null, 8, ["collapsed", "items", "active-path", "storage-key"])
|
|
48
58
|
])
|
|
49
59
|
]),
|
|
50
60
|
content: l(() => [
|
|
51
61
|
s(t.$slots, "content", {}, () => [
|
|
52
62
|
s(t.$slots, "default", {}, () => [
|
|
53
|
-
r(
|
|
63
|
+
r(_, { title: "페이지 제목" }, {
|
|
54
64
|
default: l(() => [...o[1] || (o[1] = [
|
|
55
|
-
|
|
56
|
-
|
|
65
|
+
d("div", { class: "p-6" }, [
|
|
66
|
+
d("p", { class: "text-muted-foreground" }, "콘텐츠를 배치해주세요.")
|
|
57
67
|
], -1)
|
|
58
68
|
])]),
|
|
59
69
|
_: 1
|
|
@@ -62,10 +72,10 @@ const w = /* @__PURE__ */ f({
|
|
|
62
72
|
])
|
|
63
73
|
]),
|
|
64
74
|
_: 3
|
|
65
|
-
}, 16));
|
|
75
|
+
}, 16, ["sidebar-open"]));
|
|
66
76
|
}
|
|
67
77
|
});
|
|
68
78
|
export {
|
|
69
|
-
|
|
79
|
+
L as default
|
|
70
80
|
};
|
|
71
81
|
//# 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\">\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
|
|
1
|
+
{"version":3,"file":"JLayoutSimple.vue.js","sources":["../../../../src/components/templates/JLayoutSimple.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch } 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 { useBreakpoint } from '@/composables/useBreakpoint'\nimport type { SidebarMenuItem } from '@/types/sidebar.types'\n\n/**\n * JLayoutSimple - JSidebar + 일반 PageContainer 조합 템플릿\n *\n * 모바일에서는 사이드바가 오버레이 드로어로 전환되며,\n * 메뉴 클릭 시 자동으로 닫힙니다.\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 { isMobile } = useBreakpoint()\nconst isSidebarCollapsed = ref(false)\n\n// 모바일 전환 시 사이드바 자동 닫기\nwatch(isMobile, (mobile) => {\n if (mobile) isSidebarCollapsed.value = true\n})\n\nconst handleSidebarToggle = () => {\n isSidebarCollapsed.value = !isSidebarCollapsed.value\n}\n\nconst handleMenuClick = (item: SidebarMenuItem, event: MouseEvent) => {\n emit('menu-click', item, event)\n // 모바일에서 메뉴 클릭 시 사이드바 자동 닫기\n if (isMobile.value) isSidebarCollapsed.value = true\n}\n\nconst handleBackdropClick = () => {\n isSidebarCollapsed.value = true\n}\n</script>\n\n<template>\n <JLayout\n v-bind=\"props\"\n :sidebar-open=\"!isSidebarCollapsed\"\n @backdrop-click=\"handleBackdropClick\"\n >\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","isMobile","useBreakpoint","isSidebarCollapsed","ref","watch","mobile","handleSidebarToggle","handleMenuClick","item","event","handleBackdropClick","_createBlock","JLayout","_mergeProps","_renderSlot","_ctx","_createVNode","JHeader","JSidebar","$event","JPageContainer","_cache","_createElementVNode"],"mappings":";;;;;;;;;;;;;;;;;;AAyBA,UAAMA,IAAQC,GAsBRC,IAAOC,GAIP,EAAE,UAAAC,EAAA,IAAaC,EAAA,GACfC,IAAqBC,EAAI,EAAK;AAGpC,IAAAC,EAAMJ,GAAU,CAACK,MAAW;AAC1B,MAAIA,QAA2B,QAAQ;AAAA,IACzC,CAAC;AAED,UAAMC,IAAsB,MAAM;AAChC,MAAAJ,EAAmB,QAAQ,CAACA,EAAmB;AAAA,IACjD,GAEMK,IAAkB,CAACC,GAAuBC,MAAsB;AACpE,MAAAX,EAAK,cAAcU,GAAMC,CAAK,GAE1BT,EAAS,UAAOE,EAAmB,QAAQ;AAAA,IACjD,GAEMQ,IAAsB,MAAM;AAChC,MAAAR,EAAmB,QAAQ;AAAA,IAC7B;2BAIES,EAuCUC,GAvCVC,EAuCUjB,GAtCK;AAAA,MACZ,iBAAeM,EAAA;AAAA,MACf,iBAAgBQ;AAAA,IAAA;MAEN,UACT,MAQO;AAAA,QARPI,EAQOC,EAAA,QAAA,UAAA;AAAA,UARc,oBAAsBb,EAAA;AAAA,UAAqB,iBAAmBI;AAAA,QAAA,GAAnF,MAQO;AAAA,UAPLU,EAMEC,GAAA;AAAA,YALA,aAAU;AAAA,YACT,WAAWrB,EAAM;AAAA,YACjB,uBAAqB;AAAA,YACrB,oBAAkBM,EAAA;AAAA,YAClB,iBAAgBI;AAAA,UAAA;;;MAIZ,WACT,MAQO;AAAA,QARPQ,EAQOC,EAAA,QAAA,WAAA,EARe,oBAAsBb,EAAA,MAAA,GAA5C,MAQO;AAAA,UAPLc,EAMEE,GAAA;AAAA,YALQ,WAAWhB,EAAA;AAAA,yDAAAA,EAAkB,QAAAiB;AAAA,YACpC,OAAOvB,EAAM;AAAA,YACb,eAAaA,EAAM;AAAA,YACnB,eAAaA,EAAM;AAAA,YACnB,aAAYW;AAAA,UAAA;;;MAIR,WACT,MASO;AAAA,QATPO,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"),
|
|
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"),s=require("./components/atoms/JSwitch.vue.cjs"),p=require("./components/atoms/JDatepicker.vue.cjs"),n=require("./components/atoms/JDivider.vue.cjs"),o=require("./components/atoms/JEditor.vue.cjs"),l=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"),B=require("vue-sonner"),h=require("./components/atoms/JToast.vue.cjs"),A=require("./components/molecules/JFormField.vue.cjs"),x=require("./components/molecules/JGroupCombo.vue.cjs"),F=require("./components/molecules/JTabs.vue.cjs"),L=require("./components/molecules/JSearchAddr.vue.cjs"),k=require("./components/molecules/JContextMenu.vue.cjs"),M=require("./components/molecules/JCard.vue.cjs"),D=require("./components/molecules/JAlert.vue.cjs"),E=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"),_e=require("./composables/useBreakpoint.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=s.default;exports.JDatepicker=p.default;exports.JDivider=n.default;exports.JEditor=o.default;exports.JLink=l.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:()=>B.toast});exports.JToaster=h.default;exports.JFormField=A.default;exports.JGroupCombo=x.default;exports.JTabs=F.default;exports.JSearchAddr=L.default;exports.JContextMenu=k.default;exports.JCard=M.default;exports.JAlert=D.default;exports.JAccordion=E.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;exports.useBreakpoint=_e.useBreakpoint;
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|
package/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import './assets/styles/themes.css';
|
|
|
4
4
|
/* empty css */
|
|
5
5
|
/* empty css */
|
|
6
6
|
/* empty css */
|
|
7
|
-
import { default as
|
|
7
|
+
import { default as p } from "./components/atoms/JButton.vue.js";
|
|
8
8
|
import { default as l } from "./components/atoms/JInput.vue.js";
|
|
9
9
|
import { default as s } from "./components/atoms/JTextarea.vue.js";
|
|
10
10
|
import { default as J } from "./components/atoms/JCheckbox.vue.js";
|
|
@@ -16,8 +16,8 @@ import { default as h } from "./components/atoms/JDatepicker.vue.js";
|
|
|
16
16
|
import { default as y } from "./components/atoms/JDivider.vue.js";
|
|
17
17
|
import { default as B } from "./components/atoms/JEditor.vue.js";
|
|
18
18
|
import { default as L } from "./components/atoms/JLink.vue.js";
|
|
19
|
-
import { default as
|
|
20
|
-
import { default as
|
|
19
|
+
import { default as D } from "./components/atoms/JImage.vue.js";
|
|
20
|
+
import { default as M } from "./components/atoms/JBadge.vue.js";
|
|
21
21
|
import { default as I } from "./components/atoms/JProgress.vue.js";
|
|
22
22
|
/* empty css */
|
|
23
23
|
import { default as H } from "./components/atoms/JSpinner.vue.js";
|
|
@@ -29,10 +29,10 @@ import { default as V } from "./components/atoms/JLabel.vue.js";
|
|
|
29
29
|
import { default as X } from "./components/atoms/JPopover.vue.js";
|
|
30
30
|
import { default as Z } from "./components/atoms/JPreview.vue.js";
|
|
31
31
|
import { default as $ } from "./components/atoms/JGrid.vue.js";
|
|
32
|
-
import { default as
|
|
32
|
+
import { default as re } from "./components/atoms/JSplitter.vue.js";
|
|
33
33
|
import { default as oe } from "./components/atoms/JSectionTitle.vue.js";
|
|
34
34
|
import { toast as fe } from "vue-sonner";
|
|
35
|
-
import { default as
|
|
35
|
+
import { default as pe } from "./components/atoms/JToast.vue.js";
|
|
36
36
|
import { default as le } from "./components/molecules/JFormField.vue.js";
|
|
37
37
|
import { default as se } from "./components/molecules/JGroupCombo.vue.js";
|
|
38
38
|
import { default as Je } from "./components/molecules/JTabs.vue.js";
|
|
@@ -44,8 +44,8 @@ import { default as he } from "./components/molecules/JAccordion.vue.js";
|
|
|
44
44
|
import { default as ye } from "./components/molecules/JTitlebar.vue.js";
|
|
45
45
|
import { default as Be } from "./components/molecules/JButtonGroup.vue.js";
|
|
46
46
|
import { default as Le } from "./components/molecules/JBreadcrumb.vue.js";
|
|
47
|
-
import { default as
|
|
48
|
-
import { default as
|
|
47
|
+
import { default as De } from "./components/molecules/JEmptyState.vue.js";
|
|
48
|
+
import { default as Me } from "./components/organisms/JDynamicTabs.vue.js";
|
|
49
49
|
import { default as Ie } from "./components/organisms/JModal.vue.js";
|
|
50
50
|
import { default as He } from "./components/organisms/JFormModal.vue.js";
|
|
51
51
|
import { default as Re } from "./components/organisms/JDynamicForm.vue.js";
|
|
@@ -56,22 +56,23 @@ import { default as Ve } from "./components/organisms/JSidebar/JSidebar.vue.js";
|
|
|
56
56
|
import { default as Xe } from "./components/organisms/JSidebarSimple.vue.js";
|
|
57
57
|
import { default as Ze } from "./components/organisms/JSidebarAdvanced.vue.js";
|
|
58
58
|
import { default as $e } from "./components/organisms/JPageContainer.vue.js";
|
|
59
|
-
import { default as
|
|
60
|
-
import { default as
|
|
61
|
-
import { default as
|
|
62
|
-
import { default as
|
|
63
|
-
import { default as
|
|
64
|
-
import { default as
|
|
65
|
-
import { default as
|
|
59
|
+
import { default as rr } from "./components/organisms/JTree.vue.js";
|
|
60
|
+
import { default as or } from "./components/organisms/JShuttle.vue.js";
|
|
61
|
+
import { default as fr } from "./components/templates/JLayout.vue.js";
|
|
62
|
+
import { default as pr } from "./components/templates/JLayoutSimple.vue.js";
|
|
63
|
+
import { default as lr } from "./components/templates/JLayoutAdvanced.vue.js";
|
|
64
|
+
import { default as sr } from "./components/examples/ExampleCrudPage.vue.js";
|
|
65
|
+
import { default as Jr } from "./components/examples/ExampleTabMappingPage.vue.js";
|
|
66
|
+
import { useBreakpoint as nr } from "./composables/useBreakpoint.js";
|
|
66
67
|
export {
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
sr as ExampleCrudPage,
|
|
69
|
+
Jr as ExampleTabMappingPage,
|
|
69
70
|
he as JAccordion,
|
|
70
71
|
ge as JAlert,
|
|
71
72
|
R as JAvatar,
|
|
72
|
-
|
|
73
|
+
M as JBadge,
|
|
73
74
|
Le as JBreadcrumb,
|
|
74
|
-
|
|
75
|
+
p as JButton,
|
|
75
76
|
Be as JButtonGroup,
|
|
76
77
|
Te as JCard,
|
|
77
78
|
J as JCheckbox,
|
|
@@ -80,9 +81,9 @@ export {
|
|
|
80
81
|
h as JDatepicker,
|
|
81
82
|
y as JDivider,
|
|
82
83
|
Re as JDynamicForm,
|
|
83
|
-
|
|
84
|
+
Me as JDynamicTabs,
|
|
84
85
|
B as JEditor,
|
|
85
|
-
|
|
86
|
+
De as JEmptyState,
|
|
86
87
|
Ne as JFilterBar,
|
|
87
88
|
le as JFormField,
|
|
88
89
|
He as JFormModal,
|
|
@@ -90,13 +91,13 @@ export {
|
|
|
90
91
|
se as JGroupCombo,
|
|
91
92
|
Qe as JHeader,
|
|
92
93
|
Q as JIcon,
|
|
93
|
-
|
|
94
|
+
D as JImage,
|
|
94
95
|
l as JInput,
|
|
95
96
|
q as JKbd,
|
|
96
97
|
V as JLabel,
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
fr as JLayout,
|
|
99
|
+
lr as JLayoutAdvanced,
|
|
100
|
+
pr as JLayoutSimple,
|
|
100
101
|
L as JLink,
|
|
101
102
|
Ie as JModal,
|
|
102
103
|
$e as JPageContainer,
|
|
@@ -108,19 +109,20 @@ export {
|
|
|
108
109
|
b as JSearchCombo,
|
|
109
110
|
qe as JSearchPanel,
|
|
110
111
|
oe as JSectionTitle,
|
|
111
|
-
|
|
112
|
+
or as JShuttle,
|
|
112
113
|
Ve as JSidebar,
|
|
113
114
|
Ze as JSidebarAdvanced,
|
|
114
115
|
Xe as JSidebarSimple,
|
|
115
116
|
H as JSpinner,
|
|
116
|
-
|
|
117
|
+
re as JSplitter,
|
|
117
118
|
g as JSwitch,
|
|
118
119
|
Je as JTabs,
|
|
119
120
|
s as JTextarea,
|
|
120
121
|
ye as JTitlebar,
|
|
121
122
|
fe as JToast,
|
|
122
|
-
|
|
123
|
+
pe as JToaster,
|
|
123
124
|
N as JTooltip,
|
|
124
|
-
|
|
125
|
+
rr as JTree,
|
|
126
|
+
nr as useBreakpoint
|
|
125
127
|
};
|
|
126
128
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { RowClickedEvent } from 'ag-grid-community';
|
|
|
21
21
|
import { RowDoubleClickedEvent } from 'ag-grid-community';
|
|
22
22
|
import { SelectionChangedEvent } from 'ag-grid-community';
|
|
23
23
|
import { ToasterProps } from 'vue-sonner';
|
|
24
|
+
import { useBreakpoint } from './composables/useBreakpoint';
|
|
24
25
|
import { VariantProps } from 'class-variance-authority';
|
|
25
26
|
|
|
26
27
|
declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
@@ -299,9 +300,15 @@ showTitlebar: boolean;
|
|
|
299
300
|
contentScroll: boolean;
|
|
300
301
|
}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
301
302
|
|
|
302
|
-
declare const __VLS_component_24: DefineComponent<__VLS_Props_40, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
303
|
+
declare const __VLS_component_24: DefineComponent<__VLS_Props_40, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
304
|
+
"backdrop-click": () => any;
|
|
305
|
+
}, string, PublicProps, Readonly<__VLS_Props_40> & Readonly<{
|
|
306
|
+
"onBackdrop-click"?: (() => any) | undefined;
|
|
307
|
+
}>, {
|
|
303
308
|
styletype: StyleType_29;
|
|
304
309
|
contentScroll: boolean;
|
|
310
|
+
sidebarOverlay: boolean;
|
|
311
|
+
sidebarOpen: boolean;
|
|
305
312
|
}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
306
313
|
|
|
307
314
|
declare const __VLS_component_25: DefineComponent<__VLS_Props_41, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
@@ -369,6 +376,7 @@ styletype: StyleType_20;
|
|
|
369
376
|
|
|
370
377
|
declare const __VLS_component_9: DefineComponent<__VLS_Props_25, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_25> & Readonly<{}>, {
|
|
371
378
|
direction: Orientation;
|
|
379
|
+
responsive: boolean;
|
|
372
380
|
gap: number;
|
|
373
381
|
withHandle: boolean;
|
|
374
382
|
defaultSize: number;
|
|
@@ -682,6 +690,8 @@ declare type __VLS_Props_25 = {
|
|
|
682
690
|
gap?: number;
|
|
683
691
|
/** 추가 CSS 클래스 */
|
|
684
692
|
class?: string;
|
|
693
|
+
/** 모바일에서 자동 수직 전환 (기본: true) */
|
|
694
|
+
responsive?: boolean;
|
|
685
695
|
};
|
|
686
696
|
|
|
687
697
|
declare type __VLS_Props_26 = {
|
|
@@ -987,11 +997,18 @@ declare type __VLS_Props_40 = {
|
|
|
987
997
|
contentScroll?: boolean;
|
|
988
998
|
/** 추가 CSS 클래스 */
|
|
989
999
|
class?: string;
|
|
1000
|
+
/** 모바일에서 사이드바를 오버레이 드로어로 표시 */
|
|
1001
|
+
sidebarOverlay?: boolean;
|
|
1002
|
+
/** 사이드바 오버레이 열림 상태 (sidebarOverlay=true일 때만 사용) */
|
|
1003
|
+
sidebarOpen?: boolean;
|
|
990
1004
|
};
|
|
991
1005
|
|
|
992
1006
|
/**
|
|
993
1007
|
* JLayoutSimple - JSidebar + 일반 PageContainer 조합 템플릿
|
|
994
1008
|
*
|
|
1009
|
+
* 모바일에서는 사이드바가 오버레이 드로어로 전환되며,
|
|
1010
|
+
* 메뉴 클릭 시 자동으로 닫힙니다.
|
|
1011
|
+
*
|
|
995
1012
|
* @example
|
|
996
1013
|
* ```vue
|
|
997
1014
|
* <JLayoutSimple :menu-items="menuItems" storage-key="my-app-favorites">
|
|
@@ -1299,6 +1316,7 @@ declare function __VLS_template_24(): {
|
|
|
1299
1316
|
slots: {
|
|
1300
1317
|
header?(_: {}): any;
|
|
1301
1318
|
sidebar?(_: {}): any;
|
|
1319
|
+
sidebar?(_: {}): any;
|
|
1302
1320
|
content?(_: {}): any;
|
|
1303
1321
|
default?(_: {}): any;
|
|
1304
1322
|
};
|
|
@@ -3730,6 +3748,7 @@ declare type StyleType_28 = 'default' | 'minimal';
|
|
|
3730
3748
|
* @description
|
|
3731
3749
|
* 공통 레이아웃 구조를 제공하는 기본 컴포넌트입니다.
|
|
3732
3750
|
* Header, Sidebar, Content 영역을 슬롯으로 제공하여 유연한 레이아웃 구성이 가능합니다.
|
|
3751
|
+
* 모바일에서는 사이드바가 오버레이 드로어로 전환됩니다.
|
|
3733
3752
|
*
|
|
3734
3753
|
* 레이아웃 구조:
|
|
3735
3754
|
* - header: 상단 헤더 영역 (슬롯)
|
|
@@ -3750,13 +3769,6 @@ declare type StyleType_28 = 'default' | 'minimal';
|
|
|
3750
3769
|
* </template>
|
|
3751
3770
|
* </JLayout>
|
|
3752
3771
|
* ```
|
|
3753
|
-
*
|
|
3754
|
-
* @example 기본 슬롯 사용
|
|
3755
|
-
* ```vue
|
|
3756
|
-
* <JLayout>
|
|
3757
|
-
* <div>기본 콘텐츠</div>
|
|
3758
|
-
* </JLayout>
|
|
3759
|
-
* ```
|
|
3760
3772
|
*/
|
|
3761
3773
|
declare type StyleType_29 = 'default' | 'minimal';
|
|
3762
3774
|
|
|
@@ -3795,6 +3807,8 @@ declare type TitlebarButton = {
|
|
|
3795
3807
|
|
|
3796
3808
|
declare type Trigger = 'hover' | 'focus' | 'click' | 'manual';
|
|
3797
3809
|
|
|
3810
|
+
export { useBreakpoint }
|
|
3811
|
+
|
|
3798
3812
|
declare type VariantType = 'linear' | 'circular';
|
|
3799
3813
|
|
|
3800
3814
|
export { }
|