@katlux/preset-modern 0.1.0-beta.73 → 0.1.1-alpha.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/dist/module.d.mts +3 -1
- package/dist/module.json +1 -1
- package/dist/runtime/assets/scss/css-variables.css +6 -1
- package/dist/runtime/assets/scss/index.css +10 -4
- package/dist/runtime/components/KBulkActions/KBulkActions.d.vue.ts +3 -6
- package/dist/runtime/components/KBulkActions/KBulkActions.vue +23 -11
- package/dist/runtime/components/KBulkActions/KBulkActions.vue.d.ts +3 -6
- package/dist/runtime/components/KCheckbox/KCheckbox.d.vue.ts +10 -3
- package/dist/runtime/components/KCheckbox/KCheckbox.vue +97 -16
- package/dist/runtime/components/KCheckbox/KCheckbox.vue.d.ts +10 -3
- package/dist/runtime/components/KDatatable/KDatatable.d.vue.ts +34 -11
- package/dist/runtime/components/KDatatable/KDatatable.vue +391 -79
- package/dist/runtime/components/KDatatable/KDatatable.vue.d.ts +34 -11
- package/dist/runtime/components/KMaskTextbox/KMaskTextbox.d.vue.ts +4 -2
- package/dist/runtime/components/KMaskTextbox/KMaskTextbox.vue +10 -2
- package/dist/runtime/components/KMaskTextbox/KMaskTextbox.vue.d.ts +4 -2
- package/dist/runtime/components/KPagination/KPagination.d.vue.ts +1 -0
- package/dist/runtime/components/KPagination/KPagination.vue +69 -42
- package/dist/runtime/components/KPagination/KPagination.vue.d.ts +1 -0
- package/dist/runtime/components/KRadiobox/KRadiobox.d.vue.ts +18 -0
- package/dist/runtime/components/KRadiobox/KRadiobox.vue +138 -0
- package/dist/runtime/components/KRadiobox/KRadiobox.vue.d.ts +18 -0
- package/dist/runtime/components/KRangeSlider/KRangeSlider.vue +11 -1
- package/dist/runtime/components/KSlider/KSlider.vue +10 -1
- package/dist/runtime/components/KTextarea/KTextarea.d.vue.ts +2 -0
- package/dist/runtime/components/KTextarea/KTextarea.vue +54 -4
- package/dist/runtime/components/KTextarea/KTextarea.vue.d.ts +2 -0
- package/dist/runtime/components/KTextbox/KTextbox.vue +4 -2
- package/dist/runtime/plugin.js +1 -0
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -94,14 +94,14 @@ Katlux is a zero-configuration Nuxt module. When you install this preset, the co
|
|
|
94
94
|
|
|
95
95
|
### Option 1: Using Nuxt CLI (Recommended)
|
|
96
96
|
```bash
|
|
97
|
-
npx nuxi module add @katlux/preset-modern
|
|
97
|
+
npx nuxi module add @katlux/preset-modern@alpha
|
|
98
98
|
```
|
|
99
99
|
This single command installs the package and adds it to your `nuxt.config.ts`.
|
|
100
100
|
|
|
101
101
|
### Option 2: Manual Installation
|
|
102
102
|
1. Install via NPM:
|
|
103
103
|
```bash
|
|
104
|
-
npm install @katlux/preset-modern
|
|
104
|
+
npm install @katlux/preset-modern@alpha
|
|
105
105
|
```
|
|
106
106
|
|
|
107
107
|
2. Register the module in `nuxt.config.ts`:
|
|
@@ -115,6 +115,11 @@ export default defineNuxtConfig({
|
|
|
115
115
|
|
|
116
116
|
That's all! Start using Katlux components like `<KButton>` in your Vue files immediately. No imports required.
|
|
117
117
|
|
|
118
|
+
## Developer Guide
|
|
119
|
+
|
|
120
|
+
For full documentation and repository access:
|
|
121
|
+
- **Developer Guide & Repository**: [https://github.com/katlux-ui/KatluxShowcase](https://github.com/katlux-ui/KatluxShowcase) *(We will open source it soon)*
|
|
122
|
+
|
|
118
123
|
## Next Components
|
|
119
124
|
|
|
120
125
|
Coming soon:
|
|
@@ -125,7 +130,7 @@ Coming soon:
|
|
|
125
130
|
- KPanel
|
|
126
131
|
- And more...
|
|
127
132
|
|
|
128
|
-
## Trademark Policy
|
|
133
|
+
## License & Trademark Policy
|
|
129
134
|
|
|
130
135
|
The code in this repository is completely free and open-source under the Apache 2.0 License.
|
|
131
136
|
However, **Katlux™** and the Katlux logo are unregistered trademarks of the Katlux project.
|
package/dist/module.d.mts
CHANGED
package/dist/module.json
CHANGED
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
--font-color-secondary: var(--neutral-500);
|
|
32
32
|
--font-color-heading: var(--neutral-900);
|
|
33
33
|
--font-color-light: #ffffff;
|
|
34
|
+
--input-label-color: var(--font-color-primary);
|
|
34
35
|
--background-color: #ffffff;
|
|
35
36
|
--background-color-light: var(--neutral-50);
|
|
36
37
|
--background-color-medium: var(--neutral-100);
|
|
@@ -105,20 +106,24 @@
|
|
|
105
106
|
--input-focus-border-color: var(--primary-500);
|
|
106
107
|
--input-focus-shadow: 0 0 0 3px rgba(139, 92, 246, 0.2);
|
|
107
108
|
--input-height: 48px;
|
|
109
|
+
--input-min-width: 140px;
|
|
108
110
|
--table-header-bg: var(--neutral-100);
|
|
109
111
|
--table-header-color: var(--neutral-600);
|
|
110
112
|
--table-border-color: var(--neutral-200);
|
|
111
113
|
--table-row-hover: var(--neutral-100);
|
|
112
114
|
--table-row-selected: #eff6ff;
|
|
115
|
+
--table-row-selected-text: var(--primary-900);
|
|
113
116
|
--panel-bg-opacity: 0.5;
|
|
114
117
|
--panel-blur: 16px;
|
|
115
118
|
--panel-bg-default: var(--neutral-100);
|
|
116
119
|
--panel-header-bg-default: var(--neutral-200);
|
|
117
120
|
--panel-footer-bg-default: var(--neutral-100);
|
|
118
121
|
--checkbox-bg: var(--background-color);
|
|
119
|
-
--checkbox-checked-bg: var(--
|
|
122
|
+
--checkbox-checked-bg: var(--primary-500);
|
|
120
123
|
--checkbox-border-color: var(--neutral-400);
|
|
121
124
|
--checkbox-border-radius: 4px;
|
|
125
|
+
--component-overlay-bg: rgba(255, 255, 255, 0.75);
|
|
126
|
+
--table-overlay-bg: var(--component-overlay-bg);
|
|
122
127
|
--modal-overlay-bg: rgba(15, 23, 42, 0.4);
|
|
123
128
|
--modal-backdrop-blur: 4px;
|
|
124
129
|
--layout-header-height: 70px;
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
--font-color-secondary: var(--neutral-500);
|
|
32
32
|
--font-color-heading: var(--neutral-900);
|
|
33
33
|
--font-color-light: #ffffff;
|
|
34
|
+
--input-label-color: var(--font-color-primary);
|
|
34
35
|
--background-color: #ffffff;
|
|
35
36
|
--background-color-light: var(--neutral-50);
|
|
36
37
|
--background-color-medium: var(--neutral-100);
|
|
@@ -105,20 +106,24 @@
|
|
|
105
106
|
--input-focus-border-color: var(--primary-500);
|
|
106
107
|
--input-focus-shadow: 0 0 0 3px rgba(139, 92, 246, 0.2);
|
|
107
108
|
--input-height: 48px;
|
|
109
|
+
--input-min-width: 140px;
|
|
108
110
|
--table-header-bg: var(--neutral-100);
|
|
109
111
|
--table-header-color: var(--neutral-600);
|
|
110
112
|
--table-border-color: var(--neutral-200);
|
|
111
113
|
--table-row-hover: var(--neutral-100);
|
|
112
114
|
--table-row-selected: #eff6ff;
|
|
115
|
+
--table-row-selected-text: var(--primary-900);
|
|
113
116
|
--panel-bg-opacity: 0.5;
|
|
114
117
|
--panel-blur: 16px;
|
|
115
118
|
--panel-bg-default: var(--neutral-100);
|
|
116
119
|
--panel-header-bg-default: var(--neutral-200);
|
|
117
120
|
--panel-footer-bg-default: var(--neutral-100);
|
|
118
121
|
--checkbox-bg: var(--background-color);
|
|
119
|
-
--checkbox-checked-bg: var(--
|
|
122
|
+
--checkbox-checked-bg: var(--primary-500);
|
|
120
123
|
--checkbox-border-color: var(--neutral-400);
|
|
121
124
|
--checkbox-border-radius: 4px;
|
|
125
|
+
--component-overlay-bg: rgba(255, 255, 255, 0.75);
|
|
126
|
+
--table-overlay-bg: var(--component-overlay-bg);
|
|
122
127
|
--modal-overlay-bg: rgba(15, 23, 42, 0.4);
|
|
123
128
|
--modal-backdrop-blur: 4px;
|
|
124
129
|
--layout-header-height: 70px;
|
|
@@ -129,9 +134,10 @@
|
|
|
129
134
|
}
|
|
130
135
|
|
|
131
136
|
.k-input-label {
|
|
132
|
-
font-size: var(--font-size-
|
|
133
|
-
color: var(--font-color-
|
|
134
|
-
margin-bottom: calc(var(--gap-sm) / 2);
|
|
137
|
+
font-size: var(--font-size-sm, 13px);
|
|
138
|
+
color: var(--input-label-color, var(--font-color-primary, currentColor));
|
|
139
|
+
margin-bottom: calc(var(--gap-sm, 8px) / 2);
|
|
135
140
|
display: block;
|
|
136
141
|
font-weight: 500;
|
|
142
|
+
line-height: 1.4;
|
|
137
143
|
}
|
|
@@ -4,16 +4,13 @@ type __VLS_Props = {
|
|
|
4
4
|
bulkActions: IKDatatableAction[];
|
|
5
5
|
selectedRows: any[];
|
|
6
6
|
selectAll: boolean;
|
|
7
|
+
selected?: any;
|
|
7
8
|
dp: CFlatClientDataProvider;
|
|
8
9
|
doAction: (action: any) => void;
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
-
'selected'?: any;
|
|
12
|
-
};
|
|
13
|
-
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
14
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
15
12
|
"update:selected": (value: any) => any;
|
|
16
|
-
}, string, import("vue").PublicProps, Readonly<
|
|
13
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
14
|
"onUpdate:selected"?: ((value: any) => any) | undefined;
|
|
18
15
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
16
|
declare const _default: typeof __VLS_export;
|
|
@@ -5,47 +5,56 @@
|
|
|
5
5
|
template(v-if="bulkActions.length > 3")
|
|
6
6
|
KCombobox(
|
|
7
7
|
:dataProvider="dp"
|
|
8
|
-
v-model="
|
|
8
|
+
v-model="internalSelected"
|
|
9
9
|
labelField="label"
|
|
10
10
|
closeOnSelect
|
|
11
|
-
:disabled="selectedRows.length === 0"
|
|
12
|
-
placeholder="Select
|
|
11
|
+
:disabled="!selectAll && selectedRows.length === 0"
|
|
12
|
+
:placeholder="t('Select an action')"
|
|
13
13
|
class="action-select"
|
|
14
14
|
)
|
|
15
15
|
KButton(
|
|
16
|
-
@click="doAction(
|
|
16
|
+
@click="doAction(internalSelected)"
|
|
17
17
|
size="small"
|
|
18
|
-
:disabled="selectedRows.length === 0 ||
|
|
18
|
+
:disabled="(!selectAll && selectedRows.length === 0) || internalSelected == undefined"
|
|
19
19
|
class="execute-btn"
|
|
20
|
-
)
|
|
20
|
+
) {{ t('Apply') }}
|
|
21
21
|
|
|
22
22
|
template(v-else v-for="action in bulkActions" :key="action.label")
|
|
23
23
|
KTooltip(
|
|
24
24
|
:text="action.label"
|
|
25
|
-
:disabled="!
|
|
25
|
+
:disabled="!action.iconOnly"
|
|
26
26
|
)
|
|
27
27
|
KButton(
|
|
28
28
|
@click="doAction(action)"
|
|
29
29
|
size="small"
|
|
30
30
|
:type="action.type || 'default'"
|
|
31
|
-
:iconOnly="action.iconOnly
|
|
31
|
+
:iconOnly="action.iconOnly"
|
|
32
|
+
:disabled="!selectAll && selectedRows.length === 0"
|
|
32
33
|
class="action-btn"
|
|
33
34
|
)
|
|
34
35
|
template(#icon v-if="action.icon")
|
|
35
36
|
KIcon(:iconname="action.icon" :width="16" :height="16")
|
|
36
|
-
template(#default v-if="!action.iconOnly
|
|
37
|
+
template(#default v-if="!action.iconOnly") {{ action.label }}
|
|
37
38
|
</template>
|
|
38
39
|
|
|
39
40
|
<script setup>
|
|
41
|
+
import { computed } from "vue";
|
|
40
42
|
import { CFlatClientDataProvider } from "@katlux/providers";
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
import { useKatluxI18n } from "#toolkit/composables/useKatluxI18n";
|
|
44
|
+
const { t } = useKatluxI18n();
|
|
45
|
+
const props = defineProps({
|
|
43
46
|
bulkActions: { type: Array, required: true },
|
|
44
47
|
selectedRows: { type: Array, required: true },
|
|
45
48
|
selectAll: { type: Boolean, required: true },
|
|
49
|
+
selected: { type: null, required: false },
|
|
46
50
|
dp: { type: Object, required: true },
|
|
47
51
|
doAction: { type: Function, required: true }
|
|
48
52
|
});
|
|
53
|
+
const emit = defineEmits(["update:selected"]);
|
|
54
|
+
const internalSelected = computed({
|
|
55
|
+
get: () => props.selected,
|
|
56
|
+
set: (val) => emit("update:selected", val)
|
|
57
|
+
});
|
|
49
58
|
</script>
|
|
50
59
|
|
|
51
60
|
<style scoped>
|
|
@@ -58,6 +67,9 @@ defineProps({
|
|
|
58
67
|
gap: var(--gap-sm);
|
|
59
68
|
align-items: center;
|
|
60
69
|
}
|
|
70
|
+
.k-bulk-actions-modern .action-select {
|
|
71
|
+
min-width: 180px;
|
|
72
|
+
}
|
|
61
73
|
.k-bulk-actions-modern .action-btn {
|
|
62
74
|
border-radius: var(--border-radius-sm);
|
|
63
75
|
font-weight: var(--font-weight-medium);
|
|
@@ -4,16 +4,13 @@ type __VLS_Props = {
|
|
|
4
4
|
bulkActions: IKDatatableAction[];
|
|
5
5
|
selectedRows: any[];
|
|
6
6
|
selectAll: boolean;
|
|
7
|
+
selected?: any;
|
|
7
8
|
dp: CFlatClientDataProvider;
|
|
8
9
|
doAction: (action: any) => void;
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
-
'selected'?: any;
|
|
12
|
-
};
|
|
13
|
-
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
14
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
15
12
|
"update:selected": (value: any) => any;
|
|
16
|
-
}, string, import("vue").PublicProps, Readonly<
|
|
13
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
14
|
"onUpdate:selected"?: ((value: any) => any) | undefined;
|
|
18
15
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
16
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
|
-
model
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
model?: any;
|
|
3
|
+
modelValue?: any;
|
|
4
|
+
checkboxValue?: any;
|
|
5
|
+
isDisabled?: boolean;
|
|
5
6
|
label?: string;
|
|
6
7
|
validation?: 'success' | 'warning' | 'error' | null;
|
|
7
8
|
validationText?: string;
|
|
9
|
+
idKey?: string;
|
|
10
|
+
indeterminate?: boolean;
|
|
8
11
|
};
|
|
9
12
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
10
13
|
"update:model": (value: any) => any;
|
|
14
|
+
"update:modelValue": (value: any) => any;
|
|
15
|
+
"update:indeterminate": (value: boolean) => any;
|
|
11
16
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
12
17
|
"onUpdate:model"?: ((value: any) => any) | undefined;
|
|
18
|
+
"onUpdate:modelValue"?: ((value: any) => any) | undefined;
|
|
19
|
+
"onUpdate:indeterminate"?: ((value: boolean) => any) | undefined;
|
|
13
20
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
21
|
declare const _default: typeof __VLS_export;
|
|
15
22
|
export default _default;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
2
|
.KCheckbox-wrapper
|
|
3
|
-
label.KCheckbox.modern-checkbox
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
label.KCheckbox.modern-checkbox(
|
|
4
|
+
role="checkbox"
|
|
5
|
+
:aria-checked="props.indeterminate ? 'mixed' : isChecked"
|
|
6
|
+
:aria-disabled="isDisabled"
|
|
7
|
+
tabindex="0"
|
|
8
|
+
@keydown.space.prevent="handleSpace"
|
|
9
|
+
)
|
|
10
|
+
input(ref="inputRef" type="checkbox" :checked="isChecked" :indeterminate.prop="props.indeterminate" :value="checkboxValue" :disabled="isDisabled" tabindex="-1" @change="handleSpace")
|
|
11
|
+
.checkbox-box(:class="[validation ? `is-${validation}` : '', { 'is-indeterminate': props.indeterminate }]")
|
|
6
12
|
.checkbox-checkmark
|
|
7
|
-
KIcon.icon(iconname="check")
|
|
13
|
+
KIcon.icon(:iconname="props.indeterminate ? 'minus' : 'check'")
|
|
8
14
|
.checkbox-label(v-if="$slots.label || $slots.default || label")
|
|
9
15
|
slot(name="label")
|
|
10
16
|
slot
|
|
@@ -13,20 +19,82 @@
|
|
|
13
19
|
</template>
|
|
14
20
|
|
|
15
21
|
<script setup>
|
|
16
|
-
import { computed } from "vue";
|
|
22
|
+
import { ref, computed, watch } from "vue";
|
|
17
23
|
const props = defineProps({
|
|
18
|
-
model: { type: null, required:
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
model: { type: null, required: false },
|
|
25
|
+
modelValue: { type: null, required: false },
|
|
26
|
+
checkboxValue: { type: null, required: false },
|
|
27
|
+
isDisabled: { type: Boolean, required: false },
|
|
21
28
|
label: { type: String, required: false },
|
|
22
29
|
validation: { type: [String, null], required: false },
|
|
23
|
-
validationText: { type: String, required: false }
|
|
30
|
+
validationText: { type: String, required: false },
|
|
31
|
+
idKey: { type: String, required: false },
|
|
32
|
+
indeterminate: { type: Boolean, required: false }
|
|
24
33
|
});
|
|
25
|
-
const emit = defineEmits(["update:model"]);
|
|
34
|
+
const emit = defineEmits(["update:model", "update:modelValue", "update:indeterminate"]);
|
|
26
35
|
const formattedModel = computed({
|
|
27
|
-
get: () => props.model,
|
|
28
|
-
set: (value) =>
|
|
36
|
+
get: () => props.modelValue !== void 0 ? props.modelValue : props.model,
|
|
37
|
+
set: (value) => {
|
|
38
|
+
emit("update:model", value);
|
|
39
|
+
emit("update:modelValue", value);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
const inputRef = ref(null);
|
|
43
|
+
watch(() => props.indeterminate, (val) => {
|
|
44
|
+
if (inputRef.value) {
|
|
45
|
+
inputRef.value.indeterminate = !!val;
|
|
46
|
+
}
|
|
47
|
+
}, { immediate: true, flush: "post" });
|
|
48
|
+
const getId = (item) => {
|
|
49
|
+
if (item && typeof item === "object") {
|
|
50
|
+
const key = props.idKey;
|
|
51
|
+
if (key && item[key] !== void 0 && item[key] !== null) {
|
|
52
|
+
return item[key];
|
|
53
|
+
}
|
|
54
|
+
return item.id ?? item._id ?? item.key ?? item.value;
|
|
55
|
+
}
|
|
56
|
+
return item;
|
|
57
|
+
};
|
|
58
|
+
const findModelIndex = (arr, value) => {
|
|
59
|
+
const refIdx = arr.indexOf(value);
|
|
60
|
+
if (refIdx > -1) return refIdx;
|
|
61
|
+
const targetId = getId(value);
|
|
62
|
+
if (targetId !== void 0 && targetId !== null) {
|
|
63
|
+
return arr.findIndex((item) => {
|
|
64
|
+
const itemId = getId(item);
|
|
65
|
+
return itemId !== void 0 && itemId !== null && itemId === targetId;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return -1;
|
|
69
|
+
};
|
|
70
|
+
const isChecked = computed(() => {
|
|
71
|
+
if (Array.isArray(formattedModel.value)) {
|
|
72
|
+
return findModelIndex(formattedModel.value, props.checkboxValue) > -1;
|
|
73
|
+
}
|
|
74
|
+
return !!formattedModel.value;
|
|
29
75
|
});
|
|
76
|
+
const handleSpace = () => {
|
|
77
|
+
if (props.isDisabled) return;
|
|
78
|
+
if (props.indeterminate) {
|
|
79
|
+
emit("update:indeterminate", false);
|
|
80
|
+
}
|
|
81
|
+
if (Array.isArray(formattedModel.value)) {
|
|
82
|
+
const idx = findModelIndex(formattedModel.value, props.checkboxValue);
|
|
83
|
+
if (idx > -1) {
|
|
84
|
+
const updated = [...formattedModel.value];
|
|
85
|
+
updated.splice(idx, 1);
|
|
86
|
+
formattedModel.value = updated;
|
|
87
|
+
} else {
|
|
88
|
+
formattedModel.value = [...formattedModel.value, props.checkboxValue];
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
if (props.indeterminate) {
|
|
92
|
+
formattedModel.value = true;
|
|
93
|
+
} else {
|
|
94
|
+
formattedModel.value = !formattedModel.value;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
30
98
|
</script>
|
|
31
99
|
|
|
32
100
|
<style scoped>
|
|
@@ -37,13 +105,20 @@ const formattedModel = computed({
|
|
|
37
105
|
cursor: pointer;
|
|
38
106
|
user-select: none;
|
|
39
107
|
transition: all var(--transition-fast);
|
|
108
|
+
width: fit-content;
|
|
40
109
|
}
|
|
41
110
|
.KCheckbox.modern-checkbox:hover .checkbox-box {
|
|
42
111
|
border-color: var(--primary-500);
|
|
43
112
|
box-shadow: var(--input-focus-shadow);
|
|
44
113
|
}
|
|
45
114
|
.KCheckbox.modern-checkbox input {
|
|
46
|
-
|
|
115
|
+
position: absolute;
|
|
116
|
+
opacity: 0;
|
|
117
|
+
width: 1px;
|
|
118
|
+
height: 1px;
|
|
119
|
+
margin: -1px;
|
|
120
|
+
overflow: hidden;
|
|
121
|
+
clip: rect(0, 0, 0, 0);
|
|
47
122
|
}
|
|
48
123
|
.KCheckbox.modern-checkbox .checkbox-box {
|
|
49
124
|
position: relative;
|
|
@@ -83,14 +158,20 @@ const formattedModel = computed({
|
|
|
83
158
|
color: var(--font-color-primary);
|
|
84
159
|
line-height: 1.5;
|
|
85
160
|
}
|
|
86
|
-
.KCheckbox.modern-checkbox input:checked + .checkbox-box
|
|
161
|
+
.KCheckbox.modern-checkbox input:checked + .checkbox-box,
|
|
162
|
+
.KCheckbox.modern-checkbox input:indeterminate + .checkbox-box,
|
|
163
|
+
.KCheckbox.modern-checkbox .checkbox-box.is-indeterminate {
|
|
87
164
|
border-color: var(--primary-500);
|
|
88
165
|
}
|
|
89
|
-
.KCheckbox.modern-checkbox input:checked + .checkbox-box::before
|
|
166
|
+
.KCheckbox.modern-checkbox input:checked + .checkbox-box::before,
|
|
167
|
+
.KCheckbox.modern-checkbox input:indeterminate + .checkbox-box::before,
|
|
168
|
+
.KCheckbox.modern-checkbox .checkbox-box.is-indeterminate::before {
|
|
90
169
|
opacity: 1;
|
|
91
170
|
transform: scale(1);
|
|
92
171
|
}
|
|
93
|
-
.KCheckbox.modern-checkbox input:checked + .checkbox-box .checkbox-checkmark .icon
|
|
172
|
+
.KCheckbox.modern-checkbox input:checked + .checkbox-box .checkbox-checkmark .icon,
|
|
173
|
+
.KCheckbox.modern-checkbox input:indeterminate + .checkbox-box .checkbox-checkmark .icon,
|
|
174
|
+
.KCheckbox.modern-checkbox .checkbox-box.is-indeterminate .checkbox-checkmark .icon {
|
|
94
175
|
display: block;
|
|
95
176
|
}
|
|
96
177
|
.KCheckbox.modern-checkbox input:disabled + .checkbox-box {
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
|
-
model
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
model?: any;
|
|
3
|
+
modelValue?: any;
|
|
4
|
+
checkboxValue?: any;
|
|
5
|
+
isDisabled?: boolean;
|
|
5
6
|
label?: string;
|
|
6
7
|
validation?: 'success' | 'warning' | 'error' | null;
|
|
7
8
|
validationText?: string;
|
|
9
|
+
idKey?: string;
|
|
10
|
+
indeterminate?: boolean;
|
|
8
11
|
};
|
|
9
12
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
10
13
|
"update:model": (value: any) => any;
|
|
14
|
+
"update:modelValue": (value: any) => any;
|
|
15
|
+
"update:indeterminate": (value: boolean) => any;
|
|
11
16
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
12
17
|
"onUpdate:model"?: ((value: any) => any) | undefined;
|
|
18
|
+
"onUpdate:modelValue"?: ((value: any) => any) | undefined;
|
|
19
|
+
"onUpdate:indeterminate"?: ((value: boolean) => any) | undefined;
|
|
13
20
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
21
|
declare const _default: typeof __VLS_export;
|
|
15
22
|
export default _default;
|
|
@@ -2,27 +2,50 @@ import { ADataProvider } from '@katlux/providers';
|
|
|
2
2
|
import type { IKDatatableAction } from '@katlux/providers';
|
|
3
3
|
type __VLS_Props = {
|
|
4
4
|
dataProvider: ADataProvider;
|
|
5
|
-
visibleFields
|
|
6
|
-
rowActions
|
|
7
|
-
bulkActions
|
|
5
|
+
visibleFields?: Array<string> | null;
|
|
6
|
+
rowActions?: Array<IKDatatableAction>;
|
|
7
|
+
bulkActions?: Array<IKDatatableAction>;
|
|
8
|
+
selectedRows?: any[];
|
|
9
|
+
selectAll?: boolean;
|
|
10
|
+
currentPage?: number;
|
|
11
|
+
pageSize?: number;
|
|
8
12
|
cellSlots?: Record<string, any>;
|
|
9
13
|
headerSlots?: Record<string, any>;
|
|
10
14
|
columnHeaders?: Record<string, string>;
|
|
11
15
|
columnWidths?: Record<string, string>;
|
|
12
16
|
emptyStateText?: string;
|
|
13
17
|
emptyFilterStateText?: string;
|
|
18
|
+
virtualScroll?: boolean;
|
|
19
|
+
itemHeight?: number;
|
|
20
|
+
viewportHeight?: number;
|
|
21
|
+
buffer?: number;
|
|
14
22
|
};
|
|
15
|
-
|
|
16
|
-
'selectedRows'?: any[];
|
|
17
|
-
'selectAll'?: boolean;
|
|
18
|
-
};
|
|
19
|
-
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
20
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
23
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
21
24
|
"update:selectedRows": (value: any[]) => any;
|
|
22
25
|
"update:selectAll": (value: boolean) => any;
|
|
23
|
-
|
|
26
|
+
"update:currentPage": (value: number) => any;
|
|
27
|
+
"update:pageSize": (value: number) => any;
|
|
28
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
24
29
|
"onUpdate:selectedRows"?: ((value: any[]) => any) | undefined;
|
|
25
30
|
"onUpdate:selectAll"?: ((value: boolean) => any) | undefined;
|
|
26
|
-
|
|
31
|
+
"onUpdate:currentPage"?: ((value: number) => any) | undefined;
|
|
32
|
+
"onUpdate:pageSize"?: ((value: number) => any) | undefined;
|
|
33
|
+
}>, {
|
|
34
|
+
selectedRows: any[];
|
|
35
|
+
selectAll: boolean;
|
|
36
|
+
buffer: number;
|
|
37
|
+
bulkActions: Array<IKDatatableAction>;
|
|
38
|
+
visibleFields: Array<string> | null;
|
|
39
|
+
rowActions: Array<IKDatatableAction>;
|
|
40
|
+
cellSlots: Record<string, any>;
|
|
41
|
+
headerSlots: Record<string, any>;
|
|
42
|
+
columnHeaders: Record<string, string>;
|
|
43
|
+
columnWidths: Record<string, string>;
|
|
44
|
+
emptyStateText: string;
|
|
45
|
+
emptyFilterStateText: string;
|
|
46
|
+
virtualScroll: boolean;
|
|
47
|
+
itemHeight: number;
|
|
48
|
+
viewportHeight: number;
|
|
49
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
27
50
|
declare const _default: typeof __VLS_export;
|
|
28
51
|
export default _default;
|