@timus-networks/theme 2.0.0 → 2.0.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/README.md +128 -0
- package/dist/module.cjs +5 -0
- package/dist/module.d.mts +11 -0
- package/dist/module.d.ts +11 -0
- package/dist/module.json +9 -0
- package/dist/module.mjs +159 -0
- package/dist/runtime/components/example.button.vue +237 -0
- package/dist/runtime/components/example.button.vue.d.ts +10 -0
- package/dist/runtime/components/example.checkbox.vue +190 -0
- package/dist/runtime/components/example.checkbox.vue.d.ts +24 -0
- package/dist/runtime/components/example.dialog.vue +82 -0
- package/dist/runtime/components/example.form.vue +494 -0
- package/dist/runtime/components/example.input.vue +286 -0
- package/dist/runtime/components/example.input.vue.d.ts +20 -0
- package/dist/runtime/components/example.popover.vue +161 -0
- package/dist/runtime/components/example.radio.vue +165 -0
- package/dist/runtime/components/example.radio.vue.d.ts +24 -0
- package/dist/runtime/components/example.select.vue +591 -0
- package/dist/runtime/components/example.select.vue.d.ts +69 -0
- package/dist/runtime/components/example.sidebar.vue +104 -0
- package/dist/runtime/components/example.table.vue +126 -0
- package/dist/runtime/components/example.tag.vue +279 -0
- package/dist/runtime/components/html-encode.vue +37 -0
- package/dist/runtime/pages/theme.vue +30 -0
- package/dist/runtime/plugins/element-extend-plugin.d.ts +38 -0
- package/dist/runtime/plugins/element-extend-plugin.js +39 -0
- package/dist/runtime/plugins/element-extend-plugin.mjs +39 -0
- package/dist/runtime/plugins/experimental-size-plugin.d.ts +2 -0
- package/dist/runtime/plugins/experimental-size-plugin.js +13 -0
- package/dist/runtime/plugins/experimental-size-plugin.mjs +13 -0
- package/dist/runtime/plugins/sample-plugin.d.ts +20 -0
- package/dist/runtime/plugins/sample-plugin.js +5 -0
- package/dist/runtime/plugins/sample-plugin.mjs +5 -0
- package/dist/runtime/plugins/theme-provider.d.ts +30 -0
- package/dist/runtime/plugins/theme-provider.js +46 -0
- package/dist/runtime/plugins/theme-provider.mjs +46 -0
- package/dist/runtime/public/scss/element-plus/affix.css +277 -0
- package/dist/runtime/public/scss/element-plus/alert.css +420 -0
- package/dist/runtime/public/scss/element-plus/anchor-link.css +304 -0
- package/dist/runtime/public/scss/element-plus/anchor.css +348 -0
- package/dist/runtime/public/scss/element-plus/aside.css +280 -0
- package/dist/runtime/public/scss/element-plus/autocomplete.css +383 -0
- package/dist/runtime/public/scss/element-plus/avatar.css +320 -0
- package/dist/runtime/public/scss/element-plus/backtop.css +298 -0
- package/dist/runtime/public/scss/element-plus/badge.css +348 -0
- package/dist/runtime/public/scss/element-plus/base.css +522 -0
- package/dist/runtime/public/scss/element-plus/breadcrumb-item.css +0 -0
- package/dist/runtime/public/scss/element-plus/breadcrumb.css +330 -0
- package/dist/runtime/public/scss/element-plus/button-group.css +413 -0
- package/dist/runtime/public/scss/element-plus/button.css +1043 -0
- package/dist/runtime/public/scss/element-plus/calendar.css +342 -0
- package/dist/runtime/public/scss/element-plus/card.css +312 -0
- package/dist/runtime/public/scss/element-plus/carousel-item.css +322 -0
- package/dist/runtime/public/scss/element-plus/carousel.css +447 -0
- package/dist/runtime/public/scss/element-plus/cascader-panel.css +400 -0
- package/dist/runtime/public/scss/element-plus/cascader.css +532 -0
- package/dist/runtime/public/scss/element-plus/check-tag.css +358 -0
- package/dist/runtime/public/scss/element-plus/checkbox-button.css +418 -0
- package/dist/runtime/public/scss/element-plus/checkbox-group.css +279 -0
- package/dist/runtime/public/scss/element-plus/checkbox.css +560 -0
- package/dist/runtime/public/scss/element-plus/col.css +3242 -0
- package/dist/runtime/public/scss/element-plus/collapse-item.css +0 -0
- package/dist/runtime/public/scss/element-plus/collapse-transition.css +0 -0
- package/dist/runtime/public/scss/element-plus/collapse.css +462 -0
- package/dist/runtime/public/scss/element-plus/color/index.css +0 -0
- package/dist/runtime/public/scss/element-plus/color-picker.css +622 -0
- package/dist/runtime/public/scss/element-plus/common/popup.css +310 -0
- package/dist/runtime/public/scss/element-plus/common/transition.css +392 -0
- package/dist/runtime/public/scss/element-plus/common/var.css +274 -0
- package/dist/runtime/public/scss/element-plus/config-provider.css +0 -0
- package/dist/runtime/public/scss/element-plus/container.css +285 -0
- package/dist/runtime/public/scss/element-plus/dark/css-vars.css +325 -0
- package/dist/runtime/public/scss/element-plus/dark/var.css +274 -0
- package/dist/runtime/public/scss/element-plus/date-picker/date-picker.css +496 -0
- package/dist/runtime/public/scss/element-plus/date-picker/date-range-picker.css +378 -0
- package/dist/runtime/public/scss/element-plus/date-picker/date-table.css +398 -0
- package/dist/runtime/public/scss/element-plus/date-picker/month-table.css +360 -0
- package/dist/runtime/public/scss/element-plus/date-picker/picker-panel.css +391 -0
- package/dist/runtime/public/scss/element-plus/date-picker/picker.css +634 -0
- package/dist/runtime/public/scss/element-plus/date-picker/time-picker.css +344 -0
- package/dist/runtime/public/scss/element-plus/date-picker/time-range-picker.css +303 -0
- package/dist/runtime/public/scss/element-plus/date-picker/time-spinner.css +362 -0
- package/dist/runtime/public/scss/element-plus/date-picker/year-table.css +356 -0
- package/dist/runtime/public/scss/element-plus/date-picker.css +1447 -0
- package/dist/runtime/public/scss/element-plus/descriptions-item.css +307 -0
- package/dist/runtime/public/scss/element-plus/descriptions.css +373 -0
- package/dist/runtime/public/scss/element-plus/dialog.css +484 -0
- package/dist/runtime/public/scss/element-plus/display.css +329 -0
- package/dist/runtime/public/scss/element-plus/divider.css +317 -0
- package/dist/runtime/public/scss/element-plus/drawer.css +391 -0
- package/dist/runtime/public/scss/element-plus/dropdown-item.css +0 -0
- package/dist/runtime/public/scss/element-plus/dropdown-menu.css +0 -0
- package/dist/runtime/public/scss/element-plus/dropdown.css +464 -0
- package/dist/runtime/public/scss/element-plus/empty.css +327 -0
- package/dist/runtime/public/scss/element-plus/footer.css +282 -0
- package/dist/runtime/public/scss/element-plus/form-item.css +0 -0
- package/dist/runtime/public/scss/element-plus/form.css +499 -0
- package/dist/runtime/public/scss/element-plus/header.css +282 -0
- package/dist/runtime/public/scss/element-plus/icon.css +315 -0
- package/dist/runtime/public/scss/element-plus/image-viewer.css +411 -0
- package/dist/runtime/public/scss/element-plus/image.css +315 -0
- package/dist/runtime/public/scss/element-plus/index.css +16702 -0
- package/dist/runtime/public/scss/element-plus/infinite-scroll.css +0 -0
- package/dist/runtime/public/scss/element-plus/input-number.css +450 -0
- package/dist/runtime/public/scss/element-plus/input.css +742 -0
- package/dist/runtime/public/scss/element-plus/link.css +422 -0
- package/dist/runtime/public/scss/element-plus/loading.css +363 -0
- package/dist/runtime/public/scss/element-plus/main.css +283 -0
- package/dist/runtime/public/scss/element-plus/mention.css +385 -0
- package/dist/runtime/public/scss/element-plus/menu-item-group.css +0 -0
- package/dist/runtime/public/scss/element-plus/menu-item.css +0 -0
- package/dist/runtime/public/scss/element-plus/menu.css +709 -0
- package/dist/runtime/public/scss/element-plus/message-box.css +501 -0
- package/dist/runtime/public/scss/element-plus/message.css +398 -0
- package/dist/runtime/public/scss/element-plus/mixins/config.css +0 -0
- package/dist/runtime/public/scss/element-plus/mixins/function.css +0 -0
- package/dist/runtime/public/scss/element-plus/mixins/mixins.css +274 -0
- package/dist/runtime/public/scss/element-plus/mixins/utils.css +0 -0
- package/dist/runtime/public/scss/element-plus/notification.css +381 -0
- package/dist/runtime/public/scss/element-plus/option-group.css +303 -0
- package/dist/runtime/public/scss/element-plus/option.css +325 -0
- package/dist/runtime/public/scss/element-plus/overlay.css +289 -0
- package/dist/runtime/public/scss/element-plus/page-header.css +323 -0
- package/dist/runtime/public/scss/element-plus/pagination.css +533 -0
- package/dist/runtime/public/scss/element-plus/popconfirm.css +287 -0
- package/dist/runtime/public/scss/element-plus/popover.css +324 -0
- package/dist/runtime/public/scss/element-plus/popper.css +372 -0
- package/dist/runtime/public/scss/element-plus/progress.css +421 -0
- package/dist/runtime/public/scss/element-plus/radio-button.css +402 -0
- package/dist/runtime/public/scss/element-plus/radio-group.css +280 -0
- package/dist/runtime/public/scss/element-plus/radio.css +533 -0
- package/dist/runtime/public/scss/element-plus/rate.css +356 -0
- package/dist/runtime/public/scss/element-plus/reset.css +371 -0
- package/dist/runtime/public/scss/element-plus/result.css +353 -0
- package/dist/runtime/public/scss/element-plus/row.css +311 -0
- package/dist/runtime/public/scss/element-plus/scrollbar.css +345 -0
- package/dist/runtime/public/scss/element-plus/segmented.css +432 -0
- package/dist/runtime/public/scss/element-plus/select-dropdown-v2.css +323 -0
- package/dist/runtime/public/scss/element-plus/select-dropdown.css +323 -0
- package/dist/runtime/public/scss/element-plus/select-v2.css +740 -0
- package/dist/runtime/public/scss/element-plus/select.css +740 -0
- package/dist/runtime/public/scss/element-plus/skeleton-item.css +344 -0
- package/dist/runtime/public/scss/element-plus/skeleton.css +307 -0
- package/dist/runtime/public/scss/element-plus/slider.css +452 -0
- package/dist/runtime/public/scss/element-plus/space.css +289 -0
- package/dist/runtime/public/scss/element-plus/spinner.css +314 -0
- package/dist/runtime/public/scss/element-plus/statistic.css +308 -0
- package/dist/runtime/public/scss/element-plus/step.css +558 -0
- package/dist/runtime/public/scss/element-plus/steps.css +291 -0
- package/dist/runtime/public/scss/element-plus/sub-menu.css +0 -0
- package/dist/runtime/public/scss/element-plus/switch.css +498 -0
- package/dist/runtime/public/scss/element-plus/tab-pane.css +0 -0
- package/dist/runtime/public/scss/element-plus/table-column.css +354 -0
- package/dist/runtime/public/scss/element-plus/table-v2.css +492 -0
- package/dist/runtime/public/scss/element-plus/table.css +865 -0
- package/dist/runtime/public/scss/element-plus/tabs.css +864 -0
- package/dist/runtime/public/scss/element-plus/tag.css +596 -0
- package/dist/runtime/public/scss/element-plus/text.css +344 -0
- package/dist/runtime/public/scss/element-plus/time-picker.css +942 -0
- package/dist/runtime/public/scss/element-plus/time-select.css +884 -0
- package/dist/runtime/public/scss/element-plus/timeline-item.css +387 -0
- package/dist/runtime/public/scss/element-plus/timeline.css +306 -0
- package/dist/runtime/public/scss/element-plus/tooltip-v2.css +382 -0
- package/dist/runtime/public/scss/element-plus/tooltip.css +0 -0
- package/dist/runtime/public/scss/element-plus/tour.css +433 -0
- package/dist/runtime/public/scss/element-plus/transfer.css +469 -0
- package/dist/runtime/public/scss/element-plus/tree-select.css +297 -0
- package/dist/runtime/public/scss/element-plus/tree.css +510 -0
- package/dist/runtime/public/scss/element-plus/upload.css +834 -0
- package/dist/runtime/public/scss/element-plus/var.css +361 -0
- package/dist/runtime/public/scss/element-plus/virtual-list.css +302 -0
- package/dist/runtime/public/scss/theme.css +1191 -0
- package/dist/runtime/server/tsconfig.json +6 -0
- package/dist/runtime/types.d.ts +40 -0
- package/dist/types.d.mts +7 -0
- package/dist/types.d.ts +7 -0
- package/package.json +29 -12
- package/components/TimusIcons.vue +0 -54
- package/generate-icon.js +0 -22
- package/module.ts +0 -84
- package/pages/icons.vue +0 -46
- package/plugins/sample-plugin.ts +0 -5
- package/public/isax/fonts/iconsax.svg +0 -927
- package/public/isax/fonts/iconsax.ttf +0 -0
- package/public/isax/fonts/iconsax.woff +0 -0
- package/public/isax/icons.json +0 -899
- package/public/isax/selection.json +0 -1
- package/public/isax/style.css +0 -1
- package/public/isax/style.scss +0 -5435
- package/public/isax/variables.scss +0 -900
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex flex-col gap-8 mb-16">
|
|
3
|
+
<h1 class="">Menu</h1>
|
|
4
|
+
<p>Menu that provides navigation for your website.</p>
|
|
5
|
+
|
|
6
|
+
<el-card>
|
|
7
|
+
<template #header>
|
|
8
|
+
<div class="flex flex-col gap-3 items-start">
|
|
9
|
+
<h2>Sidebar</h2>
|
|
10
|
+
<p>
|
|
11
|
+
Vertical <el-text tag="mark">Menu</el-text> with sub-menus. You can use the <el-text tag="mark">el-menu-item-group</el-text> component to create a
|
|
12
|
+
<span class="font-medium">menu group</span>, and the name of the group is determined by the title prop or a named slot.
|
|
13
|
+
</p>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
<div class="flex flex-col gap-4 items-start">
|
|
17
|
+
{{ currentRoute }}
|
|
18
|
+
<el-menu :default-active="currentRoute.path" class="w-[270px]" :router="true" @open="handleOpen" @close="handleClose">
|
|
19
|
+
<el-menu-item index="/" class="isax-grid-3">Dashboard</el-menu-item>
|
|
20
|
+
<el-menu-item index="/theme" class="isax-designtools">Theme</el-menu-item>
|
|
21
|
+
<el-menu-item index="/users" class="isax-profile-circle">User & Teams</el-menu-item>
|
|
22
|
+
<el-menu-item index="/devices" class="isax-monitor-mobbile">Devices</el-menu-item>
|
|
23
|
+
<el-menu-item index="/sites" class="isax-driver-2">Sites</el-menu-item>
|
|
24
|
+
<el-sub-menu index="1">
|
|
25
|
+
<template #title><i class="isax-key-square" /><span>Rules</span></template>
|
|
26
|
+
<el-menu-item index="/rules/firewall">Firewall</el-menu-item>
|
|
27
|
+
<el-menu-item index="/rules/routes">Routes</el-menu-item>
|
|
28
|
+
<el-menu-item index="/rules/forwarding">Forwarding</el-menu-item>
|
|
29
|
+
<el-menu-item index="/rules/acls">Access Control List</el-menu-item>
|
|
30
|
+
</el-sub-menu>
|
|
31
|
+
<el-sub-menu index="2">
|
|
32
|
+
<template #title><i class="isax-shield" /><span>Zero Trust Security</span></template>
|
|
33
|
+
<el-menu-item index="/ztna/dashboard">Dashboard</el-menu-item>
|
|
34
|
+
<el-menu-item index="/ztna/behavior-detection">Behaviors</el-menu-item>
|
|
35
|
+
<el-menu-item index="/ztna/device-posture-check">Device Posture Checks</el-menu-item>
|
|
36
|
+
<el-menu-item index="/ztna/behavior-detection">User Sign-In Policies</el-menu-item>
|
|
37
|
+
<el-menu-item index="/ztna/behavior-detection">Admin Sign-In Policies</el-menu-item>
|
|
38
|
+
</el-sub-menu>
|
|
39
|
+
<el-sub-menu index="3">
|
|
40
|
+
<template #title><i class="isax-folder-open" /><span>Insights</span></template>
|
|
41
|
+
<el-menu-item index="/insights/alerts">Alerts</el-menu-item>
|
|
42
|
+
<el-menu-item index="/ztna/dashboard">Traffic Logs</el-menu-item>
|
|
43
|
+
<el-menu-item index="/ztna/dashboard">Events</el-menu-item>
|
|
44
|
+
<el-menu-item index="/insights/blocked-ips">Blocked IP Addresses</el-menu-item>
|
|
45
|
+
<el-menu-item index="/insights/signed-logs">"Signed Logs"</el-menu-item>
|
|
46
|
+
<el-menu-item index="/insights/reports">Automated Reports</el-menu-item>
|
|
47
|
+
<el-menu-item index="/insights/tracker">Productivity Reports</el-menu-item>
|
|
48
|
+
<el-menu-item index="/insights/dpc-reports">Device Posture Reports</el-menu-item>
|
|
49
|
+
</el-sub-menu>
|
|
50
|
+
|
|
51
|
+
<el-sub-menu index="4">
|
|
52
|
+
<template #title><i class="isax-setting-2" /><span>Settings</span></template>
|
|
53
|
+
<el-menu-item index="/settings/captive-portals">Captive Portal</el-menu-item>
|
|
54
|
+
<el-menu-item index="/settings/integrations">Integrations</el-menu-item>
|
|
55
|
+
<el-menu-item index="/settings/configuration">Configurations</el-menu-item>
|
|
56
|
+
<el-menu-item index="/settings/tags">Tags</el-menu-item>
|
|
57
|
+
<el-menu-item index="/settings/administrators">Administrators</el-menu-item>
|
|
58
|
+
<el-menu-item index="/settings/organization">Organization</el-menu-item>
|
|
59
|
+
<el-menu-item index="/settings/downloads">Downloads</el-menu-item>
|
|
60
|
+
</el-sub-menu>
|
|
61
|
+
</el-menu>
|
|
62
|
+
</div>
|
|
63
|
+
<template #footer>
|
|
64
|
+
<html-encode :tag="snippets.sizes" />
|
|
65
|
+
</template>
|
|
66
|
+
</el-card>
|
|
67
|
+
</div>
|
|
68
|
+
</template>
|
|
69
|
+
|
|
70
|
+
<script lang="ts" setup>
|
|
71
|
+
import { useRoute } from 'nuxt/app';
|
|
72
|
+
import { computed } from 'vue';
|
|
73
|
+
|
|
74
|
+
const route = useRoute();
|
|
75
|
+
const currentRoute = computed(() => ({
|
|
76
|
+
path: route.path,
|
|
77
|
+
fullPath: route.fullPath,
|
|
78
|
+
name: route.name,
|
|
79
|
+
params: route.params,
|
|
80
|
+
query: route.query,
|
|
81
|
+
}));
|
|
82
|
+
const handleOpen = (key: string, keyPath: string[]) => {
|
|
83
|
+
console.log(key, keyPath);
|
|
84
|
+
};
|
|
85
|
+
const handleClose = (key: string, keyPath: string[]) => {
|
|
86
|
+
console.log(key, keyPath);
|
|
87
|
+
};
|
|
88
|
+
const snippets = ref({
|
|
89
|
+
sizes: `
|
|
90
|
+
<el-menu :default-active="currentRoute.path" class="w-[270px]" :router="true" @open="handleOpen" @close="handleClose">
|
|
91
|
+
<el-sub-menu index="4">
|
|
92
|
+
<template #title><i class="isax-setting-2" /><span>Settings</span></template>
|
|
93
|
+
<el-menu-item index="/settings/captive-portals">Captive Portal</el-menu-item>
|
|
94
|
+
<el-menu-item index="/settings/integrations">Integrations</el-menu-item>
|
|
95
|
+
<el-menu-item index="/settings/configuration">Configurations</el-menu-item>
|
|
96
|
+
<el-menu-item index="/settings/tags">Tags</el-menu-item>
|
|
97
|
+
<el-menu-item index="/settings/administrators">Administrators</el-menu-item>
|
|
98
|
+
<el-menu-item index="/settings/organization">Organization</el-menu-item>
|
|
99
|
+
<el-menu-item index="/settings/downloads">Downloads</el-menu-item>
|
|
100
|
+
</el-sub-menu>
|
|
101
|
+
</el-menu>
|
|
102
|
+
`,
|
|
103
|
+
});
|
|
104
|
+
</script>
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex flex-col gap-8 mb-16">
|
|
3
|
+
<h1 class="">Table</h1>
|
|
4
|
+
<p>Display multiple data with similar format. You can sort, filter, compare your data in a table.</p>
|
|
5
|
+
|
|
6
|
+
<el-card>
|
|
7
|
+
<template #header>
|
|
8
|
+
<div class="flex flex-col gap-3 items-start">
|
|
9
|
+
<h2>Basic table</h2>
|
|
10
|
+
<p>
|
|
11
|
+
Basic table is just for data display. After setting attribute <el-text tag="mark">data</el-text> of <el-text tag="mark">el-table</el-text> with an object array, you can
|
|
12
|
+
use prop (corresponding to a key of the object in data array) in <el-text tag="mark">el-table-column</el-text> to insert data to table columns, and set the attribute
|
|
13
|
+
<el-text tag="mark">label</el-text> to define the column name. You can also use the attribute <el-text tag="mark">width</el-text> to define the width of columns.
|
|
14
|
+
</p>
|
|
15
|
+
<h3>Table has these properties:</h3>
|
|
16
|
+
<ul class="list-disc list-inside gap-1 flex flex-col [&_span]:w-28 [&_span]:inline-flex">
|
|
17
|
+
<li><span>Max Height:</span> <html-encode tag="<el-table max-height='250' />" /></li>
|
|
18
|
+
<li><span>Height:</span> <html-encode tag="<el-table height='250' />" /></li>
|
|
19
|
+
<li><span>Sorting:</span> <html-encode tag="<el-table default-sort='{ prop: 'date', order: 'descending' }' />" /></li>
|
|
20
|
+
<li><span>Min Height:</span> <html-encode tag="<el-table-column min-height='120' />" /></li>
|
|
21
|
+
<li><span>Tooltip:</span> <html-encode tag="<el-table-column show-overflow-tooltip />" /></li>
|
|
22
|
+
<li><span>Width:</span> <html-encode tag="<el-table-column width='120px' />" /></li>
|
|
23
|
+
<li><span>Fixed:</span> <html-encode tag="<el-table-column fixed='right' />" /></li>
|
|
24
|
+
</ul>
|
|
25
|
+
</div>
|
|
26
|
+
</template>
|
|
27
|
+
<div class="flex gap-2">
|
|
28
|
+
<el-table :data="tableData" style="width: 100%" flexible height="300">
|
|
29
|
+
<el-table-column type="selection" width="55" />
|
|
30
|
+
<el-table-column label="Date" width="120" show-overflow-tooltip>
|
|
31
|
+
<template #default="scope">{{ scope.row.date }}</template>
|
|
32
|
+
</el-table-column>
|
|
33
|
+
<el-table-column property="name" label="Name" width="120" show-overflow-tooltip />
|
|
34
|
+
<el-table-column property="state" label="State" width="240" show-overflow-tooltip />
|
|
35
|
+
<el-table-column property="city" label="City" show-overflow-tooltip />
|
|
36
|
+
<el-table-column property="zip" label="Zip" show-overflow-tooltip />
|
|
37
|
+
<el-table-column property="address" label="Address" width="140" show-overflow-tooltip />
|
|
38
|
+
</el-table>
|
|
39
|
+
</div>
|
|
40
|
+
<template #footer>
|
|
41
|
+
<code class="flex flex-col gap-3 items-start">
|
|
42
|
+
<html-encode :tag="snippets.basic" />
|
|
43
|
+
</code>
|
|
44
|
+
</template>
|
|
45
|
+
</el-card>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
48
|
+
<script lang="ts" setup>
|
|
49
|
+
import { ElTable } from '@timus-networks/element-plus';
|
|
50
|
+
|
|
51
|
+
interface User {
|
|
52
|
+
date: string;
|
|
53
|
+
name: string;
|
|
54
|
+
state: string;
|
|
55
|
+
city: string;
|
|
56
|
+
zip: string;
|
|
57
|
+
address: string;
|
|
58
|
+
}
|
|
59
|
+
const tableData: User[] = [
|
|
60
|
+
{
|
|
61
|
+
date: '2016-05-03',
|
|
62
|
+
name: 'Tom',
|
|
63
|
+
state: 'California',
|
|
64
|
+
city: 'Los Angeles',
|
|
65
|
+
address: 'No. 189, Grove St, Los Angeles',
|
|
66
|
+
zip: 'CA 90036',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
date: '2016-05-02',
|
|
70
|
+
name: 'Tom',
|
|
71
|
+
state: 'California',
|
|
72
|
+
city: 'Los Angeles',
|
|
73
|
+
address: 'No. 189, Grove St, Los Angeles',
|
|
74
|
+
zip: 'CA 90036',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
date: '2016-05-04',
|
|
78
|
+
name: 'Tom',
|
|
79
|
+
state: 'California',
|
|
80
|
+
city: 'Los Angeles',
|
|
81
|
+
address: 'No. 189, Grove St, Los Angeles',
|
|
82
|
+
zip: 'CA 90036',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
date: '2016-05-01',
|
|
86
|
+
name: 'Tom',
|
|
87
|
+
state: 'California',
|
|
88
|
+
city: 'Los Angeles',
|
|
89
|
+
address: 'No. 189, Grove St, Los Angeles',
|
|
90
|
+
zip: 'CA 90036',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
date: '2016-05-08',
|
|
94
|
+
name: 'Tom',
|
|
95
|
+
state: 'California',
|
|
96
|
+
city: 'Los Angeles',
|
|
97
|
+
address: 'No. 189, Grove St, Los Angeles',
|
|
98
|
+
zip: 'CA 90036',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
date: '2016-05-06',
|
|
102
|
+
name: 'Tom',
|
|
103
|
+
state: 'California',
|
|
104
|
+
city: 'Los Angeles',
|
|
105
|
+
address: 'No. 189, Grove St, Los Angeles',
|
|
106
|
+
zip: 'CA 90036',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
date: '2016-05-07',
|
|
110
|
+
name: 'Tom',
|
|
111
|
+
state: 'California',
|
|
112
|
+
city: 'Los Angeles',
|
|
113
|
+
address: 'No. 189, Grove St, Los Angeles',
|
|
114
|
+
zip: 'CA 90036',
|
|
115
|
+
},
|
|
116
|
+
];
|
|
117
|
+
const snippets = ref({
|
|
118
|
+
basic: `
|
|
119
|
+
<el-table :data="tableData" style="width: 100%">
|
|
120
|
+
<el-table-column prop="date" label="Date" width="180" />
|
|
121
|
+
<el-table-column prop="name" label="Name" width="180" />
|
|
122
|
+
<el-table-column prop="address" label="Address" />
|
|
123
|
+
</el-table>
|
|
124
|
+
`,
|
|
125
|
+
});
|
|
126
|
+
</script>
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex flex-col gap-8 mb-16">
|
|
3
|
+
<h1 class="">Select</h1>
|
|
4
|
+
<p>When there are plenty of options, use a drop-down menu to display and select desired ones.</p>
|
|
5
|
+
|
|
6
|
+
<el-card>
|
|
7
|
+
<template #header>
|
|
8
|
+
<div class="flex flex-col gap-3 items-start">
|
|
9
|
+
<h2>Types</h2>
|
|
10
|
+
<p>
|
|
11
|
+
Default size is Large. Input component provides {{ sizes.length }} additional sizes for you to choose among different scenarios. Use attribute size to set additional
|
|
12
|
+
sizes <el-text tag="mark">{{ sizes.join(', ') }}</el-text>
|
|
13
|
+
</p>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
<div class="flex gap-2">
|
|
17
|
+
<el-tag v-for="(color, key) in colors" :key="key + color" :type="color">{{ color }}</el-tag>
|
|
18
|
+
</div>
|
|
19
|
+
<template #footer>
|
|
20
|
+
<code class="flex flex-col gap-3 items-start">
|
|
21
|
+
<html-encode :tag="snippets.types" />
|
|
22
|
+
</code>
|
|
23
|
+
</template>
|
|
24
|
+
</el-card>
|
|
25
|
+
|
|
26
|
+
<el-card>
|
|
27
|
+
<template #header>
|
|
28
|
+
<div class="flex flex-col gap-3 items-start">
|
|
29
|
+
<h2>Sizes</h2>
|
|
30
|
+
<p>
|
|
31
|
+
Default size is Large. Input component provides {{ sizes.length }} additional sizes for you to choose among different scenarios. Use attribute size to set additional
|
|
32
|
+
sizes <el-text tag="mark">{{ sizes.join(', ') }}</el-text>
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
</template>
|
|
36
|
+
<div class="flex gap-2">
|
|
37
|
+
<el-tag v-for="(size, key) in sizes" :key="key + size" :size="size">{{ size }}</el-tag>
|
|
38
|
+
</div>
|
|
39
|
+
<template #footer>
|
|
40
|
+
<code class="flex flex-col gap-3 items-start">
|
|
41
|
+
<html-encode :tag="snippets.sizes" />
|
|
42
|
+
</code>
|
|
43
|
+
</template>
|
|
44
|
+
</el-card>
|
|
45
|
+
|
|
46
|
+
<el-card>
|
|
47
|
+
<template #header>
|
|
48
|
+
<div class="flex flex-col gap-3 items-start">
|
|
49
|
+
<h2>Removable Tag</h2>
|
|
50
|
+
<p>
|
|
51
|
+
<el-text tag="mark">closable</el-text> attribute can be used to define a removable tag. It accepts a Boolean. By default the removal of Tag has a fading animation. If
|
|
52
|
+
you don't want to use it, you can set the <el-text tag="mark">disable-transitions</el-text> attribute, which accepts a Boolean, to true. close event triggers when Tag
|
|
53
|
+
is removed.
|
|
54
|
+
</p>
|
|
55
|
+
</div>
|
|
56
|
+
</template>
|
|
57
|
+
<div class="flex gap-2">
|
|
58
|
+
<el-tag v-for="tag in tags" :key="tag.name" closable :type="tag.type">
|
|
59
|
+
{{ tag.name }}
|
|
60
|
+
</el-tag>
|
|
61
|
+
</div>
|
|
62
|
+
<template #footer>
|
|
63
|
+
<code class="flex flex-col gap-3 items-start">
|
|
64
|
+
<html-encode :tag="snippets.closable" />
|
|
65
|
+
</code>
|
|
66
|
+
</template>
|
|
67
|
+
</el-card>
|
|
68
|
+
|
|
69
|
+
<el-card>
|
|
70
|
+
<template #header>
|
|
71
|
+
<div class="flex flex-col gap-3 items-start">
|
|
72
|
+
<h2>Edit Dynamically</h2>
|
|
73
|
+
<p>You can use the <el-text tag="mark">close</el-text> event to add and remove tag dynamically.</p>
|
|
74
|
+
</div>
|
|
75
|
+
</template>
|
|
76
|
+
<div class="flex gap-2">
|
|
77
|
+
<el-tag v-for="tag in dynamicTags" :key="tag" closable :disable-transitions="false" @close="handleClose(tag)">
|
|
78
|
+
{{ tag }}
|
|
79
|
+
</el-tag>
|
|
80
|
+
<el-input v-if="inputVisible" ref="InputRef" v-model="inputValue" class="!w-20" size="mini" @keyup.enter="handleInputConfirm" @blur="handleInputConfirm" />
|
|
81
|
+
<el-button v-else class="button-new-tag" size="mini" @click="showInput"> + New Tag </el-button>
|
|
82
|
+
</div>
|
|
83
|
+
<template #footer> <html-encode :tag="snippets.dynamic" /> </template>
|
|
84
|
+
</el-card>
|
|
85
|
+
|
|
86
|
+
<el-card>
|
|
87
|
+
<template #header>
|
|
88
|
+
<div class="flex flex-col gap-3 items-start">
|
|
89
|
+
<h2>Theme</h2>
|
|
90
|
+
<p>Tag provide three different themes: dark、light and plain Using effect to change, default is light</p>
|
|
91
|
+
</div>
|
|
92
|
+
</template>
|
|
93
|
+
<div class="flex flex-col gap-2">
|
|
94
|
+
<div class="flex gap-2">
|
|
95
|
+
<span>Dark</span>
|
|
96
|
+
<el-tag v-for="item in items" :key="item.label" :type="item.type" effect="dark">
|
|
97
|
+
{{ item.label }}
|
|
98
|
+
</el-tag>
|
|
99
|
+
</div>
|
|
100
|
+
<div class="flex gap-2 mt-4">
|
|
101
|
+
<span>Light</span>
|
|
102
|
+
<el-tag v-for="item in items" :key="item.label" :type="item.type" effect="light">
|
|
103
|
+
{{ item.label }}
|
|
104
|
+
</el-tag>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="flex gap-2 mt-4">
|
|
107
|
+
<span>Plain</span>
|
|
108
|
+
<el-tag v-for="item in items" :key="item.label" :type="item.type" effect="plain">
|
|
109
|
+
{{ item.label }}
|
|
110
|
+
</el-tag>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
<template #footer> <html-encode :tag="snippets.theme" /> </template>
|
|
114
|
+
</el-card>
|
|
115
|
+
|
|
116
|
+
<el-card>
|
|
117
|
+
<template #header>
|
|
118
|
+
<div class="flex flex-col gap-3 items-start">
|
|
119
|
+
<h2>Rounded</h2>
|
|
120
|
+
<p>Tag can also be rounded like button.</p>
|
|
121
|
+
</div>
|
|
122
|
+
</template>
|
|
123
|
+
<div class="flex flex-col gap-2">
|
|
124
|
+
<div class="flex gap-2">
|
|
125
|
+
<el-tag v-for="item in items" :key="item.label" :type="item.type" effect="dark" round>
|
|
126
|
+
{{ item.label }}
|
|
127
|
+
</el-tag>
|
|
128
|
+
</div>
|
|
129
|
+
<div class="flex gap-2 mt-4">
|
|
130
|
+
<el-tag v-for="item in items" :key="item.label" :type="item.type" effect="light" round>
|
|
131
|
+
{{ item.label }}
|
|
132
|
+
</el-tag>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="flex gap-2 mt-4">
|
|
135
|
+
<el-tag v-for="item in items" :key="item.label" :type="item.type" effect="plain" round>
|
|
136
|
+
{{ item.label }}
|
|
137
|
+
</el-tag>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
<template #footer> <html-encode :tag="snippets.rounded" /> </template>
|
|
141
|
+
</el-card>
|
|
142
|
+
|
|
143
|
+
<el-card>
|
|
144
|
+
<template #header>
|
|
145
|
+
<div class="flex flex-col gap-3 items-start">
|
|
146
|
+
<h2>Checkable Tag</h2>
|
|
147
|
+
<p>
|
|
148
|
+
Sometimes because of the business needs, we might need checkbox like tag, but button like checkbox cannot meet our needs, here comes
|
|
149
|
+
<el-text tag="mark">check-tag</el-text>. You can use type prop in 2.5.4. basic check-tag usage, the API is rather simple.
|
|
150
|
+
</p>
|
|
151
|
+
</div>
|
|
152
|
+
</template>
|
|
153
|
+
<div class="flex gap-2">
|
|
154
|
+
<div class="flex gap-2">
|
|
155
|
+
<el-check-tag checked>Checked</el-check-tag>
|
|
156
|
+
<el-check-tag :checked="checked" @change="onChange">Toggle me</el-check-tag>
|
|
157
|
+
</div>
|
|
158
|
+
<el-check-tag :checked="checked1" type="primary" @change="onChange1"> Tag 1 </el-check-tag>
|
|
159
|
+
<el-check-tag :checked="checked2" type="success" @change="onChange2"> Tag 2 </el-check-tag>
|
|
160
|
+
<el-check-tag :checked="checked3" type="info" @change="onChange3"> Tag 3 </el-check-tag>
|
|
161
|
+
<el-check-tag :checked="checked4" type="warning" @change="onChange4"> Tag 4 </el-check-tag>
|
|
162
|
+
<el-check-tag :checked="checked5" type="danger" @change="onChange5"> Tag 5 </el-check-tag>
|
|
163
|
+
</div>
|
|
164
|
+
<template #footer> <html-encode :tag="snippets.checked" /> </template>
|
|
165
|
+
</el-card>
|
|
166
|
+
</div>
|
|
167
|
+
</template>
|
|
168
|
+
|
|
169
|
+
<script lang="ts" setup>
|
|
170
|
+
import type { InputInstance } from '@timus-networks/element-plus';
|
|
171
|
+
import type { TagProps } from '@timus-networks/element-plus';
|
|
172
|
+
import { ElInput } from '@timus-networks/element-plus';
|
|
173
|
+
import { nextTick, ref } from 'vue';
|
|
174
|
+
|
|
175
|
+
interface TagsItem {
|
|
176
|
+
name: string;
|
|
177
|
+
type: TagProps['type'];
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
type Item = { type: TagProps['type']; label: string };
|
|
181
|
+
|
|
182
|
+
const checked = ref(false);
|
|
183
|
+
const checked1 = ref(true);
|
|
184
|
+
const checked2 = ref(true);
|
|
185
|
+
const checked3 = ref(true);
|
|
186
|
+
const checked4 = ref(true);
|
|
187
|
+
const checked5 = ref(true);
|
|
188
|
+
const onChange = (status: boolean) => {
|
|
189
|
+
checked.value = status;
|
|
190
|
+
};
|
|
191
|
+
const onChange1 = (status: boolean) => {
|
|
192
|
+
checked1.value = status;
|
|
193
|
+
};
|
|
194
|
+
const onChange2 = (status: boolean) => {
|
|
195
|
+
checked2.value = status;
|
|
196
|
+
};
|
|
197
|
+
const onChange3 = (status: boolean) => {
|
|
198
|
+
checked3.value = status;
|
|
199
|
+
};
|
|
200
|
+
const onChange4 = (status: boolean) => {
|
|
201
|
+
checked4.value = status;
|
|
202
|
+
};
|
|
203
|
+
const onChange5 = (status: boolean) => {
|
|
204
|
+
checked5.value = status;
|
|
205
|
+
};
|
|
206
|
+
const items = ref<Array<Item>>([
|
|
207
|
+
{ type: 'primary', label: 'Tag 1' },
|
|
208
|
+
{ type: 'secondary', label: 'Tag 2' },
|
|
209
|
+
{ type: 'neutral', label: 'Tag 2' },
|
|
210
|
+
{ type: 'success', label: 'Tag 2' },
|
|
211
|
+
{ type: 'info', label: 'Tag 3' },
|
|
212
|
+
{ type: 'warning', label: 'Tag 4' },
|
|
213
|
+
{ type: 'danger', label: 'Tag 5' },
|
|
214
|
+
]);
|
|
215
|
+
const tags = ref<TagsItem[]>([
|
|
216
|
+
{ name: 'Tag 1', type: 'primary' },
|
|
217
|
+
{ name: 'Tag 1', type: 'secondary' },
|
|
218
|
+
{ name: 'Tag 1', type: 'neutral' },
|
|
219
|
+
{ name: 'Tag 2', type: 'success' },
|
|
220
|
+
{ name: 'Tag 3', type: 'info' },
|
|
221
|
+
{ name: 'Tag 4', type: 'warning' },
|
|
222
|
+
{ name: 'Tag 5', type: 'danger' },
|
|
223
|
+
]);
|
|
224
|
+
const inputValue = ref('');
|
|
225
|
+
const dynamicTags = ref(['Tag 1', 'Tag 2', 'Tag 3']);
|
|
226
|
+
const inputVisible = ref(false);
|
|
227
|
+
const InputRef = ref<InputInstance>();
|
|
228
|
+
const handleClose = (tag: string) => {
|
|
229
|
+
dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1);
|
|
230
|
+
};
|
|
231
|
+
const showInput = () => {
|
|
232
|
+
inputVisible.value = true;
|
|
233
|
+
nextTick(() => {
|
|
234
|
+
InputRef.value!.input!.focus();
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
const handleInputConfirm = () => {
|
|
238
|
+
if (inputValue.value) {
|
|
239
|
+
dynamicTags.value.push(inputValue.value);
|
|
240
|
+
}
|
|
241
|
+
inputVisible.value = false;
|
|
242
|
+
inputValue.value = '';
|
|
243
|
+
};
|
|
244
|
+
</script>
|
|
245
|
+
|
|
246
|
+
<script lang="ts">
|
|
247
|
+
import { defineComponent } from 'vue';
|
|
248
|
+
|
|
249
|
+
export default defineComponent({
|
|
250
|
+
name: 'TimusTag',
|
|
251
|
+
data() {
|
|
252
|
+
return {
|
|
253
|
+
sizes: ['default', 'large', 'medium', 'small', 'mini'],
|
|
254
|
+
colors: ['primary', 'secondary', 'neutral', 'success', 'warning', 'info', 'danger'],
|
|
255
|
+
value: '',
|
|
256
|
+
snippets: {
|
|
257
|
+
types: `<el-tag type="success">tag</el-tag>`,
|
|
258
|
+
sizes: `<el-tag size="large">tag</el-tag>`,
|
|
259
|
+
closable: `<el-tag size="large" type="success" closable>tag</el-tag>`,
|
|
260
|
+
dynamic: `<el-tag closable :disable-transitions="false" @close="handleClose(tag)"> tag </el-tag>`,
|
|
261
|
+
theme: `
|
|
262
|
+
<el-tag effect="dark"> tag </el-tag>
|
|
263
|
+
<el-tag effect="light"> tag </el-tag>
|
|
264
|
+
<el-tag effect="plain"> tag </el-tag>
|
|
265
|
+
`,
|
|
266
|
+
rounded: `<el-tag round>tag</el-tag>`,
|
|
267
|
+
checked: `<el-check-tag :checked="checked1" type="primary" @change="onChange1"> Tag 1 </el-check-tag>`,
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
},
|
|
271
|
+
methods: {
|
|
272
|
+
capitalize(value: string): string {
|
|
273
|
+
const text = String(value);
|
|
274
|
+
|
|
275
|
+
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
</script>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="code-container">
|
|
3
|
+
<pre><code>{{ formattedText }}</code></pre>
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { computed } from 'vue';
|
|
9
|
+
|
|
10
|
+
const props = defineProps<{ tag: string }>();
|
|
11
|
+
const htmlEncode = (str: string) => str.replace(/\\/g, '\\').replace(/^\s+/gm, '');
|
|
12
|
+
const formattedText = computed(() => htmlEncode(props.tag));
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<style scoped>
|
|
16
|
+
.code-container {
|
|
17
|
+
align-items: flex-start;
|
|
18
|
+
background-color: #5e5877;
|
|
19
|
+
border: 2px solid #534e6a;
|
|
20
|
+
border-radius: 4px;
|
|
21
|
+
color: var(--el-color-neutral-light-1);
|
|
22
|
+
display: inline-flex;
|
|
23
|
+
overflow-x: auto;
|
|
24
|
+
padding: 8px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
pre {
|
|
28
|
+
margin: 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
code {
|
|
32
|
+
display: block;
|
|
33
|
+
font-size: 10px;
|
|
34
|
+
padding-left: 0;
|
|
35
|
+
padding-right: 0;
|
|
36
|
+
}
|
|
37
|
+
</style>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
|
3
|
+
<el-tab-pane label="Button" name="first"><example-button /></el-tab-pane>
|
|
4
|
+
<el-tab-pane label="Input" name="second"><example-input /></el-tab-pane>
|
|
5
|
+
<el-tab-pane label="Select" name="third" lazy><example-select /></el-tab-pane>
|
|
6
|
+
<el-tab-pane label="Tag" name="fourth" lazy><example-tag /></el-tab-pane>
|
|
7
|
+
<el-tab-pane label="Popever" name="fifth" lazy><example-popover /></el-tab-pane>
|
|
8
|
+
<el-tab-pane label="Checkbox" name="sixth" lazy><example-checkbox /></el-tab-pane>
|
|
9
|
+
<el-tab-pane label="Radio" name="seventh" lazy><example-radio /></el-tab-pane>
|
|
10
|
+
<el-tab-pane label="Sidebar" name="eigth" lazy><example-sidebar /></el-tab-pane>
|
|
11
|
+
<el-tab-pane label="Table" name="nineth" lazy><example-table /></el-tab-pane>
|
|
12
|
+
<el-tab-pane label="Form" name="tenth" lazy><example-form /></el-tab-pane>
|
|
13
|
+
<el-tab-pane label="Dialog" name="twelfth" lazy><example-dialog /></el-tab-pane>
|
|
14
|
+
</el-tabs>
|
|
15
|
+
</template>
|
|
16
|
+
<script lang="ts" setup>
|
|
17
|
+
import type { TabsPaneContext } from '@timus-networks/element-plus';
|
|
18
|
+
import { ref } from 'vue';
|
|
19
|
+
|
|
20
|
+
import { definePageMeta } from '#imports';
|
|
21
|
+
|
|
22
|
+
definePageMeta({
|
|
23
|
+
layout: 'modules',
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const activeName = ref('first');
|
|
27
|
+
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|
28
|
+
console.log(tab, event);
|
|
29
|
+
};
|
|
30
|
+
</script>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bu plugin ElementPlus'a yeni size'lar eklemeye yarar.
|
|
3
|
+
* Halihazırda 3 adet size mevcut (default | large | small). Bunu genişletmek için
|
|
4
|
+
* aşağıdaki plugin'i yazdım.
|
|
5
|
+
*
|
|
6
|
+
* nuxt.config.ts'in `theme` options'ından aldığı değerleri RuntimeConfig'e yazdırıyorum modül üzerinden.
|
|
7
|
+
* Sonra da burada RuntrimeConfiguration'dan yakalayıp ElementPlus'a entegre ediyorum.
|
|
8
|
+
* Normalde `componentSizes` ve `componentSizeMap` readonly olduğu için değiştirilemiyor.
|
|
9
|
+
* Fakat bu bizim Objelerin ya da Arrayların içine yenileri eklememize engel değil.
|
|
10
|
+
*
|
|
11
|
+
* Diğer bir yöntem de aşağıda açıklama içinde yer alıyor.
|
|
12
|
+
* Bu yöntem ile de ElementPlus'ın componentlerinin içinde tanımlanan `size` attribute'unun tanımlarken kullanılan
|
|
13
|
+
* validation methodunu güncelleyor. Validation içerisinde ihtiyaç duyulan size listesini kendi listesine göre validate
|
|
14
|
+
* ettiği için sorun kalkıyor.
|
|
15
|
+
*
|
|
16
|
+
* Bu validation için şuraya bakabilirsin: `node_modules/element-plus/es/components/button/src/button.vue.d.ts`
|
|
17
|
+
*/
|
|
18
|
+
declare const _default: import("#app").Plugin<Record<string, unknown>> & import("#app").ObjectPlugin<Record<string, unknown>>;
|
|
19
|
+
export default _default;
|
|
20
|
+
/**
|
|
21
|
+
* Aşağıdaki ile de belirli bileşenlerin validation'larını değiştirebilirsin
|
|
22
|
+
*
|
|
23
|
+
* import { ElButton, ElInput, ElSelect } from 'element-plus';
|
|
24
|
+
* import { defineNuxtPlugin } from '#app';
|
|
25
|
+
*
|
|
26
|
+
* export default defineNuxtPlugin((_nuxtApp) => {
|
|
27
|
+
* const newSizes = ['', 'default', 'large', 'medium', 'small', 'mini'];
|
|
28
|
+
* const components = [ElButton, ElInput, ElSelect];
|
|
29
|
+
* const extendComponentSize = (component: any) => {
|
|
30
|
+
* if (component.props && component.props.size) {
|
|
31
|
+
* const originalValidator = component.props.size.validator as (value: string) => boolean;
|
|
32
|
+
* component.props.size.validator = (value: string) => newSizes.includes(value) || (originalValidator ? originalValidator(value) : false);
|
|
33
|
+
* }
|
|
34
|
+
* };
|
|
35
|
+
*
|
|
36
|
+
* components.forEach(extendComponentSize);
|
|
37
|
+
* });
|
|
38
|
+
*/
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { buttonTypes, componentSizeMap, componentSizes, ElButton, ElTag } from "@timus-networks/element-plus";
|
|
2
|
+
import { defineNuxtPlugin } from "#app";
|
|
3
|
+
export default defineNuxtPlugin((_nuxtApp) => {
|
|
4
|
+
const runtimeConfig = useRuntimeConfig();
|
|
5
|
+
const { sizes, types } = runtimeConfig.public.theme;
|
|
6
|
+
generateSizes(sizes);
|
|
7
|
+
generateTypes(types);
|
|
8
|
+
});
|
|
9
|
+
const generateSizes = (sizes) => {
|
|
10
|
+
if (sizes && Object.keys(sizes).length > 0) {
|
|
11
|
+
Object.entries(sizes).forEach(([size, value]) => {
|
|
12
|
+
if (typeof value === "number") {
|
|
13
|
+
componentSizeMap[size] = value;
|
|
14
|
+
} else {
|
|
15
|
+
console.warn(`Invalid value for size ${size}: ${value}. Expected a number.`);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.keys(sizes).forEach((size) => {
|
|
19
|
+
if (!componentSizes.includes(size)) {
|
|
20
|
+
componentSizes.push(size);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const generateTypes = (types = ["primary", "secondary", "neutral", "success", "warning", "info", "danger", "default"]) => {
|
|
26
|
+
types.forEach((type) => {
|
|
27
|
+
if (!buttonTypes.includes(type)) {
|
|
28
|
+
buttonTypes.push(type);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
const components = [ElButton, ElTag];
|
|
32
|
+
const extendComponentType = (component) => {
|
|
33
|
+
if (component.props?.type) {
|
|
34
|
+
const originalValidator = component.props.type.validator;
|
|
35
|
+
component.props.type.validator = (value) => buttonTypes.includes(value) || (originalValidator ? originalValidator(value) : false);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
components.forEach(extendComponentType);
|
|
39
|
+
};
|