@stachelock/ui 0.1.3 → 0.1.4
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/dist/{CalendarHeader.vue_vue_type_script_setup_true_lang-B3KQTxfD.js → CalendarHeader.vue_vue_type_script_setup_true_lang-Cirr0hMB.js} +2 -2
- package/dist/{CalendarHeader.vue_vue_type_script_setup_true_lang-B3KQTxfD.js.map → CalendarHeader.vue_vue_type_script_setup_true_lang-Cirr0hMB.js.map} +1 -1
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-2dJNxQUF.js +1300 -0
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-2dJNxQUF.js.map +1 -0
- package/dist/{DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js → DashboardLayout.vue_vue_type_script_setup_true_lang-VeZhdPhj.js} +38 -37
- package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-VeZhdPhj.js.map +1 -0
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BpfPAZiT.js +217 -0
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BpfPAZiT.js.map +1 -0
- package/dist/{DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js → DynamicFormField.vue_vue_type_script_setup_true_lang-DvT03FIS.js} +40 -24
- package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-DvT03FIS.js.map +1 -0
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-YV1lfgUY.js +157 -0
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-YV1lfgUY.js.map +1 -0
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cn_WOpZi.js +103 -0
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cn_WOpZi.js.map +1 -0
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BPjHLHdM.js +522 -0
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BPjHLHdM.js.map +1 -0
- package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-CQIW5dy_.js → SidebarLayout.vue_vue_type_script_setup_true_lang-J1nfUTdM.js} +28 -27
- package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-CQIW5dy_.js.map → SidebarLayout.vue_vue_type_script_setup_true_lang-J1nfUTdM.js.map} +1 -1
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BFr2SByh.js +273 -0
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BFr2SByh.js.map +1 -0
- package/dist/{TagifyInput.vue_vue_type_script_setup_true_lang-RHqhKoK5.js → TagifyInput.vue_vue_type_script_setup_true_lang-DRR6jt_8.js} +60 -50
- package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-DRR6jt_8.js.map +1 -0
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-quGuN9v4.js +82 -0
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-quGuN9v4.js.map +1 -0
- package/dist/{UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js → UiModal.vue_vue_type_script_setup_true_lang-SAo39zpS.js} +21 -20
- package/dist/{UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js.map → UiModal.vue_vue_type_script_setup_true_lang-SAo39zpS.js.map} +1 -1
- package/dist/XMarkIcon-C4wILUsz.js +40 -0
- package/dist/XMarkIcon-C4wILUsz.js.map +1 -0
- package/dist/calculate-active-index-CksdUwZY.js +87 -0
- package/dist/calculate-active-index-CksdUwZY.js.map +1 -0
- package/dist/calendars/CalendarDashboard.js +2 -2
- package/dist/calendars/CalendarHeader.js +1 -1
- package/dist/calendars/EventCard.js +1 -1
- package/dist/calendars/EventsList.js +1 -1
- package/dist/components/Breadcrumb.js +1 -1
- package/dist/components/Modal.js +1 -1
- package/dist/components/RadialProgressBar.d.ts +2 -2
- package/dist/components/RadialProgressBar.js +1 -1
- package/dist/description-CBd3BJ9O.js +30 -0
- package/dist/description-CBd3BJ9O.js.map +1 -0
- package/dist/dialog-U1KNiPzc.js +493 -0
- package/dist/dialog-U1KNiPzc.js.map +1 -0
- package/dist/form-DQKuKVqJ.js +51 -0
- package/dist/form-DQKuKVqJ.js.map +1 -0
- package/dist/forms/DynamicForm.js +1 -1
- package/dist/forms/DynamicFormField.js +1 -1
- package/dist/forms/FormFieldWrapper.js +71 -42
- package/dist/forms/FormFieldWrapper.js.map +1 -1
- package/dist/index.js +307 -242
- package/dist/index.js.map +1 -1
- package/dist/inputs/ComboboxInput.js +1 -1
- package/dist/inputs/SelectInput.js +1 -1
- package/dist/inputs/SwitchInput.js +1 -1
- package/dist/inputs/TagifyInput.js +1 -1
- package/dist/keyboard-DJD8TwH4.js +113 -0
- package/dist/keyboard-DJD8TwH4.js.map +1 -0
- package/dist/layouts/DashboardLayout.js +1 -1
- package/dist/layouts/SidebarLayout.js +1 -1
- package/dist/open-closed-DgcU-HDT.js +179 -0
- package/dist/open-closed-DgcU-HDT.js.map +1 -0
- package/dist/src/components/layouts/DashboardLayout.d.ts.map +1 -1
- package/dist/src/components/layouts/SidebarLayout.d.ts.map +1 -1
- package/dist/transition-CuxxW9dY.js +209 -0
- package/dist/transition-CuxxW9dY.js.map +1 -0
- package/package.json +1 -1
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-DoJHjJsA.js +0 -304
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-DoJHjJsA.js.map +0 -1
- package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js.map +0 -1
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js +0 -201
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js.map +0 -1
- package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js.map +0 -1
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js +0 -75
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js.map +0 -1
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js +0 -89
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js.map +0 -1
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BguP8xMU.js +0 -242
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BguP8xMU.js.map +0 -1
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BagTQ6M0.js +0 -197
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BagTQ6M0.js.map +0 -1
- package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-RHqhKoK5.js.map +0 -1
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js +0 -68
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js.map +0 -1
- package/dist/UiRadialProgressBar.vue_vue_type_script_setup_true_lang-BGCBJa2S.js +0 -72
- package/dist/UiRadialProgressBar.vue_vue_type_script_setup_true_lang-BGCBJa2S.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwitchInput.vue_vue_type_script_setup_true_lang-BFr2SByh.js","sources":["../node_modules/@headlessui/vue/dist/components/label/label.js","../node_modules/@headlessui/vue/dist/components/switch/switch.js","../src/components/inputs/SwitchInput.vue"],"sourcesContent":["import{computed as v,defineComponent as x,inject as L,onMounted as k,onUnmounted as C,provide as j,ref as y,unref as h}from\"vue\";import{useId as w}from'../../hooks/use-id.js';import{render as R}from'../../utils/render.js';let a=Symbol(\"LabelContext\");function d(){let t=L(a,null);if(t===null){let n=new Error(\"You used a <Label /> component, but it is not inside a parent.\");throw Error.captureStackTrace&&Error.captureStackTrace(n,d),n}return t}function E({slot:t={},name:n=\"Label\",props:i={}}={}){let e=y([]);function o(r){return e.value.push(r),()=>{let l=e.value.indexOf(r);l!==-1&&e.value.splice(l,1)}}return j(a,{register:o,slot:t,name:n,props:i}),v(()=>e.value.length>0?e.value.join(\" \"):void 0)}let K=x({name:\"Label\",props:{as:{type:[Object,String],default:\"label\"},passive:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(t,{slots:n,attrs:i}){var r;let e=(r=t.id)!=null?r:`headlessui-label-${w()}`,o=d();return k(()=>C(o.register(e))),()=>{let{name:l=\"Label\",slot:p={},props:c={}}=o,{passive:f,...s}=t,u={...Object.entries(c).reduce((b,[g,m])=>Object.assign(b,{[g]:h(m)}),{}),id:e};return f&&(delete u.onClick,delete u.htmlFor,delete s.onClick),R({ourProps:u,theirProps:s,slot:p,attrs:i,slots:n,name:l})}}});export{K as Label,E as useLabels};\n","import{computed as u,defineComponent as v,Fragment as H,h as S,inject as M,onMounted as I,provide as P,ref as w,watch as j}from\"vue\";import{useControllable as G}from'../../hooks/use-controllable.js';import{useId as V}from'../../hooks/use-id.js';import{useResolveButtonType as F}from'../../hooks/use-resolve-button-type.js';import{Features as O,Hidden as A}from'../../internal/hidden.js';import{Keys as g}from'../../keyboard.js';import{dom as N}from'../../utils/dom.js';import{attemptSubmit as $}from'../../utils/form.js';import{compact as U,omit as _,render as k}from'../../utils/render.js';import{Description as q,useDescriptions as z}from'../description/description.js';import{Label as J,useLabels as Q}from'../label/label.js';let C=Symbol(\"GroupContext\"),oe=v({name:\"SwitchGroup\",props:{as:{type:[Object,String],default:\"template\"}},setup(l,{slots:c,attrs:i}){let r=w(null),f=Q({name:\"SwitchLabel\",props:{htmlFor:u(()=>{var t;return(t=r.value)==null?void 0:t.id}),onClick(t){r.value&&(t.currentTarget.tagName===\"LABEL\"&&t.preventDefault(),r.value.click(),r.value.focus({preventScroll:!0}))}}}),p=z({name:\"SwitchDescription\"});return P(C,{switchRef:r,labelledby:f,describedby:p}),()=>k({theirProps:l,ourProps:{},slot:{},slots:c,attrs:i,name:\"SwitchGroup\"})}}),ue=v({name:\"Switch\",emits:{\"update:modelValue\":l=>!0},props:{as:{type:[Object,String],default:\"button\"},modelValue:{type:Boolean,default:void 0},defaultChecked:{type:Boolean,optional:!0},form:{type:String,optional:!0},name:{type:String,optional:!0},value:{type:String,optional:!0},id:{type:String,default:null},disabled:{type:Boolean,default:!1},tabIndex:{type:Number,default:0}},inheritAttrs:!1,setup(l,{emit:c,attrs:i,slots:r,expose:f}){var h;let p=(h=l.id)!=null?h:`headlessui-switch-${V()}`,n=M(C,null),[t,s]=G(u(()=>l.modelValue),e=>c(\"update:modelValue\",e),u(()=>l.defaultChecked));function m(){s(!t.value)}let E=w(null),o=n===null?E:n.switchRef,L=F(u(()=>({as:l.as,type:i.type})),o);f({el:o,$el:o});function D(e){e.preventDefault(),m()}function R(e){e.key===g.Space?(e.preventDefault(),m()):e.key===g.Enter&&$(e.currentTarget)}function x(e){e.preventDefault()}let d=u(()=>{var e,a;return(a=(e=N(o))==null?void 0:e.closest)==null?void 0:a.call(e,\"form\")});return I(()=>{j([d],()=>{if(!d.value||l.defaultChecked===void 0)return;function e(){s(l.defaultChecked)}return d.value.addEventListener(\"reset\",e),()=>{var a;(a=d.value)==null||a.removeEventListener(\"reset\",e)}},{immediate:!0})}),()=>{let{name:e,value:a,form:K,tabIndex:y,...b}=l,T={checked:t.value},B={id:p,ref:o,role:\"switch\",type:L.value,tabIndex:y===-1?0:y,\"aria-checked\":t.value,\"aria-labelledby\":n==null?void 0:n.labelledby.value,\"aria-describedby\":n==null?void 0:n.describedby.value,onClick:D,onKeyup:R,onKeypress:x};return S(H,[e!=null&&t.value!=null?S(A,U({features:O.Hidden,as:\"input\",type:\"checkbox\",hidden:!0,readOnly:!0,checked:t.value,form:K,disabled:b.disabled,name:e,value:a})):null,k({ourProps:B,theirProps:{...i,..._(b,[\"modelValue\",\"defaultChecked\"])},slot:T,attrs:i,slots:r,name:\"Switch\"})])}}}),de=J,ce=q;export{ue as Switch,ce as SwitchDescription,oe as SwitchGroup,de as SwitchLabel};\n","<template>\n <div class=\"sl-w-full\">\n <FormFieldWrapper\n :id=\"id\"\n :name=\"name\"\n :label=\"layout === 'stacked' && !hideMainLabel ? label : ''\"\n :disabled=\"disabled\"\n :optional=\"!rules\"\n :tertiary-label=\"tertiaryLabel\"\n :box-shadow=\"boxShadow\"\n :error-message=\"errorMessage\"\n :success-message=\"successMessage\"\n :is-valid=\"meta.valid\"\n :is-touched=\"meta.touched\"\n :show-errors=\"showErrors\"\n >\n <div class=\"sl-flex sl-items-center sl-justify-between sl-gap-4\">\n <div v-if=\"layout === 'inline'\" class=\"sl-flex-1\">\n <label\n v-if=\"label && !hideMainLabel\"\n :for=\"id\"\n class=\"sl-block sl-text-sm sl-font-medium sl-text-gray-900 sl-cursor-pointer\"\n >\n {{ label }}\n </label>\n <div v-if=\"description\" class=\"sl-mt-1 sl-text-sm sl-text-gray-600\" :class=\"{ 'sl-cursor-pointer': !disabled }\" @click=\"!disabled && toggle()\">\n <div v-if=\"isDescriptionHtml\" v-html=\"description\" />\n <span v-else>{{ description }}</span>\n </div>\n </div>\n <Switch\n :id=\"id\"\n ref=\"switchRef\"\n v-model=\"switchValue\"\n :disabled=\"disabled\"\n :class=\"[\n switchClasses,\n { 'sl-shadow-md': boxShadow }\n ]\"\n @update:model-value=\"handleToggle\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n @keydown.space.prevent=\"toggle\"\n @keydown.enter.prevent=\"toggle\"\n >\n <span class=\"sl-sr-only\">{{ label }}</span>\n <span\n :class=\"[\n switchValue ? 'sl-translate-x-5' : 'sl-translate-x-0',\n 'sl-pointer-events-none sl-inline-block sl-h-5 sl-w-5 sl-transform sl-rounded-full sl-bg-white sl-shadow sl-ring-0 sl-transition sl-duration-200 sl-ease-in-out sl-relative'\n ]\"\n >\n </span>\n </Switch>\n <span v-if=\"textTrue || textFalse\" class=\"sl-ml-3 sl-text-sm\">\n <span v-if=\"switchValue && textTrue\" class=\"sl-font-medium sl-text-gray-800\">{{ textTrue }}</span>\n <span v-else-if=\"!switchValue && textFalse\" class=\"sl-text-gray-500\">{{ textFalse }}</span>\n </span>\n <div v-if=\"description && layout === 'stacked'\" class=\"sl-flex-1\">\n <p v-if=\"!isDescriptionHtml\" class=\"sl-mt-1 sl-text-sm sl-text-gray-600\">{{ description }}</p>\n <p v-else class=\"sl-mt-1 sl-text-sm sl-text-gray-600\" v-html=\"description\" />\n </div>\n </div>\n </FormFieldWrapper>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { Switch } from '@headlessui/vue'\nimport { useField } from 'vee-validate'\nimport { generateId } from '../../utils/id'\nimport FormFieldWrapper from '../forms/FormFieldWrapper.vue'\nimport type { ValidationRule } from '../../types/form'\n\ninterface Props {\n name: string\n modelValue?: boolean\n label?: string\n description?: string\n disabled?: boolean\n immediate?: boolean\n boxShadow?: boolean\n defaultValue?: boolean\n hideMainLabel?: boolean\n textTrue?: string\n textFalse?: string\n rules?: ValidationRule\n validateOnMount?: boolean\n successMessage?: string\n tertiaryLabel?: string\n isDescriptionHtml?: boolean\n showErrors?: boolean\n layout?: 'stacked' | 'inline'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n immediate: false,\n boxShadow: false,\n defaultValue: false,\n hideMainLabel: false,\n isDescriptionHtml: false,\n showErrors: false,\n layout: 'stacked'\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n blur: [event: FocusEvent]\n focus: [event: FocusEvent]\n}>()\n\nconst switchRef = ref<any>()\nconst id = generateId(`sl-${props.name}`)\n\nconst { value, errorMessage, handleChange, handleBlur, meta } = useField(\n () => props.name,\n props.rules,\n {\n type: 'checkbox',\n validateOnMount: props.validateOnMount,\n initialValue: props.modelValue ?? props.defaultValue,\n syncVModel: true\n }\n)\n\nconst switchValue = ref<boolean>(props.modelValue ?? props.defaultValue)\n\n// Watch for external changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue !== undefined && newValue !== switchValue.value) {\n const boolVal = !!newValue\n switchValue.value = boolVal\n value.value = boolVal\n }\n },\n { immediate: true }\n)\n\nconst switchClasses = computed(() => {\n const baseClasses = [\n 'sl-relative',\n 'sl-inline-flex',\n 'sl-items-center',\n 'sl-h-6',\n 'sl-w-11',\n 'sl-flex-shrink-0',\n 'sl-cursor-pointer',\n 'sl-rounded-full',\n 'sl-border-2',\n 'sl-border-transparent',\n 'sl-transition-colors',\n 'sl-duration-200',\n 'sl-ease-in-out',\n 'focus:sl-outline-none',\n 'focus:sl-ring-2',\n 'focus:sl-ring-stachelock-600',\n 'focus:sl-ring-offset-2'\n ]\n\n if (props.disabled) {\n baseClasses.push(\n 'sl-cursor-not-allowed',\n 'sl-opacity-50'\n )\n }\n\n if (switchValue.value) {\n baseClasses.push('sl-bg-stachelock-600')\n } else {\n baseClasses.push('sl-bg-gray-200')\n }\n\n return baseClasses.join(' ')\n})\n\nconst handleToggle = (value: boolean) => {\n if (props.disabled) return\n \n switchValue.value = value\n if (props.immediate) {\n handleChange(value)\n }\n emit('update:modelValue', value)\n}\n\nconst onBlur = (event: FocusEvent) => {\n if (!props.immediate) {\n handleChange(switchValue.value)\n }\n handleBlur(event)\n emit('blur', event)\n}\n\nconst onFocus = (event: FocusEvent) => {\n emit('focus', event)\n}\n\n// Expose toggle method for external control\nconst toggle = () => {\n if (!props.disabled) {\n handleToggle(!switchValue.value)\n }\n}\n\ndefineExpose({\n toggle,\n value: switchValue,\n focus: () => {\n const el = (switchRef.value as any)?.$el ?? switchRef.value\n ;(el as HTMLButtonElement | null)?.focus?.()\n },\n blur: () => {\n const el = (switchRef.value as any)?.$el ?? switchRef.value\n ;(el as HTMLButtonElement | null)?.blur?.()\n },\n switchRef\n})\n</script>\n\n\n"],"names":["a","d","L","E","i","e","y","o","r","l","j","v","x","w","k","C","p","c","f","s","u","b","g","m","h","R","Q","t","z","P","ue","V","n","M","G","F","D","$","N","I","K","T","B","S","H","A","U","O","_","props","__props","emit","__emit","switchRef","ref","id","generateId","value","errorMessage","handleChange","handleBlur","meta","useField","switchValue","watch","newValue","boolVal","switchClasses","computed","baseClasses","handleToggle","onBlur","event","onFocus","toggle","__expose","_openBlock","_createElementBlock","_hoisted_1","_createVNode","FormFieldWrapper","_unref","name","layout","hideMainLabel","label","disabled","rules","tertiaryLabel","boxShadow","successMessage","showErrors","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","description","_normalizeClass","_cache","$event","isDescriptionHtml","Switch","_hoisted_7","_toDisplayString","textTrue","textFalse","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import j from "./
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { createElementBlock as c, openBlock as i, createElementVNode as d, defineComponent as V, ref as p, watch as z, onMounted as A, createBlock as T, withCtx as g, normalizeClass as U, Fragment as S, renderList as k, withDirectives as C, toDisplayString as h, normalizeStyle as F, withKeys as L, withModifiers as y, vModelText as B, createVNode as Q, unref as R, createCommentVNode as K, renderSlot as N, nextTick as W } from "vue";
|
|
2
|
+
import Z from "./components/Badge.js";
|
|
3
|
+
import j from "./forms/FormFieldWrapper.js";
|
|
4
|
+
function G(s, b) {
|
|
5
|
+
return i(), c("svg", {
|
|
6
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
7
|
+
viewBox: "0 0 20 20",
|
|
8
|
+
fill: "currentColor",
|
|
9
|
+
"aria-hidden": "true",
|
|
10
|
+
"data-slot": "icon"
|
|
11
|
+
}, [
|
|
12
|
+
d("path", { d: "M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z" })
|
|
13
|
+
]);
|
|
14
|
+
}
|
|
15
|
+
const H = { key: 0 }, P = ["onUpdate:modelValue", "placeholder", "disabled", "onKeydown", "onBlur"], X = ["onClick", "disabled"], Y = { class: "sl-flex-1 sl-min-w-0 sl-relative" }, _ = ["placeholder", "disabled", "onKeydown"], ee = { class: "sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-3 sl-pointer-events-auto" }, te = {
|
|
6
16
|
key: 0,
|
|
7
17
|
class: "sl-absolute sl-z-50 sl-mt-1 sl-max-h-60 sl-w-full sl-overflow-auto sl-rounded-md sl-bg-white sl-py-1 sl-text-base sl-shadow-lg sl-ring-1 sl-ring-black sl-ring-opacity-5 focus:sl-outline-none sm:sl-text-sm"
|
|
8
18
|
}, le = ["onClick"], se = { class: "sl-flex" }, ae = { class: "sl-truncate sl-font-semibold" }, ne = { class: "sl-block sl-truncate" }, oe = {
|
|
9
19
|
key: 0,
|
|
10
20
|
class: "sl-ml-2 sl-truncate sl-text-gray-500"
|
|
11
|
-
},
|
|
21
|
+
}, de = /* @__PURE__ */ V({
|
|
12
22
|
__name: "TagifyInput",
|
|
13
23
|
props: {
|
|
14
24
|
items: {
|
|
@@ -81,8 +91,8 @@ const H = { key: 0 }, P = ["onUpdate:modelValue", "placeholder", "disabled", "on
|
|
|
81
91
|
}
|
|
82
92
|
},
|
|
83
93
|
emits: ["update:value", "update:query", "invalid-tag"],
|
|
84
|
-
setup(s, { expose:
|
|
85
|
-
const t = s, m = D,
|
|
94
|
+
setup(s, { expose: b, emit: D }) {
|
|
95
|
+
const t = s, m = D, r = p(""), v = p([]), n = p(JSON.parse(JSON.stringify(t.value))), f = p(!1);
|
|
86
96
|
z(
|
|
87
97
|
() => t.value,
|
|
88
98
|
(e) => {
|
|
@@ -90,57 +100,57 @@ const H = { key: 0 }, P = ["onUpdate:modelValue", "placeholder", "disabled", "on
|
|
|
90
100
|
},
|
|
91
101
|
{ deep: !0 }
|
|
92
102
|
);
|
|
93
|
-
const
|
|
94
|
-
if (
|
|
95
|
-
m("update:query",
|
|
96
|
-
const e =
|
|
97
|
-
|
|
103
|
+
const q = (e) => e[t.itemSubtext] || e[t.itemText], E = (e) => e[t.itemSubtext] ? e[t.itemText] : void 0, I = (e) => e[t.tagDisplayKey] || e[t.itemText], $ = () => {
|
|
104
|
+
if (r.value && r.value.length > 0) {
|
|
105
|
+
m("update:query", r.value);
|
|
106
|
+
const e = r.value.toLowerCase();
|
|
107
|
+
v.value = t.items.filter((a) => a[t.itemText]?.toLowerCase().includes(e) || a[t.itemSubtext]?.toLowerCase().includes(e)), f.value = !0;
|
|
98
108
|
} else
|
|
99
|
-
|
|
109
|
+
v.value = [], f.value = !1;
|
|
100
110
|
}, J = () => {
|
|
101
|
-
const e =
|
|
111
|
+
const e = r.value.trim();
|
|
102
112
|
if (e === "")
|
|
103
113
|
return;
|
|
104
114
|
let a = null;
|
|
105
|
-
const l = e.toLowerCase(),
|
|
115
|
+
const l = e.toLowerCase(), u = t.items.find(
|
|
106
116
|
(o) => o[t.itemText]?.toLowerCase() === l || o[t.itemSubtext]?.toLowerCase() === l
|
|
107
117
|
);
|
|
108
|
-
if (
|
|
109
|
-
a = { ...
|
|
118
|
+
if (u)
|
|
119
|
+
a = { ...u };
|
|
110
120
|
else if (t.pattern && t.pattern.test(e))
|
|
111
121
|
a = { id: null, [t.itemText]: e };
|
|
112
122
|
else
|
|
113
123
|
return;
|
|
114
124
|
n.value.some(
|
|
115
125
|
(o) => o[t.itemText] === a[t.itemText]
|
|
116
|
-
) || (n.value.push(a), m("update:value", n.value)),
|
|
126
|
+
) || (n.value.push(a), m("update:value", n.value)), r.value = "", v.value = [], f.value = !1;
|
|
117
127
|
}, M = (e) => {
|
|
118
128
|
const a = e[t.itemText].trim();
|
|
119
129
|
n.value.some(
|
|
120
130
|
(l) => l[t.itemText] === a
|
|
121
|
-
) || (n.value.push({ ...e }), m("update:value", n.value)),
|
|
122
|
-
},
|
|
131
|
+
) || (n.value.push({ ...e }), m("update:value", n.value)), r.value = "", v.value = [], f.value = !1;
|
|
132
|
+
}, x = (e) => {
|
|
123
133
|
n.value.splice(e, 1), m("update:value", n.value);
|
|
124
134
|
}, O = (e) => {
|
|
125
135
|
n.value[e].isEditing = !0, W(() => {
|
|
126
136
|
});
|
|
127
|
-
},
|
|
137
|
+
}, w = (e) => {
|
|
128
138
|
const a = n.value[e];
|
|
129
139
|
if (a) {
|
|
130
140
|
a.isEditing = !1;
|
|
131
141
|
const l = a[t.itemText].trim();
|
|
132
142
|
if (t.pattern && !t.pattern.test(l)) {
|
|
133
|
-
m("invalid-tag", l),
|
|
143
|
+
m("invalid-tag", l), x(e);
|
|
134
144
|
return;
|
|
135
145
|
}
|
|
136
146
|
a[t.itemText] = l, m("update:value", n.value);
|
|
137
147
|
}
|
|
138
148
|
};
|
|
139
149
|
return A(() => {
|
|
140
|
-
|
|
141
|
-
}),
|
|
150
|
+
v.value = [];
|
|
151
|
+
}), b({
|
|
142
152
|
selectedTags: n
|
|
143
|
-
}), (e, a) => (
|
|
153
|
+
}), (e, a) => (i(), T(j, {
|
|
144
154
|
id: s.name,
|
|
145
155
|
name: s.name,
|
|
146
156
|
label: s.label,
|
|
@@ -150,70 +160,70 @@ const H = { key: 0 }, P = ["onUpdate:modelValue", "placeholder", "disabled", "on
|
|
|
150
160
|
optional: s.optional
|
|
151
161
|
}, {
|
|
152
162
|
"tertiary-label-overlay": g(() => [
|
|
153
|
-
|
|
163
|
+
N(e.$slots, "tertiary-overlay")
|
|
154
164
|
]),
|
|
155
165
|
default: g(() => [
|
|
156
166
|
d("div", {
|
|
157
167
|
class: U(["sl-flex sl-flex-wrap sl-items-center sl-gap-4 sl-rounded-md sl-bg-white sl-px-3 sm:sl-text-sm sm:sl-leading-6", s.inline ? null : "sl-shadow-sm sl-border sl-border-gray-300 focus-within:sl-ring-2 focus-within:sl-ring-stachelock-600"])
|
|
158
168
|
}, [
|
|
159
|
-
(
|
|
160
|
-
key:
|
|
161
|
-
onClick: (o) => O(
|
|
169
|
+
(i(!0), c(S, null, k(n.value, (l, u) => (i(), T(Z, {
|
|
170
|
+
key: u,
|
|
171
|
+
onClick: (o) => O(u),
|
|
162
172
|
theme: "primary",
|
|
163
173
|
size: "sm"
|
|
164
174
|
}, {
|
|
165
175
|
default: g(() => [
|
|
166
|
-
l.isEditing ?
|
|
176
|
+
l.isEditing ? C((i(), c("input", {
|
|
167
177
|
key: 1,
|
|
168
178
|
ref_for: !0,
|
|
169
179
|
ref: "editInput",
|
|
170
180
|
"onUpdate:modelValue": (o) => l[t.itemText] = o,
|
|
171
181
|
placeholder: s.placeholder,
|
|
172
182
|
disabled: s.disabled,
|
|
173
|
-
onKeydown:
|
|
174
|
-
onBlur: (o) =>
|
|
183
|
+
onKeydown: L(y((o) => w(u), ["prevent"]), ["enter"]),
|
|
184
|
+
onBlur: (o) => w(u),
|
|
175
185
|
class: "sl-bg-transparent sl-border-none sl-outline-none sl-text-stachelock-600 sl-text-sm placeholder:sl-text-stachelock-400/80 focus:sl-ring-0 focus:sl-ring-stachelock-600 focus:sl-rounded-lg -sl-mx-3 -sl-my-2",
|
|
176
186
|
style: F({ width: l[t.itemText].length + 4 + "ch" })
|
|
177
187
|
}, null, 44, P)), [
|
|
178
188
|
[B, l[t.itemText]]
|
|
179
|
-
]) : (
|
|
189
|
+
]) : (i(), c("span", H, h(I(l)), 1)),
|
|
180
190
|
d("button", {
|
|
181
191
|
type: "button",
|
|
182
192
|
class: "sl-ml-2 sl-text-stachelock-600 hover:sl-text-stachelock-400 focus:sl-outline-none",
|
|
183
|
-
onClick: y((o) =>
|
|
193
|
+
onClick: y((o) => x(u), ["stop"]),
|
|
184
194
|
disabled: s.disabled
|
|
185
195
|
}, [
|
|
186
|
-
Q(R(
|
|
187
|
-
], 8,
|
|
196
|
+
Q(R(G), { class: "sl-h-4 sl-w-4" })
|
|
197
|
+
], 8, X)
|
|
188
198
|
]),
|
|
189
199
|
_: 2
|
|
190
200
|
}, 1032, ["onClick"]))), 128)),
|
|
191
|
-
d("div",
|
|
192
|
-
|
|
201
|
+
d("div", Y, [
|
|
202
|
+
C(d("input", {
|
|
193
203
|
ref: "input",
|
|
194
|
-
"onUpdate:modelValue": a[0] || (a[0] = (l) =>
|
|
204
|
+
"onUpdate:modelValue": a[0] || (a[0] = (l) => r.value = l),
|
|
195
205
|
placeholder: s.placeholder,
|
|
196
206
|
onInput: $,
|
|
197
207
|
disabled: s.disabled,
|
|
198
|
-
onKeydown:
|
|
208
|
+
onKeydown: L(y(J, ["prevent"]), ["enter"]),
|
|
199
209
|
class: "sl-w-full sl-border-none sl-outline-none sl-rounded-md focus:sl-ring-0 sl-text-sm sl-font-light -sl-mx-3 sl-pr-12"
|
|
200
210
|
}, null, 40, _), [
|
|
201
|
-
[B,
|
|
211
|
+
[B, r.value]
|
|
202
212
|
]),
|
|
203
213
|
d("div", ee, [
|
|
204
|
-
|
|
214
|
+
N(e.$slots, "input-overlay")
|
|
205
215
|
]),
|
|
206
|
-
|
|
207
|
-
(
|
|
216
|
+
f.value && !s.disabled ? (i(), c("div", te, [
|
|
217
|
+
(i(!0), c(S, null, k(v.value, (l) => (i(), c("div", {
|
|
208
218
|
key: l[s.itemKey],
|
|
209
219
|
class: "sl-cursor-pointer sl-select-none sl-py-2 sl-pl-3 sl-pr-9 hover:sl-bg-stachelock-600 hover:sl-text-white",
|
|
210
|
-
onClick: y((
|
|
220
|
+
onClick: y((u) => M(l), ["prevent"])
|
|
211
221
|
}, [
|
|
212
222
|
d("div", se, [
|
|
213
223
|
d("span", ae, [
|
|
214
|
-
d("span", ne, h(
|
|
224
|
+
d("span", ne, h(q(l)), 1)
|
|
215
225
|
]),
|
|
216
|
-
s.showSubext ? (
|
|
226
|
+
s.showSubext ? (i(), c("span", oe, h(E(l)), 1)) : K("", !0)
|
|
217
227
|
])
|
|
218
228
|
], 8, le))), 128))
|
|
219
229
|
])) : K("", !0)
|
|
@@ -225,6 +235,6 @@ const H = { key: 0 }, P = ["onUpdate:modelValue", "placeholder", "disabled", "on
|
|
|
225
235
|
}
|
|
226
236
|
});
|
|
227
237
|
export {
|
|
228
|
-
|
|
238
|
+
de as _
|
|
229
239
|
};
|
|
230
|
-
//# sourceMappingURL=TagifyInput.vue_vue_type_script_setup_true_lang-
|
|
240
|
+
//# sourceMappingURL=TagifyInput.vue_vue_type_script_setup_true_lang-DRR6jt_8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagifyInput.vue_vue_type_script_setup_true_lang-DRR6jt_8.js","sources":["../node_modules/@heroicons/vue/20/solid/esm/XMarkIcon.js","../src/components/inputs/TagifyInput.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", { d: \"M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z\" })\n ]))\n}","<template>\n <FormFieldWrapper\n :id=\"name\"\n :name=\"name\"\n :label=\"label\"\n :tertiary-label=\"tertiaryLabel\"\n :error-message=\"errorMessage\"\n :disabled=\"disabled\"\n :optional=\"optional\"\n >\n <template #tertiary-label-overlay>\n <slot name=\"tertiary-overlay\"></slot>\n </template>\n \n <div class=\"sl-flex sl-flex-wrap sl-items-center sl-gap-4 sl-rounded-md sl-bg-white sl-px-3 sm:sl-text-sm sm:sl-leading-6\"\n :class=\"inline ? null : 'sl-shadow-sm sl-border sl-border-gray-300 focus-within:sl-ring-2 focus-within:sl-ring-stachelock-600'\">\n <!-- Display selected tags as badges -->\n <UiBadge v-for=\"(tag, index) in selectedTags\" :key=\"index\" @click=\"editTag(index)\" theme=\"primary\" size=\"sm\">\n <span v-if=\"!tag.isEditing\">{{ tagDisplay(tag) }}</span>\n <input v-else ref=\"editInput\" v-model=\"tag[props.itemText]\" :placeholder=\"placeholder\"\n :disabled=\"disabled\" @keydown.enter.prevent=\"stopEditingTag(index)\"\n @blur=\"stopEditingTag(index)\"\n class=\"sl-bg-transparent sl-border-none sl-outline-none sl-text-stachelock-600 sl-text-sm placeholder:sl-text-stachelock-400/80 focus:sl-ring-0 focus:sl-ring-stachelock-600 focus:sl-rounded-lg -sl-mx-3 -sl-my-2\"\n :style=\"{ width: tag[props.itemText].length + 4 + 'ch' }\" />\n <button type=\"button\" class=\"sl-ml-2 sl-text-stachelock-600 hover:sl-text-stachelock-400 focus:sl-outline-none\"\n @click.stop=\"removeTag(index)\" :disabled=\"disabled\">\n <XMarkIcon class=\"sl-h-4 sl-w-4\" />\n </button>\n </UiBadge>\n <!-- Input for adding new tags -->\n <div class=\"sl-flex-1 sl-min-w-0 sl-relative\">\n <input ref=\"input\" v-model=\"query\" :placeholder=\"placeholder\" @input=\"filterItems\"\n :disabled=\"disabled\" @keydown.enter.prevent=\"addTag\"\n class=\"sl-w-full sl-border-none sl-outline-none sl-rounded-md focus:sl-ring-0 sl-text-sm sl-font-light -sl-mx-3 sl-pr-12\" />\n <!-- Overlay slot aligned to the far right -->\n <div class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-3 sl-pointer-events-auto\">\n <slot name=\"input-overlay\" />\n </div>\n <!-- Suggestions Dropdown -->\n <div v-if=\"showDropdown && !disabled\"\n class=\"sl-absolute sl-z-50 sl-mt-1 sl-max-h-60 sl-w-full sl-overflow-auto sl-rounded-md sl-bg-white sl-py-1 sl-text-base sl-shadow-lg sl-ring-1 sl-ring-black sl-ring-opacity-5 focus:sl-outline-none sm:sl-text-sm\">\n <div v-for=\"item in filteredItems\" :key=\"item[itemKey]\"\n class=\"sl-cursor-pointer sl-select-none sl-py-2 sl-pl-3 sl-pr-9 hover:sl-bg-stachelock-600 hover:sl-text-white\"\n @click.prevent=\"selectSuggestion(item)\">\n <div class=\"sl-flex\">\n <span class=\"sl-truncate sl-font-semibold\">\n <span class=\"sl-block sl-truncate\">{{ itemDisplay(item) }}</span>\n </span>\n <span v-if=\"showSubext\" class=\"sl-ml-2 sl-truncate sl-text-gray-500\">\n {{ itemSecondaryDisplay(item) }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </FormFieldWrapper>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, watch, onMounted, nextTick } from 'vue';\nimport { XMarkIcon } from '@heroicons/vue/20/solid';\nimport UiBadge from '../UiBadge.vue';\nimport FormFieldWrapper from '../forms/FormFieldWrapper.vue';\n\ninterface Item {\n id: string | number | null;\n [key: string]: any; // Allows dynamic keys like 'value' or 'name'\n}\n\nconst props = defineProps({\n items: {\n type: Array as () => Item[],\n required: true,\n },\n value: {\n type: Array as () => Item[],\n default: () => [],\n },\n name: {\n type: String,\n required: true,\n },\n label: {\n type: String,\n required: false,\n },\n itemKey: {\n type: String,\n default: 'id',\n },\n itemText: {\n type: String,\n default: 'value',\n },\n itemSubtext: {\n type: String,\n default: 'name',\n },\n showSubext: {\n type: Boolean,\n default: true\n },\n tagDisplayKey: {\n type: String,\n default: 'name',\n },\n tertiaryLabel: {\n type: String,\n required: false,\n },\n pattern: {\n type: RegExp,\n default: null,\n },\n inline: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n default: 'Add a tag...',\n },\n disabled: {\n type: Boolean,\n default: false\n },\n optional: {\n type: Boolean,\n default: false\n },\n errorMessage: {\n type: String,\n default: ''\n },\n hasInputRing: {\n type: Boolean,\n default: false\n }\n});\n\nconst emits = defineEmits(['update:value', 'update:query', 'invalid-tag']);\n\nconst query = ref<string>('');\nconst filteredItems = ref<Item[]>([]);\nconst selectedTags = ref<Item[]>(JSON.parse(JSON.stringify(props.value)));\nconst showDropdown = ref(false);\n\nwatch(\n () => props.value,\n (newVal) => {\n if (JSON.stringify(newVal) !== JSON.stringify(selectedTags.value)) {\n selectedTags.value = JSON.parse(JSON.stringify(newVal));\n }\n },\n { deep: true }\n);\n\nconst itemDisplay = (item: Item) => item[props.itemSubtext] || item[props.itemText];\nconst itemSecondaryDisplay = (item: Item) => item[props.itemSubtext] ? item[props.itemText] : undefined;\nconst tagDisplay = (tag: Item) => tag[props.tagDisplayKey] || tag[props.itemText];\n\nconst filterItems = () => {\n if (query.value && query.value.length > 0) {\n emits('update:query', query.value);\n\n // Simple filtering logic\n const lowerQuery = query.value.toLowerCase();\n filteredItems.value = props.items.filter((item) => {\n return (\n item[props.itemText]?.toLowerCase().includes(lowerQuery) ||\n item[props.itemSubtext]?.toLowerCase().includes(lowerQuery)\n );\n });\n showDropdown.value = true;\n } else {\n filteredItems.value = [];\n showDropdown.value = false;\n }\n};\n\nconst addTag = () => {\n const trimmedQuery = query.value.trim();\n if (trimmedQuery === '') {\n return;\n }\n\n let tagToAdd: Item | null = null;\n\n const lowerQuery = trimmedQuery.toLowerCase();\n\n // Check if the query matches any item in the items list\n const matchedItem = props.items.find(\n (item) =>\n item[props.itemText]?.toLowerCase() === lowerQuery ||\n item[props.itemSubtext]?.toLowerCase() === lowerQuery\n );\n\n if (matchedItem) {\n tagToAdd = { ...matchedItem };\n } else if (props.pattern && props.pattern.test(trimmedQuery)) {\n // Create a new item if it doesn't exist and matches the pattern\n tagToAdd = { id: null, [props.itemText]: trimmedQuery };\n } else {\n // Do not emit invalid-tag here; let the user continue typing\n return;\n }\n\n // Avoid duplicates\n if (\n !selectedTags.value.some(\n (tag) => tag[props.itemText] === tagToAdd![props.itemText]\n )\n ) {\n selectedTags.value.push(tagToAdd!);\n emits('update:value', selectedTags.value);\n }\n\n query.value = '';\n filteredItems.value = [];\n showDropdown.value = false;\n};\n\nconst selectSuggestion = (item: Item) => {\n const valueToTest = item[props.itemText].trim();\n\n // Avoid duplicates\n if (\n !selectedTags.value.some(\n (tag) => tag[props.itemText] === valueToTest\n )\n ) {\n selectedTags.value.push({ ...item });\n emits('update:value', selectedTags.value);\n }\n query.value = '';\n filteredItems.value = [];\n showDropdown.value = false;\n};\n\nconst removeTag = (index: number) => {\n selectedTags.value.splice(index, 1);\n emits('update:value', selectedTags.value);\n};\n\nconst editTag = (index: number) => {\n selectedTags.value[index].isEditing = true;\n nextTick(() => {\n // Focus logic can be added here if needed\n });\n};\n\nconst stopEditingTag = (index: number) => {\n const tag = selectedTags.value[index];\n if (tag) {\n tag.isEditing = false;\n const valueToTest = tag[props.itemText].trim();\n\n // Validate tag if pattern is provided\n if (props.pattern && !props.pattern.test(valueToTest)) {\n emits('invalid-tag', valueToTest);\n removeTag(index);\n return;\n }\n\n // Update the tag value after trimming\n tag[props.itemText] = valueToTest;\n emits('update:value', selectedTags.value);\n }\n};\n\nonMounted(() => {\n // Initialize filteredItems\n filteredItems.value = [];\n});\n\ndefineExpose({\n selectedTags,\n});\n</script>\n\n<style scoped>\n</style>\n"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","props","__props","emits","__emit","query","ref","filteredItems","selectedTags","showDropdown","watch","newVal","itemDisplay","item","itemSecondaryDisplay","tagDisplay","tag","filterItems","lowerQuery","addTag","trimmedQuery","tagToAdd","matchedItem","selectSuggestion","valueToTest","removeTag","index","editTag","nextTick","stopEditingTag","onMounted","__expose","_createBlock","FormFieldWrapper","_renderSlot","_normalizeClass","_Fragment","_renderList","UiBadge","$event","_withKeys","_withModifiers","_hoisted_1","_toDisplayString","_createVNode","_unref","XMarkIcon","_hoisted_4","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createElementBlock as o, openBlock as a, createElementVNode as c, defineComponent as v, ref as m, computed as x, watchEffect as w, Fragment as B, renderList as P, createBlock as k, createCommentVNode as C, createVNode as y, unref as N, withCtx as E, createTextVNode as V, toDisplayString as L } from "vue";
|
|
2
|
+
import { u as S, a as D, _ as R } from "./UiNavLink.vue_vue_type_script_setup_true_lang-Bz5oiCCk.js";
|
|
3
|
+
function U(d, n) {
|
|
4
|
+
return a(), o("svg", {
|
|
5
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
6
|
+
viewBox: "0 0 20 20",
|
|
7
|
+
fill: "currentColor",
|
|
8
|
+
"aria-hidden": "true",
|
|
9
|
+
"data-slot": "icon"
|
|
10
|
+
}, [
|
|
11
|
+
c("path", {
|
|
12
|
+
"fill-rule": "evenodd",
|
|
13
|
+
d: "M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z",
|
|
14
|
+
"clip-rule": "evenodd"
|
|
15
|
+
})
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
const j = {
|
|
19
|
+
class: "sl-hidden sm:sl-flex",
|
|
20
|
+
"aria-label": "Breadcrumb"
|
|
21
|
+
}, A = {
|
|
22
|
+
role: "list",
|
|
23
|
+
class: "sl-flex sl-items-center sl-space-x-4"
|
|
24
|
+
}, F = { class: "sl-flex sl-items-center" }, Z = /* @__PURE__ */ v({
|
|
25
|
+
__name: "UiBreadcrumb",
|
|
26
|
+
setup(d) {
|
|
27
|
+
const n = m([]), h = S(), f = D(), i = m(""), p = x(() => n.value.map((s) => {
|
|
28
|
+
const t = s.name.trim();
|
|
29
|
+
return {
|
|
30
|
+
...s,
|
|
31
|
+
name: t.length > 12 ? t.slice(0, 12) + "..." : t
|
|
32
|
+
};
|
|
33
|
+
})), _ = async () => {
|
|
34
|
+
const s = h.path;
|
|
35
|
+
i.value = s;
|
|
36
|
+
const t = s.split("/").filter(Boolean), e = [];
|
|
37
|
+
for (const [l, r] of t.entries()) {
|
|
38
|
+
let u;
|
|
39
|
+
u = r.charAt(0).toUpperCase() + r.slice(1).toLowerCase(), e.push({
|
|
40
|
+
name: u,
|
|
41
|
+
fullPath: "/" + t.slice(0, l + 1).join("/")
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
n.value = e;
|
|
45
|
+
}, g = (s, t) => {
|
|
46
|
+
const e = f.resolve(s.fullPath), l = e.matched.some((r) => r.meta?.isErrorPage);
|
|
47
|
+
(!e || e.matched.length === 0 || l) && (t.preventDefault(), t.stopPropagation(), console.warn("Breadcrumb route not found or is an error page:", s.fullPath));
|
|
48
|
+
};
|
|
49
|
+
return w(() => {
|
|
50
|
+
_();
|
|
51
|
+
}), (s, t) => (a(), o("nav", j, [
|
|
52
|
+
c("ol", A, [
|
|
53
|
+
(a(!0), o(B, null, P(p.value, (e, l) => (a(), o("li", {
|
|
54
|
+
key: e.fullPath
|
|
55
|
+
}, [
|
|
56
|
+
c("div", F, [
|
|
57
|
+
l !== 0 ? (a(), k(N(U), {
|
|
58
|
+
key: 0,
|
|
59
|
+
class: "sl-h-5 sl-w-5 sl-flex-shrink-0 sl-text-gray-400 sl-mr-3",
|
|
60
|
+
"aria-hidden": "true"
|
|
61
|
+
})) : C("", !0),
|
|
62
|
+
y(R, {
|
|
63
|
+
to: e.fullPath,
|
|
64
|
+
onClick: (r) => g(e, r),
|
|
65
|
+
"aria-current": e.fullPath === i.value ? "page" : void 0,
|
|
66
|
+
class: "sl-text-sm sl-font-medium sl-text-gray-500 hover:sl-text-gray-700 sl-truncate sl-overflow-ellipsis"
|
|
67
|
+
}, {
|
|
68
|
+
default: E(() => [
|
|
69
|
+
V(L(e.name), 1)
|
|
70
|
+
]),
|
|
71
|
+
_: 2
|
|
72
|
+
}, 1032, ["to", "onClick", "aria-current"])
|
|
73
|
+
])
|
|
74
|
+
]))), 128))
|
|
75
|
+
])
|
|
76
|
+
]));
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
export {
|
|
80
|
+
Z as _
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=UiBreadcrumb.vue_vue_type_script_setup_true_lang-quGuN9v4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UiBreadcrumb.vue_vue_type_script_setup_true_lang-quGuN9v4.js","sources":["../node_modules/@heroicons/vue/20/solid/esm/ChevronRightIcon.js","../src/components/UiBreadcrumb.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n d: \"M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z\",\n \"clip-rule\": \"evenodd\"\n })\n ]))\n}","<template>\n <nav class=\"sl-hidden sm:sl-flex\" aria-label=\"Breadcrumb\">\n <ol role=\"list\" class=\"sl-flex sl-items-center sl-space-x-4\">\n <li v-for=\"(breadcrumb, index) in processedBreadcrumbs\" :key=\"breadcrumb.fullPath\">\n <div class=\"sl-flex sl-items-center\">\n <ChevronRightIcon v-if=\"index !== 0\" class=\"sl-h-5 sl-w-5 sl-flex-shrink-0 sl-text-gray-400 sl-mr-3\" aria-hidden=\"true\" />\n <!-- Make sure UiNavLink forwards the native click event -->\n <UiNavLink :to=\"breadcrumb.fullPath\" @click=\"(event) => handleBreadcrumbClick(breadcrumb, event)\"\n :aria-current=\"breadcrumb.fullPath === currentPath ? 'page' : undefined\"\n class=\"sl-text-sm sl-font-medium sl-text-gray-500 hover:sl-text-gray-700 sl-truncate sl-overflow-ellipsis\">\n {{ breadcrumb.name }}\n </UiNavLink>\n </div>\n </li>\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport UiNavLink from './UiNavLink.vue';\nimport { ChevronRightIcon } from '@heroicons/vue/20/solid';\n\ninterface BreadcrumbItem {\n name: string;\n fullPath: string;\n}\n\ninterface RouteMeta {\n isErrorPage?: boolean;\n}\n\nconst breadcrumbs = ref<BreadcrumbItem[]>([]);\n\nconst route = useRoute();\nconst router = useRouter();\nconst currentPath = ref<string>('');\n\nconst processedBreadcrumbs = computed(() => {\n return breadcrumbs.value.map(breadcrumb => {\n // Optionally trim very long names (only if needed)\n const trimmedName = breadcrumb.name.trim();\n return {\n ...breadcrumb,\n name: trimmedName.length > 12 ? trimmedName.slice(0, 12) + '...' : trimmedName\n };\n });\n});\n\nconst processSegments = async () => {\n const path = route.path;\n currentPath.value = path;\n const pathSegments = path.split('/').filter(Boolean);\n const tempBreadcrumbs: BreadcrumbItem[] = [];\n\n // Loop through each segment in the URL.\n for (const [index, segment] of pathSegments.entries()) {\n let segmentName: string;\n \n // Simple processing - can be extended as needed\n segmentName = segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase();\n\n tempBreadcrumbs.push({\n name: segmentName,\n fullPath: '/' + pathSegments.slice(0, index + 1).join('/')\n });\n }\n\n breadcrumbs.value = tempBreadcrumbs;\n};\n\n/**\n * Prevent navigation if the resolved route is an error page.\n */\nconst handleBreadcrumbClick = (breadcrumb: BreadcrumbItem, event: MouseEvent) => {\n const resolved = router.resolve(breadcrumb.fullPath);\n // Check if any matched record is an error page.\n const isErrorPage = resolved.matched.some((route: { meta?: RouteMeta }) => route.meta?.isErrorPage);\n if (!resolved || resolved.matched.length === 0 || isErrorPage) {\n event.preventDefault();\n event.stopPropagation();\n console.warn('Breadcrumb route not found or is an error page:', breadcrumb.fullPath);\n }\n};\n\nwatchEffect(() => {\n processSegments();\n});\n</script>\n\n<style scoped>\n</style>\n"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","breadcrumbs","ref","route","useRoute","router","useRouter","currentPath","processedBreadcrumbs","computed","breadcrumb","trimmedName","processSegments","path","pathSegments","tempBreadcrumbs","index","segment","segmentName","handleBreadcrumbClick","event","resolved","isErrorPage","watchEffect","_hoisted_1","_hoisted_2","_Fragment","_renderList","_hoisted_3","_createBlock","_unref","ChevronRightIcon","_createVNode","UiNavLink","_createTextVNode","_toDisplayString"],"mappings":";;AAEe,SAASA,EAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,GAAG;AAAA,MACH,aAAa;AAAA,IACnB,CAAK;AAAA,EACL,CAAG;AACH;;;;;;;;;;ACiBA,UAAMC,IAAcC,EAAsB,EAAE,GAEtCC,IAAQC,EAAA,GACRC,IAASC,EAAA,GACTC,IAAcL,EAAY,EAAE,GAE5BM,IAAuBC,EAAS,MAC7BR,EAAY,MAAM,IAAI,CAAAS,MAAc;AAEzC,YAAMC,IAAcD,EAAW,KAAK,KAAA;AACpC,aAAO;AAAA,QACL,GAAGA;AAAA,QACH,MAAMC,EAAY,SAAS,KAAKA,EAAY,MAAM,GAAG,EAAE,IAAI,QAAQA;AAAA,MAAA;AAAA,IAEvE,CAAC,CACF,GAEKC,IAAkB,YAAY;AAClC,YAAMC,IAAOV,EAAM;AACnB,MAAAI,EAAY,QAAQM;AACpB,YAAMC,IAAeD,EAAK,MAAM,GAAG,EAAE,OAAO,OAAO,GAC7CE,IAAoC,CAAA;AAG1C,iBAAW,CAACC,GAAOC,CAAO,KAAKH,EAAa,WAAW;AACrD,YAAII;AAGJ,QAAAA,IAAcD,EAAQ,OAAO,CAAC,EAAE,gBAAgBA,EAAQ,MAAM,CAAC,EAAE,YAAA,GAEjEF,EAAgB,KAAK;AAAA,UACnB,MAAMG;AAAA,UACN,UAAU,MAAMJ,EAAa,MAAM,GAAGE,IAAQ,CAAC,EAAE,KAAK,GAAG;AAAA,QAAA,CAC1D;AAAA,MACH;AAEA,MAAAf,EAAY,QAAQc;AAAA,IACtB,GAKMI,IAAwB,CAACT,GAA4BU,MAAsB;AAC/E,YAAMC,IAAWhB,EAAO,QAAQK,EAAW,QAAQ,GAE7CY,IAAcD,EAAS,QAAQ,KAAK,CAAClB,MAAgCA,EAAM,MAAM,WAAW;AAClG,OAAI,CAACkB,KAAYA,EAAS,QAAQ,WAAW,KAAKC,OAChDF,EAAM,eAAA,GACNA,EAAM,gBAAA,GACN,QAAQ,KAAK,mDAAmDV,EAAW,QAAQ;AAAA,IAEvF;AAEA,WAAAa,EAAY,MAAM;AAChB,MAAAX,EAAA;AAAA,IACF,CAAC,cAvFCd,EAAA,GAAAC,EAcM,OAdNyB,GAcM;AAAA,MAbJxB,EAYK,MAZLyB,GAYK;AAAA,SAXH3B,EAAA,EAAA,GAAAC,EAUK2B,GAAA,MAAAC,EAV6BnB,EAAA,OAAoB,CAA1CE,GAAYM,YAAxBjB,EAUK,MAAA;AAAA,UAVoD,KAAKW,EAAW;AAAA,QAAA;UACvEV,EAQM,OARN4B,GAQM;AAAA,YAPoBZ,MAAK,UAA7Ba,EAA0HC,EAAAC,CAAA,GAAA;AAAA;cAArF,OAAM;AAAA,cAA0D,eAAY;AAAA,YAAA;YAEjHC,EAIYC,GAAA;AAAA,cAJA,IAAIvB,EAAW;AAAA,cAAW,UAAQU,MAAUD,EAAsBT,GAAYU,CAAK;AAAA,cAC5F,gBAAcV,EAAW,aAAaH,EAAA,iBAAuB;AAAA,cAC9D,OAAM;AAAA,YAAA;yBACN,MAAqB;AAAA,gBAAlB2B,EAAAC,EAAAzB,EAAW,IAAI,GAAA,CAAA;AAAA,cAAA;;;;;;;;;","x_google_ignoreList":[0]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { defineComponent as _, ref as b, computed as
|
|
2
|
-
import
|
|
3
|
-
import w from "./
|
|
4
|
-
|
|
1
|
+
import { defineComponent as _, ref as b, computed as V, createBlock as m, openBlock as r, unref as t, withCtx as l, createVNode as o, createElementVNode as s, normalizeClass as u, renderSlot as n, createCommentVNode as x, createTextVNode as y, toDisplayString as p } from "vue";
|
|
2
|
+
import h from "./components/Button.js";
|
|
3
|
+
import { S as k, h as w } from "./transition-CuxxW9dY.js";
|
|
4
|
+
import { Y as S, G as B, V as T } from "./dialog-U1KNiPzc.js";
|
|
5
|
+
const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto" }, $ = { class: "sl-bg-white" }, N = { class: "sl-px-4 sl-pt-5 sl-pb-4 sm:sl-p-6 sm:sl-pb-4" }, j = { class: "sm:sl-flex sm:sl-items-start" }, F = { class: "sl-mx-auto sl-flex sl-h-12 sl-w-12 sl-flex-shrink-0 sl-items-center sl-justify-center sl-rounded-full sl-bg-gray-100 sm:sl-mx-0 sm:sl-h-10 sm:sl-w-10" }, E = { class: "sl-mt-3 sl-text-center sm:sl-ml-4 sm:sl-mt-0 sm:sl-text-left sl-w-full" }, G = { class: "sl-mt-2" }, R = { class: "sl-px-4 sl-py-3 sm:sl-flex sm:sl-flex-row-reverse sm:sl-px-6" }, Y = { class: "sl-flex sl-w-full sl-justify-end sl-gap-3" }, A = /* @__PURE__ */ _({
|
|
5
6
|
__name: "UiModal",
|
|
6
7
|
props: {
|
|
7
8
|
modelValue: { type: Boolean, required: !0 },
|
|
@@ -30,24 +31,24 @@ const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto"
|
|
|
30
31
|
},
|
|
31
32
|
emits: ["update:modelValue", "cancel", "confirm"],
|
|
32
33
|
setup(e, { emit: v }) {
|
|
33
|
-
const i = v, c = b(null), g =
|
|
34
|
+
const i = v, c = b(null), g = V(() => c.value), d = () => {
|
|
34
35
|
i("update:modelValue", !1), i("cancel");
|
|
35
36
|
}, C = () => {
|
|
36
37
|
i("confirm"), i("update:modelValue", !1);
|
|
37
38
|
};
|
|
38
|
-
return (a, f) => (r(), m(t(
|
|
39
|
+
return (a, f) => (r(), m(t(k), {
|
|
39
40
|
as: "template",
|
|
40
41
|
show: e.modelValue
|
|
41
42
|
}, {
|
|
42
43
|
default: l(() => [
|
|
43
|
-
o(t(
|
|
44
|
+
o(t(S), {
|
|
44
45
|
as: "div",
|
|
45
46
|
class: "sl-relative sl-z-50",
|
|
46
47
|
onClose: d,
|
|
47
48
|
"initial-focus": g.value
|
|
48
49
|
}, {
|
|
49
50
|
default: l(() => [
|
|
50
|
-
o(t(
|
|
51
|
+
o(t(w), {
|
|
51
52
|
as: "template",
|
|
52
53
|
enter: "ease-out duration-300",
|
|
53
54
|
"enter-from": "opacity-0",
|
|
@@ -66,7 +67,7 @@ const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto"
|
|
|
66
67
|
s("div", {
|
|
67
68
|
class: u(["sl-flex sl-min-h-full sl-items-center sl-justify-center sl-p-4 sl-text-center", [e.position === "top" ? "sm:sl-items-start sm:sl-pt-16" : "sm:sl-items-center"]])
|
|
68
69
|
}, [
|
|
69
|
-
o(t(
|
|
70
|
+
o(t(w), {
|
|
70
71
|
as: "template",
|
|
71
72
|
enter: "ease-out duration-300",
|
|
72
73
|
"enter-from": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",
|
|
@@ -81,13 +82,13 @@ const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto"
|
|
|
81
82
|
}, {
|
|
82
83
|
default: l(() => [
|
|
83
84
|
s("div", $, [
|
|
84
|
-
s("div",
|
|
85
|
-
s("div",
|
|
86
|
-
s("div",
|
|
85
|
+
s("div", N, [
|
|
86
|
+
s("div", j, [
|
|
87
|
+
s("div", F, [
|
|
87
88
|
n(a.$slots, "icon")
|
|
88
89
|
]),
|
|
89
|
-
s("div",
|
|
90
|
-
o(t(
|
|
90
|
+
s("div", E, [
|
|
91
|
+
o(t(T), {
|
|
91
92
|
as: "h3",
|
|
92
93
|
class: "sl-text-base sl-font-semibold sl-leading-6 sl-text-gray-900"
|
|
93
94
|
}, {
|
|
@@ -96,7 +97,7 @@ const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto"
|
|
|
96
97
|
]),
|
|
97
98
|
_: 3
|
|
98
99
|
}),
|
|
99
|
-
s("div",
|
|
100
|
+
s("div", G, [
|
|
100
101
|
n(a.$slots, "body", {}, () => [
|
|
101
102
|
n(a.$slots, "default")
|
|
102
103
|
])
|
|
@@ -104,10 +105,10 @@ const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto"
|
|
|
104
105
|
])
|
|
105
106
|
])
|
|
106
107
|
]),
|
|
107
|
-
s("div",
|
|
108
|
+
s("div", R, [
|
|
108
109
|
n(a.$slots, "footer", {}, () => [
|
|
109
|
-
s("div",
|
|
110
|
-
e.showCancel ? (r(), m(
|
|
110
|
+
s("div", Y, [
|
|
111
|
+
e.showCancel ? (r(), m(h, {
|
|
111
112
|
key: 0,
|
|
112
113
|
"center-label": "",
|
|
113
114
|
theme: "light",
|
|
@@ -119,7 +120,7 @@ const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto"
|
|
|
119
120
|
]),
|
|
120
121
|
_: 1
|
|
121
122
|
})) : x("", !0),
|
|
122
|
-
e.showConfirm ? (r(), m(
|
|
123
|
+
e.showConfirm ? (r(), m(h, {
|
|
123
124
|
key: 1,
|
|
124
125
|
"center-label": "",
|
|
125
126
|
theme: e.confirmTheme,
|
|
@@ -159,4 +160,4 @@ const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto"
|
|
|
159
160
|
export {
|
|
160
161
|
A as _
|
|
161
162
|
};
|
|
162
|
-
//# sourceMappingURL=UiModal.vue_vue_type_script_setup_true_lang-
|
|
163
|
+
//# sourceMappingURL=UiModal.vue_vue_type_script_setup_true_lang-SAo39zpS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiModal.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"UiModal.vue_vue_type_script_setup_true_lang-SAo39zpS.js","sources":["../src/components/UiModal.vue"],"sourcesContent":["<template>\n <TransitionRoot as=\"template\" :show=\"modelValue\">\n <Dialog as=\"div\" class=\"sl-relative sl-z-50\" @close=\"onClose\" :initial-focus=\"initialFocusElement\">\n <TransitionChild as=\"template\" enter=\"ease-out duration-300\" enter-from=\"opacity-0\" enter-to=\"opacity-100\"\n leave=\"ease-in duration-200\" leave-from=\"opacity-100\" leave-to=\"opacity-0\">\n <div class=\"sl-fixed sl-inset-0 sl-bg-gray-500/75 sl-transition-opacity\" />\n </TransitionChild>\n\n <div class=\"sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto\">\n <div class=\"sl-flex sl-min-h-full sl-items-center sl-justify-center sl-p-4 sl-text-center\"\n :class=\"[position === 'top' ? 'sm:sl-items-start sm:sl-pt-16' : 'sm:sl-items-center']\">\n <TransitionChild as=\"template\" enter=\"ease-out duration-300\"\n enter-from=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to=\"opacity-100 translate-y-0 sm:scale-100\" leave=\"ease-in duration-200\"\n leave-from=\"opacity-100 translate-y-0 sm:scale-100\" leave-to=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\">\n <DialogPanel\n :class=\"['sl-relative sl-transform sl-overflow-hidden sl-rounded-lg sl-bg-white sl-text-left sl-shadow-xl sl-transition-all sl-w-full', size]\">\n <div class=\"sl-bg-white\">\n <div class=\"sl-px-4 sl-pt-5 sl-pb-4 sm:sl-p-6 sm:sl-pb-4\">\n <div class=\"sm:sl-flex sm:sl-items-start\">\n <div class=\"sl-mx-auto sl-flex sl-h-12 sl-w-12 sl-flex-shrink-0 sl-items-center sl-justify-center sl-rounded-full sl-bg-gray-100 sm:sl-mx-0 sm:sl-h-10 sm:sl-w-10\">\n <slot name=\"icon\" />\n </div>\n <div class=\"sl-mt-3 sl-text-center sm:sl-ml-4 sm:sl-mt-0 sm:sl-text-left sl-w-full\">\n <DialogTitle as=\"h3\" class=\"sl-text-base sl-font-semibold sl-leading-6 sl-text-gray-900\">\n <slot name=\"header\" />\n </DialogTitle>\n <div class=\"sl-mt-2\">\n <slot name=\"body\">\n <slot />\n </slot>\n </div>\n </div>\n </div>\n </div>\n <div class=\"sl-px-4 sl-py-3 sm:sl-flex sm:sl-flex-row-reverse sm:sl-px-6\">\n <slot name=\"footer\">\n <div class=\"sl-flex sl-w-full sl-justify-end sl-gap-3\">\n <UiButton v-if=\"showCancel\" center-label theme=\"light\" :outlined=\"true\" @button-click=\"onClose\">\n {{ cancelText }}\n </UiButton>\n <UiButton v-if=\"showConfirm\" center-label :theme=\"confirmTheme\" :outlined=\"false\" @button-click=\"onConfirm\">\n {{ confirmText }}\n </UiButton>\n </div>\n </slot>\n </div>\n </div>\n <button ref=\"fallbackFocusRef\" class=\"sl-sr-only\">Close</button>\n </DialogPanel>\n </TransitionChild>\n </div>\n </div>\n </Dialog>\n </TransitionRoot>\n</template>\n\n<script setup lang=\"ts\">\nimport { Dialog, DialogPanel, DialogTitle, TransitionChild, TransitionRoot } from '@headlessui/vue';\nimport { ref, computed } from 'vue';\nimport type { Theme } from '@/types/ui';\nimport UiButton from '@/components/UiButton.vue';\n\ndefineProps({\n modelValue: { type: Boolean, required: true },\n size: {\n type: String,\n default: 'sm:max-w-lg',\n validator: (value: string) => [\n 'sm:max-w-sm','sm:max-w-md','sm:max-w-lg','sm:max-w-xl','sm:max-w-2xl','sm:max-w-3xl','sm:max-w-4xl','sm:max-w-5xl','sm:max-w-6xl','sm:max-w-7xl'\n ].includes(value)\n },\n position: { type: String, default: 'center', validator: (value: string) => ['center', 'top'].includes(value) },\n showCancel: { type: Boolean, default: true },\n showConfirm: { type: Boolean, default: true },\n cancelText: { type: String, default: 'Cancel' },\n confirmText: { type: String, default: 'Confirm' },\n confirmTheme: { type: String as () => Theme, default: 'primary' }\n});\n\nconst emit = defineEmits(['update:modelValue', 'cancel', 'confirm']);\nconst fallbackFocusRef = ref(null);\nconst initialFocusElement = computed(() => fallbackFocusRef.value);\n\nconst onClose = () => {\n emit('update:modelValue', false);\n emit('cancel');\n};\n\nconst onConfirm = () => {\n emit('confirm');\n emit('update:modelValue', false);\n};\n</script>\n\n<style scoped>\n</style>\n\n\n"],"names":["emit","__emit","fallbackFocusRef","ref","initialFocusElement","computed","onClose","onConfirm","_createBlock","_unref","TransitionRoot","__props","_createVNode","Dialog","TransitionChild","_cache","_createElementVNode","_hoisted_1","_normalizeClass","DialogPanel","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_renderSlot","_ctx","_hoisted_6","DialogTitle","_hoisted_7","_hoisted_8","_hoisted_9","UiButton"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createElementBlock as e, openBlock as r, createElementVNode as o } from "vue";
|
|
2
|
+
function a(t, n) {
|
|
3
|
+
return r(), e("svg", {
|
|
4
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
5
|
+
fill: "none",
|
|
6
|
+
viewBox: "0 0 24 24",
|
|
7
|
+
"stroke-width": "1.5",
|
|
8
|
+
stroke: "currentColor",
|
|
9
|
+
"aria-hidden": "true",
|
|
10
|
+
"data-slot": "icon"
|
|
11
|
+
}, [
|
|
12
|
+
o("path", {
|
|
13
|
+
"stroke-linecap": "round",
|
|
14
|
+
"stroke-linejoin": "round",
|
|
15
|
+
d: "M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
|
|
16
|
+
})
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
function l(t, n) {
|
|
20
|
+
return r(), e("svg", {
|
|
21
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
22
|
+
fill: "none",
|
|
23
|
+
viewBox: "0 0 24 24",
|
|
24
|
+
"stroke-width": "1.5",
|
|
25
|
+
stroke: "currentColor",
|
|
26
|
+
"aria-hidden": "true",
|
|
27
|
+
"data-slot": "icon"
|
|
28
|
+
}, [
|
|
29
|
+
o("path", {
|
|
30
|
+
"stroke-linecap": "round",
|
|
31
|
+
"stroke-linejoin": "round",
|
|
32
|
+
d: "M6 18 18 6M6 6l12 12"
|
|
33
|
+
})
|
|
34
|
+
]);
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
a,
|
|
38
|
+
l as r
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=XMarkIcon-C4wILUsz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XMarkIcon-C4wILUsz.js","sources":["../node_modules/@heroicons/vue/24/outline/esm/Bars3Icon.js","../node_modules/@heroicons/vue/24/outline/esm/XMarkIcon.js"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M6 18 18 6M6 6l12 12\"\n })\n ]))\n}"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode"],"mappings":";AAEe,SAASA,EAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,EAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;","x_google_ignoreList":[0,1]}
|