@katlux/toolkit 0.1.0-beta.0 → 0.1.0-beta.1
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/module.d.cts +2 -0
- package/dist/module.d.mts +2 -0
- package/dist/module.json +9 -0
- package/dist/module.mjs +18 -0
- package/dist/types.d.mts +13 -0
- package/package.json +5 -2
- package/ARCHITECTURE.md +0 -70
- package/PRESET_NAMING.md +0 -63
- package/PRESET_SYSTEM.md +0 -204
- package/build.config.ts +0 -3
- package/nuxt.config.ts +0 -9
- package/src/module.ts +0 -36
- package/src/runtime/app.config.d.ts +0 -9
- package/src/runtime/components/KAccordion/KAccordion.global.vue +0 -18
- package/src/runtime/components/KAccordion/KAccordion.logic.ts +0 -49
- package/src/runtime/components/KAccordion/KAccordionItem.global.vue +0 -24
- package/src/runtime/components/KAccordion/KAccordionItem.logic.ts +0 -72
- package/src/runtime/components/KAlert/KAlert.global.vue +0 -10
- package/src/runtime/components/KAlert/KAlert.logic.ts +0 -3
- package/src/runtime/components/KBulkActions/KBulkActions.global.vue +0 -37
- package/src/runtime/components/KBulkActions/KBulkActions.logic.ts +0 -36
- package/src/runtime/components/KButton/KButton.global.vue +0 -37
- package/src/runtime/components/KButton/KButton.logic.ts +0 -75
- package/src/runtime/components/KCalendar/KCalendar.global.vue +0 -43
- package/src/runtime/components/KCalendar/KCalendar.logic.ts +0 -197
- package/src/runtime/components/KCalendar/KCalendarMonth.global.vue +0 -37
- package/src/runtime/components/KCalendar/KCalendarMonth.logic.ts +0 -175
- package/src/runtime/components/KCalendar/KCalendarWeek.global.vue +0 -10
- package/src/runtime/components/KCalendar/KCalendarWeek.logic.ts +0 -3
- package/src/runtime/components/KCalendar/recurringUtils.ts +0 -270
- package/src/runtime/components/KCalendar/types.ts +0 -54
- package/src/runtime/components/KCheckbox/KCheckbox.global.vue +0 -28
- package/src/runtime/components/KCheckbox/KCheckbox.logic.ts +0 -36
- package/src/runtime/components/KCombobox/KCombobox.global.vue +0 -51
- package/src/runtime/components/KCombobox/KCombobox.logic.ts +0 -194
- package/src/runtime/components/KContextMenu/KContextMenu.global.vue +0 -10
- package/src/runtime/components/KContextMenu/KContextMenu.logic.ts +0 -3
- package/src/runtime/components/KDatatable/KDataIterator.global.vue +0 -65
- package/src/runtime/components/KDatatable/KDataIterator.logic.ts +0 -59
- package/src/runtime/components/KDatatable/KDatatable.global.vue +0 -60
- package/src/runtime/components/KDatatable/KDatatable.logic.ts +0 -29
- package/src/runtime/components/KDatePicker/KDatePicker.global.vue +0 -52
- package/src/runtime/components/KDatePicker/KDatePicker.logic.ts +0 -87
- package/src/runtime/components/KDateTimePicker/KDateTimePicker.global.vue +0 -53
- package/src/runtime/components/KDateTimePicker/KDateTimePicker.logic.ts +0 -103
- package/src/runtime/components/KDropdown/KDropdown.global.vue +0 -25
- package/src/runtime/components/KDropdown/KDropdown.logic.ts +0 -46
- package/src/runtime/components/KGantt/KGantt.global.vue +0 -82
- package/src/runtime/components/KGantt/KGantt.logic.ts +0 -439
- package/src/runtime/components/KGrid/KGrid.global.vue +0 -22
- package/src/runtime/components/KGrid/KGrid.logic.ts +0 -67
- package/src/runtime/components/KHourPicker/KHourPicker.global.vue +0 -47
- package/src/runtime/components/KHourPicker/KHourPicker.logic.ts +0 -74
- package/src/runtime/components/KHourSelect/KHourSelect.global.vue +0 -41
- package/src/runtime/components/KHourSelect/KHourSelect.logic.ts +0 -92
- package/src/runtime/components/KIcon/KIcon.global.vue +0 -23
- package/src/runtime/components/KIcon/KIcon.logic.ts +0 -62
- package/src/runtime/components/KLoader/KLoader.global.vue +0 -27
- package/src/runtime/components/KLoader/KLoader.logic.ts +0 -34
- package/src/runtime/components/KMaskTextbox/KMaskTextbox.global.vue +0 -32
- package/src/runtime/components/KMaskTextbox/KMaskTextbox.logic.ts +0 -290
- package/src/runtime/components/KModal/KModal.global.vue +0 -28
- package/src/runtime/components/KModal/KModal.logic.ts +0 -20
- package/src/runtime/components/KPagination/KPagination.global.vue +0 -50
- package/src/runtime/components/KPagination/KPagination.logic.ts +0 -99
- package/src/runtime/components/KPanel/KPanel.global.vue +0 -22
- package/src/runtime/components/KPanel/KPanel.logic.ts +0 -24
- package/src/runtime/components/KRadiobox/KRadiobox.global.vue +0 -29
- package/src/runtime/components/KRadiobox/KRadiobox.logic.ts +0 -27
- package/src/runtime/components/KRangeSlider/KRangeSlider.global.vue +0 -43
- package/src/runtime/components/KRangeSlider/KRangeSlider.logic.ts +0 -94
- package/src/runtime/components/KSearchTree/KSearchTree.global.vue +0 -10
- package/src/runtime/components/KSearchTree/KSearchTree.logic.ts +0 -3
- package/src/runtime/components/KSearchTreeDropdown/KSearchTreeDropdown.global.vue +0 -10
- package/src/runtime/components/KSearchTreeDropdown/KSearchTreeDropdown.logic.ts +0 -3
- package/src/runtime/components/KSlider/KSlider.global.vue +0 -38
- package/src/runtime/components/KSlider/KSlider.logic.ts +0 -69
- package/src/runtime/components/KTabs/KTabItem.global.vue +0 -24
- package/src/runtime/components/KTabs/KTabItem.logic.ts +0 -48
- package/src/runtime/components/KTabs/KTabs.global.vue +0 -24
- package/src/runtime/components/KTabs/KTabs.logic.ts +0 -60
- package/src/runtime/components/KTextarea/KTextarea.global.vue +0 -26
- package/src/runtime/components/KTextarea/KTextarea.logic.ts +0 -43
- package/src/runtime/components/KTextbox/KTextbox.global.vue +0 -27
- package/src/runtime/components/KTextbox/KTextbox.logic.ts +0 -53
- package/src/runtime/components/KThree/KThree.global.vue +0 -13
- package/src/runtime/components/KTooltip/KTooltip.global.vue +0 -10
- package/src/runtime/components/KTooltip/KTooltip.logic.ts +0 -3
- package/src/runtime/components/KTree/KTree.global.vue +0 -41
- package/src/runtime/components/KTree/KTree.logic.ts +0 -92
- package/src/runtime/components/KTreePicker/KTreePicker.global.vue +0 -80
- package/src/runtime/components/KTreePicker/KTreePicker.logic.ts +0 -85
- package/src/runtime/components/KTreeView/KTreeView.global.vue +0 -81
- package/src/runtime/components/KTreeView/KTreeView.logic.ts +0 -146
- package/src/runtime/composables/useDebounce.ts +0 -33
- package/src/runtime/composables/useFilterLogic.ts +0 -245
- package/src/runtime/composables/usePresetComponent.ts +0 -69
- package/src/runtime/composables/useRemainingTime.ts +0 -28
- package/src/runtime/composables/useSortLogic.ts +0 -82
- package/src/runtime/composables/useTemplate.ts +0 -135
- package/src/runtime/directives/clickOutside.ts +0 -75
- package/src/runtime/directives/index.ts +0 -1
- package/src/runtime/plugins/PresetPlugin.ts +0 -59
- package/src/runtime/plugins/registerDirectives.ts +0 -6
- package/src/runtime/presets/default/assets/scss/css-variables.scss +0 -216
- package/src/runtime/presets/default/assets/scss/docs.scss +0 -52
- package/src/runtime/presets/default/assets/scss/index.scss +0 -4
- package/src/runtime/presets/default/assets/scss/mixins.scss +0 -94
- package/src/runtime/presets/default/assets/scss/reset.scss +0 -16
- package/src/runtime/presets/default/assets/svg/calendar.svg +0 -9
- package/src/runtime/presets/default/assets/svg/check.svg +0 -3
- package/src/runtime/presets/default/assets/svg/chevron.svg +0 -3
- package/src/runtime/presets/default/assets/svg/close.svg +0 -4
- package/src/runtime/presets/default/assets/svg/file.svg +0 -4
- package/src/runtime/presets/default/assets/svg/folder.svg +0 -3
- package/src/runtime/presets/default/assets/svg/search.svg +0 -4
- package/src/runtime/presets/default/assets/svg/user.svg +0 -4
- package/src/runtime/presets/default/components/KAccordion/KAccordion.vue +0 -12
- package/src/runtime/presets/default/components/KAccordion/KAccordionItem.vue +0 -53
- package/src/runtime/presets/default/components/KAlert/KAlert.vue +0 -5
- package/src/runtime/presets/default/components/KBulkActions/KBulkActions.vue +0 -45
- package/src/runtime/presets/default/components/KButton/KButton.vue +0 -163
- package/src/runtime/presets/default/components/KCalendar/KCalendar.vue +0 -84
- package/src/runtime/presets/default/components/KCalendar/KCalendarMonth.vue +0 -217
- package/src/runtime/presets/default/components/KCalendar/KCalendarWeek.vue +0 -5
- package/src/runtime/presets/default/components/KCheckbox/KCheckbox.vue +0 -61
- package/src/runtime/presets/default/components/KCombobox/KCombobox.vue +0 -106
- package/src/runtime/presets/default/components/KCombobox/KComboboxList.vue +0 -94
- package/src/runtime/presets/default/components/KContextMenu/KContextMenu.vue +0 -5
- package/src/runtime/presets/default/components/KDataIterator/KDataIterator.vue +0 -66
- package/src/runtime/presets/default/components/KDatatable/KDatatable.vue +0 -155
- package/src/runtime/presets/default/components/KDatePicker/KDatePicker.vue +0 -49
- package/src/runtime/presets/default/components/KDateTimePicker/KDateTimePicker.vue +0 -84
- package/src/runtime/presets/default/components/KDropdown/KDropdown.vue +0 -38
- package/src/runtime/presets/default/components/KGantt/KGantt.vue +0 -400
- package/src/runtime/presets/default/components/KGantt/KGanttRuler.vue +0 -56
- package/src/runtime/presets/default/components/KGantt/KGanttTimeline.vue +0 -218
- package/src/runtime/presets/default/components/KGrid/KGrid.vue +0 -72
- package/src/runtime/presets/default/components/KHourPicker/KHourPicker.vue +0 -55
- package/src/runtime/presets/default/components/KHourSelect/KHourSelect.vue +0 -49
- package/src/runtime/presets/default/components/KIcon/KIcon.vue +0 -30
- package/src/runtime/presets/default/components/KLoader/KLoader.vue +0 -66
- package/src/runtime/presets/default/components/KMaskTextbox/KMaskTextbox.vue +0 -125
- package/src/runtime/presets/default/components/KModal/KModal.vue +0 -45
- package/src/runtime/presets/default/components/KPagination/KPagination.vue +0 -72
- package/src/runtime/presets/default/components/KPanel/KPanel.vue +0 -55
- package/src/runtime/presets/default/components/KRadiobox/KRadiobox.vue +0 -44
- package/src/runtime/presets/default/components/KRangeSlider/KRangeSlider.vue +0 -189
- package/src/runtime/presets/default/components/KSearchTree/KSearchTree.vue +0 -5
- package/src/runtime/presets/default/components/KSearchTreeDropdown/KSearchTreeDropdown.vue +0 -5
- package/src/runtime/presets/default/components/KSlider/KSlider.vue +0 -144
- package/src/runtime/presets/default/components/KTabs/KTabItem.vue +0 -49
- package/src/runtime/presets/default/components/KTabs/KTabs.vue +0 -19
- package/src/runtime/presets/default/components/KTextarea/KTextarea.vue +0 -32
- package/src/runtime/presets/default/components/KTextbox/KTextbox.vue +0 -53
- package/src/runtime/presets/default/components/KTooltip/KTooltip.vue +0 -5
- package/src/runtime/presets/default/components/KTree/KTree.vue +0 -148
- package/src/runtime/presets/default/components/KTreePicker/KTreePicker.vue +0 -100
- package/src/runtime/presets/default/components/KTreeView/KTreeCell.vue +0 -53
- package/src/runtime/presets/default/components/KTreeView/KTreeView.vue +0 -62
- package/src/runtime/utils/PresetResolver.ts +0 -158
- package/tsconfig.json +0 -20
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
<template lang="pug">
|
|
2
|
-
KCombobox(
|
|
3
|
-
:disabled="disabled"
|
|
4
|
-
:isOptionsOpen="isOptionsOpen"
|
|
5
|
-
:labelField="labelField"
|
|
6
|
-
:placeholder="placeholder"
|
|
7
|
-
:searchbox="searchbox"
|
|
8
|
-
:searchtext="searchtext"
|
|
9
|
-
:filteredOptions="filteredOptions"
|
|
10
|
-
:getSelectedContent="getSelectedContent"
|
|
11
|
-
:toggleDropdown="toggleDropdown"
|
|
12
|
-
:closeDropdown="closeDropdown"
|
|
13
|
-
:selectItem="selectItem"
|
|
14
|
-
:isSelected="isSelected"
|
|
15
|
-
:loading="loading"
|
|
16
|
-
)
|
|
17
|
-
template(#default)
|
|
18
|
-
.KTreePicker__tree-container
|
|
19
|
-
.KTreePicker__search(v-if="searchbox" style="margin-bottom: 10px")
|
|
20
|
-
KTextbox(
|
|
21
|
-
v-model="searchtextModel"
|
|
22
|
-
placeholder="Search..."
|
|
23
|
-
showClear
|
|
24
|
-
)
|
|
25
|
-
KTree(
|
|
26
|
-
:dataProvider="dataProvider"
|
|
27
|
-
:idKey="idKey"
|
|
28
|
-
:parentKey="parentKey"
|
|
29
|
-
:labelField="labelField"
|
|
30
|
-
:iconField="iconField"
|
|
31
|
-
:loading="loading"
|
|
32
|
-
:multiSelect="multiSelect"
|
|
33
|
-
:isNodeSelected="isSelected"
|
|
34
|
-
:searchtext="searchtext"
|
|
35
|
-
:selectable="true"
|
|
36
|
-
@select="onTreeSelect"
|
|
37
|
-
)
|
|
38
|
-
</template>
|
|
39
|
-
|
|
40
|
-
<script lang="ts" setup>
|
|
41
|
-
import { computed } from 'vue'
|
|
42
|
-
// Props passed from global component (which handles the logic)
|
|
43
|
-
const props = defineProps<{
|
|
44
|
-
// Tree specific
|
|
45
|
-
dataProvider: any
|
|
46
|
-
idKey?: string
|
|
47
|
-
parentKey?: string
|
|
48
|
-
iconField?: string
|
|
49
|
-
|
|
50
|
-
// Combobox Logic Props
|
|
51
|
-
disabled: boolean
|
|
52
|
-
isOptionsOpen: boolean
|
|
53
|
-
labelField: string
|
|
54
|
-
placeholder: string
|
|
55
|
-
searchbox: boolean
|
|
56
|
-
multiSelect: boolean
|
|
57
|
-
searchtext: string
|
|
58
|
-
filteredOptions: any[]
|
|
59
|
-
getSelectedContent: () => any[]
|
|
60
|
-
toggleDropdown: () => void
|
|
61
|
-
closeDropdown: () => void
|
|
62
|
-
selectItem: (option: any) => void
|
|
63
|
-
isSelected: (option: any) => boolean
|
|
64
|
-
loading: boolean
|
|
65
|
-
closeOnSelect: boolean
|
|
66
|
-
}>()
|
|
67
|
-
|
|
68
|
-
const emit = defineEmits<{
|
|
69
|
-
(e: 'update:searchtext', value: string): void
|
|
70
|
-
}>()
|
|
71
|
-
|
|
72
|
-
const searchtextModel = computed({
|
|
73
|
-
get: () => props.searchtext,
|
|
74
|
-
set: (value) => emit('update:searchtext', value)
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
function onTreeSelect(node: any) {
|
|
78
|
-
// Call the selectItem method from logic
|
|
79
|
-
props.selectItem(node)
|
|
80
|
-
|
|
81
|
-
// If closeOnSelect is true, we should close the dropdown
|
|
82
|
-
// but selectItem might have already toggled it if it was a distinct action?
|
|
83
|
-
// In KCombobox.logic.ts: selectItem sets isOptionsOpen = !closeOnSelect
|
|
84
|
-
// So it should be handled there!
|
|
85
|
-
|
|
86
|
-
// However, selectItem expects a ComboboxItem (TDataRow).
|
|
87
|
-
// KTree returns a node object which should be compatible.
|
|
88
|
-
}
|
|
89
|
-
</script>
|
|
90
|
-
|
|
91
|
-
<style lang="scss" scoped>
|
|
92
|
-
.KTreePicker__tree-container {
|
|
93
|
-
padding: 10px;
|
|
94
|
-
max-height: 400px;
|
|
95
|
-
overflow-y: auto;
|
|
96
|
-
min-width: 250px; // Ensure tree has some width
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
</style>
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
<template lang="pug">
|
|
2
|
-
.tree-cell(:style="{ paddingLeft: depth * 24 + 'px' }")
|
|
3
|
-
.tree-toggle(v-if="hasChildren" @click.stop="toggle")
|
|
4
|
-
KIcon(iconname="chevron" :width="12" :height="12" :rotate="isExpanded ? '90' : '0'")
|
|
5
|
-
.tree-spacer(v-else)
|
|
6
|
-
span.tree-content {{ value }}
|
|
7
|
-
</template>
|
|
8
|
-
|
|
9
|
-
<script lang="ts" setup>
|
|
10
|
-
defineProps<{
|
|
11
|
-
value: any
|
|
12
|
-
depth: number
|
|
13
|
-
hasChildren: boolean
|
|
14
|
-
isExpanded: boolean
|
|
15
|
-
toggle: () => void
|
|
16
|
-
}>()
|
|
17
|
-
</script>
|
|
18
|
-
|
|
19
|
-
<style lang="scss" scoped>
|
|
20
|
-
.tree-cell {
|
|
21
|
-
display: flex;
|
|
22
|
-
align-items: center;
|
|
23
|
-
gap: 4px;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.tree-toggle {
|
|
27
|
-
cursor: pointer;
|
|
28
|
-
display: inline-flex;
|
|
29
|
-
align-items: center;
|
|
30
|
-
justify-content: center;
|
|
31
|
-
width: 20px;
|
|
32
|
-
height: 20px;
|
|
33
|
-
border-radius: 2px;
|
|
34
|
-
flex-shrink: 0;
|
|
35
|
-
|
|
36
|
-
&:hover {
|
|
37
|
-
background-color: var(--hover-light, #e0e0e0);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.tree-spacer {
|
|
42
|
-
width: 20px;
|
|
43
|
-
flex-shrink: 0;
|
|
44
|
-
display: inline-block;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.tree-content {
|
|
48
|
-
flex: 1;
|
|
49
|
-
overflow: hidden;
|
|
50
|
-
text-overflow: ellipsis;
|
|
51
|
-
white-space: nowrap;
|
|
52
|
-
}
|
|
53
|
-
</style>
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
<template lang="pug">
|
|
2
|
-
.KTreeView
|
|
3
|
-
KDatatable(
|
|
4
|
-
:dataProvider="dataProvider"
|
|
5
|
-
:visibleFields="visibleFields"
|
|
6
|
-
:bulkActions="bulkActions"
|
|
7
|
-
:rowActions="rowActions"
|
|
8
|
-
:cellSlots="cellSlots"
|
|
9
|
-
:headerSlots="headerSlots"
|
|
10
|
-
:columnHeaders="columnHeaders"
|
|
11
|
-
:columnWidths="columnWidths"
|
|
12
|
-
)
|
|
13
|
-
//- Tree column cell: rendered natively via dynamic slot name — no h() needed
|
|
14
|
-
template(v-if="treeColumnField" v-slot:[treeCellSlotName]="slotProps")
|
|
15
|
-
KTreeCell(
|
|
16
|
-
:value="slotProps.value"
|
|
17
|
-
:depth="slotProps.row.__treeNode?.depth ?? 0"
|
|
18
|
-
:hasChildren="slotProps.row.__treeNode?.hasChildren ?? false"
|
|
19
|
-
:isExpanded="slotProps.row.__treeNode?.isExpanded ?? false"
|
|
20
|
-
:toggle="() => toggleNode(slotProps.row.__treeNode?.id)"
|
|
21
|
-
)
|
|
22
|
-
</template>
|
|
23
|
-
|
|
24
|
-
<script lang="ts" setup>
|
|
25
|
-
import { computed } from 'vue'
|
|
26
|
-
import KTreeCell from './KTreeCell.vue'
|
|
27
|
-
import type { ITreeViewColumn, IRowAction } from '../../../../components/KTreeView/KTreeView.logic'
|
|
28
|
-
import type { IKDatatableAction } from '@katlux/providers'
|
|
29
|
-
|
|
30
|
-
const props = defineProps<{
|
|
31
|
-
dataProvider: any
|
|
32
|
-
columns: ITreeViewColumn[]
|
|
33
|
-
treeColumnIndex?: number
|
|
34
|
-
bulkActions?: IKDatatableAction[]
|
|
35
|
-
rowActions?: IRowAction[]
|
|
36
|
-
showCheckboxes: boolean
|
|
37
|
-
selectedRows: any[]
|
|
38
|
-
selectAll: boolean
|
|
39
|
-
expandedNodes: Set<string | number>
|
|
40
|
-
toggleNode: (id: string | number) => void
|
|
41
|
-
toggleRowSelection: (row: any) => void
|
|
42
|
-
toggleSelectAll: () => void
|
|
43
|
-
isRowSelected: (row: any) => boolean
|
|
44
|
-
// Merged cell slots from global (external slots like gantt timeline)
|
|
45
|
-
cellSlots?: Record<string, any>
|
|
46
|
-
headerSlots?: Record<string, any>
|
|
47
|
-
columnHeaders?: Record<string, string>
|
|
48
|
-
columnWidths?: Record<string, string>
|
|
49
|
-
}>()
|
|
50
|
-
|
|
51
|
-
const visibleFields = computed(() => (props.columns as ITreeViewColumn[]).map(col => col.field))
|
|
52
|
-
|
|
53
|
-
// Compute the tree column field and the dynamic slot name
|
|
54
|
-
const treeColumnField = computed(() => (props.columns as ITreeViewColumn[])[props.treeColumnIndex ?? 0]?.field)
|
|
55
|
-
const treeCellSlotName = computed(() => treeColumnField.value ? `cell-${treeColumnField.value}` : null)
|
|
56
|
-
</script>
|
|
57
|
-
|
|
58
|
-
<style lang="scss" scoped>
|
|
59
|
-
.KTreeView {
|
|
60
|
-
width: 100%;
|
|
61
|
-
}
|
|
62
|
-
</style>
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { useRuntimeConfig, useAppConfig, useCookie, useNuxtApp } from '#app'
|
|
2
|
-
import type { Component } from 'vue'
|
|
3
|
-
|
|
4
|
-
export interface PresetMetadata {
|
|
5
|
-
componentName: string
|
|
6
|
-
presetName: string
|
|
7
|
-
hasCustomPreset: boolean
|
|
8
|
-
hasCustomStyles: boolean
|
|
9
|
-
presetPath?: string
|
|
10
|
-
stylesPath?: string
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface PresetCache {
|
|
14
|
-
[key: string]: PresetMetadata
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* PresetResolver - Manages preset resolution and discovery for Katlux components
|
|
19
|
-
*
|
|
20
|
-
* This utility class handles:
|
|
21
|
-
* - Discovering custom presets in the user's project
|
|
22
|
-
* - Resolving preset paths based on component name and active preset
|
|
23
|
-
* - Falling back to default presets when custom ones don't exist
|
|
24
|
-
* - Caching preset resolution for performance
|
|
25
|
-
*/
|
|
26
|
-
export class PresetResolver {
|
|
27
|
-
private cache: PresetCache = {}
|
|
28
|
-
private activePreset: string = 'default'
|
|
29
|
-
private presetsDir: string = '~/presets'
|
|
30
|
-
|
|
31
|
-
constructor() {
|
|
32
|
-
this.initialize()
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Initialize the preset resolver with configuration
|
|
37
|
-
*/
|
|
38
|
-
private initialize(): void {
|
|
39
|
-
try {
|
|
40
|
-
const appConfig = useAppConfig()
|
|
41
|
-
const runtimeConfig = useRuntimeConfig()
|
|
42
|
-
|
|
43
|
-
// Check cookie first for user preference (SSR compatible)
|
|
44
|
-
const presetCookie = useCookie('katlux-active-preset')
|
|
45
|
-
if (presetCookie.value) {
|
|
46
|
-
this.activePreset = presetCookie.value as string
|
|
47
|
-
}
|
|
48
|
-
// Fallback to app config if no cookie
|
|
49
|
-
else if (appConfig.katluxToolkit?.activePreset) {
|
|
50
|
-
this.activePreset = appConfig.katluxToolkit.activePreset as string
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Get presets directory from runtime config
|
|
54
|
-
const publicConfig = runtimeConfig.public as any
|
|
55
|
-
if (publicConfig?.katluxToolkit?.presetsDir) {
|
|
56
|
-
this.presetsDir = publicConfig.katluxToolkit.presetsDir as string
|
|
57
|
-
}
|
|
58
|
-
} catch (error) {
|
|
59
|
-
// If config is not available (e.g., during build), use defaults
|
|
60
|
-
console.warn('PresetResolver: Could not load configuration, using defaults', error)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Resolve preset metadata for a given component
|
|
66
|
-
* @param componentName - Name of the component (e.g., 'KButton')
|
|
67
|
-
* @returns Preset metadata including paths and availability
|
|
68
|
-
*/
|
|
69
|
-
public resolvePreset(componentName: string): PresetMetadata {
|
|
70
|
-
const cacheKey = `${this.activePreset}:${componentName}`
|
|
71
|
-
|
|
72
|
-
// Return cached result if available
|
|
73
|
-
if (this.cache[cacheKey]) {
|
|
74
|
-
return this.cache[cacheKey]
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Build metadata
|
|
78
|
-
const metadata: PresetMetadata = {
|
|
79
|
-
componentName,
|
|
80
|
-
presetName: this.activePreset,
|
|
81
|
-
hasCustomPreset: false,
|
|
82
|
-
hasCustomStyles: false,
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Check for custom preset files
|
|
86
|
-
if (this.activePreset !== 'default') {
|
|
87
|
-
const customPresetPath = `${this.presetsDir}/${this.activePreset}/${componentName}.pug`
|
|
88
|
-
const customStylesPath = `${this.presetsDir}/${this.activePreset}/${componentName}.scss`
|
|
89
|
-
|
|
90
|
-
// Note: In a real implementation, we would check if these files exist
|
|
91
|
-
// For now, we'll assume they might exist and let the component handle loading
|
|
92
|
-
metadata.presetPath = customPresetPath
|
|
93
|
-
metadata.stylesPath = customStylesPath
|
|
94
|
-
metadata.hasCustomPreset = true
|
|
95
|
-
metadata.hasCustomStyles = true
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Cache the result
|
|
99
|
-
this.cache[cacheKey] = metadata
|
|
100
|
-
|
|
101
|
-
return metadata
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Get the active preset name
|
|
106
|
-
*/
|
|
107
|
-
public getActivePreset(): string {
|
|
108
|
-
return this.activePreset
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Set the active preset (useful for runtime switching)
|
|
113
|
-
* @param presetName - Name of the preset to activate
|
|
114
|
-
*/
|
|
115
|
-
public setActivePreset(presetName: string): void {
|
|
116
|
-
if (this.activePreset !== presetName) {
|
|
117
|
-
this.activePreset = presetName
|
|
118
|
-
this.clearCache()
|
|
119
|
-
|
|
120
|
-
// Update cookie
|
|
121
|
-
const presetCookie = useCookie('katlux-active-preset')
|
|
122
|
-
presetCookie.value = presetName
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Clear the preset cache (useful when presets change in dev mode)
|
|
128
|
-
*/
|
|
129
|
-
public clearCache(): void {
|
|
130
|
-
this.cache = {}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Get all cached preset metadata
|
|
135
|
-
*/
|
|
136
|
-
public getCachedPresets(): PresetCache {
|
|
137
|
-
return { ...this.cache }
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Check if a custom preset exists for a component
|
|
142
|
-
* @param componentName - Name of the component
|
|
143
|
-
* @returns True if custom preset exists
|
|
144
|
-
*/
|
|
145
|
-
public hasCustomPreset(componentName: string): boolean {
|
|
146
|
-
const metadata = this.resolvePreset(componentName)
|
|
147
|
-
return metadata.hasCustomPreset
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Factory function to get the PresetResolver instance
|
|
153
|
-
* This is the recommended way to access the resolver in composables
|
|
154
|
-
*/
|
|
155
|
-
export function usePresetResolver(): PresetResolver {
|
|
156
|
-
const nuxtApp = useNuxtApp()
|
|
157
|
-
return nuxtApp.$presetResolver as PresetResolver
|
|
158
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./.nuxt/tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"target": "ESNext",
|
|
5
|
-
"module": "ESNext",
|
|
6
|
-
"allowArbitraryExtensions": true,
|
|
7
|
-
"moduleResolution": "bundler",
|
|
8
|
-
"types": [
|
|
9
|
-
"vite/client",
|
|
10
|
-
"node"
|
|
11
|
-
]
|
|
12
|
-
},
|
|
13
|
-
"include": [
|
|
14
|
-
"src/**/*"
|
|
15
|
-
],
|
|
16
|
-
"exclude": [
|
|
17
|
-
"dist",
|
|
18
|
-
"node_modules"
|
|
19
|
-
]
|
|
20
|
-
}
|