@gspa/ui 0.1.1 → 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.
Files changed (205) hide show
  1. package/README.md +18 -0
  2. package/dist/_plugin-vue_export-helper-BHFhmbuH.cjs +1 -0
  3. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  4. package/dist/components/Accordion.cjs +1 -0
  5. package/dist/components/Accordion.js +192 -0
  6. package/dist/components/AccordionItem.cjs +1 -0
  7. package/dist/components/AccordionItem.js +109 -0
  8. package/dist/components/AddReminderModal.cjs +1 -0
  9. package/dist/components/AddReminderModal.js +107 -0
  10. package/dist/components/Alert.cjs +1 -0
  11. package/dist/components/Alert.js +222 -0
  12. package/dist/components/Avatar.cjs +1 -0
  13. package/dist/components/Avatar.js +86 -0
  14. package/dist/components/Badge.cjs +1 -0
  15. package/dist/components/Badge.js +109 -0
  16. package/dist/components/Breadcrumb.cjs +1 -0
  17. package/dist/components/Breadcrumb.js +72 -0
  18. package/dist/components/Button.cjs +1 -0
  19. package/dist/components/Button.js +190 -0
  20. package/dist/components/ButtonGroup.cjs +1 -0
  21. package/dist/components/ButtonGroup.js +46 -0
  22. package/dist/components/Calendar.cjs +1 -0
  23. package/dist/components/Calendar.js +341 -0
  24. package/dist/components/Card.cjs +1 -0
  25. package/dist/components/Card.js +316 -0
  26. package/dist/components/CardBody.cjs +1 -0
  27. package/dist/components/CardBody.js +34 -0
  28. package/dist/components/CardContent.cjs +1 -0
  29. package/dist/components/CardContent.js +17 -0
  30. package/dist/components/CardFooter.cjs +1 -0
  31. package/dist/components/CardFooter.js +34 -0
  32. package/dist/components/CardHeader.cjs +1 -0
  33. package/dist/components/CardHeader.js +91 -0
  34. package/dist/components/CardTitle.cjs +1 -0
  35. package/dist/components/CardTitle.js +17 -0
  36. package/dist/components/Checkbox.cjs +1 -0
  37. package/dist/components/Checkbox.js +185 -0
  38. package/dist/components/CircularProgress.cjs +1 -0
  39. package/dist/components/CircularProgress.js +141 -0
  40. package/dist/components/DataTable.cjs +1 -0
  41. package/dist/components/DataTable.js +863 -0
  42. package/dist/components/DataTableCell.cjs +1 -0
  43. package/dist/components/DataTableCell.js +95 -0
  44. package/dist/components/DataTableFilters.cjs +1 -0
  45. package/dist/components/DataTableFilters.js +519 -0
  46. package/dist/components/DataTableHeader.cjs +1 -0
  47. package/dist/components/DataTableHeader.js +116 -0
  48. package/dist/components/DataTablePagination.cjs +1 -0
  49. package/dist/components/DataTablePagination.js +290 -0
  50. package/dist/components/DataTableRow.cjs +1 -0
  51. package/dist/components/DataTableRow.js +199 -0
  52. package/dist/components/DataTableToolBar.cjs +1 -0
  53. package/dist/components/DataTableToolBar.js +477 -0
  54. package/dist/components/DatePicker.cjs +1 -0
  55. package/dist/components/DatePicker.js +401 -0
  56. package/dist/components/Divider.cjs +1 -0
  57. package/dist/components/Divider.js +103 -0
  58. package/dist/components/Dropdown.cjs +1 -0
  59. package/dist/components/Dropdown.js +104 -0
  60. package/dist/components/DropdownItem.cjs +1 -0
  61. package/dist/components/DropdownItem.js +60 -0
  62. package/dist/components/EventsCalendar.cjs +1 -0
  63. package/dist/components/EventsCalendar.js +863 -0
  64. package/dist/components/FileUpload.cjs +1 -0
  65. package/dist/components/FileUpload.js +195 -0
  66. package/dist/components/FilterDrawer.cjs +1 -0
  67. package/dist/components/FilterDrawer.js +412 -0
  68. package/dist/components/Footer.cjs +1 -0
  69. package/dist/components/Footer.js +157 -0
  70. package/dist/components/FormField.cjs +1 -0
  71. package/dist/components/FormField.js +190 -0
  72. package/dist/components/Graph.cjs +1 -0
  73. package/dist/components/Graph.js +164 -0
  74. package/dist/components/GraphFilters.cjs +1 -0
  75. package/dist/components/GraphFilters.js +305 -0
  76. package/dist/components/Header.cjs +1 -0
  77. package/dist/components/Header.js +674 -0
  78. package/dist/components/Icon.cjs +1 -0
  79. package/dist/components/Icon.js +51 -0
  80. package/dist/components/Image.cjs +1 -0
  81. package/dist/components/Image.js +112 -0
  82. package/dist/components/Input.cjs +1 -0
  83. package/dist/components/Input.js +166 -0
  84. package/dist/components/InputGroup.cjs +1 -0
  85. package/dist/components/InputGroup.js +45 -0
  86. package/dist/components/Label.cjs +1 -0
  87. package/dist/components/Label.js +46 -0
  88. package/dist/components/Link.cjs +1 -0
  89. package/dist/components/Link.js +119 -0
  90. package/dist/components/ListItem.cjs +1 -0
  91. package/dist/components/ListItem.js +89 -0
  92. package/dist/components/Loader.cjs +1 -0
  93. package/dist/components/Loader.js +154 -0
  94. package/dist/components/Logo.cjs +1 -0
  95. package/dist/components/Logo.js +67 -0
  96. package/dist/components/MenuItem.cjs +1 -0
  97. package/dist/components/MenuItem.js +66 -0
  98. package/dist/components/Modal.cjs +1 -0
  99. package/dist/components/Modal.js +110 -0
  100. package/dist/components/ModalBody.cjs +1 -0
  101. package/dist/components/ModalBody.js +33 -0
  102. package/dist/components/ModalFooter.cjs +1 -0
  103. package/dist/components/ModalFooter.js +33 -0
  104. package/dist/components/ModalHeader.cjs +1 -0
  105. package/dist/components/ModalHeader.js +24 -0
  106. package/dist/components/MultiSelect.cjs +1 -0
  107. package/dist/components/MultiSelect.js +211 -0
  108. package/dist/components/Notification.cjs +1 -0
  109. package/dist/components/Notification.js +121 -0
  110. package/dist/components/Option.cjs +1 -0
  111. package/dist/components/Option.js +44 -0
  112. package/dist/components/Progress.cjs +1 -0
  113. package/dist/components/Progress.js +77 -0
  114. package/dist/components/ProgressBar.cjs +1 -0
  115. package/dist/components/ProgressBar.js +101 -0
  116. package/dist/components/Radio.cjs +1 -0
  117. package/dist/components/Radio.js +81 -0
  118. package/dist/components/RailNav.cjs +1 -0
  119. package/dist/components/RailNav.js +124 -0
  120. package/dist/components/ReminderConfig.cjs +1 -0
  121. package/dist/components/ReminderConfig.js +375 -0
  122. package/dist/components/ReusableForm.cjs +1 -0
  123. package/dist/components/ReusableForm.js +657 -0
  124. package/dist/components/ReusableFormModal.cjs +1 -0
  125. package/dist/components/ReusableFormModal.js +112 -0
  126. package/dist/components/RightDrawer.cjs +1 -0
  127. package/dist/components/RightDrawer.js +143 -0
  128. package/dist/components/Search.cjs +1 -0
  129. package/dist/components/Search.js +252 -0
  130. package/dist/components/Select.cjs +1 -0
  131. package/dist/components/Select.js +243 -0
  132. package/dist/components/Sidebar.cjs +1 -0
  133. package/dist/components/Sidebar.js +372 -0
  134. package/dist/components/Slider.cjs +1 -0
  135. package/dist/components/Slider.js +42 -0
  136. package/dist/components/Spinner.cjs +1 -0
  137. package/dist/components/Spinner.js +87 -0
  138. package/dist/components/Stepper.cjs +1 -0
  139. package/dist/components/Stepper.js +12 -0
  140. package/dist/components/StepperItem.cjs +1 -0
  141. package/dist/components/StepperItem.js +33 -0
  142. package/dist/components/Switch.cjs +1 -0
  143. package/dist/components/Switch.js +112 -0
  144. package/dist/components/Tab.cjs +1 -0
  145. package/dist/components/Tab.js +134 -0
  146. package/dist/components/TabPanel.cjs +1 -0
  147. package/dist/components/TabPanel.js +49 -0
  148. package/dist/components/Text.cjs +1 -0
  149. package/dist/components/Text.js +84 -0
  150. package/dist/components/Textarea.cjs +1 -0
  151. package/dist/components/Textarea.js +102 -0
  152. package/dist/components/ThemeConfigurator.cjs +1 -0
  153. package/dist/components/ThemeConfigurator.js +50 -0
  154. package/dist/components/Timeline.cjs +1 -0
  155. package/dist/components/Timeline.js +24 -0
  156. package/dist/components/TimelineItem.cjs +1 -0
  157. package/dist/components/TimelineItem.js +63 -0
  158. package/dist/components/Toast.cjs +1 -0
  159. package/dist/components/Toast.js +231 -0
  160. package/dist/components/Tooltip.cjs +1 -0
  161. package/dist/components/Tooltip.js +124 -0
  162. package/dist/components/Typography.cjs +1 -0
  163. package/dist/components/Typography.js +267 -0
  164. package/dist/components/charts/BarChart.cjs +1 -0
  165. package/dist/components/charts/BarChart.js +323 -0
  166. package/dist/components/charts/LineChart.cjs +1 -0
  167. package/dist/components/charts/LineChart.js +322 -0
  168. package/dist/components/charts/PieChart.cjs +1 -0
  169. package/dist/components/charts/PieChart.js +311 -0
  170. package/dist/components/charts/StackedBarChart.cjs +1 -0
  171. package/dist/components/charts/StackedBarChart.js +348 -0
  172. package/dist/components/widgets/DashboardWidget.cjs +1 -0
  173. package/dist/components/widgets/DashboardWidget.js +309 -0
  174. package/dist/directives/tooltip.cjs +47 -0
  175. package/dist/directives/tooltip.js +115 -0
  176. package/dist/index.cjs +1 -0
  177. package/dist/index.esm.js +310 -19533
  178. package/dist/layouts/AuthLayout.cjs +1 -0
  179. package/dist/layouts/AuthLayout.js +190 -0
  180. package/dist/layouts/DashboardLayout.cjs +1 -0
  181. package/dist/layouts/DashboardLayout.js +244 -0
  182. package/dist/layouts/DefaultLayout.cjs +1 -0
  183. package/dist/layouts/DefaultLayout.js +94 -0
  184. package/dist/layouts/ErrorLayout.cjs +1 -0
  185. package/dist/layouts/ErrorLayout.js +452 -0
  186. package/dist/lib/auth.cjs +1 -0
  187. package/dist/lib/auth.js +4 -0
  188. package/dist/lib/theme.cjs +1 -0
  189. package/dist/lib/theme.js +135 -0
  190. package/dist/lib/toast.cjs +1 -0
  191. package/dist/lib/toast.js +81 -0
  192. package/dist/src/__tests__/AuthLayout.spec.d.ts +2 -0
  193. package/dist/src/__tests__/AuthLayout.spec.d.ts.map +1 -0
  194. package/dist/src/layouts/AuthLayout.vue.d.ts +10 -6
  195. package/dist/src/layouts/AuthLayout.vue.d.ts.map +1 -1
  196. package/dist/tsconfig.tsbuildinfo +1 -1
  197. package/dist/utils/cn.cjs +1 -0
  198. package/dist/utils/cn.js +7 -0
  199. package/package.json +43 -11
  200. package/dist/applogo.png +0 -0
  201. package/dist/favicon.ico +0 -0
  202. package/dist/index.js +0 -605
  203. package/dist/logo.png +0 -0
  204. package/dist/stlbacklogo.jpeg +0 -0
  205. package/dist/stlbacklogo.png +0 -0
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),s=require("@fortawesome/vue-fontawesome"),c={__name:"Icon",props:{icon:{type:String,default:null},name:{type:String,default:null},prefix:{type:String,default:"fa"},size:{type:String,default:"md"},color:String,ariaLabel:String},setup(l){const t=l,a=e.computed(()=>t.icon||t.name),n=e.computed(()=>({xs:"xs",sm:"sm",md:"lg",lg:"xl",xl:"2x",xxl:"3x"})[t.size]||"lg"),o=e.computed(()=>t.color?t.color.startsWith("text-")?t.color:`text-${t.color}`:"text-current"),r=e.computed(()=>[o.value,"inline-block"]);return(i,u)=>a.value?(e.openBlock(),e.createBlock(e.unref(s.FontAwesomeIcon),{key:0,icon:[l.prefix,a.value],size:n.value,class:e.normalizeClass(r.value),"aria-hidden":!l.ariaLabel,"aria-label":l.ariaLabel,role:l.ariaLabel?"img":void 0},null,8,["icon","size","class","aria-hidden","aria-label","role"])):e.createCommentVNode("",!0)}};exports.default=c;
@@ -0,0 +1,51 @@
1
+ import { computed as l, createBlock as s, createCommentVNode as c, openBlock as u, unref as m, normalizeClass as d } from "vue";
2
+ import { FontAwesomeIcon as f } from "@fortawesome/vue-fontawesome";
3
+ const z = {
4
+ __name: "Icon",
5
+ props: {
6
+ icon: {
7
+ type: String,
8
+ default: null
9
+ },
10
+ name: {
11
+ type: String,
12
+ default: null
13
+ },
14
+ prefix: {
15
+ type: String,
16
+ default: "fa"
17
+ },
18
+ size: {
19
+ type: String,
20
+ default: "md"
21
+ },
22
+ color: String,
23
+ ariaLabel: String
24
+ },
25
+ setup(a) {
26
+ const e = a, t = l(() => e.icon || e.name), r = l(() => ({
27
+ xs: "xs",
28
+ sm: "sm",
29
+ md: "lg",
30
+ // FontAwesome sizes: xs, sm, lg, xl, 2x, 3x, etc.
31
+ lg: "xl",
32
+ xl: "2x",
33
+ xxl: "3x"
34
+ })[e.size] || "lg"), n = l(() => e.color ? e.color.startsWith("text-") ? e.color : `text-${e.color}` : "text-current"), o = l(() => [
35
+ n.value,
36
+ "inline-block"
37
+ ]);
38
+ return (i, x) => t.value ? (u(), s(m(f), {
39
+ key: 0,
40
+ icon: [a.prefix, t.value],
41
+ size: r.value,
42
+ class: d(o.value),
43
+ "aria-hidden": !a.ariaLabel,
44
+ "aria-label": a.ariaLabel,
45
+ role: a.ariaLabel ? "img" : void 0
46
+ }, null, 8, ["icon", "size", "class", "aria-hidden", "aria-label", "role"])) : c("", !0);
47
+ }
48
+ };
49
+ export {
50
+ z as default
51
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),y=require("class-variance-authority"),r=require("../utils/cn.cjs"),b=require("./Icon.cjs"),j=require("./Spinner.cjs"),h=["src","alt","loading"],k={__name:"Image",props:{src:{type:String,required:!0},alt:{type:String,default:""},aspectRatio:{type:String,default:"auto",validator:t=>["auto","square","16/9","4/3","3/2"].includes(t)},objectFit:{type:String,default:"cover",validator:t=>["cover","contain","fill","none","scale-down"].includes(t)},loading:{type:String,default:"lazy",validator:t=>["lazy","eager"].includes(t)},showSpinner:{type:Boolean,default:!0},class:String},emits:["load","error"],setup(t,{emit:i}){const a=t,n=i,o=e.ref(!0),l=e.ref(!1),u=y.cva("relative overflow-hidden ui-surface-muted",{variants:{aspectRatio:{auto:"",square:"aspect-square","16/9":"aspect-video","4/3":"aspect-[4/3]","3/2":"aspect-[3/2]"}}}),d=e.computed(()=>r.cn(u({aspectRatio:a.aspectRatio}),a.class)),m=e.computed(()=>r.cn("h-full w-full transition-opacity duration-300",{"object-cover":a.objectFit==="cover","object-contain":a.objectFit==="contain","object-fill":a.objectFit==="fill","object-none":a.objectFit==="none","object-scale-down":a.objectFit==="scale-down"},o.value&&"opacity-0",l.value&&"hidden")),f=e.computed(()=>"absolute inset-0 flex items-center justify-center ui-surface-muted"),p=e.computed(()=>"absolute inset-0 flex flex-col items-center justify-center gap-2 ui-surface-muted"),v=s=>{o.value=!1,l.value=!1,n("load",s)},g=s=>{o.value=!1,l.value=!0,n("error",s)};return(s,c)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(d.value)},[e.createElementVNode("img",{src:t.src,alt:t.alt,class:e.normalizeClass(m.value),loading:t.loading,onLoad:v,onError:g},null,42,h),o.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(f.value)},[t.showSpinner?(e.openBlock(),e.createBlock(j.default,{key:0,size:"sm"})):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(p.value)},[e.createVNode(b.default,{name:"ImageOff",class:"h-8 w-8 ui-text"}),c[0]||(c[0]=e.createElementVNode("span",{class:"text-sm ui-text"},"Failed to load image",-1))],2)):e.createCommentVNode("",!0)],2))}};exports.default=k;
@@ -0,0 +1,112 @@
1
+ import { ref as m, computed as l, createElementBlock as n, openBlock as r, normalizeClass as c, createElementVNode as f, createCommentVNode as i, createBlock as S, createVNode as F } from "vue";
2
+ import { cva as k } from "class-variance-authority";
3
+ import { cn as v } from "../utils/cn.js";
4
+ import C from "./Icon.js";
5
+ import E from "./Spinner.js";
6
+ const q = ["src", "alt", "loading"], N = {
7
+ __name: "Image",
8
+ props: {
9
+ src: {
10
+ type: String,
11
+ required: !0
12
+ },
13
+ alt: {
14
+ type: String,
15
+ default: ""
16
+ },
17
+ aspectRatio: {
18
+ type: String,
19
+ default: "auto",
20
+ validator: (e) => ["auto", "square", "16/9", "4/3", "3/2"].includes(e)
21
+ },
22
+ objectFit: {
23
+ type: String,
24
+ default: "cover",
25
+ validator: (e) => ["cover", "contain", "fill", "none", "scale-down"].includes(e)
26
+ },
27
+ loading: {
28
+ type: String,
29
+ default: "lazy",
30
+ validator: (e) => ["lazy", "eager"].includes(e)
31
+ },
32
+ showSpinner: {
33
+ type: Boolean,
34
+ default: !0
35
+ },
36
+ class: String
37
+ },
38
+ emits: ["load", "error"],
39
+ setup(e, { emit: p }) {
40
+ const t = e, u = p, a = m(!0), o = m(!1), g = k(
41
+ "relative overflow-hidden ui-surface-muted",
42
+ {
43
+ variants: {
44
+ aspectRatio: {
45
+ auto: "",
46
+ square: "aspect-square",
47
+ "16/9": "aspect-video",
48
+ "4/3": "aspect-[4/3]",
49
+ "3/2": "aspect-[3/2]"
50
+ }
51
+ }
52
+ }
53
+ ), y = l(
54
+ () => v(g({ aspectRatio: t.aspectRatio }), t.class)
55
+ ), b = l(
56
+ () => v(
57
+ "h-full w-full transition-opacity duration-300",
58
+ {
59
+ "object-cover": t.objectFit === "cover",
60
+ "object-contain": t.objectFit === "contain",
61
+ "object-fill": t.objectFit === "fill",
62
+ "object-none": t.objectFit === "none",
63
+ "object-scale-down": t.objectFit === "scale-down"
64
+ },
65
+ a.value && "opacity-0",
66
+ o.value && "hidden"
67
+ )
68
+ ), j = l(
69
+ () => "absolute inset-0 flex items-center justify-center ui-surface-muted"
70
+ ), h = l(
71
+ () => "absolute inset-0 flex flex-col items-center justify-center gap-2 ui-surface-muted"
72
+ ), w = (s) => {
73
+ a.value = !1, o.value = !1, u("load", s);
74
+ }, x = (s) => {
75
+ a.value = !1, o.value = !0, u("error", s);
76
+ };
77
+ return (s, d) => (r(), n("div", {
78
+ class: c(y.value)
79
+ }, [
80
+ f("img", {
81
+ src: e.src,
82
+ alt: e.alt,
83
+ class: c(b.value),
84
+ loading: e.loading,
85
+ onLoad: w,
86
+ onError: x
87
+ }, null, 42, q),
88
+ a.value ? (r(), n("div", {
89
+ key: 0,
90
+ class: c(j.value)
91
+ }, [
92
+ e.showSpinner ? (r(), S(E, {
93
+ key: 0,
94
+ size: "sm"
95
+ })) : i("", !0)
96
+ ], 2)) : i("", !0),
97
+ o.value ? (r(), n("div", {
98
+ key: 1,
99
+ class: c(h.value)
100
+ }, [
101
+ F(C, {
102
+ name: "ImageOff",
103
+ class: "h-8 w-8 ui-text"
104
+ }),
105
+ d[0] || (d[0] = f("span", { class: "text-sm ui-text" }, "Failed to load image", -1))
106
+ ], 2)) : i("", !0)
107
+ ], 2));
108
+ }
109
+ };
110
+ export {
111
+ N as default
112
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),k=require("./Icon.cjs"),x={class:"relative"},B={key:0,class:"absolute left-3 top-1/2 transform -translate-y-1/2 pointer-events-none"},C=["id","type","value","placeholder","disabled","readonly","required","autocomplete","aria-describedby","aria-invalid"],S={key:1,class:"absolute right-3 top-1/2 transform -translate-y-1/2"},w=["aria-label"],z={__name:"Input",props:{modelValue:{type:[String,Number],default:""},type:{type:String,default:"text",validator:t=>["text","email","password","number","tel","url","search","date","time","color","file"].includes(t)},placeholder:{type:String,default:""},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},required:{type:Boolean,default:!1},size:{type:String,default:"md",validator:t=>["sm","md","lg"].includes(t)},variant:{type:String,default:"default",validator:t=>["default","error","success"].includes(t)},iconLeft:{type:[String,Object],default:null},iconRight:{type:[String,Object],default:null},clearable:{type:Boolean,default:!1},clearLabel:{type:String,default:"Clear input"},autocomplete:{type:String,default:null},error:{type:String,default:null},id:{type:String,default:null}},emits:["update:modelValue","blur","focus","clear","keydown"],setup(t,{expose:s,emit:c}){const l=t,o=c,r=e.ref(null),n=e.computed(()=>l.id||e.useId()),i=a=>{o("update:modelValue",a.target.value)},d=a=>{o("blur",a)},f=a=>{o("focus",a)},m=a=>{o("keydown",a)},y=()=>{o("update:modelValue",""),o("clear"),r.value?.focus()},p=e.computed(()=>!!l.error||l.variant==="error"),b=e.computed(()=>{if(l.error)return`${n.value}-error`}),v=e.computed(()=>({sm:"px-3 py-1.5 text-sm",md:"px-3 py-2 text-sm",lg:"px-4 py-3 text-base"})[l.size]),g=e.computed(()=>({default:"ui-border-strong focus:border-(--ui-primary) focus:ring-(--ui-primary)",error:"border-(--ui-danger-soft) focus:border-(--ui-danger) focus:ring-(--ui-danger)",success:"border-(--ui-success-soft) focus:border-(--ui-success) focus:ring-(--ui-success)"})[l.variant]),u=e.computed(()=>["ui-text",{sm:"w-4 h-4",md:"w-4 h-4",lg:"w-5 h-5"}[l.size]]),h=e.computed(()=>["block rounded-lg border ui-surface transition-colors duration-200","focus:outline-none focus:ring-2 focus:ring-offset-0","disabled:bg-(--ui-surface) disabled:text-(--ui-text) disabled:cursor-not-allowed","placeholder:text-(--ui-text-muted)",l.type==="color"?"w-20 h-12 cursor-pointer":"w-full",v.value,g.value,{"pl-10":l.iconLeft,"pr-10":l.iconRight||l.clearable}]);return s({focus:()=>r.value?.focus(),blur:()=>r.value?.blur(),select:()=>r.value?.select()}),(a,V)=>(e.openBlock(),e.createElementBlock("div",x,[t.iconLeft?(e.openBlock(),e.createElementBlock("div",B,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.iconLeft),{class:e.normalizeClass(u.value)},null,8,["class"]))])):e.createCommentVNode("",!0),e.createElementVNode("input",{id:n.value,ref_key:"inputRef",ref:r,type:t.type,value:t.modelValue,placeholder:t.placeholder,disabled:t.disabled,readonly:t.readonly,required:t.required,autocomplete:t.autocomplete,class:e.normalizeClass(h.value),"aria-describedby":b.value,"aria-invalid":p.value,onInput:i,onBlur:d,onFocus:f,onKeydown:m},null,42,C),t.iconRight||t.clearable?(e.openBlock(),e.createElementBlock("div",S,[t.clearable&&t.modelValue&&!t.disabled?(e.openBlock(),e.createElementBlock("button",{key:0,class:"ui-text hover:text-(--ui-text) transition-colors",type:"button","aria-label":t.clearLabel,onClick:y},[e.createVNode(k.default,{name:"x",class:"w-5 h-5"})],8,w)):t.iconRight?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.iconRight),{key:1,class:e.normalizeClass(u.value)},null,8,["class"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]))}};exports.default=z;
@@ -0,0 +1,166 @@
1
+ import { ref as z, computed as a, useId as V, createElementBlock as s, openBlock as o, createCommentVNode as u, createElementVNode as R, createBlock as f, resolveDynamicComponent as m, normalizeClass as i, createVNode as L } from "vue";
2
+ import I from "./Icon.js";
3
+ const q = { class: "relative" }, N = {
4
+ key: 0,
5
+ class: "absolute left-3 top-1/2 transform -translate-y-1/2 pointer-events-none"
6
+ }, E = ["id", "type", "value", "placeholder", "disabled", "readonly", "required", "autocomplete", "aria-describedby", "aria-invalid"], j = {
7
+ key: 1,
8
+ class: "absolute right-3 top-1/2 transform -translate-y-1/2"
9
+ }, D = ["aria-label"], $ = {
10
+ __name: "Input",
11
+ props: {
12
+ modelValue: {
13
+ type: [String, Number],
14
+ default: ""
15
+ },
16
+ type: {
17
+ type: String,
18
+ default: "text",
19
+ validator: (e) => ["text", "email", "password", "number", "tel", "url", "search", "date", "time", "color", "file"].includes(e)
20
+ },
21
+ placeholder: {
22
+ type: String,
23
+ default: ""
24
+ },
25
+ disabled: {
26
+ type: Boolean,
27
+ default: !1
28
+ },
29
+ readonly: {
30
+ type: Boolean,
31
+ default: !1
32
+ },
33
+ required: {
34
+ type: Boolean,
35
+ default: !1
36
+ },
37
+ size: {
38
+ type: String,
39
+ default: "md",
40
+ validator: (e) => ["sm", "md", "lg"].includes(e)
41
+ },
42
+ variant: {
43
+ type: String,
44
+ default: "default",
45
+ validator: (e) => ["default", "error", "success"].includes(e)
46
+ },
47
+ iconLeft: {
48
+ type: [String, Object],
49
+ default: null
50
+ },
51
+ iconRight: {
52
+ type: [String, Object],
53
+ default: null
54
+ },
55
+ clearable: {
56
+ type: Boolean,
57
+ default: !1
58
+ },
59
+ clearLabel: {
60
+ type: String,
61
+ default: "Clear input"
62
+ },
63
+ autocomplete: {
64
+ type: String,
65
+ default: null
66
+ },
67
+ error: {
68
+ type: String,
69
+ default: null
70
+ },
71
+ id: {
72
+ type: String,
73
+ default: null
74
+ }
75
+ },
76
+ emits: ["update:modelValue", "blur", "focus", "clear", "keydown"],
77
+ setup(e, { expose: y, emit: b }) {
78
+ const t = e, r = b, n = z(null), c = a(() => t.id || V()), p = (l) => {
79
+ r("update:modelValue", l.target.value);
80
+ }, v = (l) => {
81
+ r("blur", l);
82
+ }, g = (l) => {
83
+ r("focus", l);
84
+ }, h = (l) => {
85
+ r("keydown", l);
86
+ }, x = () => {
87
+ r("update:modelValue", ""), r("clear"), n.value?.focus();
88
+ }, S = a(() => !!t.error || t.variant === "error"), k = a(() => {
89
+ if (t.error) return `${c.value}-error`;
90
+ }), w = a(() => ({
91
+ sm: "px-3 py-1.5 text-sm",
92
+ md: "px-3 py-2 text-sm",
93
+ lg: "px-4 py-3 text-base"
94
+ })[t.size]), B = a(() => ({
95
+ default: "ui-border-strong focus:border-(--ui-primary) focus:ring-(--ui-primary)",
96
+ error: "border-(--ui-danger-soft) focus:border-(--ui-danger) focus:ring-(--ui-danger)",
97
+ success: "border-(--ui-success-soft) focus:border-(--ui-success) focus:ring-(--ui-success)"
98
+ })[t.variant]), d = a(() => ["ui-text", {
99
+ sm: "w-4 h-4",
100
+ md: "w-4 h-4",
101
+ lg: "w-5 h-5"
102
+ }[t.size]]), C = a(() => [
103
+ "block rounded-lg border ui-surface transition-colors duration-200",
104
+ "focus:outline-none focus:ring-2 focus:ring-offset-0",
105
+ "disabled:bg-(--ui-surface) disabled:text-(--ui-text) disabled:cursor-not-allowed",
106
+ "placeholder:text-(--ui-text-muted)",
107
+ t.type === "color" ? "w-20 h-12 cursor-pointer" : "w-full",
108
+ w.value,
109
+ B.value,
110
+ {
111
+ "pl-10": t.iconLeft,
112
+ "pr-10": t.iconRight || t.clearable
113
+ }
114
+ ]);
115
+ return y({
116
+ focus: () => n.value?.focus(),
117
+ blur: () => n.value?.blur(),
118
+ select: () => n.value?.select()
119
+ }), (l, F) => (o(), s("div", q, [
120
+ e.iconLeft ? (o(), s("div", N, [
121
+ (o(), f(m(e.iconLeft), {
122
+ class: i(d.value)
123
+ }, null, 8, ["class"]))
124
+ ])) : u("", !0),
125
+ R("input", {
126
+ id: c.value,
127
+ ref_key: "inputRef",
128
+ ref: n,
129
+ type: e.type,
130
+ value: e.modelValue,
131
+ placeholder: e.placeholder,
132
+ disabled: e.disabled,
133
+ readonly: e.readonly,
134
+ required: e.required,
135
+ autocomplete: e.autocomplete,
136
+ class: i(C.value),
137
+ "aria-describedby": k.value,
138
+ "aria-invalid": S.value,
139
+ onInput: p,
140
+ onBlur: v,
141
+ onFocus: g,
142
+ onKeydown: h
143
+ }, null, 42, E),
144
+ e.iconRight || e.clearable ? (o(), s("div", j, [
145
+ e.clearable && e.modelValue && !e.disabled ? (o(), s("button", {
146
+ key: 0,
147
+ class: "ui-text hover:text-(--ui-text) transition-colors",
148
+ type: "button",
149
+ "aria-label": e.clearLabel,
150
+ onClick: x
151
+ }, [
152
+ L(I, {
153
+ name: "x",
154
+ class: "w-5 h-5"
155
+ })
156
+ ], 8, D)) : e.iconRight ? (o(), f(m(e.iconRight), {
157
+ key: 1,
158
+ class: i(d.value)
159
+ }, null, 8, ["class"])) : u("", !0)
160
+ ])) : u("", !0)
161
+ ]));
162
+ }
163
+ };
164
+ export {
165
+ $ as default
166
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),d=require("class-variance-authority"),l=require("../utils/cn.cjs"),u={key:0,class:"flex items-center px-3 bg-muted border border-r-0 rounded-l-md"},a={key:1,class:"flex items-center px-3 bg-muted border border-l-0 rounded-r-md"},i={__name:"InputGroup",props:{variant:{type:String,default:"default",validator:t=>["default","outline"].includes(t)}},setup(t){const o=t,n=d.cva("flex w-full",{variants:{variant:{default:"[&>input]:rounded-none [&>input:first-child]:rounded-l-md [&>input:last-child]:rounded-r-md",outline:"border ui-border-strong rounded-md [&>input]:border-0 [&>input]:rounded-none"}}}),s=e.computed(()=>l.cn(n({variant:o.variant})));return(r,c)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s.value)},[r.$slots.prefix?(e.openBlock(),e.createElementBlock("div",u,[e.renderSlot(r.$slots,"prefix")])):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default"),r.$slots.suffix?(e.openBlock(),e.createElementBlock("div",a,[e.renderSlot(r.$slots,"suffix")])):e.createCommentVNode("",!0)],2))}};exports.default=i;
@@ -0,0 +1,45 @@
1
+ import { computed as i, createElementBlock as t, openBlock as o, normalizeClass as a, createCommentVNode as n, renderSlot as d } from "vue";
2
+ import { cva as p } from "class-variance-authority";
3
+ import { cn as m } from "../utils/cn.js";
4
+ const f = {
5
+ key: 0,
6
+ class: "flex items-center px-3 bg-muted border border-r-0 rounded-l-md"
7
+ }, c = {
8
+ key: 1,
9
+ class: "flex items-center px-3 bg-muted border border-l-0 rounded-r-md"
10
+ }, h = {
11
+ __name: "InputGroup",
12
+ props: {
13
+ variant: {
14
+ type: String,
15
+ default: "default",
16
+ validator: (r) => ["default", "outline"].includes(r)
17
+ }
18
+ },
19
+ setup(r) {
20
+ const s = r, u = p("flex w-full", {
21
+ variants: {
22
+ variant: {
23
+ default: "[&>input]:rounded-none [&>input:first-child]:rounded-l-md [&>input:last-child]:rounded-r-md",
24
+ outline: "border ui-border-strong rounded-md [&>input]:border-0 [&>input]:rounded-none"
25
+ }
26
+ }
27
+ }), l = i(
28
+ () => m(u({ variant: s.variant }))
29
+ );
30
+ return (e, v) => (o(), t("div", {
31
+ class: a(l.value)
32
+ }, [
33
+ e.$slots.prefix ? (o(), t("div", f, [
34
+ d(e.$slots, "prefix")
35
+ ])) : n("", !0),
36
+ d(e.$slots, "default"),
37
+ e.$slots.suffix ? (o(), t("div", c, [
38
+ d(e.$slots, "suffix")
39
+ ])) : n("", !0)
40
+ ], 2));
41
+ }
42
+ };
43
+ export {
44
+ h as default
45
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),r=require("class-variance-authority"),n=require("../utils/cn.cjs"),i=["for"],c={__name:"Label",props:{htmlFor:String,size:{type:String,default:"md",validator:t=>["sm","md","lg"].includes(t)},required:Boolean,disabled:Boolean,class:String},setup(t){const s=t,l=r.cva("font-medium leading-none ui-text peer-disabled:cursor-not-allowed peer-disabled:opacity-70",{variants:{size:{sm:"text-sm",md:"text-sm",lg:"text-base"}}}),a=e.computed(()=>n.cn(l({size:s.size}),s.disabled&&"cursor-not-allowed opacity-70",s.class));return(o,d)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass(a.value),for:t.htmlFor},[e.renderSlot(o.$slots,"default")],10,i))}};exports.default=c;
@@ -0,0 +1,46 @@
1
+ import { computed as a, createElementBlock as r, openBlock as n, normalizeClass as i, renderSlot as d } from "vue";
2
+ import { cva as c } from "class-variance-authority";
3
+ import { cn as m } from "../utils/cn.js";
4
+ const p = ["for"], x = {
5
+ __name: "Label",
6
+ props: {
7
+ htmlFor: String,
8
+ size: {
9
+ type: String,
10
+ default: "md",
11
+ validator: (e) => ["sm", "md", "lg"].includes(e)
12
+ },
13
+ required: Boolean,
14
+ disabled: Boolean,
15
+ class: String
16
+ },
17
+ setup(e) {
18
+ const t = e, s = c(
19
+ "font-medium leading-none ui-text peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
20
+ {
21
+ variants: {
22
+ size: {
23
+ sm: "text-sm",
24
+ md: "text-sm",
25
+ lg: "text-base"
26
+ }
27
+ }
28
+ }
29
+ ), o = a(
30
+ () => m(
31
+ s({ size: t.size }),
32
+ t.disabled && "cursor-not-allowed opacity-70",
33
+ t.class
34
+ )
35
+ );
36
+ return (l, u) => (n(), r("label", {
37
+ class: i(o.value),
38
+ for: e.htmlFor
39
+ }, [
40
+ d(l.$slots, "default")
41
+ ], 10, p));
42
+ }
43
+ };
44
+ export {
45
+ x as default
46
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue"),d=require("class-variance-authority"),f=require("../utils/cn.cjs"),r=require("./Icon.cjs"),m={__name:"Link",props:{href:{type:String,default:null},to:{type:[String,Object],default:null},external:{type:Boolean,default:!1},target:{type:String,default:null},rel:{type:String,default:null},variant:{type:String,default:"primary",validator:e=>["primary","secondary","muted","danger","success"].includes(e)},size:{type:String,default:"md",validator:e=>["xs","sm","md","lg","xl"].includes(e)},underline:{type:String,default:"hover",validator:e=>["always","hover","never"].includes(e)},disabled:{type:Boolean,default:!1},icon:{type:String,default:null},iconPosition:{type:String,default:"left",validator:e=>["left","right"].includes(e)},showExternalIcon:{type:Boolean,default:!0},block:{type:Boolean,default:!1}},emits:["click"],setup(e,{emit:o}){const n=e,a=t.computed(()=>n.to&&!n.href?"router-link":n.href||n.external?"a":"button"),i=t.computed(()=>`w-4 h-4 ${n.iconPosition==="left"?"mr-2":"ml-2"}`),u=d.cva("transition-colors duration-200 inline-flex items-center",{variants:{variant:{primary:"ui-primary hover:text-(--ui-primary-strong)",secondary:"ui-text hover:text-(--ui-primary)",muted:"text-(--ui-text-muted) hover:text-(--ui-text)",danger:"ui-danger hover:text-(--ui-danger-strong)",success:"ui-success hover:text-(--ui-success-strong)"},size:{xs:"text-xs",sm:"text-sm",md:"text-base",lg:"text-lg",xl:"text-xl"},underline:{always:"underline",hover:"hover:underline",never:"no-underline"},block:{true:"block w-full",false:"inline-flex items-center"},disabled:{true:"opacity-50 cursor-not-allowed pointer-events-none",false:"cursor-pointer"}},defaultVariants:{variant:"primary",size:"md",underline:"hover",block:!1,disabled:!1}}),s=l=>{if(n.disabled){l.preventDefault();return}c("click",l)},c=o;return(l,v)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(a.value),{href:a.value==="a"?e.href:void 0,to:a.value==="router-link"?e.to:void 0,target:e.external?"_blank":e.target,rel:e.external?"noopener noreferrer":e.rel,class:t.normalizeClass(t.unref(f.cn)(t.unref(u)({variant:e.variant,size:e.size,underline:e.underline,block:e.block,disabled:e.disabled}),l.$attrs.class)),onClick:s},{default:t.withCtx(()=>[e.icon&&e.iconPosition==="left"?(t.openBlock(),t.createBlock(r.default,{key:0,name:e.icon,class:t.normalizeClass(i.value)},null,8,["name","class"])):t.createCommentVNode("",!0),t.renderSlot(l.$slots,"default"),e.icon&&e.iconPosition==="right"?(t.openBlock(),t.createBlock(r.default,{key:1,name:e.icon,class:t.normalizeClass(i.value)},null,8,["name","class"])):t.createCommentVNode("",!0),e.external&&e.showExternalIcon?(t.openBlock(),t.createBlock(r.default,{key:2,name:"external-link",class:"w-3 h-3 ml-1 inline-block"})):t.createCommentVNode("",!0)]),_:3},8,["href","to","target","rel","class"]))}};exports.default=m;
@@ -0,0 +1,119 @@
1
+ import { computed as c, createBlock as l, openBlock as a, resolveDynamicComponent as y, normalizeClass as i, unref as d, withCtx as g, createCommentVNode as o, renderSlot as h } from "vue";
2
+ import { cva as k } from "class-variance-authority";
3
+ import { cn as b } from "../utils/cn.js";
4
+ import s from "./Icon.js";
5
+ const P = {
6
+ __name: "Link",
7
+ props: {
8
+ href: { type: String, default: null },
9
+ to: { type: [String, Object], default: null },
10
+ external: { type: Boolean, default: !1 },
11
+ target: { type: String, default: null },
12
+ rel: { type: String, default: null },
13
+ variant: {
14
+ type: String,
15
+ default: "primary",
16
+ validator: (e) => ["primary", "secondary", "muted", "danger", "success"].includes(e)
17
+ },
18
+ size: {
19
+ type: String,
20
+ default: "md",
21
+ validator: (e) => ["xs", "sm", "md", "lg", "xl"].includes(e)
22
+ },
23
+ underline: {
24
+ type: String,
25
+ default: "hover",
26
+ validator: (e) => ["always", "hover", "never"].includes(e)
27
+ },
28
+ disabled: { type: Boolean, default: !1 },
29
+ icon: { type: String, default: null },
30
+ iconPosition: {
31
+ type: String,
32
+ default: "left",
33
+ validator: (e) => ["left", "right"].includes(e)
34
+ },
35
+ showExternalIcon: { type: Boolean, default: !0 },
36
+ block: { type: Boolean, default: !1 }
37
+ },
38
+ emits: ["click"],
39
+ setup(e, { emit: f }) {
40
+ const t = e, r = c(() => t.to && !t.href ? "router-link" : t.href || t.external ? "a" : "button"), u = c(() => `w-4 h-4 ${t.iconPosition === "left" ? "mr-2" : "ml-2"}`), m = k(
41
+ "transition-colors duration-200 inline-flex items-center",
42
+ {
43
+ variants: {
44
+ variant: {
45
+ primary: "ui-primary hover:text-(--ui-primary-strong)",
46
+ secondary: "ui-text hover:text-(--ui-primary)",
47
+ muted: "text-(--ui-text-muted) hover:text-(--ui-text)",
48
+ danger: "ui-danger hover:text-(--ui-danger-strong)",
49
+ success: "ui-success hover:text-(--ui-success-strong)"
50
+ },
51
+ size: {
52
+ xs: "text-xs",
53
+ sm: "text-sm",
54
+ md: "text-base",
55
+ lg: "text-lg",
56
+ xl: "text-xl"
57
+ },
58
+ underline: {
59
+ always: "underline",
60
+ hover: "hover:underline",
61
+ never: "no-underline"
62
+ },
63
+ block: {
64
+ true: "block w-full",
65
+ false: "inline-flex items-center"
66
+ },
67
+ disabled: {
68
+ true: "opacity-50 cursor-not-allowed pointer-events-none",
69
+ false: "cursor-pointer"
70
+ }
71
+ },
72
+ defaultVariants: {
73
+ variant: "primary",
74
+ size: "md",
75
+ underline: "hover",
76
+ block: !1,
77
+ disabled: !1
78
+ }
79
+ }
80
+ ), x = (n) => {
81
+ if (t.disabled) {
82
+ n.preventDefault();
83
+ return;
84
+ }
85
+ v("click", n);
86
+ }, v = f;
87
+ return (n, S) => (a(), l(y(r.value), {
88
+ href: r.value === "a" ? e.href : void 0,
89
+ to: r.value === "router-link" ? e.to : void 0,
90
+ target: e.external ? "_blank" : e.target,
91
+ rel: e.external ? "noopener noreferrer" : e.rel,
92
+ class: i(d(b)(d(m)({ variant: e.variant, size: e.size, underline: e.underline, block: e.block, disabled: e.disabled }), n.$attrs.class)),
93
+ onClick: x
94
+ }, {
95
+ default: g(() => [
96
+ e.icon && e.iconPosition === "left" ? (a(), l(s, {
97
+ key: 0,
98
+ name: e.icon,
99
+ class: i(u.value)
100
+ }, null, 8, ["name", "class"])) : o("", !0),
101
+ h(n.$slots, "default"),
102
+ e.icon && e.iconPosition === "right" ? (a(), l(s, {
103
+ key: 1,
104
+ name: e.icon,
105
+ class: i(u.value)
106
+ }, null, 8, ["name", "class"])) : o("", !0),
107
+ e.external && e.showExternalIcon ? (a(), l(s, {
108
+ key: 2,
109
+ name: "external-link",
110
+ class: "w-3 h-3 ml-1 inline-block"
111
+ })) : o("", !0)
112
+ ]),
113
+ _: 3
114
+ }, 8, ["href", "to", "target", "rel", "class"]));
115
+ }
116
+ };
117
+ export {
118
+ P as default
119
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),c=require("class-variance-authority"),i=require("../utils/cn.cjs"),v=require("./Icon.cjs"),k=["role"],f={key:0,class:"shrink-0"},h={class:"flex-1 min-w-0"},B={key:0,class:"text-sm font-medium ui-text"},C={key:1,class:"text-sm text-muted-foreground"},S={key:1,class:"shrink-0"},g={__name:"ListItem",props:{title:String,description:String,icon:String,href:String,role:String,variant:{type:String,default:"default",validator:t=>["default","interactive"].includes(t)}},emits:["click"],setup(t,{emit:a}){const o=t,s=a,r=c.cva("",{variants:{variant:{default:"",interactive:"hover:bg-(--ui-surface) cursor-pointer"}}}),l=c.cva("flex items-center space-x-3 p-3",{variants:{variant:{default:"",interactive:"transition-colors rounded-md"}}}),d=e.computed(()=>i.cn(r({variant:o.variant}))),u=e.computed(()=>i.cn(l({variant:o.variant}))),m=n=>{s("click",n)};return(n,y)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass(d.value),role:t.role},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.href?"a":"div"),{href:t.href,class:e.normalizeClass(u.value),onClick:m},{default:e.withCtx(()=>[n.$slots.icon||t.icon?(e.openBlock(),e.createElementBlock("div",f,[e.renderSlot(n.$slots,"icon",{},()=>[t.icon?(e.openBlock(),e.createBlock(v.default,{key:0,name:t.icon,class:"h-5 w-5"},null,8,["name"])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0),e.createElementVNode("div",h,[t.title?(e.openBlock(),e.createElementBlock("div",B,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),t.description?(e.openBlock(),e.createElementBlock("div",C,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0),e.renderSlot(n.$slots,"default")]),n.$slots.action?(e.openBlock(),e.createElementBlock("div",S,[e.renderSlot(n.$slots,"action")])):e.createCommentVNode("",!0)]),_:3},8,["href","class"]))],10,k))}};exports.default=g;