{"version":3,"file":"JPageContainer.vue.cjs","sources":["../../../../src/components/organisms/JPageContainer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport JBreadcrumb from '@/components/molecules/JBreadcrumb.vue'\nimport JTitlebar from '@/components/molecules/JTitlebar.vue'\nimport { cn } from '@/lib/utils'\nimport type { BreadcrumbItem } from '@/components/molecules/JBreadcrumb.vue'\nimport type { TitlebarButton } from '@/components/molecules/JTitlebar.vue'\n\n/**\n * JPageContainer - 기본 페이지 컨테이너 컴포넌트 (organisms)\n * Page Container Component\n * \n * @description\n * 페이지의 기본 레이아웃을 담당하는 컨테이너 컴포넌트입니다.\n * 브레드크럼, 제목 영역(JTitlebar), 콘텐츠 영역을 포함합니다.\n * \n * @example\n * ```vue\n * <JPageContainer\n *   :breadcrumb-items=\"breadcrumbItems\"\n *   title=\"페이지 제목\"\n *   :titlebar-buttons=\"buttons\"\n * >\n *   <div>페이지 콘텐츠</div>\n * </JPageContainer>\n * ```\n */\n\ntype StyleType =\n  | 'default'   // 기본 스타일\n  | 'minimal'   // 최소 스타일\n\nconst props = withDefaults(\n  defineProps<{\n    /** 브레드크럼 아이템 목록 */\n    breadcrumbItems?: BreadcrumbItem[]\n    /** 브레드크럼 표시 여부 */\n    showBreadcrumb?: boolean\n    /** JTitlebar의 모든 props 전달 */\n    title?: string\n    icon?: string\n    description?: string\n    titlebarButtons?: TitlebarButton[]\n    titlebarStyletype?: 'default' | 'primary' | 'accent' | 'neutral' | 'elevated'\n    /** JTitlebar 표시 여부 */\n    showTitlebar?: boolean\n    /** 스타일 타입 */\n    styletype?: StyleType\n    /** 콘텐츠 영역 스크롤 가능 여부 */\n    contentScroll?: boolean\n    /** 추가 CSS 클래스 */\n    class?: string\n  }>(),\n  {\n    breadcrumbItems: () => [],\n    showBreadcrumb: true,\n    showTitlebar: true,\n    styletype: 'default',\n    contentScroll: true,\n  }\n)\n\nconst emit = defineEmits<{\n  /** 브레드크럼 아이템 클릭 이벤트 */\n  breadcrumbClick: [item: BreadcrumbItem, index: number]\n  /** 타이틀바 버튼 클릭 이벤트 */\n  titlebarButtonClick: [button: TitlebarButton]\n}>()\n\n/**\n * 스타일 프리셋\n */\nconst STYLE_PRESETS: Record<StyleType, {\n  containerClass: string\n  contentClass: string\n}> = {\n  default: {\n    containerClass: 'flex flex-col h-full w-full bg-background',\n    contentClass: 'flex-1 flex flex-col p-1.5 md:p-2 gap-2 bg-background text-foreground min-h-0',\n  },\n  minimal: {\n    containerClass: 'flex flex-col h-full w-full bg-background',\n    contentClass: 'flex-1 flex flex-col p-1 md:p-1.5 gap-1 bg-background text-foreground min-h-0',\n  },\n}\n\nconst preset = computed(() => {\n  return STYLE_PRESETS[props.styletype] ?? STYLE_PRESETS.default\n})\n\n/**\n * 콘텐츠 클래스 (스크롤 포함)\n */\nconst contentClasses = computed(() => {\n  return cn(\n    preset.value.contentClass,\n    props.contentScroll ? 'overflow-auto' : 'overflow-hidden'\n  )\n})\n\n/**\n * 브레드크럼 아이템 클릭 핸들러\n */\nconst handleBreadcrumbClick = (item: BreadcrumbItem, index: number) => {\n  emit('breadcrumbClick', item, index)\n}\n\n/**\n * 타이틀바 버튼 클릭 핸들러\n */\nconst handleTitlebarButtonClick = (button: TitlebarButton) => {\n  emit('titlebarButtonClick', button)\n}\n</script>\n\n<template>\n  <div :class=\"cn(preset.containerClass, props.class)\">\n    <!-- 브레드크럼 -->\n    <JBreadcrumb\n      v-if=\"showBreadcrumb && breadcrumbItems && breadcrumbItems.length > 0\"\n      :items=\"breadcrumbItems\"\n      @item-click=\"handleBreadcrumbClick\"\n    />\n\n    <!-- 제목 영역 (JTitlebar) -->\n    <JTitlebar\n      v-if=\"showTitlebar\"\n      :title=\"title\"\n      :icon=\"icon\"\n      :description=\"description\"\n      :buttons=\"titlebarButtons\"\n      :styletype=\"titlebarStyletype\"\n      @button-click=\"handleTitlebarButtonClick\"\n    >\n      <template #buttons>\n        <slot name=\"titlebar-buttons\" />\n      </template>\n    </JTitlebar>\n\n    <!-- 콘텐츠 영역 -->\n    <div :class=\"contentClasses\">\n      <slot />\n    </div>\n  </div>\n</template>\n"],"names":["props","__props","emit","__emit","STYLE_PRESETS","preset","computed","contentClasses","cn","handleBreadcrumbClick","item","index","handleTitlebarButtonClick","button","_createElementBlock","_normalizeClass","_unref","_createBlock","JBreadcrumb","JTitlebar","_renderSlot","_ctx","_createElementVNode"],"mappings":"6nBAgCA,MAAMA,EAAQC,EA8BRC,EAAOC,EAUPC,EAGD,CACH,QAAS,CACP,eAAgB,4CAChB,aAAc,+EAAA,EAEhB,QAAS,CACP,eAAgB,4CAChB,aAAc,+EAAA,CAChB,EAGIC,EAASC,EAAAA,SAAS,IACfF,EAAcJ,EAAM,SAAS,GAAKI,EAAc,OACxD,EAKKG,EAAiBD,EAAAA,SAAS,IACvBE,EAAAA,GACLH,EAAO,MAAM,aACbL,EAAM,cAAgB,gBAAkB,iBAAA,CAE3C,EAKKS,EAAwB,CAACC,EAAsBC,IAAkB,CACrET,EAAK,kBAAmBQ,EAAMC,CAAK,CACrC,EAKMC,EAA6BC,GAA2B,CAC5DX,EAAK,sBAAuBW,CAAM,CACpC,8BAIEC,EAAAA,mBA2BM,MAAA,CA3BA,MAAKC,EAAAA,eAAEC,EAAAA,YAAGX,EAAA,MAAO,eAAgBL,EAAM,KAAK,CAAA,CAAA,GAGxCC,EAAA,gBAAkBA,EAAA,iBAAmBA,EAAA,gBAAgB,OAAM,iBADnEgB,EAAAA,YAIEC,EAAAA,QAAA,OAFC,MAAOjB,EAAA,gBACP,YAAYQ,CAAA,iDAKPR,EAAA,4BADRgB,EAAAA,YAYYE,EAAAA,QAAA,OAVT,MAAOlB,EAAA,MACP,KAAMA,EAAA,KACN,YAAaA,EAAA,YACb,QAASA,EAAA,gBACT,UAAWA,EAAA,kBACX,cAAcW,CAAA,GAEJ,kBACT,IAAgC,CAAhCQ,aAAgCC,EAAA,OAAA,kBAAA,CAAA,6FAKpCC,EAAAA,mBAEM,MAAA,CAFA,uBAAOf,EAAA,KAAc,CAAA,GACzBa,aAAQC,EAAA,OAAA,SAAA,CAAA"}