@j-solution/components 1.6.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -6
- package/assets/jwms-portal-frontend-BtHTA-UF.css +1 -0
- package/assets/styles/global-utilities.css +34 -0
- package/assets/styles/j-components.css +1 -1
- package/assets/styles/themes.css +128 -21
- package/components/atoms/JAvatar.vue.cjs +1 -1
- package/components/atoms/JAvatar.vue.cjs.map +1 -1
- package/components/atoms/JAvatar.vue.js +10 -7
- package/components/atoms/JAvatar.vue.js.map +1 -1
- package/components/atoms/JBadge.vue.cjs +1 -1
- package/components/atoms/JBadge.vue.cjs.map +1 -1
- package/components/atoms/JBadge.vue.js +7 -6
- package/components/atoms/JBadge.vue.js.map +1 -1
- package/components/atoms/JButton.vue.cjs +6 -1
- package/components/atoms/JButton.vue.cjs.map +1 -1
- package/components/atoms/JButton.vue.js +10 -85
- package/components/atoms/JButton.vue.js.map +1 -1
- package/components/atoms/JButton.vue2.cjs +1 -1
- package/components/atoms/JButton.vue2.cjs.map +1 -1
- package/components/atoms/JButton.vue2.js +85 -2
- package/components/atoms/JButton.vue2.js.map +1 -1
- package/components/atoms/JDatepicker.vue.cjs +1 -1
- package/components/atoms/JDatepicker.vue.cjs.map +1 -1
- package/components/atoms/JDatepicker.vue.js +10 -10
- package/components/atoms/JDatepicker.vue.js.map +1 -1
- package/components/atoms/JEditor.vue.cjs +1 -1
- package/components/atoms/JEditor.vue.js +1 -1
- package/components/atoms/JEditor.vue2.cjs +1 -1
- package/components/atoms/JEditor.vue2.cjs.map +1 -1
- package/components/atoms/JEditor.vue2.js +31 -17
- 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 +59 -43
- package/components/atoms/JGrid.vue2.js.map +1 -1
- package/components/atoms/JIcon.vue.cjs +1 -1
- package/components/atoms/JIcon.vue.cjs.map +1 -1
- package/components/atoms/JIcon.vue.js +14 -13
- package/components/atoms/JIcon.vue.js.map +1 -1
- package/components/atoms/JKbd.vue.cjs +1 -1
- package/components/atoms/JKbd.vue.cjs.map +1 -1
- package/components/atoms/JKbd.vue.js +13 -10
- package/components/atoms/JKbd.vue.js.map +1 -1
- package/components/atoms/JLabel.vue.cjs +1 -1
- package/components/atoms/JLabel.vue.cjs.map +1 -1
- package/components/atoms/JLabel.vue.js +26 -22
- package/components/atoms/JLabel.vue.js.map +1 -1
- package/components/atoms/JLink.vue.cjs +1 -1
- package/components/atoms/JLink.vue.cjs.map +1 -1
- package/components/atoms/JLink.vue.js +5 -5
- package/components/atoms/JLink.vue.js.map +1 -1
- package/components/atoms/JPreview.vue.cjs +1 -1
- package/components/atoms/JPreview.vue.js +2 -2
- package/components/atoms/JPreview.vue2.cjs +1 -1
- package/components/atoms/JPreview.vue2.cjs.map +1 -1
- package/components/atoms/JPreview.vue2.js +33 -20
- package/components/atoms/JPreview.vue2.js.map +1 -1
- package/components/atoms/JProgress.vue.cjs +1 -1
- package/components/atoms/JProgress.vue.cjs.map +1 -1
- package/components/atoms/JProgress.vue.js +15 -9
- package/components/atoms/JProgress.vue.js.map +1 -1
- package/components/atoms/JRadio.vue.cjs +1 -1
- package/components/atoms/JRadio.vue.cjs.map +1 -1
- package/components/atoms/JRadio.vue.js +1 -1
- package/components/atoms/JRadio.vue.js.map +1 -1
- package/components/atoms/JSearchCombo.vue.cjs +1 -1
- package/components/atoms/JSearchCombo.vue.cjs.map +1 -1
- package/components/atoms/JSearchCombo.vue.js +38 -37
- package/components/atoms/JSearchCombo.vue.js.map +1 -1
- package/components/atoms/JSectionTitle.vue.cjs +7 -0
- package/components/atoms/JSectionTitle.vue.cjs.map +1 -0
- package/components/atoms/JSectionTitle.vue.js +13 -0
- package/components/atoms/JSectionTitle.vue.js.map +1 -0
- package/components/atoms/JSectionTitle.vue2.cjs +2 -0
- package/components/atoms/JSectionTitle.vue2.cjs.map +1 -0
- package/components/atoms/JSectionTitle.vue2.js +67 -0
- package/components/atoms/JSectionTitle.vue2.js.map +1 -0
- package/components/atoms/JSpinner.vue.cjs +1 -1
- package/components/atoms/JSpinner.vue.cjs.map +1 -1
- package/components/atoms/JSpinner.vue.js +8 -7
- package/components/atoms/JSpinner.vue.js.map +1 -1
- package/components/atoms/JSplitter.vue.cjs +6 -1
- package/components/atoms/JSplitter.vue.cjs.map +1 -1
- package/components/atoms/JSplitter.vue.js +10 -54
- package/components/atoms/JSplitter.vue.js.map +1 -1
- package/components/atoms/JSplitter.vue2.cjs +1 -1
- package/components/atoms/JSplitter.vue2.cjs.map +1 -1
- package/components/atoms/JSplitter.vue2.js +59 -2
- package/components/atoms/JSplitter.vue2.js.map +1 -1
- package/components/atoms/JTooltip.vue.cjs +1 -1
- package/components/atoms/JTooltip.vue.cjs.map +1 -1
- package/components/atoms/JTooltip.vue.js +18 -15
- package/components/atoms/JTooltip.vue.js.map +1 -1
- package/components/examples/ExampleCrudPage.vue.cjs +1 -1
- package/components/examples/ExampleCrudPage.vue.cjs.map +1 -1
- package/components/examples/ExampleCrudPage.vue.js +265 -191
- package/components/examples/ExampleCrudPage.vue.js.map +1 -1
- package/components/examples/ExampleTabMappingPage.vue.cjs +1 -1
- package/components/examples/ExampleTabMappingPage.vue.cjs.map +1 -1
- package/components/examples/ExampleTabMappingPage.vue.js +349 -333
- package/components/examples/ExampleTabMappingPage.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 +18 -16
- package/components/molecules/JAlert.vue.js.map +1 -1
- package/components/molecules/JBreadcrumb.vue.cjs +1 -1
- package/components/molecules/JBreadcrumb.vue.cjs.map +1 -1
- package/components/molecules/JBreadcrumb.vue.js +3 -3
- package/components/molecules/JBreadcrumb.vue.js.map +1 -1
- package/components/molecules/JCard.vue.cjs +1 -1
- package/components/molecules/JCard.vue.cjs.map +1 -1
- package/components/molecules/JCard.vue.js +55 -39
- package/components/molecules/JCard.vue.js.map +1 -1
- package/components/molecules/JEmptyState.vue.cjs +7 -0
- package/components/molecules/JEmptyState.vue.cjs.map +1 -0
- package/components/molecules/JEmptyState.vue.js +13 -0
- package/components/molecules/JEmptyState.vue.js.map +1 -0
- package/components/molecules/JEmptyState.vue2.cjs +2 -0
- package/components/molecules/JEmptyState.vue2.cjs.map +1 -0
- package/components/molecules/JEmptyState.vue2.js +127 -0
- package/components/molecules/JEmptyState.vue2.js.map +1 -0
- package/components/molecules/JFormField.vue.cjs +6 -1
- package/components/molecules/JFormField.vue.cjs.map +1 -1
- package/components/molecules/JFormField.vue.js +10 -262
- package/components/molecules/JFormField.vue.js.map +1 -1
- package/components/molecules/JFormField.vue2.cjs +2 -0
- package/components/molecules/JFormField.vue2.cjs.map +1 -0
- package/components/molecules/JFormField.vue2.js +271 -0
- package/components/molecules/JFormField.vue2.js.map +1 -0
- package/components/molecules/JTabs.vue.cjs +1 -1
- package/components/molecules/JTabs.vue.js +1 -1
- package/components/molecules/JTabs.vue2.cjs +1 -1
- package/components/molecules/JTabs.vue2.cjs.map +1 -1
- package/components/molecules/JTabs.vue2.js +50 -56
- 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 +49 -47
- 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 +35 -32
- package/components/organisms/JDynamicForm.vue2.js.map +1 -1
- package/components/organisms/JDynamicTabs.vue.cjs +1 -1
- package/components/organisms/JDynamicTabs.vue.cjs.map +1 -1
- package/components/organisms/JDynamicTabs.vue.js +47 -52
- package/components/organisms/JDynamicTabs.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue.cjs +6 -1
- package/components/organisms/JFilterBar.vue.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue.js +10 -137
- package/components/organisms/JFilterBar.vue.js.map +1 -1
- package/components/organisms/JFilterBar.vue2.cjs +1 -1
- package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue2.js +141 -2
- 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 +54 -49
- package/components/organisms/JFormModal.vue.js.map +1 -1
- package/components/organisms/JHeader.vue.cjs +1 -1
- package/components/organisms/JHeader.vue.cjs.map +1 -1
- package/components/organisms/JHeader.vue.js +211 -208
- package/components/organisms/JHeader.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 +31 -26
- package/components/organisms/JModal.vue.js.map +1 -1
- package/components/organisms/JPageContainer.vue.cjs +1 -1
- package/components/organisms/JPageContainer.vue.cjs.map +1 -1
- package/components/organisms/JPageContainer.vue.js +22 -22
- 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 +34 -32
- package/components/organisms/JSearchPanel.vue2.js.map +1 -1
- package/components/organisms/JShuttle.vue.cjs +7 -0
- package/components/organisms/JShuttle.vue.cjs.map +1 -0
- package/components/organisms/JShuttle.vue.js +13 -0
- package/components/organisms/JShuttle.vue.js.map +1 -0
- package/components/organisms/JShuttle.vue2.cjs +2 -0
- package/components/organisms/JShuttle.vue2.cjs.map +1 -0
- package/components/organisms/JShuttle.vue2.js +216 -0
- package/components/organisms/JShuttle.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 +1 -1
- package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -1
- package/components/organisms/JSidebarAdvanced.vue2.js +40 -40
- package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -1
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +1 -1
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -1
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +83 -63
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.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 +1 -1
- package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -1
- package/components/organisms/JSidebarSimple.vue2.js +2 -2
- package/components/organisms/JSidebarSimple.vue2.js.map +1 -1
- package/components/shadcn/AccordionTrigger.vue.cjs +1 -1
- package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -1
- package/components/shadcn/AccordionTrigger.vue.js +3 -3
- package/components/shadcn/AccordionTrigger.vue.js.map +1 -1
- package/components/shadcn/Card.vue.cjs +1 -1
- package/components/shadcn/Card.vue.cjs.map +1 -1
- package/components/shadcn/Card.vue.js +1 -1
- package/components/shadcn/Card.vue.js.map +1 -1
- package/components/shadcn/CardContent.vue.cjs +1 -1
- package/components/shadcn/CardContent.vue.cjs.map +1 -1
- package/components/shadcn/CardContent.vue.js +4 -4
- package/components/shadcn/CardContent.vue.js.map +1 -1
- package/components/shadcn/CardDescription.vue.cjs +1 -1
- package/components/shadcn/CardDescription.vue.cjs.map +1 -1
- package/components/shadcn/CardDescription.vue.js +1 -1
- package/components/shadcn/CardDescription.vue.js.map +1 -1
- package/components/shadcn/CardFooter.vue.cjs +1 -1
- package/components/shadcn/CardFooter.vue.cjs.map +1 -1
- package/components/shadcn/CardFooter.vue.js +7 -7
- package/components/shadcn/CardFooter.vue.js.map +1 -1
- package/components/shadcn/CardHeader.vue.cjs +1 -1
- package/components/shadcn/CardHeader.vue.cjs.map +1 -1
- package/components/shadcn/CardHeader.vue.js +8 -8
- package/components/shadcn/CardHeader.vue.js.map +1 -1
- package/components/shadcn/CardTitle.vue.cjs +1 -1
- package/components/shadcn/CardTitle.vue.cjs.map +1 -1
- package/components/shadcn/CardTitle.vue.js +5 -5
- package/components/shadcn/CardTitle.vue.js.map +1 -1
- package/components/shadcn/Input.vue.cjs +1 -1
- package/components/shadcn/Input.vue.cjs.map +1 -1
- package/components/shadcn/Input.vue.js +3 -3
- package/components/shadcn/Input.vue.js.map +1 -1
- package/components/shadcn/SelectTrigger.vue.cjs +1 -1
- package/components/shadcn/SelectTrigger.vue.cjs.map +1 -1
- package/components/shadcn/SelectTrigger.vue.js +2 -2
- package/components/shadcn/SelectTrigger.vue.js.map +1 -1
- package/components/shadcn/Switch.vue.cjs +1 -1
- package/components/shadcn/Switch.vue.cjs.map +1 -1
- package/components/shadcn/Switch.vue.js +2 -2
- package/components/shadcn/Switch.vue.js.map +1 -1
- package/components/shadcn/TabsContent.vue.cjs +1 -1
- package/components/shadcn/TabsContent.vue.cjs.map +1 -1
- package/components/shadcn/TabsContent.vue.js +1 -1
- package/components/shadcn/TabsContent.vue.js.map +1 -1
- package/components/shadcn/TabsList.vue.cjs +1 -1
- package/components/shadcn/TabsList.vue.cjs.map +1 -1
- package/components/shadcn/TabsList.vue.js +10 -10
- package/components/shadcn/TabsList.vue.js.map +1 -1
- package/components/shadcn/TabsTrigger.vue.cjs +1 -1
- package/components/shadcn/TabsTrigger.vue.cjs.map +1 -1
- package/components/shadcn/TabsTrigger.vue.js +4 -4
- package/components/shadcn/TabsTrigger.vue.js.map +1 -1
- package/components/shadcn/Textarea.vue.cjs +1 -1
- package/components/shadcn/Textarea.vue.cjs.map +1 -1
- package/components/shadcn/Textarea.vue.js +2 -2
- package/components/shadcn/Textarea.vue.js.map +1 -1
- package/components/shadcn/index.cjs +1 -1
- package/components/shadcn/index.cjs.map +1 -1
- package/components/shadcn/index.js +9 -8
- package/components/shadcn/index.js.map +1 -1
- package/components/templates/JLayout.vue.cjs.map +1 -1
- package/components/templates/JLayout.vue.js.map +1 -1
- package/index.cjs +1 -1
- package/index.js +73 -67
- package/package.json +1 -1
- package/types/index.d.ts +1025 -766
- package/assets/jwms-portal-frontend-DntSIcYt.css +0 -1
- package/components/molecules/JFormField.vue3.cjs +0 -2
- package/components/molecules/JFormField.vue3.cjs.map +0 -1
- package/components/molecules/JFormField.vue3.js +0 -6
- package/components/molecules/JFormField.vue3.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JKbd.vue.cjs","sources":["../../../../src/components/atoms/JKbd.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Kbd from '@/components/shadcn/Kbd.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'sm' | 'md' | 'lg'\
|
|
1
|
+
{"version":3,"file":"JKbd.vue.cjs","sources":["../../../../src/components/atoms/JKbd.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Kbd from '@/components/shadcn/Kbd.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'xs' | 'sm' | 'md' | 'lg'\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 키보드 키 크기 */\r\n size?: SizeType\r\n }>(),\r\n {\n styletype: 'default',\n size: 'sm',\n },\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: 'bg-blue-100 text-blue-800 border-blue-200',\r\n },\r\n success: { \r\n class: 'bg-green-100 text-green-800 border-green-200',\r\n },\r\n warning: { \r\n class: 'bg-amber-100 text-amber-800 border-amber-200',\r\n },\r\n danger: { \r\n class: 'bg-red-100 text-red-800 border-red-200',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\n xs: { \n class: 'h-3.5 px-0.5 text-[10px] min-w-[14px]',\n },\n sm: { \n class: 'h-4 px-1 text-xs min-w-[16px]',\n },\n md: { \n class: 'h-5 px-1.5 text-xs',\n },\n lg: { \n class: 'h-6 px-2 text-sm',\n },\n}\n\r\n/** 최종 바인딩: styletype과 size를 병합하여 최종 클래스 생성 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Kbd v-bind=\"mapped\">\r\n <slot />\r\n </Kbd>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","stylePreset","sizePreset","_openBlock","_createBlock","Kbd","_renderSlot","_ctx"],"mappings":"qRAaA,MAAMA,EAAQC,EAiBRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,QAAS,CACP,MAAO,2CAAA,EAET,QAAS,CACP,MAAO,8CAAA,EAET,QAAS,CACP,MAAO,8CAAA,EAET,OAAQ,CACN,MAAO,wCAAA,CACT,EAMIC,EAAoD,CACxD,GAAI,CACF,MAAO,uCAAA,EAET,GAAI,CACF,MAAO,+BAAA,EAET,GAAI,CACF,MAAO,oBAAA,EAET,GAAI,CACF,MAAO,kBAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAcJ,EAAcF,EAAM,SAAU,EAC5CO,EAAaJ,EAAaH,EAAM,IAAK,EAG3C,MAAO,CACL,MAHiB,CAACM,EAAY,MAAOC,EAAW,MAAOP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAGrF,CAEX,CAAC,gBAICQ,EAAAA,UAAA,EAAAC,EAAAA,YAEMC,EAAAA,8CAFON,EAAA,KAAM,CAAA,EAAA,mBACjB,IAAQ,CAARO,aAAQC,EAAA,OAAA,SAAA,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
3
|
-
const S = /* @__PURE__ */
|
|
1
|
+
import { defineComponent as o, computed as n, createBlock as p, openBlock as d, normalizeProps as m, guardReactiveProps as x, withCtx as i, renderSlot as u } from "vue";
|
|
2
|
+
import b from "../shadcn/Kbd.vue.js";
|
|
3
|
+
const S = /* @__PURE__ */ o({
|
|
4
4
|
__name: "JKbd",
|
|
5
5
|
props: {
|
|
6
6
|
class: {},
|
|
7
7
|
styletype: { default: "default" },
|
|
8
|
-
size: { default: "
|
|
8
|
+
size: { default: "sm" }
|
|
9
9
|
},
|
|
10
10
|
setup(r) {
|
|
11
11
|
const e = r, a = {
|
|
@@ -23,24 +23,27 @@ const S = /* @__PURE__ */ c({
|
|
|
23
23
|
class: "bg-red-100 text-red-800 border-red-200"
|
|
24
24
|
}
|
|
25
25
|
}, l = {
|
|
26
|
+
xs: {
|
|
27
|
+
class: "h-3.5 px-0.5 text-[10px] min-w-[14px]"
|
|
28
|
+
},
|
|
26
29
|
sm: {
|
|
27
|
-
class: "h-4 px-1 text-xs"
|
|
30
|
+
class: "h-4 px-1 text-xs min-w-[16px]"
|
|
28
31
|
},
|
|
29
32
|
md: {
|
|
30
|
-
class: "h-5 px-1.5 text-
|
|
33
|
+
class: "h-5 px-1.5 text-xs"
|
|
31
34
|
},
|
|
32
35
|
lg: {
|
|
33
|
-
class: "h-6 px-2 text-
|
|
36
|
+
class: "h-6 px-2 text-sm"
|
|
34
37
|
}
|
|
35
|
-
},
|
|
38
|
+
}, c = n(() => {
|
|
36
39
|
const s = a[e.styletype], t = l[e.size];
|
|
37
40
|
return {
|
|
38
41
|
class: [s.class, t.class, e.class].filter(Boolean).join(" ")
|
|
39
42
|
};
|
|
40
43
|
});
|
|
41
|
-
return (s, t) => (
|
|
44
|
+
return (s, t) => (d(), p(b, m(x(c.value)), {
|
|
42
45
|
default: i(() => [
|
|
43
|
-
|
|
46
|
+
u(s.$slots, "default")
|
|
44
47
|
]),
|
|
45
48
|
_: 3
|
|
46
49
|
}, 16));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JKbd.vue.js","sources":["../../../../src/components/atoms/JKbd.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Kbd from '@/components/shadcn/Kbd.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'sm' | 'md' | 'lg'\
|
|
1
|
+
{"version":3,"file":"JKbd.vue.js","sources":["../../../../src/components/atoms/JKbd.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport Kbd from '@/components/shadcn/Kbd.vue'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'primary' // 강조 스타일 (파랑)\r\n | 'success' // 성공 스타일 (초록)\r\n | 'warning' // 경고 스타일 (주황)\r\n | 'danger' // 위험 스타일 (빨강)\r\n\r\ntype SizeType = 'xs' | 'sm' | 'md' | 'lg'\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n class?: string\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** 키보드 키 크기 */\r\n size?: SizeType\r\n }>(),\r\n {\n styletype: 'default',\n size: 'sm',\n },\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n primary: { \r\n class: 'bg-blue-100 text-blue-800 border-blue-200',\r\n },\r\n success: { \r\n class: 'bg-green-100 text-green-800 border-green-200',\r\n },\r\n warning: { \r\n class: 'bg-amber-100 text-amber-800 border-amber-200',\r\n },\r\n danger: { \r\n class: 'bg-red-100 text-red-800 border-red-200',\r\n },\r\n}\r\n\r\n/**\r\n * size -> class 매핑\r\n */\r\nconst SIZE_PRESETS: Record<SizeType, { class: string }> = {\n xs: { \n class: 'h-3.5 px-0.5 text-[10px] min-w-[14px]',\n },\n sm: { \n class: 'h-4 px-1 text-xs min-w-[16px]',\n },\n md: { \n class: 'h-5 px-1.5 text-xs',\n },\n lg: { \n class: 'h-6 px-2 text-sm',\n },\n}\n\r\n/** 최종 바인딩: styletype과 size를 병합하여 최종 클래스 생성 */\r\nconst mapped = computed(() => {\r\n const stylePreset = STYLE_PRESETS[props.styletype!]\r\n const sizePreset = SIZE_PRESETS[props.size!]\r\n const finalClass = [stylePreset.class, sizePreset.class, props.class].filter(Boolean).join(' ')\r\n \r\n return {\r\n class: finalClass,\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Kbd v-bind=\"mapped\">\r\n <slot />\r\n </Kbd>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","SIZE_PRESETS","mapped","computed","stylePreset","sizePreset","_openBlock","_createBlock","Kbd","_renderSlot","_ctx"],"mappings":";;;;;;;;;;AAaA,UAAMA,IAAQC,GAiBRC,IAAsD;AAAA,MAC1D,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,QAAQ;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT,GAMIC,IAAoD;AAAA,MACxD,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,IACT,GAIIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAcJ,EAAcF,EAAM,SAAU,GAC5CO,IAAaJ,EAAaH,EAAM,IAAK;AAG3C,aAAO;AAAA,QACL,OAHiB,CAACM,EAAY,OAAOC,EAAW,OAAOP,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAGrF;AAAA,IAEX,CAAC;sBAICQ,EAAA,GAAAC,EAEMC,OAFON,EAAA,KAAM,CAAA,GAAA;AAAA,iBACjB,MAAQ;AAAA,QAARO,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const u=require("../shadcn/Label.vue.cjs"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const n=require("../../lib/utils.cjs"),u=require("../shadcn/Label.vue.cjs"),d={key:0,class:"text-red-500 mr-1"},i={key:1,class:"text-red-500 mr-1"},f=e.defineComponent({__name:"JLabel",props:{text:{default:""},required:{type:Boolean,default:!1},styletype:{default:"default"},for:{},class:{}},setup(s){const t=s,l={default:{class:""},required:{class:"text-red-600"},optional:{class:"text-gray-500"},error:{class:"text-red-600"},success:{class:"text-green-600"},warning:{class:"text-amber-600"},sm:{class:"text-xs"},lg:{class:"text-base"}},a=e.computed(()=>{const r=t.styletype||"default",o=l[r]??l.default;return{for:t.for,class:o?.class||""}}),c=e.computed(()=>t.text?t.text:"");return(r,o)=>(e.openBlock(),e.createBlock(e.unref(u.default),{for:a.value.for,class:e.normalizeClass(e.unref(n.cn)("text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",a.value.class,t.class))},{default:e.withCtx(()=>[s.required&&s.styletype==="required"?(e.openBlock(),e.createElementBlock("span",d,"*")):s.required?(e.openBlock(),e.createElementBlock("span",i,"*")):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(c.value)+" ",1),e.renderSlot(r.$slots,"default")]),_:3},8,["for","class"]))}});exports.default=f;
|
|
2
2
|
//# sourceMappingURL=JLabel.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JLabel.vue.cjs","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Label } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'required' // 필수 필드 표시 (빨간 별표)\r\n | 'optional' // 선택 필드 표시 (회색 텍스트)\r\n | 'error' // 에러 상태 (빨간 텍스트)\r\n | 'success' // 성공 상태 (초록 텍스트)\r\n | 'warning' // 경고 상태 (주황 텍스트)\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 라벨 텍스트 */\r\n text?: string\r\n /** 필수 필드 여부 */\r\n required?: boolean\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** HTML for 속성 (연결할 input의 id) */\r\n for?: string\r\n }>(),\r\n {\r\n text: '',\r\n required: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n required: { \r\n class: 'text-red-600',\r\n },\r\n optional: { \r\n class: 'text-gray-500',\r\n },\r\n error: { \r\n class: 'text-red-600',\r\n },\r\n success: { \r\n class: 'text-green-600',\r\n },\r\n warning: { \r\n class: 'text-amber-600',\r\n },\r\n sm: { \r\n class: 'text-xs',\r\n },\r\n lg: { \r\n class: 'text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\r\nconst mapped = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n \r\n return {\r\n for: props.for,\r\n class: preset?.class || '',\r\n }\r\n})\r\n\r\nconst displayText = computed(() => {\r\n if (props.text) {\r\n return props.text\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\r\n <Label
|
|
1
|
+
{"version":3,"file":"JLabel.vue.cjs","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Label } from '@/components/shadcn'\r\nimport { cn } from '@/lib/utils'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'required' // 필수 필드 표시 (빨간 별표)\r\n | 'optional' // 선택 필드 표시 (회색 텍스트)\r\n | 'error' // 에러 상태 (빨간 텍스트)\r\n | 'success' // 성공 상태 (초록 텍스트)\r\n | 'warning' // 경고 상태 (주황 텍스트)\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 라벨 텍스트 */\r\n text?: string\r\n /** 필수 필드 여부 */\r\n required?: boolean\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** HTML for 속성 (연결할 input의 id) */\r\n for?: string\r\n /** 추가 클래스 (외부 커스터마이징용) */\r\n class?: string\r\n }>(),\r\n {\r\n text: '',\r\n required: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n required: { \r\n class: 'text-red-600',\r\n },\r\n optional: { \r\n class: 'text-gray-500',\r\n },\r\n error: { \r\n class: 'text-red-600',\r\n },\r\n success: { \r\n class: 'text-green-600',\r\n },\r\n warning: { \r\n class: 'text-amber-600',\r\n },\r\n sm: { \r\n class: 'text-xs',\r\n },\r\n lg: { \r\n class: 'text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\r\nconst mapped = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n \r\n return {\r\n for: props.for,\r\n class: preset?.class || '',\r\n }\r\n})\r\n\r\nconst displayText = computed(() => {\r\n if (props.text) {\r\n return props.text\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\r\n <Label\r\n :for=\"mapped.for\"\r\n :class=\"cn(\r\n 'text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\r\n mapped.class,\r\n props.class\r\n )\"\r\n >\r\n <span v-if=\"required && styletype === 'required'\" class=\"text-red-500 mr-1\">*</span>\r\n <span v-else-if=\"required\" class=\"text-red-500 mr-1\">*</span>\r\n {{ displayText }}\r\n <slot />\r\n </Label>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","displayText","_createBlock","_unref","Label","cn","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_renderSlot","_ctx"],"mappings":"+cAgBA,MAAMA,EAAQC,EAuBRC,EAAsD,CAC1D,QAAS,CAAE,MAAO,EAAA,EAClB,SAAU,CACR,MAAO,cAAA,EAET,SAAU,CACR,MAAO,eAAA,EAET,MAAO,CACL,MAAO,cAAA,EAET,QAAS,CACP,MAAO,gBAAA,EAET,QAAS,CACP,MAAO,gBAAA,EAET,GAAI,CACF,MAAO,SAAA,EAET,GAAI,CACF,MAAO,WAAA,CACT,EAIIC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWL,EAAM,WAAa,UAC9BM,EAASJ,EAAcG,CAAQ,GAAKH,EAAc,QAExD,MAAO,CACL,IAAKF,EAAM,IACX,MAAOM,GAAQ,OAAS,EAAA,CAE5B,CAAC,EAEKC,EAAcH,EAAAA,SAAS,IACvBJ,EAAM,KACDA,EAAM,KAER,EACR,8BAICQ,EAAAA,YAYQC,EAAAA,MAAAC,EAAAA,OAAA,EAAA,CAXL,IAAKP,EAAA,MAAO,IACZ,uBAAOM,EAAAA,MAAAE,IAAA,+FAAgHR,EAAA,MAAO,MAAcH,EAAM,KAAA,uBAMnJ,IAAoF,CAAxEC,EAAA,UAAYA,EAAA,YAAS,0BAAjCW,EAAAA,mBAAoF,OAApFC,EAA4E,GAAC,GAC5DZ,EAAA,wBAAjBW,EAAAA,mBAA6D,OAA7DE,EAAqD,GAAC,iDAAO,IAC7DC,kBAAGR,EAAA,KAAW,EAAG,IACjB,CAAA,EAAAS,aAAQC,EAAA,OAAA,SAAA,CAAA"}
|
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as i, computed as c, createBlock as f, openBlock as r, unref as n, normalizeClass as m, withCtx as p, createElementBlock as d, createCommentVNode as x, createTextVNode as y, renderSlot as _, toDisplayString as g } from "vue";
|
|
2
2
|
import "../shadcn/index.js";
|
|
3
|
-
import b from "
|
|
4
|
-
|
|
3
|
+
import { cn as b } from "../../lib/utils.js";
|
|
4
|
+
import k from "../shadcn/Label.vue.js";
|
|
5
|
+
const q = {
|
|
5
6
|
key: 0,
|
|
6
7
|
class: "text-red-500 mr-1"
|
|
7
|
-
},
|
|
8
|
+
}, S = {
|
|
8
9
|
key: 1,
|
|
9
10
|
class: "text-red-500 mr-1"
|
|
10
|
-
},
|
|
11
|
+
}, T = /* @__PURE__ */ i({
|
|
11
12
|
__name: "JLabel",
|
|
12
13
|
props: {
|
|
13
14
|
text: { default: "" },
|
|
14
15
|
required: { type: Boolean, default: !1 },
|
|
15
16
|
styletype: { default: "default" },
|
|
16
|
-
for: {}
|
|
17
|
+
for: {},
|
|
18
|
+
class: {}
|
|
17
19
|
},
|
|
18
|
-
setup(
|
|
19
|
-
const
|
|
20
|
+
setup(t) {
|
|
21
|
+
const e = t, a = {
|
|
20
22
|
default: { class: "" },
|
|
21
23
|
required: {
|
|
22
24
|
class: "text-red-600"
|
|
@@ -40,28 +42,30 @@ const k = {
|
|
|
40
42
|
class: "text-base"
|
|
41
43
|
}
|
|
42
44
|
}, l = c(() => {
|
|
43
|
-
const s =
|
|
45
|
+
const s = e.styletype || "default", o = a[s] ?? a.default;
|
|
44
46
|
return {
|
|
45
|
-
for:
|
|
47
|
+
for: e.for,
|
|
46
48
|
class: o?.class || ""
|
|
47
49
|
};
|
|
48
|
-
}),
|
|
49
|
-
return (s, o) => (r(),
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
}), u = c(() => e.text ? e.text : "");
|
|
51
|
+
return (s, o) => (r(), f(n(k), {
|
|
52
|
+
for: l.value.for,
|
|
53
|
+
class: m(n(b)(
|
|
54
|
+
"text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
55
|
+
l.value.class,
|
|
56
|
+
e.class
|
|
57
|
+
))
|
|
58
|
+
}, {
|
|
55
59
|
default: p(() => [
|
|
56
|
-
|
|
57
|
-
y(" " +
|
|
58
|
-
|
|
60
|
+
t.required && t.styletype === "required" ? (r(), d("span", q, "*")) : t.required ? (r(), d("span", S, "*")) : x("", !0),
|
|
61
|
+
y(" " + g(u.value) + " ", 1),
|
|
62
|
+
_(s.$slots, "default")
|
|
59
63
|
]),
|
|
60
64
|
_: 3
|
|
61
|
-
},
|
|
65
|
+
}, 8, ["for", "class"]));
|
|
62
66
|
}
|
|
63
67
|
});
|
|
64
68
|
export {
|
|
65
|
-
|
|
69
|
+
T as default
|
|
66
70
|
};
|
|
67
71
|
//# sourceMappingURL=JLabel.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JLabel.vue.js","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Label } from '@/components/shadcn'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'required' // 필수 필드 표시 (빨간 별표)\r\n | 'optional' // 선택 필드 표시 (회색 텍스트)\r\n | 'error' // 에러 상태 (빨간 텍스트)\r\n | 'success' // 성공 상태 (초록 텍스트)\r\n | 'warning' // 경고 상태 (주황 텍스트)\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 라벨 텍스트 */\r\n text?: string\r\n /** 필수 필드 여부 */\r\n required?: boolean\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** HTML for 속성 (연결할 input의 id) */\r\n for?: string\r\n }>(),\r\n {\r\n text: '',\r\n required: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n required: { \r\n class: 'text-red-600',\r\n },\r\n optional: { \r\n class: 'text-gray-500',\r\n },\r\n error: { \r\n class: 'text-red-600',\r\n },\r\n success: { \r\n class: 'text-green-600',\r\n },\r\n warning: { \r\n class: 'text-amber-600',\r\n },\r\n sm: { \r\n class: 'text-xs',\r\n },\r\n lg: { \r\n class: 'text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\r\nconst mapped = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n \r\n return {\r\n for: props.for,\r\n class: preset?.class || '',\r\n }\r\n})\r\n\r\nconst displayText = computed(() => {\r\n if (props.text) {\r\n return props.text\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\r\n <Label
|
|
1
|
+
{"version":3,"file":"JLabel.vue.js","sources":["../../../../src/components/atoms/JLabel.vue"],"sourcesContent":["<!-- TODO: 컴포넌트 래핑 초안 - 스타일 및 기능 개선 필요 -->\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { Label } from '@/components/shadcn'\r\nimport { cn } from '@/lib/utils'\r\n\r\ntype StyleType =\r\n | 'default' // 기본 스타일\r\n | 'required' // 필수 필드 표시 (빨간 별표)\r\n | 'optional' // 선택 필드 표시 (회색 텍스트)\r\n | 'error' // 에러 상태 (빨간 텍스트)\r\n | 'success' // 성공 상태 (초록 텍스트)\r\n | 'warning' // 경고 상태 (주황 텍스트)\r\n | 'sm' // 작은 크기\r\n | 'lg' // 큰 크기\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** 라벨 텍스트 */\r\n text?: string\r\n /** 필수 필드 여부 */\r\n required?: boolean\r\n /** 스타일 프리셋 */\r\n styletype?: StyleType\r\n /** HTML for 속성 (연결할 input의 id) */\r\n for?: string\r\n /** 추가 클래스 (외부 커스터마이징용) */\r\n class?: string\r\n }>(),\r\n {\r\n text: '',\r\n required: false,\r\n styletype: 'default',\r\n },\r\n)\r\n\r\n/**\r\n * styletype -> class 매핑\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, { class: string }> = {\r\n default: { class: '' },\r\n required: { \r\n class: 'text-red-600',\r\n },\r\n optional: { \r\n class: 'text-gray-500',\r\n },\r\n error: { \r\n class: 'text-red-600',\r\n },\r\n success: { \r\n class: 'text-green-600',\r\n },\r\n warning: { \r\n class: 'text-amber-600',\r\n },\r\n sm: { \r\n class: 'text-xs',\r\n },\r\n lg: { \r\n class: 'text-base',\r\n },\r\n}\r\n\r\n/** 최종 바인딩: styletype에 따른 클래스 적용 */\r\nconst mapped = computed(() => {\r\n const styleKey = props.styletype || 'default'\r\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\r\n \r\n return {\r\n for: props.for,\r\n class: preset?.class || '',\r\n }\r\n})\r\n\r\nconst displayText = computed(() => {\r\n if (props.text) {\r\n return props.text\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\r\n <Label\r\n :for=\"mapped.for\"\r\n :class=\"cn(\r\n 'text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\r\n mapped.class,\r\n props.class\r\n )\"\r\n >\r\n <span v-if=\"required && styletype === 'required'\" class=\"text-red-500 mr-1\">*</span>\r\n <span v-else-if=\"required\" class=\"text-red-500 mr-1\">*</span>\r\n {{ displayText }}\r\n <slot />\r\n </Label>\r\n</template>\r\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","displayText","_createBlock","_unref","Label","cn","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBA,UAAMA,IAAQC,GAuBRC,IAAsD;AAAA,MAC1D,SAAS,EAAE,OAAO,GAAA;AAAA,MAClB,UAAU;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,MAET,UAAU;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,MAET,OAAO;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,MAET,IAAI;AAAA,QACF,OAAO;AAAA,MAAA;AAAA,IACT,GAIIC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAWL,EAAM,aAAa,WAC9BM,IAASJ,EAAcG,CAAQ,KAAKH,EAAc;AAExD,aAAO;AAAA,QACL,KAAKF,EAAM;AAAA,QACX,OAAOM,GAAQ,SAAS;AAAA,MAAA;AAAA,IAE5B,CAAC,GAEKC,IAAcH,EAAS,MACvBJ,EAAM,OACDA,EAAM,OAER,EACR;2BAICQ,EAYQC,EAAAC,CAAA,GAAA;AAAA,MAXL,KAAKP,EAAA,MAAO;AAAA,MACZ,SAAOM,EAAAE,CAAA;AAAA;QAAgHR,EAAA,MAAO;AAAA,QAAcH,EAAM;AAAA,MAAA;;iBAMnJ,MAAoF;AAAA,QAAxEC,EAAA,YAAYA,EAAA,cAAS,mBAAjCW,EAAoF,QAApFC,GAA4E,GAAC,KAC5DZ,EAAA,iBAAjBW,EAA6D,QAA7DE,GAAqD,GAAC;UAAO,MAC7DC,EAAGR,EAAA,KAAW,IAAG,KACjB,CAAA;AAAA,QAAAS,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const c=require("../shadcn/Button.vue.cjs"),u=e.defineComponent({__name:"JLink",props:{href:{},text:{},target:{},styletype:{default:"default"},disabled:{type:Boolean,default:!1},class:{}},setup(s){const t=s,n={default:{variant:"link",class:"text-primary underline-offset-4 hover:underline"},primary:{variant:"link",class:"text-primary-foreground bg-primary hover:bg-primary/90"},secondary:{variant:"link",class:"text-secondary-foreground bg-secondary hover:bg-secondary/80"},destructive:{variant:"link",class:"text-destructive hover:text-destructive/90"},outline:{variant:"outline",class:"border border-input bg-background hover:bg-accent hover:text-accent-foreground"},ghost:{variant:"ghost",class:"hover:bg-accent hover:text-accent-foreground"},sm:{variant:"link",size:"sm",class:"h-8 px-3 text-xs"},lg:{variant:"link",size:"lg",class:"h-12 px-8 text-base"}},o=e.computed(()=>{const r=t.styletype||"default",a=n[r]??n.default,i=[a?.class,t.class].filter(Boolean).join(" ");return{variant:a?.variant||"link",size:a?.size||"
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const c=require("../shadcn/Button.vue.cjs"),u=e.defineComponent({__name:"JLink",props:{href:{},text:{},target:{},styletype:{default:"default"},disabled:{type:Boolean,default:!1},class:{}},setup(s){const t=s,n={default:{variant:"link",class:"text-primary underline-offset-4 hover:underline"},primary:{variant:"link",class:"text-primary-foreground bg-primary hover:bg-primary/90"},secondary:{variant:"link",class:"text-secondary-foreground bg-secondary hover:bg-secondary/80"},destructive:{variant:"link",class:"text-destructive hover:text-destructive/90"},outline:{variant:"outline",class:"border border-input bg-background hover:bg-accent hover:text-accent-foreground"},ghost:{variant:"ghost",class:"hover:bg-accent hover:text-accent-foreground"},sm:{variant:"link",size:"sm",class:"h-8 px-3 text-xs"},lg:{variant:"link",size:"lg",class:"h-12 px-8 text-base"}},o=e.computed(()=>{const r=t.styletype||"default",a=n[r]??n.default,i=[a?.class,t.class].filter(Boolean).join(" ");return{variant:a?.variant||"link",size:a?.size||"sm",class:i,disabled:t.disabled}}),l=e.computed(()=>{const r={as:"a"};return t.href&&(r.href=t.href),t.target&&(r.target=t.target),r});return(r,a)=>(e.openBlock(),e.createBlock(e.unref(c.default),e.normalizeProps(e.guardReactiveProps({...o.value,...l.value})),{default:e.withCtx(()=>[e.renderSlot(r.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(s.text),1)])]),_:3},16))}});exports.default=u;
|
|
2
2
|
//# sourceMappingURL=JLink.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JLink.vue.cjs","sources":["../../../../src/components/atoms/JLink.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Button } from '@/components/shadcn'\n\ntype StyleType = 'default' | 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'sm' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** 링크 URL */\n href?: string\n /** 링크 텍스트 */\n text?: string\n /** 새 탭에서 열기 */\n target?: '_blank' | '_self' | '_parent' | '_top'\n /** 링크 스타일 테마 */\n styletype?: StyleType\n /** 비활성화 상태 */\n disabled?: boolean\n /** 추가 CSS 클래스 */\n class?: string\n }>(),\n {\n styletype: 'default',\n disabled: false,\n },\n)\n\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; size?: string; class?: string }> = {\n default: { variant: 'link', class: 'text-primary underline-offset-4 hover:underline' },\n primary: { variant: 'link', class: 'text-primary-foreground bg-primary hover:bg-primary/90' },\n secondary: { variant: 'link', class: 'text-secondary-foreground bg-secondary hover:bg-secondary/80' },\n destructive: { variant: 'link', class: 'text-destructive hover:text-destructive/90' },\n outline: { variant: 'outline', class: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n ghost: { variant: 'ghost', class: 'hover:bg-accent hover:text-accent-foreground' },\n sm: { variant: 'link', size: 'sm', class: 'h-8 px-3 text-xs' },\n lg: { variant: 'link', size: 'lg', class: 'h-12 px-8 text-base' },\n}\n\nconst mapped = computed(() => {\n const styleKey = props.styletype || 'default'\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\n const finalClass = [preset?.class, props.class].filter(Boolean).join(' ')\n\n return {\n variant: (preset?.variant || 'link') as 'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost',\n size: (preset?.size || '
|
|
1
|
+
{"version":3,"file":"JLink.vue.cjs","sources":["../../../../src/components/atoms/JLink.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Button } from '@/components/shadcn'\n\ntype StyleType = 'default' | 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'sm' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** 링크 URL */\n href?: string\n /** 링크 텍스트 */\n text?: string\n /** 새 탭에서 열기 */\n target?: '_blank' | '_self' | '_parent' | '_top'\n /** 링크 스타일 테마 */\n styletype?: StyleType\n /** 비활성화 상태 */\n disabled?: boolean\n /** 추가 CSS 클래스 */\n class?: string\n }>(),\n {\n styletype: 'default',\n disabled: false,\n },\n)\n\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; size?: string; class?: string }> = {\n default: { variant: 'link', class: 'text-primary underline-offset-4 hover:underline' },\n primary: { variant: 'link', class: 'text-primary-foreground bg-primary hover:bg-primary/90' },\n secondary: { variant: 'link', class: 'text-secondary-foreground bg-secondary hover:bg-secondary/80' },\n destructive: { variant: 'link', class: 'text-destructive hover:text-destructive/90' },\n outline: { variant: 'outline', class: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n ghost: { variant: 'ghost', class: 'hover:bg-accent hover:text-accent-foreground' },\n sm: { variant: 'link', size: 'sm', class: 'h-8 px-3 text-xs' },\n lg: { variant: 'link', size: 'lg', class: 'h-12 px-8 text-base' },\n}\n\nconst mapped = computed(() => {\n const styleKey = props.styletype || 'default'\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\n const finalClass = [preset?.class, props.class].filter(Boolean).join(' ')\n\n return {\n variant: (preset?.variant || 'link') as 'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost',\n size: (preset?.size || 'sm') as 'xs' | 'sm' | 'md' | 'lg' | 'icon',\n class: finalClass,\n disabled: props.disabled,\n }\n})\n\nconst linkProps = computed(() => {\n const baseProps: Record<string, any> = {\n as: 'a',\n }\n\n if (props.href) {\n baseProps.href = props.href\n }\n\n if (props.target) {\n baseProps.target = props.target\n }\n\n return baseProps\n})\n</script>\n\n<template>\n <Button v-bind=\"{ ...mapped, ...linkProps }\">\n <slot>{{ text }}</slot>\n </Button>\n</template>\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","finalClass","linkProps","baseProps","_createBlock","_unref","Button","_normalizeProps","_guardReactiveProps","_renderSlot","_ctx"],"mappings":"uWAMA,MAAMA,EAAQC,EAqBRC,EAAwF,CAC5F,QAAS,CAAE,QAAS,OAAQ,MAAO,iDAAA,EACnC,QAAS,CAAE,QAAS,OAAQ,MAAO,wDAAA,EACnC,UAAW,CAAE,QAAS,OAAQ,MAAO,8DAAA,EACrC,YAAa,CAAE,QAAS,OAAQ,MAAO,4CAAA,EACvC,QAAS,CAAE,QAAS,UAAW,MAAO,gFAAA,EACtC,MAAO,CAAE,QAAS,QAAS,MAAO,8CAAA,EAClC,GAAI,CAAE,QAAS,OAAQ,KAAM,KAAM,MAAO,kBAAA,EAC1C,GAAI,CAAE,QAAS,OAAQ,KAAM,KAAM,MAAO,qBAAA,CAAsB,EAG5DC,EAASC,EAAAA,SAAS,IAAM,CAC5B,MAAMC,EAAWL,EAAM,WAAa,UAC9BM,EAASJ,EAAcG,CAAQ,GAAKH,EAAc,QAClDK,EAAa,CAACD,GAAQ,MAAON,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAExE,MAAO,CACL,QAAUM,GAAQ,SAAW,OAC7B,KAAOA,GAAQ,MAAQ,KACvB,MAAOC,EACP,SAAUP,EAAM,QAAA,CAEpB,CAAC,EAEKQ,EAAYJ,EAAAA,SAAS,IAAM,CAC/B,MAAMK,EAAiC,CACrC,GAAI,GAAA,EAGN,OAAIT,EAAM,OACRS,EAAU,KAAOT,EAAM,MAGrBA,EAAM,SACRS,EAAU,OAAST,EAAM,QAGpBS,CACT,CAAC,8BAICC,EAAAA,YAESC,EAAAA,MAAAC,EAAAA,OAAA,EAAAC,EAAAA,eAAAC,EAAAA,mBAAA,CAAA,GAFYX,EAAA,MAAM,GAAKK,EAAA,KAAA,CAAS,CAAA,EAAA,mBACvC,IAAuB,CAAvBO,EAAAA,WAAuBC,sBAAvB,IAAuB,qCAAdf,EAAA,IAAI,EAAA,CAAA,CAAA"}
|
|
@@ -22,20 +22,20 @@ const z = /* @__PURE__ */ c({
|
|
|
22
22
|
sm: { variant: "link", size: "sm", class: "h-8 px-3 text-xs" },
|
|
23
23
|
lg: { variant: "link", size: "lg", class: "h-12 px-8 text-base" }
|
|
24
24
|
}, o = n(() => {
|
|
25
|
-
const t = e.styletype || "default", r = s[t] ?? s.default,
|
|
25
|
+
const t = e.styletype || "default", r = s[t] ?? s.default, l = [r?.class, e.class].filter(Boolean).join(" ");
|
|
26
26
|
return {
|
|
27
27
|
variant: r?.variant || "link",
|
|
28
|
-
size: r?.size || "
|
|
29
|
-
class:
|
|
28
|
+
size: r?.size || "sm",
|
|
29
|
+
class: l,
|
|
30
30
|
disabled: e.disabled
|
|
31
31
|
};
|
|
32
|
-
}),
|
|
32
|
+
}), i = n(() => {
|
|
33
33
|
const t = {
|
|
34
34
|
as: "a"
|
|
35
35
|
};
|
|
36
36
|
return e.href && (t.href = e.href), e.target && (t.target = e.target), t;
|
|
37
37
|
});
|
|
38
|
-
return (t, r) => (u(), d(f(y), p(v({ ...o.value, ...
|
|
38
|
+
return (t, r) => (u(), d(f(y), p(v({ ...o.value, ...i.value })), {
|
|
39
39
|
default: g(() => [
|
|
40
40
|
m(t.$slots, "default", {}, () => [
|
|
41
41
|
h(x(a.text), 1)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JLink.vue.js","sources":["../../../../src/components/atoms/JLink.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Button } from '@/components/shadcn'\n\ntype StyleType = 'default' | 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'sm' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** 링크 URL */\n href?: string\n /** 링크 텍스트 */\n text?: string\n /** 새 탭에서 열기 */\n target?: '_blank' | '_self' | '_parent' | '_top'\n /** 링크 스타일 테마 */\n styletype?: StyleType\n /** 비활성화 상태 */\n disabled?: boolean\n /** 추가 CSS 클래스 */\n class?: string\n }>(),\n {\n styletype: 'default',\n disabled: false,\n },\n)\n\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; size?: string; class?: string }> = {\n default: { variant: 'link', class: 'text-primary underline-offset-4 hover:underline' },\n primary: { variant: 'link', class: 'text-primary-foreground bg-primary hover:bg-primary/90' },\n secondary: { variant: 'link', class: 'text-secondary-foreground bg-secondary hover:bg-secondary/80' },\n destructive: { variant: 'link', class: 'text-destructive hover:text-destructive/90' },\n outline: { variant: 'outline', class: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n ghost: { variant: 'ghost', class: 'hover:bg-accent hover:text-accent-foreground' },\n sm: { variant: 'link', size: 'sm', class: 'h-8 px-3 text-xs' },\n lg: { variant: 'link', size: 'lg', class: 'h-12 px-8 text-base' },\n}\n\nconst mapped = computed(() => {\n const styleKey = props.styletype || 'default'\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\n const finalClass = [preset?.class, props.class].filter(Boolean).join(' ')\n\n return {\n variant: (preset?.variant || 'link') as 'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost',\n size: (preset?.size || '
|
|
1
|
+
{"version":3,"file":"JLink.vue.js","sources":["../../../../src/components/atoms/JLink.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Button } from '@/components/shadcn'\n\ntype StyleType = 'default' | 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'sm' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** 링크 URL */\n href?: string\n /** 링크 텍스트 */\n text?: string\n /** 새 탭에서 열기 */\n target?: '_blank' | '_self' | '_parent' | '_top'\n /** 링크 스타일 테마 */\n styletype?: StyleType\n /** 비활성화 상태 */\n disabled?: boolean\n /** 추가 CSS 클래스 */\n class?: string\n }>(),\n {\n styletype: 'default',\n disabled: false,\n },\n)\n\nconst STYLE_PRESETS: Record<StyleType, { variant?: string; size?: string; class?: string }> = {\n default: { variant: 'link', class: 'text-primary underline-offset-4 hover:underline' },\n primary: { variant: 'link', class: 'text-primary-foreground bg-primary hover:bg-primary/90' },\n secondary: { variant: 'link', class: 'text-secondary-foreground bg-secondary hover:bg-secondary/80' },\n destructive: { variant: 'link', class: 'text-destructive hover:text-destructive/90' },\n outline: { variant: 'outline', class: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n ghost: { variant: 'ghost', class: 'hover:bg-accent hover:text-accent-foreground' },\n sm: { variant: 'link', size: 'sm', class: 'h-8 px-3 text-xs' },\n lg: { variant: 'link', size: 'lg', class: 'h-12 px-8 text-base' },\n}\n\nconst mapped = computed(() => {\n const styleKey = props.styletype || 'default'\n const preset = STYLE_PRESETS[styleKey] ?? STYLE_PRESETS.default\n const finalClass = [preset?.class, props.class].filter(Boolean).join(' ')\n\n return {\n variant: (preset?.variant || 'link') as 'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost',\n size: (preset?.size || 'sm') as 'xs' | 'sm' | 'md' | 'lg' | 'icon',\n class: finalClass,\n disabled: props.disabled,\n }\n})\n\nconst linkProps = computed(() => {\n const baseProps: Record<string, any> = {\n as: 'a',\n }\n\n if (props.href) {\n baseProps.href = props.href\n }\n\n if (props.target) {\n baseProps.target = props.target\n }\n\n return baseProps\n})\n</script>\n\n<template>\n <Button v-bind=\"{ ...mapped, ...linkProps }\">\n <slot>{{ text }}</slot>\n </Button>\n</template>\n"],"names":["props","__props","STYLE_PRESETS","mapped","computed","styleKey","preset","finalClass","linkProps","baseProps","_createBlock","_unref","Button","_normalizeProps","_guardReactiveProps","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;AAMA,UAAMA,IAAQC,GAqBRC,IAAwF;AAAA,MAC5F,SAAS,EAAE,SAAS,QAAQ,OAAO,kDAAA;AAAA,MACnC,SAAS,EAAE,SAAS,QAAQ,OAAO,yDAAA;AAAA,MACnC,WAAW,EAAE,SAAS,QAAQ,OAAO,+DAAA;AAAA,MACrC,aAAa,EAAE,SAAS,QAAQ,OAAO,6CAAA;AAAA,MACvC,SAAS,EAAE,SAAS,WAAW,OAAO,iFAAA;AAAA,MACtC,OAAO,EAAE,SAAS,SAAS,OAAO,+CAAA;AAAA,MAClC,IAAI,EAAE,SAAS,QAAQ,MAAM,MAAM,OAAO,mBAAA;AAAA,MAC1C,IAAI,EAAE,SAAS,QAAQ,MAAM,MAAM,OAAO,sBAAA;AAAA,IAAsB,GAG5DC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAWL,EAAM,aAAa,WAC9BM,IAASJ,EAAcG,CAAQ,KAAKH,EAAc,SAClDK,IAAa,CAACD,GAAQ,OAAON,EAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAExE,aAAO;AAAA,QACL,SAAUM,GAAQ,WAAW;AAAA,QAC7B,MAAOA,GAAQ,QAAQ;AAAA,QACvB,OAAOC;AAAA,QACP,UAAUP,EAAM;AAAA,MAAA;AAAA,IAEpB,CAAC,GAEKQ,IAAYJ,EAAS,MAAM;AAC/B,YAAMK,IAAiC;AAAA,QACrC,IAAI;AAAA,MAAA;AAGN,aAAIT,EAAM,SACRS,EAAU,OAAOT,EAAM,OAGrBA,EAAM,WACRS,EAAU,SAAST,EAAM,SAGpBS;AAAA,IACT,CAAC;2BAICC,EAESC,EAAAC,CAAA,GAAAC,EAAAC,EAAA,EAAA,GAFYX,EAAA,OAAM,GAAKK,EAAA,MAAA,CAAS,CAAA,GAAA;AAAA,iBACvC,MAAuB;AAAA,QAAvBO,EAAuBC,yBAAvB,MAAuB;AAAA,cAAdf,EAAA,IAAI,GAAA,CAAA;AAAA,QAAA;;;;;;"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
for (const [t_key, t_val] of t_opts)
|
|
4
4
|
t_merged[t_key] = t_val;
|
|
5
5
|
return t_merged;
|
|
6
|
-
};,u=t(e.default,[["__scopeId","data-v-
|
|
6
|
+
};,u=t(e.default,[["__scopeId","data-v-0ce9f9f8"]]);exports.default=u;
|
|
7
7
|
//# sourceMappingURL=JPreview.vue.cjs.map
|
|
@@ -6,8 +6,8 @@ const r = (r_comp, r_opts) => {
|
|
|
6
6
|
r_merged[r_key] = r_val;
|
|
7
7
|
return r_merged;
|
|
8
8
|
};
|
|
9
|
-
const
|
|
9
|
+
const m = /* @__PURE__ */ r(o, [["__scopeId", "data-v-0ce9f9f8"]]);
|
|
10
10
|
export {
|
|
11
|
-
|
|
11
|
+
m as default
|
|
12
12
|
};
|
|
13
13
|
//# sourceMappingURL=JPreview.vue.js.map
|
|
@@ -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"),d=require("md-editor-v3");;/* empty css */const h=require("dompurify"),p=["innerHTML"],v=e.defineComponent({__name:"JPreview",props:{modelValue:{default:""},theme:{},class:{}},setup(n){const r=n,s=e.ref(!1),a=()=>{s.value=document.documentElement.classList.contains("dark")},o=e.computed(()=>r.theme?r.theme:s.value?"dark":"light");let l=null;e.onMounted(()=>{a(),l=new MutationObserver(()=>{a()}),l.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]})}),e.onUnmounted(()=>{l&&l.disconnect()});function c(u){const t=u.trim();return t.startsWith("<!DOCTYPE html")||t.startsWith("<!doctype html")||t.startsWith("<!DOCTYPE HTML")||t.startsWith("<!DOCTYPE Html")||t.startsWith("<html")||t.startsWith("<HTML")||t.startsWith("<Html")?"html":"markdown"}const i=e.computed(()=>c(r.modelValue||"")),m=e.computed(()=>i.value==="html"?h.sanitize(r.modelValue||"",{ALLOWED_TAGS:["p","br","strong","em","u","s","h1","h2","h3","h4","h5","h6","ul","ol","li","blockquote","pre","code","a","img","table","thead","tbody","tr","th","td","div","span","hr","blockquote","del","ins","sub","sup","kbd","mark","abbr","dfn","cite","q","samp","var","time","b","i","small","big","center","font","strike","tt","html","head","body","title","meta","link","style","script","noscript"],ALLOWED_ATTR:["href","src","alt","title","width","height","class","id","style","target","rel","type","charset","name","content","http-equiv","lang"],ALLOW_DATA_ATTR:!1}):"");return(u,t)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["j-preview-wrapper",r.class])},[i.value==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["j-preview-html",o.value==="dark"?"dark":""]),innerHTML:m.value},null,10,p)):(e.openBlock(),e.createBlock(e.unref(d.MdPreview),{key:1,"model-value":n.modelValue,theme:o.value,"preview-class-name":"j-preview-markdown",language:"en-US"},null,8,["model-value","theme"]))],2))}});exports.default=v;
|
|
2
2
|
//# sourceMappingURL=JPreview.vue2.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JPreview.vue2.cjs","sources":["../../../../src/components/atoms/JPreview.vue"],"sourcesContent":["<script setup lang=\"ts\">\
|
|
1
|
+
{"version":3,"file":"JPreview.vue2.cjs","sources":["../../../../src/components/atoms/JPreview.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted } from 'vue'\nimport { MdPreview } from 'md-editor-v3'\nimport 'md-editor-v3/lib/style.css'\nimport DOMPurify from 'dompurify'\n\nconst props = withDefaults(\n defineProps<{\n /** 마크다운 또는 HTML 내용 */\n modelValue?: string\n /** 테마 (light/dark) - 설정하지 않으면 자동으로 다크모드 감지 */\n theme?: 'light' | 'dark'\n /** 추가 CSS 클래스 */\n class?: string\n }>(),\n {\n modelValue: '',\n },\n)\n\n// 다크모드 상태\nconst isDarkMode = ref(false)\n\n// 다크모드 감지 함수\nconst detectDarkMode = () => {\n isDarkMode.value = document.documentElement.classList.contains('dark')\n}\n\n// 현재 테마 계산 (props.theme이 있으면 그것 사용, 없으면 자동 감지)\nconst currentTheme = computed(() => {\n if (props.theme) {\n return props.theme\n }\n return isDarkMode.value ? 'dark' : 'light'\n})\n\n// MutationObserver로 다크모드 변경 감지\nlet darkModeObserver: MutationObserver | null = null\n\nonMounted(() => {\n // 초기 다크모드 상태 감지\n detectDarkMode()\n \n // MutationObserver로 class 변경 감지\n darkModeObserver = new MutationObserver(() => {\n detectDarkMode()\n })\n \n darkModeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n})\n\nonUnmounted(() => {\n if (darkModeObserver) {\n darkModeObserver.disconnect()\n }\n})\n\r\n/**\r\n * 콘텐츠 타입 자동 감지\r\n */\r\nfunction detectContentType(content: string): 'markdown' | 'html' {\r\n const trimmed = content.trim()\r\n \r\n // HTML 문서 시작 태그 확인\r\n if (\r\n trimmed.startsWith('<!DOCTYPE html') ||\r\n trimmed.startsWith('<!doctype html') ||\r\n trimmed.startsWith('<!DOCTYPE HTML') ||\r\n trimmed.startsWith('<!DOCTYPE Html') ||\r\n trimmed.startsWith('<html') ||\r\n trimmed.startsWith('<HTML') ||\r\n trimmed.startsWith('<Html')\r\n ) {\r\n return 'html'\r\n }\r\n \r\n return 'markdown'\r\n}\r\n\r\nconst contentType = computed(() => detectContentType(props.modelValue || ''))\r\n\r\nconst sanitizedHtml = computed(() => {\r\n if (contentType.value === 'html') {\r\n return DOMPurify.sanitize(props.modelValue || '', {\r\n ALLOWED_TAGS: [\r\n 'p', 'br', 'strong', 'em', 'u', 's', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\r\n 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'a', 'img', 'table', 'thead',\r\n 'tbody', 'tr', 'th', 'td', 'div', 'span', 'hr', 'blockquote', 'del', 'ins',\r\n 'sub', 'sup', 'kbd', 'mark', 'abbr', 'dfn', 'cite', 'q', 'samp', 'var',\r\n 'time', 'b', 'i', 'small', 'big', 'center', 'font', 'strike', 'tt',\r\n 'html', 'head', 'body', 'title', 'meta', 'link', 'style', 'script', 'noscript'\r\n ],\r\n ALLOWED_ATTR: [\r\n 'href', 'src', 'alt', 'title', 'width', 'height', 'class', 'id', 'style',\r\n 'target', 'rel', 'type', 'charset', 'name', 'content', 'http-equiv', 'lang'\r\n ],\r\n ALLOW_DATA_ATTR: false,\r\n })\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\n <div :class=\"['j-preview-wrapper', props.class]\">\n <!-- HTML 렌더링 -->\n <div\n v-if=\"contentType === 'html'\"\n :class=\"['j-preview-html', currentTheme === 'dark' ? 'dark' : '']\"\n v-html=\"sanitizedHtml\"\n />\n \n <!-- 마크다운 렌더링 -->\n <MdPreview\n v-else\n :model-value=\"modelValue\"\n :theme=\"currentTheme\"\n :preview-class-name=\"'j-preview-markdown'\"\n language=\"en-US\"\n />\n </div>\n</template>\n\r\n<style scoped>\r\n.j-preview-wrapper {\r\n @apply w-full;\r\n}\r\n\r\n.j-preview-html {\r\n @apply prose prose-slate max-w-none;\r\n}\r\n\r\n.j-preview-html.dark {\r\n @apply prose-invert;\r\n}\r\n\r\n:deep(.j-preview-markdown) {\r\n @apply w-full;\r\n}\r\n</style>\r\n"],"names":["props","__props","isDarkMode","ref","detectDarkMode","currentTheme","computed","darkModeObserver","onMounted","onUnmounted","detectContentType","content","trimmed","contentType","sanitizedHtml","DOMPurify","_createElementBlock","_normalizeClass","_createBlock","_unref","MdPreview"],"mappings":"4aAMA,MAAMA,EAAQC,EAeRC,EAAaC,EAAAA,IAAI,EAAK,EAGtBC,EAAiB,IAAM,CAC3BF,EAAW,MAAQ,SAAS,gBAAgB,UAAU,SAAS,MAAM,CACvE,EAGMG,EAAeC,EAAAA,SAAS,IACxBN,EAAM,MACDA,EAAM,MAERE,EAAW,MAAQ,OAAS,OACpC,EAGD,IAAIK,EAA4C,KAEhDC,EAAAA,UAAU,IAAM,CAEdJ,EAAA,EAGAG,EAAmB,IAAI,iBAAiB,IAAM,CAC5CH,EAAA,CACF,CAAC,EAEDG,EAAiB,QAAQ,SAAS,gBAAiB,CACjD,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAAA,CAC1B,CACH,CAAC,EAEDE,EAAAA,YAAY,IAAM,CACZF,GACFA,EAAiB,WAAA,CAErB,CAAC,EAKD,SAASG,EAAkBC,EAAsC,CAC/D,MAAMC,EAAUD,EAAQ,KAAA,EAGxB,OACEC,EAAQ,WAAW,gBAAgB,GACnCA,EAAQ,WAAW,gBAAgB,GACnCA,EAAQ,WAAW,gBAAgB,GACnCA,EAAQ,WAAW,gBAAgB,GACnCA,EAAQ,WAAW,OAAO,GAC1BA,EAAQ,WAAW,OAAO,GAC1BA,EAAQ,WAAW,OAAO,EAEnB,OAGF,UACT,CAEA,MAAMC,EAAcP,EAAAA,SAAS,IAAMI,EAAkBV,EAAM,YAAc,EAAE,CAAC,EAEtEc,EAAgBR,EAAAA,SAAS,IACzBO,EAAY,QAAU,OACjBE,EAAU,SAASf,EAAM,YAAc,GAAI,CAChD,aAAc,CACZ,IAAK,KAAM,SAAU,KAAM,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KACnE,KAAM,KAAM,KAAM,aAAc,MAAO,OAAQ,IAAK,MAAO,QAAS,QACpE,QAAS,KAAM,KAAM,KAAM,MAAO,OAAQ,KAAM,aAAc,MAAO,MACrE,MAAO,MAAO,MAAO,OAAQ,OAAQ,MAAO,OAAQ,IAAK,OAAQ,MACjE,OAAQ,IAAK,IAAK,QAAS,MAAO,SAAU,OAAQ,SAAU,KAC9D,OAAQ,OAAQ,OAAQ,QAAS,OAAQ,OAAQ,QAAS,SAAU,UAAA,EAEtE,aAAc,CACZ,OAAQ,MAAO,MAAO,QAAS,QAAS,SAAU,QAAS,KAAM,QACjE,SAAU,MAAO,OAAQ,UAAW,OAAQ,UAAW,aAAc,MAAA,EAEvE,gBAAiB,EAAA,CAClB,EAEI,EACR,8BAICgB,EAAAA,mBAgBM,MAAA,CAhBA,MAAKC,EAAAA,eAAA,CAAA,oBAAwBjB,EAAM,KAAK,CAAA,CAAA,GAGpCa,EAAA,QAAW,sBADnBG,EAAAA,mBAIE,MAAA,OAFC,yCAA0BX,EAAA,QAAY,OAAA,OAAA,EAAA,CAAA,EACvC,UAAQS,EAAA,KAAA,6BAIVI,EAAAA,YAMEC,QAAAC,EAAAA,SAAA,EAAA,OAJC,cAAanB,EAAA,WACb,MAAOI,EAAA,MACP,qBAAoB,qBACrB,SAAS,OAAA"}
|
|
@@ -1,21 +1,34 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { MdPreview as
|
|
1
|
+
import { defineComponent as v, ref as f, computed as l, onMounted as k, onUnmounted as b, createElementBlock as u, openBlock as n, normalizeClass as d, createBlock as T, unref as w } from "vue";
|
|
2
|
+
import { MdPreview as y } from "md-editor-v3";
|
|
3
3
|
/* empty css */
|
|
4
|
-
import
|
|
5
|
-
const
|
|
4
|
+
import L from "dompurify";
|
|
5
|
+
const M = ["innerHTML"], O = /* @__PURE__ */ v({
|
|
6
6
|
__name: "JPreview",
|
|
7
7
|
props: {
|
|
8
8
|
modelValue: { default: "" },
|
|
9
|
-
theme: {
|
|
9
|
+
theme: {},
|
|
10
10
|
class: {}
|
|
11
11
|
},
|
|
12
|
-
setup(
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
setup(a) {
|
|
13
|
+
const t = a, s = f(!1), o = () => {
|
|
14
|
+
s.value = document.documentElement.classList.contains("dark");
|
|
15
|
+
}, i = l(() => t.theme ? t.theme : s.value ? "dark" : "light");
|
|
16
|
+
let r = null;
|
|
17
|
+
k(() => {
|
|
18
|
+
o(), r = new MutationObserver(() => {
|
|
19
|
+
o();
|
|
20
|
+
}), r.observe(document.documentElement, {
|
|
21
|
+
attributes: !0,
|
|
22
|
+
attributeFilter: ["class"]
|
|
23
|
+
});
|
|
24
|
+
}), b(() => {
|
|
25
|
+
r && r.disconnect();
|
|
26
|
+
});
|
|
27
|
+
function h(c) {
|
|
28
|
+
const e = c.trim();
|
|
29
|
+
return e.startsWith("<!DOCTYPE html") || e.startsWith("<!doctype html") || e.startsWith("<!DOCTYPE HTML") || e.startsWith("<!DOCTYPE Html") || e.startsWith("<html") || e.startsWith("<HTML") || e.startsWith("<Html") ? "html" : "markdown";
|
|
17
30
|
}
|
|
18
|
-
const
|
|
31
|
+
const m = l(() => h(t.modelValue || "")), p = l(() => m.value === "html" ? L.sanitize(t.modelValue || "", {
|
|
19
32
|
ALLOWED_TAGS: [
|
|
20
33
|
"p",
|
|
21
34
|
"br",
|
|
@@ -99,17 +112,17 @@ const v = ["innerHTML"], w = /* @__PURE__ */ c({
|
|
|
99
112
|
],
|
|
100
113
|
ALLOW_DATA_ATTR: !1
|
|
101
114
|
}) : "");
|
|
102
|
-
return (
|
|
103
|
-
class:
|
|
115
|
+
return (c, e) => (n(), u("div", {
|
|
116
|
+
class: d(["j-preview-wrapper", t.class])
|
|
104
117
|
}, [
|
|
105
|
-
|
|
118
|
+
m.value === "html" ? (n(), u("div", {
|
|
106
119
|
key: 0,
|
|
107
|
-
class:
|
|
108
|
-
innerHTML:
|
|
109
|
-
}, null, 10,
|
|
120
|
+
class: d(["j-preview-html", i.value === "dark" ? "dark" : ""]),
|
|
121
|
+
innerHTML: p.value
|
|
122
|
+
}, null, 10, M)) : (n(), T(w(y), {
|
|
110
123
|
key: 1,
|
|
111
|
-
"model-value":
|
|
112
|
-
theme:
|
|
124
|
+
"model-value": a.modelValue,
|
|
125
|
+
theme: i.value,
|
|
113
126
|
"preview-class-name": "j-preview-markdown",
|
|
114
127
|
language: "en-US"
|
|
115
128
|
}, null, 8, ["model-value", "theme"]))
|
|
@@ -117,6 +130,6 @@ const v = ["innerHTML"], w = /* @__PURE__ */ c({
|
|
|
117
130
|
}
|
|
118
131
|
});
|
|
119
132
|
export {
|
|
120
|
-
|
|
133
|
+
O as default
|
|
121
134
|
};
|
|
122
135
|
//# sourceMappingURL=JPreview.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JPreview.vue2.js","sources":["../../../../src/components/atoms/JPreview.vue"],"sourcesContent":["<script setup lang=\"ts\">\
|
|
1
|
+
{"version":3,"file":"JPreview.vue2.js","sources":["../../../../src/components/atoms/JPreview.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted } from 'vue'\nimport { MdPreview } from 'md-editor-v3'\nimport 'md-editor-v3/lib/style.css'\nimport DOMPurify from 'dompurify'\n\nconst props = withDefaults(\n defineProps<{\n /** 마크다운 또는 HTML 내용 */\n modelValue?: string\n /** 테마 (light/dark) - 설정하지 않으면 자동으로 다크모드 감지 */\n theme?: 'light' | 'dark'\n /** 추가 CSS 클래스 */\n class?: string\n }>(),\n {\n modelValue: '',\n },\n)\n\n// 다크모드 상태\nconst isDarkMode = ref(false)\n\n// 다크모드 감지 함수\nconst detectDarkMode = () => {\n isDarkMode.value = document.documentElement.classList.contains('dark')\n}\n\n// 현재 테마 계산 (props.theme이 있으면 그것 사용, 없으면 자동 감지)\nconst currentTheme = computed(() => {\n if (props.theme) {\n return props.theme\n }\n return isDarkMode.value ? 'dark' : 'light'\n})\n\n// MutationObserver로 다크모드 변경 감지\nlet darkModeObserver: MutationObserver | null = null\n\nonMounted(() => {\n // 초기 다크모드 상태 감지\n detectDarkMode()\n \n // MutationObserver로 class 변경 감지\n darkModeObserver = new MutationObserver(() => {\n detectDarkMode()\n })\n \n darkModeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n})\n\nonUnmounted(() => {\n if (darkModeObserver) {\n darkModeObserver.disconnect()\n }\n})\n\r\n/**\r\n * 콘텐츠 타입 자동 감지\r\n */\r\nfunction detectContentType(content: string): 'markdown' | 'html' {\r\n const trimmed = content.trim()\r\n \r\n // HTML 문서 시작 태그 확인\r\n if (\r\n trimmed.startsWith('<!DOCTYPE html') ||\r\n trimmed.startsWith('<!doctype html') ||\r\n trimmed.startsWith('<!DOCTYPE HTML') ||\r\n trimmed.startsWith('<!DOCTYPE Html') ||\r\n trimmed.startsWith('<html') ||\r\n trimmed.startsWith('<HTML') ||\r\n trimmed.startsWith('<Html')\r\n ) {\r\n return 'html'\r\n }\r\n \r\n return 'markdown'\r\n}\r\n\r\nconst contentType = computed(() => detectContentType(props.modelValue || ''))\r\n\r\nconst sanitizedHtml = computed(() => {\r\n if (contentType.value === 'html') {\r\n return DOMPurify.sanitize(props.modelValue || '', {\r\n ALLOWED_TAGS: [\r\n 'p', 'br', 'strong', 'em', 'u', 's', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\r\n 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'a', 'img', 'table', 'thead',\r\n 'tbody', 'tr', 'th', 'td', 'div', 'span', 'hr', 'blockquote', 'del', 'ins',\r\n 'sub', 'sup', 'kbd', 'mark', 'abbr', 'dfn', 'cite', 'q', 'samp', 'var',\r\n 'time', 'b', 'i', 'small', 'big', 'center', 'font', 'strike', 'tt',\r\n 'html', 'head', 'body', 'title', 'meta', 'link', 'style', 'script', 'noscript'\r\n ],\r\n ALLOWED_ATTR: [\r\n 'href', 'src', 'alt', 'title', 'width', 'height', 'class', 'id', 'style',\r\n 'target', 'rel', 'type', 'charset', 'name', 'content', 'http-equiv', 'lang'\r\n ],\r\n ALLOW_DATA_ATTR: false,\r\n })\r\n }\r\n return ''\r\n})\r\n</script>\r\n\r\n<template>\n <div :class=\"['j-preview-wrapper', props.class]\">\n <!-- HTML 렌더링 -->\n <div\n v-if=\"contentType === 'html'\"\n :class=\"['j-preview-html', currentTheme === 'dark' ? 'dark' : '']\"\n v-html=\"sanitizedHtml\"\n />\n \n <!-- 마크다운 렌더링 -->\n <MdPreview\n v-else\n :model-value=\"modelValue\"\n :theme=\"currentTheme\"\n :preview-class-name=\"'j-preview-markdown'\"\n language=\"en-US\"\n />\n </div>\n</template>\n\r\n<style scoped>\r\n.j-preview-wrapper {\r\n @apply w-full;\r\n}\r\n\r\n.j-preview-html {\r\n @apply prose prose-slate max-w-none;\r\n}\r\n\r\n.j-preview-html.dark {\r\n @apply prose-invert;\r\n}\r\n\r\n:deep(.j-preview-markdown) {\r\n @apply w-full;\r\n}\r\n</style>\r\n"],"names":["props","__props","isDarkMode","ref","detectDarkMode","currentTheme","computed","darkModeObserver","onMounted","onUnmounted","detectContentType","content","trimmed","contentType","sanitizedHtml","DOMPurify","_createElementBlock","_normalizeClass","_createBlock","_unref","MdPreview"],"mappings":";;;;;;;;;;;;AAMA,UAAMA,IAAQC,GAeRC,IAAaC,EAAI,EAAK,GAGtBC,IAAiB,MAAM;AAC3B,MAAAF,EAAW,QAAQ,SAAS,gBAAgB,UAAU,SAAS,MAAM;AAAA,IACvE,GAGMG,IAAeC,EAAS,MACxBN,EAAM,QACDA,EAAM,QAERE,EAAW,QAAQ,SAAS,OACpC;AAGD,QAAIK,IAA4C;AAEhD,IAAAC,EAAU,MAAM;AAEd,MAAAJ,EAAA,GAGAG,IAAmB,IAAI,iBAAiB,MAAM;AAC5C,QAAAH,EAAA;AAAA,MACF,CAAC,GAEDG,EAAiB,QAAQ,SAAS,iBAAiB;AAAA,QACjD,YAAY;AAAA,QACZ,iBAAiB,CAAC,OAAO;AAAA,MAAA,CAC1B;AAAA,IACH,CAAC,GAEDE,EAAY,MAAM;AAChB,MAAIF,KACFA,EAAiB,WAAA;AAAA,IAErB,CAAC;AAKD,aAASG,EAAkBC,GAAsC;AAC/D,YAAMC,IAAUD,EAAQ,KAAA;AAGxB,aACEC,EAAQ,WAAW,gBAAgB,KACnCA,EAAQ,WAAW,gBAAgB,KACnCA,EAAQ,WAAW,gBAAgB,KACnCA,EAAQ,WAAW,gBAAgB,KACnCA,EAAQ,WAAW,OAAO,KAC1BA,EAAQ,WAAW,OAAO,KAC1BA,EAAQ,WAAW,OAAO,IAEnB,SAGF;AAAA,IACT;AAEA,UAAMC,IAAcP,EAAS,MAAMI,EAAkBV,EAAM,cAAc,EAAE,CAAC,GAEtEc,IAAgBR,EAAS,MACzBO,EAAY,UAAU,SACjBE,EAAU,SAASf,EAAM,cAAc,IAAI;AAAA,MAChD,cAAc;AAAA,QACZ;AAAA,QAAK;AAAA,QAAM;AAAA,QAAU;AAAA,QAAM;AAAA,QAAK;AAAA,QAAK;AAAA,QAAM;AAAA,QAAM;AAAA,QAAM;AAAA,QAAM;AAAA,QAAM;AAAA,QACnE;AAAA,QAAM;AAAA,QAAM;AAAA,QAAM;AAAA,QAAc;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAK;AAAA,QAAO;AAAA,QAAS;AAAA,QACpE;AAAA,QAAS;AAAA,QAAM;AAAA,QAAM;AAAA,QAAM;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAM;AAAA,QAAc;AAAA,QAAO;AAAA,QACrE;AAAA,QAAO;AAAA,QAAO;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAK;AAAA,QAAQ;AAAA,QACjE;AAAA,QAAQ;AAAA,QAAK;AAAA,QAAK;AAAA,QAAS;AAAA,QAAO;AAAA,QAAU;AAAA,QAAQ;AAAA,QAAU;AAAA,QAC9D;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAS;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAS;AAAA,QAAU;AAAA,MAAA;AAAA,MAEtE,cAAc;AAAA,QACZ;AAAA,QAAQ;AAAA,QAAO;AAAA,QAAO;AAAA,QAAS;AAAA,QAAS;AAAA,QAAU;AAAA,QAAS;AAAA,QAAM;AAAA,QACjE;AAAA,QAAU;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAc;AAAA,MAAA;AAAA,MAEvE,iBAAiB;AAAA,IAAA,CAClB,IAEI,EACR;2BAICgB,EAgBM,OAAA;AAAA,MAhBA,OAAKC,EAAA,CAAA,qBAAwBjB,EAAM,KAAK,CAAA;AAAA,IAAA;MAGpCa,EAAA,UAAW,eADnBG,EAIE,OAAA;AAAA;QAFC,4BAA0BX,EAAA,UAAY,SAAA,SAAA,EAAA,CAAA;AAAA,QACvC,WAAQS,EAAA;AAAA,MAAA,yBAIVI,EAMEC,EAAAC,CAAA,GAAA;AAAA;QAJC,eAAanB,EAAA;AAAA,QACb,OAAOI,EAAA;AAAA,QACP,sBAAoB;AAAA,QACrB,UAAS;AAAA,MAAA;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),y=require("../shadcn/Progress.vue.cjs"),f={class:"space-y-2"},k={key:0,class:"flex justify-between items-center"},_={key:0,class:"text-sm font-medium text-gray-700"},v={key:1,class:"text-sm font-medium text-gray-600"},h={key:1,class:"text-center mb-2"},g={class:"text-sm font-medium text-gray-700"},B={key:2},
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),y=require("../shadcn/Progress.vue.cjs"),f={class:"space-y-2"},k={key:0,class:"flex justify-between items-center"},_={key:0,class:"text-sm font-medium text-gray-700"},v={key:1,class:"text-sm font-medium text-gray-600"},h={key:1,class:"text-center mb-2"},g={class:"text-sm font-medium text-gray-700"},B={key:2},x={key:3,class:"flex justify-center"},b={key:0},E={class:"w-full h-full animate-spin",viewBox:"0 0 100 100"},S=["stroke"],w={key:1},z={class:"w-full h-full transform -rotate-90",viewBox:"0 0 100 100"},V=["stroke","stroke-dashoffset"],N={key:2,class:"absolute inset-0 flex items-center justify-center"},C={class:"text-sm font-medium text-gray-700"},P={key:4,class:"text-center mt-2"},D={class:"text-xs text-gray-500"},L={key:5,class:"text-xs text-gray-500"},T=e.defineComponent({__name:"JProgress",props:{value:{default:0},max:{default:100},class:{},styletype:{default:"default"},size:{default:"sm"},label:{default:""},showLabel:{type:Boolean,default:!0},description:{default:""},variant:{default:"linear"},indeterminate:{type:Boolean,default:!1}},setup(i){const t=i,d={default:{class:""},primary:{class:"[&>div]:bg-blue-500"},success:{class:"[&>div]:bg-green-500"},warning:{class:"[&>div]:bg-amber-500"},danger:{class:"[&>div]:bg-red-500"}},a={xs:{class:"h-1"},sm:{class:"h-2"},md:{class:"h-3"},lg:{class:"h-4"}},u={xs:{size:48},sm:{size:60},md:{size:72},lg:{size:88}},n=e.computed(()=>Math.round(t.value/t.max*100)),m=e.computed(()=>{const s=d[t.styletype],l=a[t.size],p=[s.class,l.class,t.class].filter(Boolean).join(" ");return{modelValue:t.value,max:t.max,class:p}}),o=e.computed(()=>{const s=u[t.size];let l="#000000";return t.styletype==="primary"?l="#3b82f6":t.styletype==="success"?l="#10b981":t.styletype==="warning"?l="#f59e0b":t.styletype==="danger"&&(l="#ef4444"),{size:s.size,color:l}}),r=e.computed(()=>t.indeterminate?"로딩 중...":`${n.value}%`),c=e.computed(()=>{let s="#000000";return t.styletype==="primary"?s="#3b82f6":t.styletype==="success"?s="#10b981":t.styletype==="warning"?s="#f59e0b":t.styletype==="danger"&&(s="#ef4444"),s});return(s,l)=>(e.openBlock(),e.createElementBlock("div",f,[t.variant==="linear"&&(t.label||t.showLabel||t.indeterminate)?(e.openBlock(),e.createElementBlock("div",k,[t.label?(e.openBlock(),e.createElementBlock("p",_,e.toDisplayString(t.label),1)):e.createCommentVNode("",!0),t.showLabel||t.indeterminate?(e.openBlock(),e.createElementBlock("p",v,e.toDisplayString(r.value),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),t.variant==="circular"&&t.label?(e.openBlock(),e.createElementBlock("div",h,[e.createElementVNode("p",g,e.toDisplayString(t.label),1)])):e.createCommentVNode("",!0),t.variant==="linear"?(e.openBlock(),e.createElementBlock("div",B,[t.indeterminate?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["relative overflow-hidden rounded-full bg-gray-200",a[t.size].class])},[e.createElementVNode("div",{class:"absolute h-full w-full animate-pulse",style:e.normalizeStyle({backgroundColor:c.value})},null,4),e.createElementVNode("div",{class:"absolute h-full w-1/3 animate-[indeterminate-linear_2s_infinite]",style:e.normalizeStyle({backgroundColor:c.value})},null,4)],2)):(e.openBlock(),e.createBlock(y.default,e.normalizeProps(e.mergeProps({key:1},m.value)),null,16))])):t.variant==="circular"?(e.openBlock(),e.createElementBlock("div",x,[e.createElementVNode("div",{class:"relative",style:e.normalizeStyle({width:o.value.size+"px",height:o.value.size+"px"})},[t.indeterminate?(e.openBlock(),e.createElementBlock("div",b,[(e.openBlock(),e.createElementBlock("svg",E,[l[0]||(l[0]=e.createElementVNode("circle",{cx:"50",cy:"50",r:"45",stroke:"#e5e7eb","stroke-width":"8",fill:"none"},null,-1)),e.createElementVNode("circle",{cx:"50",cy:"50",r:"45",stroke:o.value.color,"stroke-width":"8",fill:"none","stroke-linecap":"round","stroke-dasharray":"70 213","stroke-dashoffset":"0",class:"animate-[indeterminate-circular_2s_ease-in-out_infinite]"},null,8,S)]))])):(e.openBlock(),e.createElementBlock("div",w,[(e.openBlock(),e.createElementBlock("svg",z,[l[1]||(l[1]=e.createElementVNode("circle",{cx:"50",cy:"50",r:"45",stroke:"#e5e7eb","stroke-width":"8",fill:"none"},null,-1)),e.createElementVNode("circle",{cx:"50",cy:"50",r:"45",stroke:o.value.color,"stroke-width":"8",fill:"none","stroke-linecap":"round","stroke-dasharray":283,"stroke-dashoffset":283-283*n.value/100,class:"transition-all duration-300 ease-in-out"},null,8,V)]))])),t.showLabel||t.indeterminate?(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("span",C,e.toDisplayString(r.value),1)])):e.createCommentVNode("",!0)],4)])):e.createCommentVNode("",!0),t.variant==="circular"&&t.description?(e.openBlock(),e.createElementBlock("div",P,[e.createElementVNode("p",D,e.toDisplayString(t.description),1)])):e.createCommentVNode("",!0),t.variant==="linear"&&t.description?(e.openBlock(),e.createElementBlock("p",L,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)]))}});exports.default=T;
|
|
2
2
|
//# sourceMappingURL=JProgress.vue.cjs.map
|