cisse-vue-ui 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +162 -8
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js +54 -0
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js.map +1 -0
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs +53 -0
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs.map +1 -0
- package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-Bd6TPEpH.cjs → CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs} +398 -79
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs.map +1 -0
- package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-l4KQ8HX8.js → CollapsibleCard.vue_vue_type_script_setup_true_lang-DTGAuLCh.js} +406 -87
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-DTGAuLCh.js.map +1 -0
- package/dist/{Checkbox.vue_vue_type_script_setup_true_lang-DVkcMcSN.js → Switch.vue_vue_type_script_setup_true_lang-C2_5u-HL.js} +46 -95
- package/dist/Switch.vue_vue_type_script_setup_true_lang-C2_5u-HL.js.map +1 -0
- package/dist/{Checkbox.vue_vue_type_script_setup_true_lang-DQD2I1Wk.cjs → Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs} +46 -95
- package/dist/Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs.map +1 -0
- package/dist/components/core/MobileList.vue.d.ts +80 -0
- package/dist/components/core/ResponsiveList.vue.d.ts +115 -0
- package/dist/components/core/TableComponent.vue.d.ts +26 -28
- package/dist/components/core/index.cjs +11 -9
- package/dist/components/core/index.cjs.map +1 -1
- package/dist/components/core/index.d.ts +4 -0
- package/dist/components/core/index.js +11 -9
- package/dist/components/form/index.cjs +10 -9
- package/dist/components/form/index.cjs.map +1 -1
- package/dist/components/form/index.js +3 -2
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/index.cjs +21 -18
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +18 -15
- package/dist/components/index.js.map +1 -1
- package/dist/index-Ck4eaNes.js +51 -0
- package/dist/index-Ck4eaNes.js.map +1 -0
- package/dist/{index-BW9nN-BL.cjs → index-c27X2k2e.cjs} +22 -19
- package/dist/index-c27X2k2e.cjs.map +1 -0
- package/dist/index.cjs +22 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +19 -16
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/form.d.ts +2 -0
- package/package.json +1 -1
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DQD2I1Wk.cjs.map +0 -1
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DVkcMcSN.js.map +0 -1
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Bd6TPEpH.cjs.map +0 -1
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-l4KQ8HX8.js.map +0 -1
- package/dist/index-BQb_cz3-.js +0 -48
- package/dist/index-BQb_cz3-.js.map +0 -1
- package/dist/index-BW9nN-BL.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -92,7 +92,9 @@ app.use(VueTailwindUI, { components: ['Button', 'CardComponent'] })
|
|
|
92
92
|
|-----------|-------------|
|
|
93
93
|
| `Button` | Button with variants (primary, secondary, outline, ghost, danger, success), sizes, icons, loading state |
|
|
94
94
|
| `CardComponent` | Card container with header, content, and footer slots |
|
|
95
|
-
| `TableComponent` | Data table with sorting, actions, and custom column rendering |
|
|
95
|
+
| `TableComponent` | Data table with sorting, selection, actions, and custom column rendering |
|
|
96
|
+
| `MobileList` | Mobile-optimized card-based list with selection support |
|
|
97
|
+
| `ResponsiveList` | Combines MobileList (mobile) and TableComponent (desktop) with automatic breakpoint switching |
|
|
96
98
|
| `Tabs` | Tab navigation with variants (underline, pills, boxed) |
|
|
97
99
|
| `TabPanel` | Tab content panel (use with Tabs) |
|
|
98
100
|
| `Dropdown` | Dropdown menu with items, icons, and dividers |
|
|
@@ -339,27 +341,41 @@ const steps = [
|
|
|
339
341
|
|
|
340
342
|
```vue
|
|
341
343
|
<script setup>
|
|
344
|
+
import { ref } from 'vue'
|
|
342
345
|
import { TableComponent } from 'cisse-vue-ui'
|
|
343
346
|
|
|
344
347
|
const properties = [
|
|
345
|
-
{
|
|
346
|
-
{
|
|
347
|
-
{
|
|
348
|
+
{ name: 'name', label: 'Name', main: true },
|
|
349
|
+
{ name: 'email', label: 'Email' },
|
|
350
|
+
{ name: 'role', label: 'Role', type: 'badge' }
|
|
348
351
|
]
|
|
349
352
|
|
|
350
|
-
const
|
|
353
|
+
const items = [
|
|
351
354
|
{ id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin' },
|
|
352
355
|
{ id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'User' }
|
|
353
356
|
]
|
|
357
|
+
|
|
358
|
+
// Selection support
|
|
359
|
+
const selectedItems = ref(new Set())
|
|
360
|
+
const toggleSelect = (id) => {
|
|
361
|
+
if (selectedItems.value.has(id)) {
|
|
362
|
+
selectedItems.value.delete(id)
|
|
363
|
+
} else {
|
|
364
|
+
selectedItems.value.add(id)
|
|
365
|
+
}
|
|
366
|
+
}
|
|
354
367
|
</script>
|
|
355
368
|
|
|
356
369
|
<template>
|
|
357
370
|
<TableComponent
|
|
358
371
|
:properties="properties"
|
|
359
|
-
:
|
|
360
|
-
|
|
372
|
+
:items="items"
|
|
373
|
+
selectable
|
|
374
|
+
:selected-items="selectedItems"
|
|
375
|
+
@select="toggleSelect"
|
|
376
|
+
@select-all="toggleSelectAll"
|
|
361
377
|
>
|
|
362
|
-
<template #
|
|
378
|
+
<template #action="{ item }">
|
|
363
379
|
<TableAction icon="lucide:edit" @click="edit(item)" />
|
|
364
380
|
<TableAction icon="lucide:trash" variant="danger" @click="delete(item)" />
|
|
365
381
|
</template>
|
|
@@ -367,6 +383,144 @@ const data = [
|
|
|
367
383
|
</template>
|
|
368
384
|
```
|
|
369
385
|
|
|
386
|
+
### ResponsiveList
|
|
387
|
+
|
|
388
|
+
A component that automatically switches between a mobile card layout and a desktop table layout based on screen size.
|
|
389
|
+
|
|
390
|
+
```vue
|
|
391
|
+
<script setup>
|
|
392
|
+
import { ref } from 'vue'
|
|
393
|
+
import { ResponsiveList } from 'cisse-vue-ui'
|
|
394
|
+
|
|
395
|
+
const columns = [
|
|
396
|
+
{ key: 'name', label: 'Name' },
|
|
397
|
+
{ key: 'email', label: 'Email' },
|
|
398
|
+
{ key: 'status', label: 'Status' }
|
|
399
|
+
]
|
|
400
|
+
|
|
401
|
+
const items = [
|
|
402
|
+
{ id: 1, name: 'John Doe', email: 'john@example.com', status: 'active' },
|
|
403
|
+
{ id: 2, name: 'Jane Smith', email: 'jane@example.com', status: 'inactive' }
|
|
404
|
+
]
|
|
405
|
+
|
|
406
|
+
const selectedItems = ref(new Set())
|
|
407
|
+
|
|
408
|
+
const toggleSelect = (id) => {
|
|
409
|
+
if (selectedItems.value.has(id)) {
|
|
410
|
+
selectedItems.value.delete(id)
|
|
411
|
+
} else {
|
|
412
|
+
selectedItems.value.add(id)
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
const toggleSelectAll = () => {
|
|
417
|
+
if (selectedItems.value.size === items.length) {
|
|
418
|
+
selectedItems.value.clear()
|
|
419
|
+
} else {
|
|
420
|
+
items.forEach(item => selectedItems.value.add(String(item.id)))
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
</script>
|
|
424
|
+
|
|
425
|
+
<template>
|
|
426
|
+
<ResponsiveList
|
|
427
|
+
:items="items"
|
|
428
|
+
:columns="columns"
|
|
429
|
+
key-field="id"
|
|
430
|
+
selectable
|
|
431
|
+
:selected-items="selectedItems"
|
|
432
|
+
breakpoint="lg"
|
|
433
|
+
@select="toggleSelect"
|
|
434
|
+
@select-all="toggleSelectAll"
|
|
435
|
+
>
|
|
436
|
+
<!-- Mobile view: avatar -->
|
|
437
|
+
<template #avatar="{ item }">
|
|
438
|
+
<div class="w-10 h-10 rounded-full bg-primary-500 flex items-center justify-center text-white">
|
|
439
|
+
{{ item.name[0] }}
|
|
440
|
+
</div>
|
|
441
|
+
</template>
|
|
442
|
+
|
|
443
|
+
<!-- Mobile view: content -->
|
|
444
|
+
<template #mobileContent="{ item }">
|
|
445
|
+
<h3 class="font-semibold">{{ item.name }}</h3>
|
|
446
|
+
<p class="text-sm text-gray-500">{{ item.email }}</p>
|
|
447
|
+
</template>
|
|
448
|
+
|
|
449
|
+
<!-- Mobile view: actions -->
|
|
450
|
+
<template #mobileActions="{ item }">
|
|
451
|
+
<button @click="viewItem(item)">View</button>
|
|
452
|
+
</template>
|
|
453
|
+
|
|
454
|
+
<!-- Desktop table: custom cell rendering -->
|
|
455
|
+
<template #cell-name="{ item }">
|
|
456
|
+
<span class="font-medium">{{ item.name }}</span>
|
|
457
|
+
</template>
|
|
458
|
+
|
|
459
|
+
<template #cell-status="{ item }">
|
|
460
|
+
<span :class="item.status === 'active' ? 'text-green-600' : 'text-red-600'">
|
|
461
|
+
{{ item.status }}
|
|
462
|
+
</span>
|
|
463
|
+
</template>
|
|
464
|
+
|
|
465
|
+
<!-- Desktop table: actions column -->
|
|
466
|
+
<template #actions="{ item }">
|
|
467
|
+
<Button size="sm" variant="ghost" @click="edit(item)">Edit</Button>
|
|
468
|
+
</template>
|
|
469
|
+
|
|
470
|
+
<!-- Empty state -->
|
|
471
|
+
<template #empty>
|
|
472
|
+
<EmptyState title="No items" message="No items to display" />
|
|
473
|
+
</template>
|
|
474
|
+
</ResponsiveList>
|
|
475
|
+
</template>
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
#### ResponsiveList Props
|
|
479
|
+
|
|
480
|
+
| Prop | Type | Default | Description |
|
|
481
|
+
|------|------|---------|-------------|
|
|
482
|
+
| `items` | `Array` | required | Array of items to display |
|
|
483
|
+
| `columns` | `Array` | required | Column definitions with `key` or `name`, `label`, and optional `type` |
|
|
484
|
+
| `keyField` | `string` | `'id'` | Field to use as unique key for items |
|
|
485
|
+
| `selectable` | `boolean` | `false` | Enable selection mode |
|
|
486
|
+
| `selectedItems` | `Set<string>` | - | Set of selected item keys |
|
|
487
|
+
| `selectableFilter` | `Function` | - | Filter function to determine if an item is selectable |
|
|
488
|
+
| `breakpoint` | `string` | `'lg'` | Breakpoint for switching views: `'sm'`, `'md'`, `'lg'`, `'xl'`, `'2xl'` |
|
|
489
|
+
|
|
490
|
+
### MobileList
|
|
491
|
+
|
|
492
|
+
A mobile-optimized card-based list component with selection support.
|
|
493
|
+
|
|
494
|
+
```vue
|
|
495
|
+
<script setup>
|
|
496
|
+
import { MobileList } from 'cisse-vue-ui'
|
|
497
|
+
</script>
|
|
498
|
+
|
|
499
|
+
<template>
|
|
500
|
+
<MobileList
|
|
501
|
+
:items="items"
|
|
502
|
+
key-field="id"
|
|
503
|
+
selectable
|
|
504
|
+
:selected-items="selectedItems"
|
|
505
|
+
@select="toggleSelect"
|
|
506
|
+
@select-all="toggleSelectAll"
|
|
507
|
+
>
|
|
508
|
+
<template #avatar="{ item }">
|
|
509
|
+
<div class="w-12 h-12 rounded-full bg-blue-500" />
|
|
510
|
+
</template>
|
|
511
|
+
|
|
512
|
+
<template #content="{ item }">
|
|
513
|
+
<h3>{{ item.name }}</h3>
|
|
514
|
+
<p>{{ item.description }}</p>
|
|
515
|
+
</template>
|
|
516
|
+
|
|
517
|
+
<template #actions="{ item }">
|
|
518
|
+
<button>View</button>
|
|
519
|
+
</template>
|
|
520
|
+
</MobileList>
|
|
521
|
+
</template>
|
|
522
|
+
```
|
|
523
|
+
|
|
370
524
|
### MenuItem
|
|
371
525
|
|
|
372
526
|
```vue
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { defineComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, toDisplayString } from "vue";
|
|
2
|
+
const _hoisted_1 = ["checked", "disabled", "indeterminate"];
|
|
3
|
+
const _hoisted_2 = {
|
|
4
|
+
key: 0,
|
|
5
|
+
class: "flex flex-col"
|
|
6
|
+
};
|
|
7
|
+
const _hoisted_3 = {
|
|
8
|
+
key: 0,
|
|
9
|
+
class: "text-sm font-medium text-gray-900 dark:text-white"
|
|
10
|
+
};
|
|
11
|
+
const _hoisted_4 = {
|
|
12
|
+
key: 1,
|
|
13
|
+
class: "text-sm text-gray-500 dark:text-gray-400"
|
|
14
|
+
};
|
|
15
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
16
|
+
__name: "Checkbox",
|
|
17
|
+
props: {
|
|
18
|
+
modelValue: { type: Boolean, default: false },
|
|
19
|
+
label: {},
|
|
20
|
+
description: {},
|
|
21
|
+
disabled: { type: Boolean },
|
|
22
|
+
indeterminate: { type: Boolean }
|
|
23
|
+
},
|
|
24
|
+
emits: ["update:modelValue"],
|
|
25
|
+
setup(__props, { emit: __emit }) {
|
|
26
|
+
const emit = __emit;
|
|
27
|
+
const toggle = (event) => {
|
|
28
|
+
const target = event.target;
|
|
29
|
+
emit("update:modelValue", target.checked);
|
|
30
|
+
};
|
|
31
|
+
return (_ctx, _cache) => {
|
|
32
|
+
return openBlock(), createElementBlock("label", {
|
|
33
|
+
class: normalizeClass(["inline-flex items-start gap-3", __props.disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"])
|
|
34
|
+
}, [
|
|
35
|
+
createElementVNode("input", {
|
|
36
|
+
type: "checkbox",
|
|
37
|
+
checked: __props.modelValue,
|
|
38
|
+
disabled: __props.disabled,
|
|
39
|
+
indeterminate: __props.indeterminate,
|
|
40
|
+
class: "mt-0.5 size-4 rounded border-gray-300 text-primary/90 focus:ring-2 focus:ring-primary focus:ring-offset-2 disabled:cursor-not-allowed dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-offset-gray-900",
|
|
41
|
+
onChange: toggle
|
|
42
|
+
}, null, 40, _hoisted_1),
|
|
43
|
+
__props.label || __props.description ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
44
|
+
__props.label ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
|
|
45
|
+
__props.description ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(__props.description), 1)) : createCommentVNode("", true)
|
|
46
|
+
])) : createCommentVNode("", true)
|
|
47
|
+
], 2);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
export {
|
|
52
|
+
_sfc_main as _
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js","sources":["../src/components/form/Checkbox.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n /** v-model value */\n modelValue?: boolean\n /** Label text */\n label?: string\n /** Description text */\n description?: string\n /** Disabled state */\n disabled?: boolean\n /** Indeterminate state */\n indeterminate?: boolean\n }>(),\n {\n modelValue: false,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst toggle = (event: Event) => {\n const target = event.target as HTMLInputElement\n emit('update:modelValue', target.checked)\n}\n</script>\n\n<template>\n <label\n class=\"inline-flex items-start gap-3\"\n :class=\"disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n >\n <input\n type=\"checkbox\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :indeterminate=\"indeterminate\"\n class=\"mt-0.5 size-4 rounded border-gray-300 text-primary/90 focus:ring-2 focus:ring-primary focus:ring-offset-2 disabled:cursor-not-allowed dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-offset-gray-900\"\n @change=\"toggle\"\n />\n <div v-if=\"label || description\" class=\"flex flex-col\">\n <span v-if=\"label\" class=\"text-sm font-medium text-gray-900 dark:text-white\">\n {{ label }}\n </span>\n <span v-if=\"description\" class=\"text-sm text-gray-500 dark:text-gray-400\">\n {{ description }}\n </span>\n </div>\n </label>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,UAAM,OAAO;AAIb,UAAM,SAAS,CAAC,UAAiB;AAC/B,YAAM,SAAS,MAAM;AACrB,WAAK,qBAAqB,OAAO,OAAO;AAAA,IAC1C;;0BAIEA,mBAoBQ,SAAA;AAAA,QAnBN,OAAKC,eAAA,CAAC,iCACE,QAAA,WAAQ,kCAAA,gBAAA,CAAA;AAAA,MAAA;QAEhBC,mBAOE,SAAA;AAAA,UANA,MAAK;AAAA,UACJ,SAAS,QAAA;AAAA,UACT,UAAU,QAAA;AAAA,UACV,eAAe,QAAA;AAAA,UAChB,OAAM;AAAA,UACL,UAAQ;AAAA,QAAA;QAEA,QAAA,SAAS,QAAA,eAApBC,aAAAH,mBAOM,OAPN,YAOM;AAAA,UANQ,QAAA,sBAAZA,mBAEO,QAFP,YAEOI,gBADF,QAAA,KAAK,GAAA,CAAA;UAEE,QAAA,4BAAZJ,mBAEO,QAFP,YAEOI,gBADF,QAAA,WAAW,GAAA,CAAA;;;;;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const vue = require("vue");
|
|
3
|
+
const _hoisted_1 = ["checked", "disabled", "indeterminate"];
|
|
4
|
+
const _hoisted_2 = {
|
|
5
|
+
key: 0,
|
|
6
|
+
class: "flex flex-col"
|
|
7
|
+
};
|
|
8
|
+
const _hoisted_3 = {
|
|
9
|
+
key: 0,
|
|
10
|
+
class: "text-sm font-medium text-gray-900 dark:text-white"
|
|
11
|
+
};
|
|
12
|
+
const _hoisted_4 = {
|
|
13
|
+
key: 1,
|
|
14
|
+
class: "text-sm text-gray-500 dark:text-gray-400"
|
|
15
|
+
};
|
|
16
|
+
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
17
|
+
__name: "Checkbox",
|
|
18
|
+
props: {
|
|
19
|
+
modelValue: { type: Boolean, default: false },
|
|
20
|
+
label: {},
|
|
21
|
+
description: {},
|
|
22
|
+
disabled: { type: Boolean },
|
|
23
|
+
indeterminate: { type: Boolean }
|
|
24
|
+
},
|
|
25
|
+
emits: ["update:modelValue"],
|
|
26
|
+
setup(__props, { emit: __emit }) {
|
|
27
|
+
const emit = __emit;
|
|
28
|
+
const toggle = (event) => {
|
|
29
|
+
const target = event.target;
|
|
30
|
+
emit("update:modelValue", target.checked);
|
|
31
|
+
};
|
|
32
|
+
return (_ctx, _cache) => {
|
|
33
|
+
return vue.openBlock(), vue.createElementBlock("label", {
|
|
34
|
+
class: vue.normalizeClass(["inline-flex items-start gap-3", __props.disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"])
|
|
35
|
+
}, [
|
|
36
|
+
vue.createElementVNode("input", {
|
|
37
|
+
type: "checkbox",
|
|
38
|
+
checked: __props.modelValue,
|
|
39
|
+
disabled: __props.disabled,
|
|
40
|
+
indeterminate: __props.indeterminate,
|
|
41
|
+
class: "mt-0.5 size-4 rounded border-gray-300 text-primary/90 focus:ring-2 focus:ring-primary focus:ring-offset-2 disabled:cursor-not-allowed dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-offset-gray-900",
|
|
42
|
+
onChange: toggle
|
|
43
|
+
}, null, 40, _hoisted_1),
|
|
44
|
+
__props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
|
|
45
|
+
__props.label ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
|
|
46
|
+
__props.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4, vue.toDisplayString(__props.description), 1)) : vue.createCommentVNode("", true)
|
|
47
|
+
])) : vue.createCommentVNode("", true)
|
|
48
|
+
], 2);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
exports._sfc_main = _sfc_main;
|
|
53
|
+
//# sourceMappingURL=Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs","sources":["../src/components/form/Checkbox.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n /** v-model value */\n modelValue?: boolean\n /** Label text */\n label?: string\n /** Description text */\n description?: string\n /** Disabled state */\n disabled?: boolean\n /** Indeterminate state */\n indeterminate?: boolean\n }>(),\n {\n modelValue: false,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst toggle = (event: Event) => {\n const target = event.target as HTMLInputElement\n emit('update:modelValue', target.checked)\n}\n</script>\n\n<template>\n <label\n class=\"inline-flex items-start gap-3\"\n :class=\"disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n >\n <input\n type=\"checkbox\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :indeterminate=\"indeterminate\"\n class=\"mt-0.5 size-4 rounded border-gray-300 text-primary/90 focus:ring-2 focus:ring-primary focus:ring-offset-2 disabled:cursor-not-allowed dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-offset-gray-900\"\n @change=\"toggle\"\n />\n <div v-if=\"label || description\" class=\"flex flex-col\">\n <span v-if=\"label\" class=\"text-sm font-medium text-gray-900 dark:text-white\">\n {{ label }}\n </span>\n <span v-if=\"description\" class=\"text-sm text-gray-500 dark:text-gray-400\">\n {{ description }}\n </span>\n </div>\n </label>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,UAAM,OAAO;AAIb,UAAM,SAAS,CAAC,UAAiB;AAC/B,YAAM,SAAS,MAAM;AACrB,WAAK,qBAAqB,OAAO,OAAO;AAAA,IAC1C;;8BAIEA,IAAAA,mBAoBQ,SAAA;AAAA,QAnBN,OAAKC,IAAAA,eAAA,CAAC,iCACE,QAAA,WAAQ,kCAAA,gBAAA,CAAA;AAAA,MAAA;QAEhBC,IAAAA,mBAOE,SAAA;AAAA,UANA,MAAK;AAAA,UACJ,SAAS,QAAA;AAAA,UACT,UAAU,QAAA;AAAA,UACV,eAAe,QAAA;AAAA,UAChB,OAAM;AAAA,UACL,UAAQ;AAAA,QAAA;QAEA,QAAA,SAAS,QAAA,eAApBC,IAAAA,aAAAH,IAAAA,mBAOM,OAPN,YAOM;AAAA,UANQ,QAAA,0BAAZA,IAAAA,mBAEO,QAFP,YAEOI,IAAAA,gBADF,QAAA,KAAK,GAAA,CAAA;UAEE,QAAA,gCAAZJ,IAAAA,mBAEO,QAFP,YAEOI,IAAAA,gBADF,QAAA,WAAW,GAAA,CAAA;;;;;;;"}
|