@j-solution/components 1.9.2 → 1.9.3
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 +6 -6
- package/assets/jwms-portal-frontend-BrNxcNUC.css +1 -0
- package/assets/styles/j-components.css +1 -1
- package/assets/styles/main.css +15 -5
- package/assets/styles/themes.css +46 -21
- package/components/atoms/JButton.vue.cjs +1 -1
- package/components/atoms/JButton.vue.js +1 -1
- package/components/atoms/JButton.vue2.cjs.map +1 -1
- package/components/atoms/JButton.vue2.js.map +1 -1
- package/components/atoms/JGrid.vue.cjs +1 -1
- package/components/atoms/JGrid.vue.js +1 -1
- package/components/atoms/JGrid.vue2.cjs +1 -1
- package/components/atoms/JGrid.vue2.cjs.map +1 -1
- package/components/atoms/JGrid.vue2.js +138 -119
- package/components/atoms/JGrid.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 +1 -1
- package/components/atoms/JSplitter.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 +9 -9
- package/components/molecules/JTabs.vue2.js.map +1 -1
- package/components/organisms/JDynamicForm.vue.cjs +1 -1
- package/components/organisms/JDynamicForm.vue.js +2 -2
- package/components/organisms/JDynamicForm.vue2.cjs +1 -1
- package/components/organisms/JDynamicForm.vue2.cjs.map +1 -1
- package/components/organisms/JDynamicForm.vue2.js +5 -5
- package/components/organisms/JDynamicForm.vue2.js.map +1 -1
- package/components/organisms/JFilterBar.vue.cjs +1 -1
- package/components/organisms/JFilterBar.vue.js +2 -2
- package/components/organisms/JFilterBar.vue2.cjs +1 -1
- package/components/organisms/JFilterBar.vue2.cjs.map +1 -1
- package/components/organisms/JFilterBar.vue2.js +2 -2
- package/components/organisms/JFilterBar.vue2.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 +1 -1
- package/components/organisms/JPageContainer.vue.js.map +1 -1
- package/components/organisms/JSearchPanel.vue.cjs +1 -1
- package/components/organisms/JSearchPanel.vue.js +7 -7
- package/components/organisms/JSearchPanel.vue2.cjs +1 -1
- package/components/organisms/JSearchPanel.vue2.cjs.map +1 -1
- package/components/organisms/JSearchPanel.vue2.js +4 -4
- package/components/organisms/JSearchPanel.vue2.js.map +1 -1
- package/components/shadcn/index.cjs +1 -1
- package/components/shadcn/index.cjs.map +1 -1
- package/components/shadcn/index.js +6 -6
- package/components/shadcn/index.js.map +1 -1
- package/components/shadcn/resizable/ResizableHandle.vue.cjs +1 -1
- package/components/shadcn/resizable/ResizableHandle.vue.cjs.map +1 -1
- package/components/shadcn/resizable/ResizableHandle.vue.js +3 -3
- package/components/shadcn/resizable/ResizableHandle.vue.js.map +1 -1
- package/package.json +1 -1
- package/types/index.d.ts +41 -6
- package/assets/jwms-portal-frontend-DQAXe8y7.css +0 -1
|
@@ -27,9 +27,9 @@ import q from "../shadcn/Card.vue.js";
|
|
|
27
27
|
import G from "../shadcn/CardHeader.vue.js";
|
|
28
28
|
import H from "../shadcn/CardTitle.vue.js";
|
|
29
29
|
import K from "../shadcn/CardContent.vue.js";
|
|
30
|
-
const Q = { class: "flex items-center justify-between" }, W = { class: "flex items-center gap-
|
|
30
|
+
const Q = { class: "flex items-center justify-between" }, W = { class: "flex items-center gap-2 flex-1" }, Z = {
|
|
31
31
|
key: 2,
|
|
32
|
-
class: "flex flex-wrap items-center gap-
|
|
32
|
+
class: "flex flex-wrap items-center gap-1.5 ml-1.5"
|
|
33
33
|
}, ee = ["onClick", "aria-label"], Be = /* @__PURE__ */ L({
|
|
34
34
|
__name: "JSearchPanel",
|
|
35
35
|
props: {
|
|
@@ -100,7 +100,7 @@ const Q = { class: "flex items-center justify-between" }, W = { class: "flex ite
|
|
|
100
100
|
}
|
|
101
101
|
return (t, l) => (n(), v(i(q), { class: "w-full" }, {
|
|
102
102
|
default: m(() => [
|
|
103
|
-
c(i(G), { class: "pt-
|
|
103
|
+
c(i(G), { class: "pt-2.5 pb-2 px-3.5" }, {
|
|
104
104
|
default: m(() => [
|
|
105
105
|
d("div", Q, [
|
|
106
106
|
d("div", W, [
|
|
@@ -159,7 +159,7 @@ const Q = { class: "flex items-center justify-between" }, W = { class: "flex ite
|
|
|
159
159
|
]),
|
|
160
160
|
_: 1
|
|
161
161
|
}),
|
|
162
|
-
R(c(i(K), { class: "px-
|
|
162
|
+
R(c(i(K), { class: "px-3.5 pb-3 pt-0" }, {
|
|
163
163
|
default: m(() => [
|
|
164
164
|
c(Y, {
|
|
165
165
|
ref_key: "dynamicFormRef",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSearchPanel.vue2.js","sources":["../../../../src/components/organisms/JSearchPanel.vue"],"sourcesContent":["<template>\n <Card class=\"w-full\">\n <!-- 헤더: 제목, Badge 목록, 초기화 버튼 -->\n <CardHeader class=\"pt-4 pb-3 px-6\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-3 flex-1\">\n <button\n v-if=\"collapsible\"\n type=\"button\"\n @click=\"isExpanded = !isExpanded\"\n class=\"flex items-center gap-2 font-semibold hover:text-primary transition-colors\"\n >\n <ChevronDown\n :class=\"['h-4 w-4 transition-transform', isExpanded ? 'rotate-0' : '-rotate-90']\"\n />\n {{ title }}\n </button>\n <CardTitle v-else class=\"mb-0\">{{ title }}</CardTitle>\n \n <!-- 조건 Badge 목록 -->\n <div v-if=\"conditionBadges.length > 0\" class=\"flex flex-wrap items-center gap-2 ml-2\">\n <JBadge\n v-for=\"badge in conditionBadges\"\n :key=\"badge.fieldName\"\n variant=\"secondary\"\n size=\"sm\"\n class=\"flex items-center gap-1.5 pr-1\"\n >\n <span>{{ badge.label }}: {{ badge.value }}</span>\n <button\n type=\"button\"\n @click.stop=\"handleFieldReset(badge.fieldName)\"\n class=\"h-4 w-4 rounded-full hover:bg-destructive/20 hover:text-destructive transition-colors flex items-center justify-center\"\n :aria-label=\"`${badge.label} 조건 제거`\"\n >\n <X class=\"h-3 w-3\" />\n </button>\n </JBadge>\n </div>\n </div>\n \n <JButton\n variant=\"outline\"\n size=\"sm\"\n @click.stop=\"handleReset\"\n >\n 초기화\n </JButton>\n </div>\n </CardHeader>\n \n <!-- 폼 내용 -->\n <CardContent v-show=\"isExpanded || !collapsible\" class=\"px-6 pb-6 pt-0\">\n <JDynamicForm\n ref=\"dynamicFormRef\"\n :schema=\"schema\"\n :model-value=\"localModelValue\"\n @update:model-value=\"handleFormValueUpdate\"\n @submit=\"handleSubmit\"\n />\n </CardContent>\n </Card>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, reactive, watch } from 'vue'\nimport { ChevronDown, X } from 'lucide-vue-next'\nimport { Card, CardHeader, CardTitle, CardContent } from '@/components/shadcn'\nimport { JButton, JBadge } from '@/components/atoms'\nimport JDynamicForm from './JDynamicForm.vue'\nimport type { FormSchema, DynamicFormField } from '@/types/dynamic-form'\nimport type { ComponentPublicInstance } from 'vue'\n\ninterface ConditionBadge {\n fieldName: string\n label: string\n value: string\n}\n\nexport interface JSearchPanelProps {\n /** 패널 제목 */\n title?: string\n /** JDynamicForm에 전달할 FormSchema */\n schema: FormSchema\n /** JDynamicForm의 v-model 값 */\n modelValue?: Record<string, any>\n /** 기본 접힘 상태 */\n defaultCollapsed?: boolean\n /** 접기/펼치기 가능 여부 */\n collapsible?: boolean\n}\n\nconst props = withDefaults(defineProps<JSearchPanelProps>(), {\n title: '조회조건',\n defaultCollapsed: false,\n collapsible: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: Record<string, any>]\n 'submit': [values: Record<string, any>]\n 'reset': []\n}>()\n\nconst dynamicFormRef = ref<ComponentPublicInstance & { reset: () => void } | null>(null)\nconst isExpanded = ref(!props.defaultCollapsed)\n\n// 로컬 modelValue - reactive로 관리하여 양방향 바인딩\nconst localModelValue = reactive<Record<string, any>>(props.modelValue ? { ...props.modelValue } : {})\n\n// 내부 변경인지 외부 변경인지 구분하는 플래그\nlet isInternalUpdate = false\n\n// props.modelValue 변경 시 localModelValue 동기화 (외부 변경)\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue && !isInternalUpdate) {\n // 기존 키 중 새 값에 없는 것은 삭제\n Object.keys(localModelValue).forEach(key => {\n if (!(key in newValue)) {\n delete localModelValue[key]\n }\n })\n // 새 값으로 업데이트\n Object.assign(localModelValue, newValue)\n }\n isInternalUpdate = false\n },\n { deep: true, immediate: true }\n)\n\n// JDynamicForm에서 값이 변경되었을 때 처리\nfunction handleFormValueUpdate(value: Record<string, any>) {\n // JDynamicForm에서 emit된 값을 localModelValue에 반영\n isInternalUpdate = true\n Object.assign(localModelValue, value)\n // 상위로 emit\n emit('update:modelValue', { ...value })\n}\n\n// 모든 필드 가져오기\nconst allFields = computed((): DynamicFormField[] => {\n if (!props.schema) return []\n \n const fields: DynamicFormField[] = []\n if (props.schema.type === 'simple' && props.schema.fields) {\n fields.push(...props.schema.fields)\n } else if (props.schema.type === 'sectioned' && props.schema.sections) {\n props.schema.sections.forEach(section => {\n if (section.fields) fields.push(...section.fields)\n })\n } else if (props.schema.type === 'wizard' && props.schema.steps) {\n props.schema.steps.forEach(step => {\n if (step.fields) fields.push(...step.fields)\n })\n }\n return fields\n})\n\n// 조건 Badge 목록 생성\nconst conditionBadges = computed((): ConditionBadge[] => {\n if (!localModelValue || !props.schema) {\n return []\n }\n\n const badges: ConditionBadge[] = []\n const formState = localModelValue\n\n allFields.value.forEach((field) => {\n const value = formState[field.controlName]\n \n // 빈 값 체크 (빈 문자열, null, undefined, 'ALL', 'SELECT' 제외)\n if (\n value === undefined ||\n value === null ||\n value === '' ||\n value === 'ALL' ||\n value === 'SELECT' ||\n (field.type === 'checkbox' && value === 'N') ||\n (field.type === 'switch' && value === 'N')\n ) {\n return\n }\n\n // 필드 타입에 따라 값 표시\n let displayValue = String(value)\n\n // 콤보/검색콤보인 경우 옵션의 label 찾기\n if ((field.type === 'combo' || field.type === 'searchcombo') && field.options) {\n const option = field.options.find(opt => opt.value === value)\n if (option) {\n displayValue = option.label\n }\n }\n\n // 체크박스/스위치는 'Y'일 때만 표시\n if (field.type === 'checkbox' || field.type === 'switch') {\n if (value === 'Y') {\n badges.push({\n fieldName: field.controlName,\n label: field.label,\n value: field.inlineLabel || field.label\n })\n }\n } else {\n badges.push({\n fieldName: field.controlName,\n label: field.label,\n value: displayValue\n })\n }\n })\n\n return badges\n})\n\n// submit 핸들러\nfunction handleSubmit(values: Record<string, any>) {\n emit('submit', values)\n}\n\n// 전체 초기화 핸들러\nfunction handleReset() {\n if (dynamicFormRef.value) {\n dynamicFormRef.value.reset()\n emit('reset')\n }\n}\n\n// 필드별 초기화 핸들러\nfunction handleFieldReset(fieldName: string) {\n if (!localModelValue || !props.schema) return\n \n const field = allFields.value.find(f => f.controlName === fieldName)\n \n if (field) {\n // 필드 타입에 따라 초기값 설정 - reactive 객체 직접 수정\n if (field.type === 'checkbox' || field.type === 'switch') {\n localModelValue[fieldName] = 'N'\n } else {\n localModelValue[fieldName] = ''\n }\n \n // localModelValue 변경 후 상위로 emit하여 JDynamicForm에도 반영\n isInternalUpdate = true\n emit('update:modelValue', { ...localModelValue })\n }\n}\n</script>\n\n<style scoped>\n/* 필요시 스타일 추가 */\n</style>\n\n"],"names":["props","__props","emit","__emit","dynamicFormRef","ref","isExpanded","localModelValue","reactive","isInternalUpdate","watch","newValue","key","handleFormValueUpdate","value","allFields","computed","fields","section","step","conditionBadges","badges","formState","field","displayValue","option","opt","handleSubmit","values","handleReset","handleFieldReset","fieldName","f","_createBlock","_unref","Card","_createVNode","CardHeader","_createElementVNode","_hoisted_1","_hoisted_2","_createElementBlock","_cache","$event","ChevronDown","_createTextVNode","CardTitle","_openBlock","_hoisted_3","_Fragment","_renderList","badge","JBadge","_toDisplayString","_withModifiers","X","JButton","CardContent","JDynamicForm","_vShow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JSearchPanel.vue2.js","sources":["../../../../src/components/organisms/JSearchPanel.vue"],"sourcesContent":["<template>\n <Card class=\"w-full\">\n <!-- 헤더: 제목, Badge 목록, 초기화 버튼 -->\n <CardHeader class=\"pt-2.5 pb-2 px-3.5\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2 flex-1\">\n <button\n v-if=\"collapsible\"\n type=\"button\"\n @click=\"isExpanded = !isExpanded\"\n class=\"flex items-center gap-2 font-semibold hover:text-primary transition-colors\"\n >\n <ChevronDown\n :class=\"['h-4 w-4 transition-transform', isExpanded ? 'rotate-0' : '-rotate-90']\"\n />\n {{ title }}\n </button>\n <CardTitle v-else class=\"mb-0\">{{ title }}</CardTitle>\n \n <!-- 조건 Badge 목록 -->\n <div v-if=\"conditionBadges.length > 0\" class=\"flex flex-wrap items-center gap-1.5 ml-1.5\">\n <JBadge\n v-for=\"badge in conditionBadges\"\n :key=\"badge.fieldName\"\n variant=\"secondary\"\n size=\"sm\"\n class=\"flex items-center gap-1.5 pr-1\"\n >\n <span>{{ badge.label }}: {{ badge.value }}</span>\n <button\n type=\"button\"\n @click.stop=\"handleFieldReset(badge.fieldName)\"\n class=\"h-4 w-4 rounded-full hover:bg-destructive/20 hover:text-destructive transition-colors flex items-center justify-center\"\n :aria-label=\"`${badge.label} 조건 제거`\"\n >\n <X class=\"h-3 w-3\" />\n </button>\n </JBadge>\n </div>\n </div>\n \n <JButton\n variant=\"outline\"\n size=\"sm\"\n @click.stop=\"handleReset\"\n >\n 초기화\n </JButton>\n </div>\n </CardHeader>\n \n <!-- 폼 내용 -->\n <CardContent v-show=\"isExpanded || !collapsible\" class=\"px-3.5 pb-3 pt-0\">\n <JDynamicForm\n ref=\"dynamicFormRef\"\n :schema=\"schema\"\n :model-value=\"localModelValue\"\n @update:model-value=\"handleFormValueUpdate\"\n @submit=\"handleSubmit\"\n />\n </CardContent>\n </Card>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, reactive, watch } from 'vue'\nimport { ChevronDown, X } from 'lucide-vue-next'\nimport { Card, CardHeader, CardTitle, CardContent } from '@/components/shadcn'\nimport { JButton, JBadge } from '@/components/atoms'\nimport JDynamicForm from './JDynamicForm.vue'\nimport type { FormSchema, DynamicFormField } from '@/types/dynamic-form'\nimport type { ComponentPublicInstance } from 'vue'\n\ninterface ConditionBadge {\n fieldName: string\n label: string\n value: string\n}\n\nexport interface JSearchPanelProps {\n /** 패널 제목 */\n title?: string\n /** JDynamicForm에 전달할 FormSchema */\n schema: FormSchema\n /** JDynamicForm의 v-model 값 */\n modelValue?: Record<string, any>\n /** 기본 접힘 상태 */\n defaultCollapsed?: boolean\n /** 접기/펼치기 가능 여부 */\n collapsible?: boolean\n}\n\nconst props = withDefaults(defineProps<JSearchPanelProps>(), {\n title: '조회조건',\n defaultCollapsed: false,\n collapsible: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: Record<string, any>]\n 'submit': [values: Record<string, any>]\n 'reset': []\n}>()\n\nconst dynamicFormRef = ref<ComponentPublicInstance & { reset: () => void } | null>(null)\nconst isExpanded = ref(!props.defaultCollapsed)\n\n// 로컬 modelValue - reactive로 관리하여 양방향 바인딩\nconst localModelValue = reactive<Record<string, any>>(props.modelValue ? { ...props.modelValue } : {})\n\n// 내부 변경인지 외부 변경인지 구분하는 플래그\nlet isInternalUpdate = false\n\n// props.modelValue 변경 시 localModelValue 동기화 (외부 변경)\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue && !isInternalUpdate) {\n // 기존 키 중 새 값에 없는 것은 삭제\n Object.keys(localModelValue).forEach(key => {\n if (!(key in newValue)) {\n delete localModelValue[key]\n }\n })\n // 새 값으로 업데이트\n Object.assign(localModelValue, newValue)\n }\n isInternalUpdate = false\n },\n { deep: true, immediate: true }\n)\n\n// JDynamicForm에서 값이 변경되었을 때 처리\nfunction handleFormValueUpdate(value: Record<string, any>) {\n // JDynamicForm에서 emit된 값을 localModelValue에 반영\n isInternalUpdate = true\n Object.assign(localModelValue, value)\n // 상위로 emit\n emit('update:modelValue', { ...value })\n}\n\n// 모든 필드 가져오기\nconst allFields = computed((): DynamicFormField[] => {\n if (!props.schema) return []\n \n const fields: DynamicFormField[] = []\n if (props.schema.type === 'simple' && props.schema.fields) {\n fields.push(...props.schema.fields)\n } else if (props.schema.type === 'sectioned' && props.schema.sections) {\n props.schema.sections.forEach(section => {\n if (section.fields) fields.push(...section.fields)\n })\n } else if (props.schema.type === 'wizard' && props.schema.steps) {\n props.schema.steps.forEach(step => {\n if (step.fields) fields.push(...step.fields)\n })\n }\n return fields\n})\n\n// 조건 Badge 목록 생성\nconst conditionBadges = computed((): ConditionBadge[] => {\n if (!localModelValue || !props.schema) {\n return []\n }\n\n const badges: ConditionBadge[] = []\n const formState = localModelValue\n\n allFields.value.forEach((field) => {\n const value = formState[field.controlName]\n \n // 빈 값 체크 (빈 문자열, null, undefined, 'ALL', 'SELECT' 제외)\n if (\n value === undefined ||\n value === null ||\n value === '' ||\n value === 'ALL' ||\n value === 'SELECT' ||\n (field.type === 'checkbox' && value === 'N') ||\n (field.type === 'switch' && value === 'N')\n ) {\n return\n }\n\n // 필드 타입에 따라 값 표시\n let displayValue = String(value)\n\n // 콤보/검색콤보인 경우 옵션의 label 찾기\n if ((field.type === 'combo' || field.type === 'searchcombo') && field.options) {\n const option = field.options.find(opt => opt.value === value)\n if (option) {\n displayValue = option.label\n }\n }\n\n // 체크박스/스위치는 'Y'일 때만 표시\n if (field.type === 'checkbox' || field.type === 'switch') {\n if (value === 'Y') {\n badges.push({\n fieldName: field.controlName,\n label: field.label,\n value: field.inlineLabel || field.label\n })\n }\n } else {\n badges.push({\n fieldName: field.controlName,\n label: field.label,\n value: displayValue\n })\n }\n })\n\n return badges\n})\n\n// submit 핸들러\nfunction handleSubmit(values: Record<string, any>) {\n emit('submit', values)\n}\n\n// 전체 초기화 핸들러\nfunction handleReset() {\n if (dynamicFormRef.value) {\n dynamicFormRef.value.reset()\n emit('reset')\n }\n}\n\n// 필드별 초기화 핸들러\nfunction handleFieldReset(fieldName: string) {\n if (!localModelValue || !props.schema) return\n \n const field = allFields.value.find(f => f.controlName === fieldName)\n \n if (field) {\n // 필드 타입에 따라 초기값 설정 - reactive 객체 직접 수정\n if (field.type === 'checkbox' || field.type === 'switch') {\n localModelValue[fieldName] = 'N'\n } else {\n localModelValue[fieldName] = ''\n }\n \n // localModelValue 변경 후 상위로 emit하여 JDynamicForm에도 반영\n isInternalUpdate = true\n emit('update:modelValue', { ...localModelValue })\n }\n}\n</script>\n\n<style scoped>\n/* 필요시 스타일 추가 */\n</style>\n"],"names":["props","__props","emit","__emit","dynamicFormRef","ref","isExpanded","localModelValue","reactive","isInternalUpdate","watch","newValue","key","handleFormValueUpdate","value","allFields","computed","fields","section","step","conditionBadges","badges","formState","field","displayValue","option","opt","handleSubmit","values","handleReset","handleFieldReset","fieldName","f","_createBlock","_unref","Card","_createVNode","CardHeader","_createElementVNode","_hoisted_1","_hoisted_2","_createElementBlock","_cache","$event","ChevronDown","_createTextVNode","CardTitle","_openBlock","_hoisted_3","_Fragment","_renderList","badge","JBadge","_toDisplayString","_withModifiers","X","JButton","CardContent","JDynamicForm","_vShow"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("class-variance-authority");require("vue");require("reka-ui");require("@vueuse/core");require("clsx");require("tailwind-merge");require("lucide-vue-next");require("./alert-variants.cjs");require("./avatar-variants.cjs");require("./badge-variants.cjs");require("./button-group-variants.cjs");require("vue-sonner");const r=e.cva("inline-flex items-center justify-center whitespace-nowrap rounded-sm text-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("class-variance-authority");require("vue");require("reka-ui");require("@vueuse/core");require("clsx");require("tailwind-merge");require("lucide-vue-next");require("./alert-variants.cjs");require("./avatar-variants.cjs");require("./badge-variants.cjs");require("./button-group-variants.cjs");require("vue-sonner");const r=e.cva("inline-flex items-center justify-center whitespace-nowrap rounded-sm text-xs font-medium ring-offset-background transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{xs:"h-6 rounded-sm px-2 text-xs",sm:"h-7 rounded-sm px-2.5 text-xs",md:"h-8 px-3 text-sm",lg:"h-9 rounded-sm px-4 text-sm",icon:"h-8 w-8"}},defaultVariants:{variant:"default",size:"sm"}});exports.buttonVariants=r;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/shadcn/index.ts"],"sourcesContent":["// Button variants\nimport type { VariantProps } from \"class-variance-authority\"\nimport { cva } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm text-
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/shadcn/index.ts"],"sourcesContent":["// Button variants\nimport type { VariantProps } from \"class-variance-authority\"\nimport { cva } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm text-xs font-medium ring-offset-background transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-6 rounded-sm px-2 text-xs\",\n sm: \"h-7 rounded-sm px-2.5 text-xs\",\n md: \"h-8 px-3 text-sm\",\n lg: \"h-9 rounded-sm px-4 text-sm\",\n icon: \"h-8 w-8\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"sm\",\n },\n },\n)\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>\n\n// Accordion\nexport { default as Accordion } from \"./Accordion.vue\"\nexport { default as AccordionContent } from \"./AccordionContent.vue\"\nexport { default as AccordionItem } from \"./AccordionItem.vue\"\nexport { default as AccordionTrigger } from \"./AccordionTrigger.vue\"\n\n// Alert\nexport { default as Alert } from \"./Alert.vue\"\nexport { default as AlertDescription } from \"./AlertDescription.vue\"\nexport { default as AlertTitle } from \"./AlertTitle.vue\"\n\n// Avatar\nexport { default as Avatar } from \"./Avatar.vue\"\nexport { default as AvatarFallback } from \"./AvatarFallback.vue\"\nexport { default as AvatarImage } from \"./AvatarImage.vue\"\n\n// Badge\nexport { default as Badge } from \"./Badge.vue\"\n\n// Calendar\nexport { default as Calendar } from \"./Calendar.vue\"\nexport { default as CalendarCell } from \"./CalendarCell.vue\"\nexport { default as CalendarCellTrigger } from \"./CalendarCellTrigger.vue\"\nexport { default as CalendarGrid } from \"./CalendarGrid.vue\"\nexport { default as CalendarGridBody } from \"./CalendarGridBody.vue\"\nexport { default as CalendarGridHead } from \"./CalendarGridHead.vue\"\nexport { default as CalendarGridRow } from \"./CalendarGridRow.vue\"\nexport { default as CalendarHeadCell } from \"./CalendarHeadCell.vue\"\nexport { default as CalendarHeader } from \"./CalendarHeader.vue\"\nexport { default as CalendarHeading } from \"./CalendarHeading.vue\"\nexport { default as CalendarNextButton } from \"./CalendarNextButton.vue\"\nexport { default as CalendarPrevButton } from \"./CalendarPrevButton.vue\"\n\n// Card\nexport { default as Card } from \"./Card.vue\"\nexport { default as CardContent } from \"./CardContent.vue\"\nexport { default as CardDescription } from \"./CardDescription.vue\"\nexport { default as CardFooter } from \"./CardFooter.vue\"\nexport { default as CardHeader } from \"./CardHeader.vue\"\nexport { default as CardTitle } from \"./CardTitle.vue\"\n\n// Checkbox\nexport { default as Checkbox } from \"./Checkbox.vue\"\n\n// Combobox\nexport { default as Combobox } from \"./Combobox.vue\"\nexport { default as ComboboxAnchor } from \"./ComboboxAnchor.vue\"\nexport { default as ComboboxEmpty } from \"./ComboboxEmpty.vue\"\nexport { default as ComboboxGroup } from \"./ComboboxGroup.vue\"\nexport { default as ComboboxInput } from \"./ComboboxInput.vue\"\nexport { default as ComboboxItem } from \"./ComboboxItem.vue\"\nexport { default as ComboboxList } from \"./ComboboxList.vue\"\nexport { default as ComboboxSeparator } from \"./ComboboxSeparator.vue\"\nexport { default as ComboboxTrigger } from \"./ComboboxTrigger.vue\"\n\n// ContextMenu\nexport { default as ContextMenu } from \"./ContextMenu.vue\"\nexport { default as ContextMenuCheckboxItem } from \"./ContextMenuCheckboxItem.vue\"\nexport { default as ContextMenuContent } from \"./ContextMenuContent.vue\"\nexport { default as ContextMenuGroup } from \"./ContextMenuGroup.vue\"\nexport { default as ContextMenuItem } from \"./ContextMenuItem.vue\"\nexport { default as ContextMenuLabel } from \"./ContextMenuLabel.vue\"\nexport { default as ContextMenuPortal } from \"./ContextMenuPortal.vue\"\nexport { default as ContextMenuRadioGroup } from \"./ContextMenuRadioGroup.vue\"\nexport { default as ContextMenuRadioItem } from \"./ContextMenuRadioItem.vue\"\nexport { default as ContextMenuSeparator } from \"./ContextMenuSeparator.vue\"\nexport { default as ContextMenuShortcut } from \"./ContextMenuShortcut.vue\"\nexport { default as ContextMenuSub } from \"./ContextMenuSub.vue\"\nexport { default as ContextMenuSubContent } from \"./ContextMenuSubContent.vue\"\nexport { default as ContextMenuSubTrigger } from \"./ContextMenuSubTrigger.vue\"\nexport { default as ContextMenuTrigger } from \"./ContextMenuTrigger.vue\"\n\n// Dialog\nexport { default as Dialog } from \"./Dialog.vue\"\nexport { default as DialogBody } from \"./DialogBody.vue\"\nexport { default as DialogContent } from \"./DialogContent.vue\"\nexport { default as DialogDescription } from \"./DialogDescription.vue\"\nexport { default as DialogFooter } from \"./DialogFooter.vue\"\nexport { default as DialogHeader } from \"./DialogHeader.vue\"\nexport { default as DialogTitle } from \"./DialogTitle.vue\"\n\n// Field\nexport { default as Field } from \"./Field.vue\"\nexport { default as FieldContent } from \"./FieldContent.vue\"\nexport { default as FieldDescription } from \"./FieldDescription.vue\"\nexport { default as FieldError } from \"./FieldError.vue\"\nexport { default as FieldGroup } from \"./FieldGroup.vue\"\nexport { default as FieldLabel } from \"./FieldLabel.vue\"\nexport { default as FieldLegend } from \"./FieldLegend.vue\"\nexport { default as FieldSeparator } from \"./FieldSeparator.vue\"\nexport { default as FieldSet } from \"./FieldSet.vue\"\nexport { default as FieldTitle } from \"./FieldTitle.vue\"\n\n// ButtonGroup\nexport { default as ButtonGroup } from \"./ButtonGroup.vue\"\nexport { default as ButtonGroupSeparator } from \"./ButtonGroupSeparator.vue\"\nexport { default as ButtonGroupText } from \"./ButtonGroupText.vue\"\n\n// Input\nexport { default as Button } from \"./Button.vue\"\nexport { default as Input } from \"./Input.vue\"\n\n// Kbd\nexport { default as Kbd } from \"./Kbd.vue\"\nexport { default as KbdGroup } from \"./KbdGroup.vue\"\n\n// Label\nexport { default as Label } from \"./Label.vue\"\n\n// Popover\nexport { default as Popover } from \"./Popover.vue\"\nexport { default as PopoverContent } from \"./PopoverContent.vue\"\nexport { default as PopoverTrigger } from \"./PopoverTrigger.vue\"\n\n// Progress\nexport { default as Progress } from \"./Progress.vue\"\n\n// Radio\nexport { default as RadioGroup } from \"./RadioGroup.vue\"\nexport { default as RadioGroupItem } from \"./RadioGroupItem.vue\"\n\n// Select\nexport { default as Select } from \"./Select.vue\"\nexport { default as SelectContent } from \"./SelectContent.vue\"\nexport { default as SelectGroup } from \"./SelectGroup.vue\"\nexport { default as SelectItem } from \"./SelectItem.vue\"\nexport { default as SelectItemText } from \"./SelectItemText.vue\"\nexport { default as SelectLabel } from \"./SelectLabel.vue\"\nexport { default as SelectScrollDownButton } from \"./SelectScrollDownButton.vue\"\nexport { default as SelectScrollUpButton } from \"./SelectScrollUpButton.vue\"\nexport { default as SelectSeparator } from \"./SelectSeparator.vue\"\nexport { default as SelectTrigger } from \"./SelectTrigger.vue\"\nexport { default as SelectValue } from \"./SelectValue.vue\"\n\n// Separator\nexport { default as Separator } from \"./Separator.vue\"\n\n// Spinner\nexport { default as Spinner } from \"./Spinner.vue\"\n\n// Switch\nexport { default as Switch } from \"./Switch.vue\"\n\n// Tabs\nexport { default as Tabs } from \"./Tabs.vue\"\nexport { default as TabsContent } from \"./TabsContent.vue\"\nexport { default as TabsList } from \"./TabsList.vue\"\nexport { default as TabsTrigger } from \"./TabsTrigger.vue\"\n\n// Textarea\nexport { default as Textarea } from \"./Textarea.vue\"\n\n\n// Tooltip\nexport { default as Tooltip } from \"./Tooltip.vue\"\nexport { default as TooltipContent } from \"./TooltipContent.vue\"\nexport { default as TooltipProvider } from \"./TooltipProvider.vue\"\nexport { default as TooltipTrigger } from \"./TooltipTrigger.vue\"\n\n// Toaster\nexport { default as Toaster } from \"./Toaster.vue\"\n"],"names":["buttonVariants","cva"],"mappings":"yZAIO,MAAMA,EAAiBC,EAAAA,IAC5B,sSACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,yDACT,YACE,qEACF,QACE,iFACF,UACE,+DACF,MAAO,+CACP,KAAM,iDAAA,EAER,KAAM,CACJ,GAAI,8BACJ,GAAI,gCACJ,GAAI,mBACJ,GAAI,8BACJ,KAAM,SAAA,CACR,EAEF,gBAAiB,CACf,QAAS,UACT,KAAM,IAAA,CACR,CAEJ"}
|
|
@@ -11,7 +11,7 @@ import "./badge-variants.js";
|
|
|
11
11
|
import "./button-group-variants.js";
|
|
12
12
|
import "vue-sonner";
|
|
13
13
|
const g = e(
|
|
14
|
-
"inline-flex items-center justify-center whitespace-nowrap rounded-sm text-
|
|
14
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-sm text-xs font-medium ring-offset-background transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
|
15
15
|
{
|
|
16
16
|
variants: {
|
|
17
17
|
variant: {
|
|
@@ -23,11 +23,11 @@ const g = e(
|
|
|
23
23
|
link: "text-primary underline-offset-4 hover:underline"
|
|
24
24
|
},
|
|
25
25
|
size: {
|
|
26
|
-
xs: "h-
|
|
27
|
-
sm: "h-
|
|
28
|
-
md: "h-
|
|
29
|
-
lg: "h-
|
|
30
|
-
icon: "h-
|
|
26
|
+
xs: "h-6 rounded-sm px-2 text-xs",
|
|
27
|
+
sm: "h-7 rounded-sm px-2.5 text-xs",
|
|
28
|
+
md: "h-8 px-3 text-sm",
|
|
29
|
+
lg: "h-9 rounded-sm px-4 text-sm",
|
|
30
|
+
icon: "h-8 w-8"
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
defaultVariants: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/shadcn/index.ts"],"sourcesContent":["// Button variants\nimport type { VariantProps } from \"class-variance-authority\"\nimport { cva } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm text-
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/shadcn/index.ts"],"sourcesContent":["// Button variants\nimport type { VariantProps } from \"class-variance-authority\"\nimport { cva } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm text-xs font-medium ring-offset-background transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-6 rounded-sm px-2 text-xs\",\n sm: \"h-7 rounded-sm px-2.5 text-xs\",\n md: \"h-8 px-3 text-sm\",\n lg: \"h-9 rounded-sm px-4 text-sm\",\n icon: \"h-8 w-8\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"sm\",\n },\n },\n)\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>\n\n// Accordion\nexport { default as Accordion } from \"./Accordion.vue\"\nexport { default as AccordionContent } from \"./AccordionContent.vue\"\nexport { default as AccordionItem } from \"./AccordionItem.vue\"\nexport { default as AccordionTrigger } from \"./AccordionTrigger.vue\"\n\n// Alert\nexport { default as Alert } from \"./Alert.vue\"\nexport { default as AlertDescription } from \"./AlertDescription.vue\"\nexport { default as AlertTitle } from \"./AlertTitle.vue\"\n\n// Avatar\nexport { default as Avatar } from \"./Avatar.vue\"\nexport { default as AvatarFallback } from \"./AvatarFallback.vue\"\nexport { default as AvatarImage } from \"./AvatarImage.vue\"\n\n// Badge\nexport { default as Badge } from \"./Badge.vue\"\n\n// Calendar\nexport { default as Calendar } from \"./Calendar.vue\"\nexport { default as CalendarCell } from \"./CalendarCell.vue\"\nexport { default as CalendarCellTrigger } from \"./CalendarCellTrigger.vue\"\nexport { default as CalendarGrid } from \"./CalendarGrid.vue\"\nexport { default as CalendarGridBody } from \"./CalendarGridBody.vue\"\nexport { default as CalendarGridHead } from \"./CalendarGridHead.vue\"\nexport { default as CalendarGridRow } from \"./CalendarGridRow.vue\"\nexport { default as CalendarHeadCell } from \"./CalendarHeadCell.vue\"\nexport { default as CalendarHeader } from \"./CalendarHeader.vue\"\nexport { default as CalendarHeading } from \"./CalendarHeading.vue\"\nexport { default as CalendarNextButton } from \"./CalendarNextButton.vue\"\nexport { default as CalendarPrevButton } from \"./CalendarPrevButton.vue\"\n\n// Card\nexport { default as Card } from \"./Card.vue\"\nexport { default as CardContent } from \"./CardContent.vue\"\nexport { default as CardDescription } from \"./CardDescription.vue\"\nexport { default as CardFooter } from \"./CardFooter.vue\"\nexport { default as CardHeader } from \"./CardHeader.vue\"\nexport { default as CardTitle } from \"./CardTitle.vue\"\n\n// Checkbox\nexport { default as Checkbox } from \"./Checkbox.vue\"\n\n// Combobox\nexport { default as Combobox } from \"./Combobox.vue\"\nexport { default as ComboboxAnchor } from \"./ComboboxAnchor.vue\"\nexport { default as ComboboxEmpty } from \"./ComboboxEmpty.vue\"\nexport { default as ComboboxGroup } from \"./ComboboxGroup.vue\"\nexport { default as ComboboxInput } from \"./ComboboxInput.vue\"\nexport { default as ComboboxItem } from \"./ComboboxItem.vue\"\nexport { default as ComboboxList } from \"./ComboboxList.vue\"\nexport { default as ComboboxSeparator } from \"./ComboboxSeparator.vue\"\nexport { default as ComboboxTrigger } from \"./ComboboxTrigger.vue\"\n\n// ContextMenu\nexport { default as ContextMenu } from \"./ContextMenu.vue\"\nexport { default as ContextMenuCheckboxItem } from \"./ContextMenuCheckboxItem.vue\"\nexport { default as ContextMenuContent } from \"./ContextMenuContent.vue\"\nexport { default as ContextMenuGroup } from \"./ContextMenuGroup.vue\"\nexport { default as ContextMenuItem } from \"./ContextMenuItem.vue\"\nexport { default as ContextMenuLabel } from \"./ContextMenuLabel.vue\"\nexport { default as ContextMenuPortal } from \"./ContextMenuPortal.vue\"\nexport { default as ContextMenuRadioGroup } from \"./ContextMenuRadioGroup.vue\"\nexport { default as ContextMenuRadioItem } from \"./ContextMenuRadioItem.vue\"\nexport { default as ContextMenuSeparator } from \"./ContextMenuSeparator.vue\"\nexport { default as ContextMenuShortcut } from \"./ContextMenuShortcut.vue\"\nexport { default as ContextMenuSub } from \"./ContextMenuSub.vue\"\nexport { default as ContextMenuSubContent } from \"./ContextMenuSubContent.vue\"\nexport { default as ContextMenuSubTrigger } from \"./ContextMenuSubTrigger.vue\"\nexport { default as ContextMenuTrigger } from \"./ContextMenuTrigger.vue\"\n\n// Dialog\nexport { default as Dialog } from \"./Dialog.vue\"\nexport { default as DialogBody } from \"./DialogBody.vue\"\nexport { default as DialogContent } from \"./DialogContent.vue\"\nexport { default as DialogDescription } from \"./DialogDescription.vue\"\nexport { default as DialogFooter } from \"./DialogFooter.vue\"\nexport { default as DialogHeader } from \"./DialogHeader.vue\"\nexport { default as DialogTitle } from \"./DialogTitle.vue\"\n\n// Field\nexport { default as Field } from \"./Field.vue\"\nexport { default as FieldContent } from \"./FieldContent.vue\"\nexport { default as FieldDescription } from \"./FieldDescription.vue\"\nexport { default as FieldError } from \"./FieldError.vue\"\nexport { default as FieldGroup } from \"./FieldGroup.vue\"\nexport { default as FieldLabel } from \"./FieldLabel.vue\"\nexport { default as FieldLegend } from \"./FieldLegend.vue\"\nexport { default as FieldSeparator } from \"./FieldSeparator.vue\"\nexport { default as FieldSet } from \"./FieldSet.vue\"\nexport { default as FieldTitle } from \"./FieldTitle.vue\"\n\n// ButtonGroup\nexport { default as ButtonGroup } from \"./ButtonGroup.vue\"\nexport { default as ButtonGroupSeparator } from \"./ButtonGroupSeparator.vue\"\nexport { default as ButtonGroupText } from \"./ButtonGroupText.vue\"\n\n// Input\nexport { default as Button } from \"./Button.vue\"\nexport { default as Input } from \"./Input.vue\"\n\n// Kbd\nexport { default as Kbd } from \"./Kbd.vue\"\nexport { default as KbdGroup } from \"./KbdGroup.vue\"\n\n// Label\nexport { default as Label } from \"./Label.vue\"\n\n// Popover\nexport { default as Popover } from \"./Popover.vue\"\nexport { default as PopoverContent } from \"./PopoverContent.vue\"\nexport { default as PopoverTrigger } from \"./PopoverTrigger.vue\"\n\n// Progress\nexport { default as Progress } from \"./Progress.vue\"\n\n// Radio\nexport { default as RadioGroup } from \"./RadioGroup.vue\"\nexport { default as RadioGroupItem } from \"./RadioGroupItem.vue\"\n\n// Select\nexport { default as Select } from \"./Select.vue\"\nexport { default as SelectContent } from \"./SelectContent.vue\"\nexport { default as SelectGroup } from \"./SelectGroup.vue\"\nexport { default as SelectItem } from \"./SelectItem.vue\"\nexport { default as SelectItemText } from \"./SelectItemText.vue\"\nexport { default as SelectLabel } from \"./SelectLabel.vue\"\nexport { default as SelectScrollDownButton } from \"./SelectScrollDownButton.vue\"\nexport { default as SelectScrollUpButton } from \"./SelectScrollUpButton.vue\"\nexport { default as SelectSeparator } from \"./SelectSeparator.vue\"\nexport { default as SelectTrigger } from \"./SelectTrigger.vue\"\nexport { default as SelectValue } from \"./SelectValue.vue\"\n\n// Separator\nexport { default as Separator } from \"./Separator.vue\"\n\n// Spinner\nexport { default as Spinner } from \"./Spinner.vue\"\n\n// Switch\nexport { default as Switch } from \"./Switch.vue\"\n\n// Tabs\nexport { default as Tabs } from \"./Tabs.vue\"\nexport { default as TabsContent } from \"./TabsContent.vue\"\nexport { default as TabsList } from \"./TabsList.vue\"\nexport { default as TabsTrigger } from \"./TabsTrigger.vue\"\n\n// Textarea\nexport { default as Textarea } from \"./Textarea.vue\"\n\n\n// Tooltip\nexport { default as Tooltip } from \"./Tooltip.vue\"\nexport { default as TooltipContent } from \"./TooltipContent.vue\"\nexport { default as TooltipProvider } from \"./TooltipProvider.vue\"\nexport { default as TooltipTrigger } from \"./TooltipTrigger.vue\"\n\n// Toaster\nexport { default as Toaster } from \"./Toaster.vue\"\n"],"names":["buttonVariants","cva"],"mappings":";;;;;;;;;;;;AAIO,MAAMA,IAAiBC;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),l=require("@vueuse/core"),c=require("lucide-vue-next"),r=require("reka-ui"),d=require("../../../lib/utils.cjs"),u={key:0,class:"z-10 flex h-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),l=require("@vueuse/core"),c=require("lucide-vue-next"),r=require("reka-ui"),d=require("../../../lib/utils.cjs"),u={key:0,class:"z-10 flex h-3.5 w-2.5 items-center justify-center rounded-[3px] border border-border/70 bg-background/95 shadow-sm"},f=e.defineComponent({__name:"ResizableHandle",props:{id:{},hitAreaMargins:{},tabindex:{},disabled:{type:Boolean},nonce:{},asChild:{type:Boolean},as:{},class:{},withHandle:{type:Boolean}},emits:["dragging"],setup(a,{emit:i}){const t=a,n=i,o=l.reactiveOmit(t,"class"),s=r.useForwardPropsEmits(o,n);return(p,v)=>(e.openBlock(),e.createBlock(e.unref(r.SplitterResizeHandle),e.mergeProps(e.unref(s),{class:e.unref(d.cn)("relative flex w-px items-center justify-center bg-transparent after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 [&[data-orientation=vertical]]:h-px [&[data-orientation=vertical]]:w-full [&[data-orientation=vertical]]:after:left-0 [&[data-orientation=vertical]]:after:h-1 [&[data-orientation=vertical]]:after:w-full [&[data-orientation=vertical]]:after:-translate-y-1/2 [&[data-orientation=vertical]]:after:translate-x-0 [&[data-orientation=vertical]>div]:rotate-90",t.class)}),{default:e.withCtx(()=>[t.withHandle?(e.openBlock(),e.createElementBlock("div",u,[e.createVNode(e.unref(c.GripVertical),{class:"h-2 w-2 text-muted-foreground"})])):e.createCommentVNode("",!0)]),_:1},16,["class"]))}});exports.default=f;
|
|
2
2
|
//# sourceMappingURL=ResizableHandle.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResizableHandle.vue.cjs","sources":["../../../../../src/components/shadcn/resizable/ResizableHandle.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SplitterResizeHandleEmits, SplitterResizeHandleProps } from \"reka-ui\"\nimport type { HTMLAttributes } from \"vue\"\nimport { reactiveOmit } from \"@vueuse/core\"\nimport { GripVertical } from \"lucide-vue-next\"\nimport { SplitterResizeHandle, useForwardPropsEmits } from \"reka-ui\"\nimport { cn } from \"@/lib/utils\"\n\nconst props = defineProps<SplitterResizeHandleProps & { class?: HTMLAttributes[\"class\"], withHandle?: boolean }>()\nconst emits = defineEmits<SplitterResizeHandleEmits>()\n\nconst delegatedProps = reactiveOmit(props, \"class\")\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n <SplitterResizeHandle v-bind=\"forwarded\" :class=\"cn('relative flex w-px items-center justify-center bg-
|
|
1
|
+
{"version":3,"file":"ResizableHandle.vue.cjs","sources":["../../../../../src/components/shadcn/resizable/ResizableHandle.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SplitterResizeHandleEmits, SplitterResizeHandleProps } from \"reka-ui\"\nimport type { HTMLAttributes } from \"vue\"\nimport { reactiveOmit } from \"@vueuse/core\"\nimport { GripVertical } from \"lucide-vue-next\"\nimport { SplitterResizeHandle, useForwardPropsEmits } from \"reka-ui\"\nimport { cn } from \"@/lib/utils\"\n\nconst props = defineProps<SplitterResizeHandleProps & { class?: HTMLAttributes[\"class\"], withHandle?: boolean }>()\nconst emits = defineEmits<SplitterResizeHandleEmits>()\n\nconst delegatedProps = reactiveOmit(props, \"class\")\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n <SplitterResizeHandle v-bind=\"forwarded\" :class=\"cn('relative flex w-px items-center justify-center bg-transparent after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 [&[data-orientation=vertical]]:h-px [&[data-orientation=vertical]]:w-full [&[data-orientation=vertical]]:after:left-0 [&[data-orientation=vertical]]:after:h-1 [&[data-orientation=vertical]]:after:w-full [&[data-orientation=vertical]]:after:-translate-y-1/2 [&[data-orientation=vertical]]:after:translate-x-0 [&[data-orientation=vertical]>div]:rotate-90', props.class)\">\n <template v-if=\"props.withHandle\">\n <div class=\"z-10 flex h-3.5 w-2.5 items-center justify-center rounded-[3px] border border-border/70 bg-background/95 shadow-sm\">\n <GripVertical class=\"h-2 w-2 text-muted-foreground\" />\n </div>\n </template>\n </SplitterResizeHandle>\n</template>\n"],"names":["props","__props","emits","__emit","delegatedProps","reactiveOmit","forwarded","useForwardPropsEmits","_createBlock","_unref","SplitterResizeHandle","_mergeProps","cn","_openBlock","_createElementBlock","_hoisted_1","_createVNode","GripVertical"],"mappings":"wlBAQA,MAAMA,EAAQC,EACRC,EAAQC,EAERC,EAAiBC,EAAAA,aAAaL,EAAO,OAAO,EAE5CM,EAAYC,EAAAA,qBAAqBH,EAAgBF,CAAK,8BAI1DM,EAAAA,YAMuBC,EAAAA,MAAAC,EAAAA,oBAAA,EANvBC,EAAAA,WAMuBF,QAAAH,CAAA,EANgB,CAAG,MAAOG,EAAAA,MAAAG,EAAAA,EAAA,EAAE,olBAAslBZ,EAAM,KAAK,CAAA,sBAClpB,IAIW,CAJKA,EAAM,YACpBa,EAAAA,UAAA,EAAAC,EAAAA,mBAEM,MAFNC,EAEM,CADJC,EAAAA,YAAsDP,EAAAA,MAAAQ,EAAAA,YAAA,EAAA,CAAxC,MAAM,gCAA+B,CAAA"}
|
|
@@ -5,7 +5,7 @@ import { useForwardPropsEmits as g, SplitterResizeHandle as h } from "reka-ui";
|
|
|
5
5
|
import { cn as w } from "../../../lib/utils.js";
|
|
6
6
|
const x = {
|
|
7
7
|
key: 0,
|
|
8
|
-
class: "z-10 flex h-
|
|
8
|
+
class: "z-10 flex h-3.5 w-2.5 items-center justify-center rounded-[3px] border border-border/70 bg-background/95 shadow-sm"
|
|
9
9
|
}, P = /* @__PURE__ */ l({
|
|
10
10
|
__name: "ResizableHandle",
|
|
11
11
|
props: {
|
|
@@ -23,11 +23,11 @@ const x = {
|
|
|
23
23
|
setup(r, { emit: i }) {
|
|
24
24
|
const t = r, o = i, n = v(t, "class"), s = g(n, o);
|
|
25
25
|
return (_, y) => (a(), c(e(h), d(e(s), {
|
|
26
|
-
class: e(w)("relative flex w-px items-center justify-center bg-
|
|
26
|
+
class: e(w)("relative flex w-px items-center justify-center bg-transparent after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 [&[data-orientation=vertical]]:h-px [&[data-orientation=vertical]]:w-full [&[data-orientation=vertical]]:after:left-0 [&[data-orientation=vertical]]:after:h-1 [&[data-orientation=vertical]]:after:w-full [&[data-orientation=vertical]]:after:-translate-y-1/2 [&[data-orientation=vertical]]:after:translate-x-0 [&[data-orientation=vertical]>div]:rotate-90", t.class)
|
|
27
27
|
}), {
|
|
28
28
|
default: f(() => [
|
|
29
29
|
t.withHandle ? (a(), m("div", x, [
|
|
30
|
-
u(e(b), { class: "h-2
|
|
30
|
+
u(e(b), { class: "h-2 w-2 text-muted-foreground" })
|
|
31
31
|
])) : p("", !0)
|
|
32
32
|
]),
|
|
33
33
|
_: 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResizableHandle.vue.js","sources":["../../../../../src/components/shadcn/resizable/ResizableHandle.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SplitterResizeHandleEmits, SplitterResizeHandleProps } from \"reka-ui\"\nimport type { HTMLAttributes } from \"vue\"\nimport { reactiveOmit } from \"@vueuse/core\"\nimport { GripVertical } from \"lucide-vue-next\"\nimport { SplitterResizeHandle, useForwardPropsEmits } from \"reka-ui\"\nimport { cn } from \"@/lib/utils\"\n\nconst props = defineProps<SplitterResizeHandleProps & { class?: HTMLAttributes[\"class\"], withHandle?: boolean }>()\nconst emits = defineEmits<SplitterResizeHandleEmits>()\n\nconst delegatedProps = reactiveOmit(props, \"class\")\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n <SplitterResizeHandle v-bind=\"forwarded\" :class=\"cn('relative flex w-px items-center justify-center bg-
|
|
1
|
+
{"version":3,"file":"ResizableHandle.vue.js","sources":["../../../../../src/components/shadcn/resizable/ResizableHandle.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SplitterResizeHandleEmits, SplitterResizeHandleProps } from \"reka-ui\"\nimport type { HTMLAttributes } from \"vue\"\nimport { reactiveOmit } from \"@vueuse/core\"\nimport { GripVertical } from \"lucide-vue-next\"\nimport { SplitterResizeHandle, useForwardPropsEmits } from \"reka-ui\"\nimport { cn } from \"@/lib/utils\"\n\nconst props = defineProps<SplitterResizeHandleProps & { class?: HTMLAttributes[\"class\"], withHandle?: boolean }>()\nconst emits = defineEmits<SplitterResizeHandleEmits>()\n\nconst delegatedProps = reactiveOmit(props, \"class\")\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n <SplitterResizeHandle v-bind=\"forwarded\" :class=\"cn('relative flex w-px items-center justify-center bg-transparent after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 [&[data-orientation=vertical]]:h-px [&[data-orientation=vertical]]:w-full [&[data-orientation=vertical]]:after:left-0 [&[data-orientation=vertical]]:after:h-1 [&[data-orientation=vertical]]:after:w-full [&[data-orientation=vertical]]:after:-translate-y-1/2 [&[data-orientation=vertical]]:after:translate-x-0 [&[data-orientation=vertical]>div]:rotate-90', props.class)\">\n <template v-if=\"props.withHandle\">\n <div class=\"z-10 flex h-3.5 w-2.5 items-center justify-center rounded-[3px] border border-border/70 bg-background/95 shadow-sm\">\n <GripVertical class=\"h-2 w-2 text-muted-foreground\" />\n </div>\n </template>\n </SplitterResizeHandle>\n</template>\n"],"names":["props","__props","emits","__emit","delegatedProps","reactiveOmit","forwarded","useForwardPropsEmits","_createBlock","_unref","SplitterResizeHandle","_mergeProps","cn","_openBlock","_createElementBlock","_hoisted_1","_createVNode","GripVertical"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAMA,IAAQC,GACRC,IAAQC,GAERC,IAAiBC,EAAaL,GAAO,OAAO,GAE5CM,IAAYC,EAAqBH,GAAgBF,CAAK;2BAI1DM,EAMuBC,EAAAC,CAAA,GANvBC,EAMuBF,EAAAH,CAAA,GANgB;AAAA,MAAG,OAAOG,EAAAG,CAAA,EAAE,qlBAAslBZ,EAAM,KAAK;AAAA,IAAA;iBAClpB,MAIW;AAAA,QAJKA,EAAM,cACpBa,EAAA,GAAAC,EAEM,OAFNC,GAEM;AAAA,UADJC,EAAsDP,EAAAQ,CAAA,GAAA,EAAxC,OAAM,iCAA+B;AAAA,QAAA;;;;;;"}
|
package/package.json
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -621,6 +621,8 @@ declare type __VLS_Props_24 = {
|
|
|
621
621
|
rowNumbers?: boolean;
|
|
622
622
|
/** 플로팅 필터 표시 여부 */
|
|
623
623
|
floatingFilters?: boolean;
|
|
624
|
+
/** 플로팅 필터 표시 여부 (하위호환 alias) */
|
|
625
|
+
floatingFilter?: boolean;
|
|
624
626
|
/** 행 번호 컬럼 너비(px) */
|
|
625
627
|
rowNumberWidth?: number;
|
|
626
628
|
/** 행별 액션 버튼 목록 */
|
|
@@ -1811,6 +1813,7 @@ pagination?: boolean;
|
|
|
1811
1813
|
checkbox?: boolean;
|
|
1812
1814
|
rowNumbers?: boolean;
|
|
1813
1815
|
floatingFilters?: boolean;
|
|
1816
|
+
floatingFilter?: boolean;
|
|
1814
1817
|
rowNumberWidth?: number;
|
|
1815
1818
|
actionButtons?: ActionButton[];
|
|
1816
1819
|
summaryColumn?: boolean;
|
|
@@ -1855,6 +1858,7 @@ pagination: boolean;
|
|
|
1855
1858
|
checkbox: boolean;
|
|
1856
1859
|
rowNumbers: boolean;
|
|
1857
1860
|
floatingFilters: boolean;
|
|
1861
|
+
floatingFilter: boolean;
|
|
1858
1862
|
rowNumberWidth: number;
|
|
1859
1863
|
actionButtons: ActionButton[];
|
|
1860
1864
|
summaryColumn: boolean;
|
|
@@ -1874,7 +1878,9 @@ rowGroupPanelShow: "always" | "onlyWhenGrouping" | "never";
|
|
|
1874
1878
|
groupDefaultExpanded: number;
|
|
1875
1879
|
pivotPanelShow: "always" | "onlyWhenPivoting" | "never";
|
|
1876
1880
|
pivotMode: boolean;
|
|
1877
|
-
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
1881
|
+
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
1882
|
+
gridContainerRef: HTMLDivElement;
|
|
1883
|
+
}, HTMLDivElement, ComponentProvideOptions, {
|
|
1878
1884
|
P: {};
|
|
1879
1885
|
B: {};
|
|
1880
1886
|
D: {};
|
|
@@ -1889,6 +1895,7 @@ pagination?: boolean;
|
|
|
1889
1895
|
checkbox?: boolean;
|
|
1890
1896
|
rowNumbers?: boolean;
|
|
1891
1897
|
floatingFilters?: boolean;
|
|
1898
|
+
floatingFilter?: boolean;
|
|
1892
1899
|
rowNumberWidth?: number;
|
|
1893
1900
|
actionButtons?: ActionButton[];
|
|
1894
1901
|
summaryColumn?: boolean;
|
|
@@ -1925,6 +1932,7 @@ pagination: boolean;
|
|
|
1925
1932
|
checkbox: boolean;
|
|
1926
1933
|
rowNumbers: boolean;
|
|
1927
1934
|
floatingFilters: boolean;
|
|
1935
|
+
floatingFilter: boolean;
|
|
1928
1936
|
rowNumberWidth: number;
|
|
1929
1937
|
actionButtons: ActionButton[];
|
|
1930
1938
|
summaryColumn: boolean;
|
|
@@ -1959,6 +1967,7 @@ pagination?: boolean;
|
|
|
1959
1967
|
checkbox?: boolean;
|
|
1960
1968
|
rowNumbers?: boolean;
|
|
1961
1969
|
floatingFilters?: boolean;
|
|
1970
|
+
floatingFilter?: boolean;
|
|
1962
1971
|
rowNumberWidth?: number;
|
|
1963
1972
|
actionButtons?: ActionButton[];
|
|
1964
1973
|
summaryColumn?: boolean;
|
|
@@ -2003,6 +2012,7 @@ pagination: boolean;
|
|
|
2003
2012
|
checkbox: boolean;
|
|
2004
2013
|
rowNumbers: boolean;
|
|
2005
2014
|
floatingFilters: boolean;
|
|
2015
|
+
floatingFilter: boolean;
|
|
2006
2016
|
rowNumberWidth: number;
|
|
2007
2017
|
actionButtons: ActionButton[];
|
|
2008
2018
|
summaryColumn: boolean;
|
|
@@ -2022,7 +2032,9 @@ rowGroupPanelShow: "always" | "onlyWhenGrouping" | "never";
|
|
|
2022
2032
|
groupDefaultExpanded: number;
|
|
2023
2033
|
pivotPanelShow: "always" | "onlyWhenPivoting" | "never";
|
|
2024
2034
|
pivotMode: boolean;
|
|
2025
|
-
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
2035
|
+
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
2036
|
+
gridContainerRef: HTMLDivElement;
|
|
2037
|
+
}, HTMLDivElement, ComponentProvideOptions, {
|
|
2026
2038
|
P: {};
|
|
2027
2039
|
B: {};
|
|
2028
2040
|
D: {};
|
|
@@ -2037,6 +2049,7 @@ pagination?: boolean;
|
|
|
2037
2049
|
checkbox?: boolean;
|
|
2038
2050
|
rowNumbers?: boolean;
|
|
2039
2051
|
floatingFilters?: boolean;
|
|
2052
|
+
floatingFilter?: boolean;
|
|
2040
2053
|
rowNumberWidth?: number;
|
|
2041
2054
|
actionButtons?: ActionButton[];
|
|
2042
2055
|
summaryColumn?: boolean;
|
|
@@ -2073,6 +2086,7 @@ pagination: boolean;
|
|
|
2073
2086
|
checkbox: boolean;
|
|
2074
2087
|
rowNumbers: boolean;
|
|
2075
2088
|
floatingFilters: boolean;
|
|
2089
|
+
floatingFilter: boolean;
|
|
2076
2090
|
rowNumberWidth: number;
|
|
2077
2091
|
actionButtons: ActionButton[];
|
|
2078
2092
|
summaryColumn: boolean;
|
|
@@ -2101,6 +2115,7 @@ pagination?: boolean;
|
|
|
2101
2115
|
checkbox?: boolean;
|
|
2102
2116
|
rowNumbers?: boolean;
|
|
2103
2117
|
floatingFilters?: boolean;
|
|
2118
|
+
floatingFilter?: boolean;
|
|
2104
2119
|
rowNumberWidth?: number;
|
|
2105
2120
|
actionButtons?: ActionButton[];
|
|
2106
2121
|
summaryColumn?: boolean;
|
|
@@ -2145,6 +2160,7 @@ pagination: boolean;
|
|
|
2145
2160
|
checkbox: boolean;
|
|
2146
2161
|
rowNumbers: boolean;
|
|
2147
2162
|
floatingFilters: boolean;
|
|
2163
|
+
floatingFilter: boolean;
|
|
2148
2164
|
rowNumberWidth: number;
|
|
2149
2165
|
actionButtons: ActionButton[];
|
|
2150
2166
|
summaryColumn: boolean;
|
|
@@ -2164,7 +2180,9 @@ rowGroupPanelShow: "always" | "onlyWhenGrouping" | "never";
|
|
|
2164
2180
|
groupDefaultExpanded: number;
|
|
2165
2181
|
pivotPanelShow: "always" | "onlyWhenPivoting" | "never";
|
|
2166
2182
|
pivotMode: boolean;
|
|
2167
|
-
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
2183
|
+
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
2184
|
+
gridContainerRef: HTMLDivElement;
|
|
2185
|
+
}, HTMLDivElement, ComponentProvideOptions, {
|
|
2168
2186
|
P: {};
|
|
2169
2187
|
B: {};
|
|
2170
2188
|
D: {};
|
|
@@ -2179,6 +2197,7 @@ pagination?: boolean;
|
|
|
2179
2197
|
checkbox?: boolean;
|
|
2180
2198
|
rowNumbers?: boolean;
|
|
2181
2199
|
floatingFilters?: boolean;
|
|
2200
|
+
floatingFilter?: boolean;
|
|
2182
2201
|
rowNumberWidth?: number;
|
|
2183
2202
|
actionButtons?: ActionButton[];
|
|
2184
2203
|
summaryColumn?: boolean;
|
|
@@ -2215,6 +2234,7 @@ pagination: boolean;
|
|
|
2215
2234
|
checkbox: boolean;
|
|
2216
2235
|
rowNumbers: boolean;
|
|
2217
2236
|
floatingFilters: boolean;
|
|
2237
|
+
floatingFilter: boolean;
|
|
2218
2238
|
rowNumberWidth: number;
|
|
2219
2239
|
actionButtons: ActionButton[];
|
|
2220
2240
|
summaryColumn: boolean;
|
|
@@ -2582,6 +2602,7 @@ pagination: boolean;
|
|
|
2582
2602
|
checkbox: boolean;
|
|
2583
2603
|
rowNumbers: boolean;
|
|
2584
2604
|
floatingFilters: boolean;
|
|
2605
|
+
floatingFilter: boolean;
|
|
2585
2606
|
rowNumberWidth: number;
|
|
2586
2607
|
actionButtons: ActionButton[];
|
|
2587
2608
|
summaryColumn: boolean;
|
|
@@ -2601,7 +2622,9 @@ rowGroupPanelShow: "always" | "onlyWhenGrouping" | "never";
|
|
|
2601
2622
|
groupDefaultExpanded: number;
|
|
2602
2623
|
pivotPanelShow: "always" | "onlyWhenPivoting" | "never";
|
|
2603
2624
|
pivotMode: boolean;
|
|
2604
|
-
}, {}, {}, {}, string, ComponentProvideOptions, false, {
|
|
2625
|
+
}, {}, {}, {}, string, ComponentProvideOptions, false, {
|
|
2626
|
+
gridContainerRef: HTMLDivElement;
|
|
2627
|
+
}, HTMLDivElement>;
|
|
2605
2628
|
|
|
2606
2629
|
export declare const JGroupCombo: DefineComponent<__VLS_Props_27, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
2607
2630
|
"update:modelValue": (value: string | number) => any;
|
|
@@ -2903,6 +2926,7 @@ pagination?: boolean;
|
|
|
2903
2926
|
checkbox?: boolean;
|
|
2904
2927
|
rowNumbers?: boolean;
|
|
2905
2928
|
floatingFilters?: boolean;
|
|
2929
|
+
floatingFilter?: boolean;
|
|
2906
2930
|
rowNumberWidth?: number;
|
|
2907
2931
|
actionButtons?: ActionButton[];
|
|
2908
2932
|
summaryColumn?: boolean;
|
|
@@ -2947,6 +2971,7 @@ pagination: boolean;
|
|
|
2947
2971
|
checkbox: boolean;
|
|
2948
2972
|
rowNumbers: boolean;
|
|
2949
2973
|
floatingFilters: boolean;
|
|
2974
|
+
floatingFilter: boolean;
|
|
2950
2975
|
rowNumberWidth: number;
|
|
2951
2976
|
actionButtons: ActionButton[];
|
|
2952
2977
|
summaryColumn: boolean;
|
|
@@ -2966,7 +2991,9 @@ rowGroupPanelShow: "always" | "onlyWhenGrouping" | "never";
|
|
|
2966
2991
|
groupDefaultExpanded: number;
|
|
2967
2992
|
pivotPanelShow: "always" | "onlyWhenPivoting" | "never";
|
|
2968
2993
|
pivotMode: boolean;
|
|
2969
|
-
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
2994
|
+
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
2995
|
+
gridContainerRef: HTMLDivElement;
|
|
2996
|
+
}, HTMLDivElement, ComponentProvideOptions, {
|
|
2970
2997
|
P: {};
|
|
2971
2998
|
B: {};
|
|
2972
2999
|
D: {};
|
|
@@ -2981,6 +3008,7 @@ pagination?: boolean;
|
|
|
2981
3008
|
checkbox?: boolean;
|
|
2982
3009
|
rowNumbers?: boolean;
|
|
2983
3010
|
floatingFilters?: boolean;
|
|
3011
|
+
floatingFilter?: boolean;
|
|
2984
3012
|
rowNumberWidth?: number;
|
|
2985
3013
|
actionButtons?: ActionButton[];
|
|
2986
3014
|
summaryColumn?: boolean;
|
|
@@ -3017,6 +3045,7 @@ pagination: boolean;
|
|
|
3017
3045
|
checkbox: boolean;
|
|
3018
3046
|
rowNumbers: boolean;
|
|
3019
3047
|
floatingFilters: boolean;
|
|
3048
|
+
floatingFilter: boolean;
|
|
3020
3049
|
rowNumberWidth: number;
|
|
3021
3050
|
actionButtons: ActionButton[];
|
|
3022
3051
|
summaryColumn: boolean;
|
|
@@ -3045,6 +3074,7 @@ pagination?: boolean;
|
|
|
3045
3074
|
checkbox?: boolean;
|
|
3046
3075
|
rowNumbers?: boolean;
|
|
3047
3076
|
floatingFilters?: boolean;
|
|
3077
|
+
floatingFilter?: boolean;
|
|
3048
3078
|
rowNumberWidth?: number;
|
|
3049
3079
|
actionButtons?: ActionButton[];
|
|
3050
3080
|
summaryColumn?: boolean;
|
|
@@ -3089,6 +3119,7 @@ pagination: boolean;
|
|
|
3089
3119
|
checkbox: boolean;
|
|
3090
3120
|
rowNumbers: boolean;
|
|
3091
3121
|
floatingFilters: boolean;
|
|
3122
|
+
floatingFilter: boolean;
|
|
3092
3123
|
rowNumberWidth: number;
|
|
3093
3124
|
actionButtons: ActionButton[];
|
|
3094
3125
|
summaryColumn: boolean;
|
|
@@ -3108,7 +3139,9 @@ rowGroupPanelShow: "always" | "onlyWhenGrouping" | "never";
|
|
|
3108
3139
|
groupDefaultExpanded: number;
|
|
3109
3140
|
pivotPanelShow: "always" | "onlyWhenPivoting" | "never";
|
|
3110
3141
|
pivotMode: boolean;
|
|
3111
|
-
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
3142
|
+
}, false, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
3143
|
+
gridContainerRef: HTMLDivElement;
|
|
3144
|
+
}, HTMLDivElement, ComponentProvideOptions, {
|
|
3112
3145
|
P: {};
|
|
3113
3146
|
B: {};
|
|
3114
3147
|
D: {};
|
|
@@ -3123,6 +3156,7 @@ pagination?: boolean;
|
|
|
3123
3156
|
checkbox?: boolean;
|
|
3124
3157
|
rowNumbers?: boolean;
|
|
3125
3158
|
floatingFilters?: boolean;
|
|
3159
|
+
floatingFilter?: boolean;
|
|
3126
3160
|
rowNumberWidth?: number;
|
|
3127
3161
|
actionButtons?: ActionButton[];
|
|
3128
3162
|
summaryColumn?: boolean;
|
|
@@ -3159,6 +3193,7 @@ pagination: boolean;
|
|
|
3159
3193
|
checkbox: boolean;
|
|
3160
3194
|
rowNumbers: boolean;
|
|
3161
3195
|
floatingFilters: boolean;
|
|
3196
|
+
floatingFilter: boolean;
|
|
3162
3197
|
rowNumberWidth: number;
|
|
3163
3198
|
actionButtons: ActionButton[];
|
|
3164
3199
|
summaryColumn: boolean;
|