@timus-networks/theme 2.0.16 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -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 +187 -0
- package/dist/runtime/components/development/example.alert.vue +29 -0
- package/dist/runtime/components/development/example.avatar.vue +85 -0
- package/dist/runtime/components/development/example.badge.vue +93 -0
- package/dist/runtime/components/development/example.breadcrumb.vue +54 -0
- package/dist/runtime/components/development/example.button.vue +235 -0
- package/dist/runtime/components/development/example.button.vue.d.ts +11 -0
- package/dist/runtime/components/development/example.card.vue +68 -0
- package/dist/runtime/components/development/example.checkbox.vue +176 -0
- package/dist/runtime/components/development/example.checkbox.vue.d.ts +24 -0
- package/dist/runtime/components/development/example.collapse.vue +38 -0
- package/dist/runtime/components/development/example.datepicker.vue +193 -0
- package/dist/runtime/components/development/example.description.vue +94 -0
- package/dist/runtime/components/development/example.dialog.vue +79 -0
- package/dist/runtime/components/development/example.dropdown.vue +166 -0
- package/dist/runtime/components/development/example.form.vue +488 -0
- package/dist/runtime/components/development/example.input.vue +270 -0
- package/dist/runtime/components/development/example.input.vue.d.ts +23 -0
- package/dist/runtime/components/development/example.link.vue +68 -0
- package/dist/runtime/components/development/example.message.vue +64 -0
- package/dist/runtime/components/development/example.notification.vue +75 -0
- package/dist/runtime/components/development/example.number.vue +70 -0
- package/dist/runtime/components/development/example.pagination.vue +89 -0
- package/dist/runtime/components/development/example.popover.vue +151 -0
- package/dist/runtime/components/development/example.radio.vue +163 -0
- package/dist/runtime/components/development/example.radio.vue.d.ts +25 -0
- package/dist/runtime/components/development/example.select.vue +588 -0
- package/dist/runtime/components/development/example.select.vue.d.ts +70 -0
- package/dist/runtime/components/development/example.sidebar.vue +101 -0
- package/dist/runtime/components/development/example.static.vue +50 -0
- package/dist/runtime/components/development/example.switch.vue +101 -0
- package/dist/runtime/components/development/example.table.vue +112 -0
- package/dist/runtime/components/development/example.tag.vue +255 -0
- package/dist/runtime/components/development/example.timepicker.vue +89 -0
- package/dist/runtime/components/development/example.tooltip.vue +104 -0
- package/dist/runtime/components/development/example.upload.vue +84 -0
- package/dist/runtime/components/production/html-encode.vue +96 -0
- package/dist/runtime/components/production/timus-breadcrumb.d.ts +36 -0
- package/dist/runtime/components/production/timus-breadcrumb.js +224 -0
- package/dist/runtime/components/production/timus-breadcrumb.mjs +224 -0
- package/dist/runtime/components/production/timus-breadcrumb.vue +83 -0
- package/dist/runtime/components/production/timus-breadcrumb.vue.d.ts +340 -0
- package/dist/runtime/composables/useBreadcrumb.d.ts +8 -0
- package/dist/runtime/composables/useBreadcrumb.js +53 -0
- package/dist/runtime/composables/useBreadcrumb.mjs +53 -0
- package/dist/runtime/pages/theme.vue +61 -0
- package/dist/runtime/plugins/disable-warnings-plugin.d.ts +2 -0
- package/dist/runtime/plugins/disable-warnings-plugin.js +18 -0
- package/dist/runtime/plugins/disable-warnings-plugin.mjs +18 -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-plugin.d.ts +30 -0
- package/dist/runtime/plugins/theme-provider-plugin.js +46 -0
- package/dist/runtime/plugins/theme-provider-plugin.mjs +46 -0
- package/dist/runtime/public/scss/element-plus/affix.css +305 -0
- package/dist/runtime/public/scss/element-plus/alert.css +516 -0
- package/dist/runtime/public/scss/element-plus/anchor-link.css +332 -0
- package/dist/runtime/public/scss/element-plus/anchor.css +376 -0
- package/dist/runtime/public/scss/element-plus/aside.css +308 -0
- package/dist/runtime/public/scss/element-plus/autocomplete.css +411 -0
- package/dist/runtime/public/scss/element-plus/avatar.css +370 -0
- package/dist/runtime/public/scss/element-plus/backtop.css +326 -0
- package/dist/runtime/public/scss/element-plus/badge.css +376 -0
- package/dist/runtime/public/scss/element-plus/base.css +550 -0
- package/dist/runtime/public/scss/element-plus/breadcrumb-item.css +0 -0
- package/dist/runtime/public/scss/element-plus/breadcrumb.css +370 -0
- package/dist/runtime/public/scss/element-plus/button-group.css +535 -0
- package/dist/runtime/public/scss/element-plus/button.css +1089 -0
- package/dist/runtime/public/scss/element-plus/calendar.css +370 -0
- package/dist/runtime/public/scss/element-plus/card.css +347 -0
- package/dist/runtime/public/scss/element-plus/carousel-item.css +350 -0
- package/dist/runtime/public/scss/element-plus/carousel.css +475 -0
- package/dist/runtime/public/scss/element-plus/cascader-panel.css +428 -0
- package/dist/runtime/public/scss/element-plus/cascader.css +560 -0
- package/dist/runtime/public/scss/element-plus/check-tag.css +386 -0
- package/dist/runtime/public/scss/element-plus/checkbox-button.css +451 -0
- package/dist/runtime/public/scss/element-plus/checkbox-group.css +307 -0
- package/dist/runtime/public/scss/element-plus/checkbox.css +588 -0
- package/dist/runtime/public/scss/element-plus/col.css +3270 -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 +490 -0
- package/dist/runtime/public/scss/element-plus/color/index.css +0 -0
- package/dist/runtime/public/scss/element-plus/color-picker.css +650 -0
- package/dist/runtime/public/scss/element-plus/common/popup.css +338 -0
- package/dist/runtime/public/scss/element-plus/common/transition.css +420 -0
- package/dist/runtime/public/scss/element-plus/common/var.css +302 -0
- package/dist/runtime/public/scss/element-plus/config-provider.css +0 -0
- package/dist/runtime/public/scss/element-plus/container.css +313 -0
- package/dist/runtime/public/scss/element-plus/dark/css-vars.css +353 -0
- package/dist/runtime/public/scss/element-plus/dark/var.css +302 -0
- package/dist/runtime/public/scss/element-plus/date-picker/date-picker.css +558 -0
- package/dist/runtime/public/scss/element-plus/date-picker/date-range-picker.css +410 -0
- package/dist/runtime/public/scss/element-plus/date-picker/date-table.css +426 -0
- package/dist/runtime/public/scss/element-plus/date-picker/month-table.css +388 -0
- package/dist/runtime/public/scss/element-plus/date-picker/picker-panel.css +454 -0
- package/dist/runtime/public/scss/element-plus/date-picker/picker.css +662 -0
- package/dist/runtime/public/scss/element-plus/date-picker/time-picker.css +384 -0
- package/dist/runtime/public/scss/element-plus/date-picker/time-range-picker.css +338 -0
- package/dist/runtime/public/scss/element-plus/date-picker/time-spinner.css +389 -0
- package/dist/runtime/public/scss/element-plus/date-picker/year-table.css +384 -0
- package/dist/runtime/public/scss/element-plus/date-picker.css +1531 -0
- package/dist/runtime/public/scss/element-plus/descriptions-item.css +347 -0
- package/dist/runtime/public/scss/element-plus/descriptions.css +435 -0
- package/dist/runtime/public/scss/element-plus/dialog.css +512 -0
- package/dist/runtime/public/scss/element-plus/display.css +357 -0
- package/dist/runtime/public/scss/element-plus/divider.css +345 -0
- package/dist/runtime/public/scss/element-plus/drawer.css +419 -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 +495 -0
- package/dist/runtime/public/scss/element-plus/empty.css +355 -0
- package/dist/runtime/public/scss/element-plus/footer.css +310 -0
- package/dist/runtime/public/scss/element-plus/form-item.css +0 -0
- package/dist/runtime/public/scss/element-plus/form.css +527 -0
- package/dist/runtime/public/scss/element-plus/header.css +310 -0
- package/dist/runtime/public/scss/element-plus/icon.css +343 -0
- package/dist/runtime/public/scss/element-plus/image-viewer.css +439 -0
- package/dist/runtime/public/scss/element-plus/image.css +343 -0
- package/dist/runtime/public/scss/element-plus/index.css +17293 -0
- package/dist/runtime/public/scss/element-plus/infinite-scroll.css +0 -0
- package/dist/runtime/public/scss/element-plus/input-number.css +494 -0
- package/dist/runtime/public/scss/element-plus/input.css +770 -0
- package/dist/runtime/public/scss/element-plus/link.css +453 -0
- package/dist/runtime/public/scss/element-plus/loading.css +391 -0
- package/dist/runtime/public/scss/element-plus/main.css +311 -0
- package/dist/runtime/public/scss/element-plus/mention.css +413 -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 +737 -0
- package/dist/runtime/public/scss/element-plus/message-box.css +533 -0
- package/dist/runtime/public/scss/element-plus/message.css +528 -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 +302 -0
- package/dist/runtime/public/scss/element-plus/mixins/utils.css +0 -0
- package/dist/runtime/public/scss/element-plus/notification.css +413 -0
- package/dist/runtime/public/scss/element-plus/option-group.css +331 -0
- package/dist/runtime/public/scss/element-plus/option.css +354 -0
- package/dist/runtime/public/scss/element-plus/overlay.css +317 -0
- package/dist/runtime/public/scss/element-plus/page-header.css +351 -0
- package/dist/runtime/public/scss/element-plus/pagination.css +586 -0
- package/dist/runtime/public/scss/element-plus/popconfirm.css +315 -0
- package/dist/runtime/public/scss/element-plus/popover.css +352 -0
- package/dist/runtime/public/scss/element-plus/popper.css +400 -0
- package/dist/runtime/public/scss/element-plus/progress.css +449 -0
- package/dist/runtime/public/scss/element-plus/radio-button.css +436 -0
- package/dist/runtime/public/scss/element-plus/radio-group.css +308 -0
- package/dist/runtime/public/scss/element-plus/radio.css +561 -0
- package/dist/runtime/public/scss/element-plus/rate.css +384 -0
- package/dist/runtime/public/scss/element-plus/reset.css +399 -0
- package/dist/runtime/public/scss/element-plus/result.css +381 -0
- package/dist/runtime/public/scss/element-plus/row.css +339 -0
- package/dist/runtime/public/scss/element-plus/scrollbar.css +373 -0
- package/dist/runtime/public/scss/element-plus/segmented.css +460 -0
- package/dist/runtime/public/scss/element-plus/select-dropdown-v2.css +351 -0
- package/dist/runtime/public/scss/element-plus/select-dropdown.css +351 -0
- package/dist/runtime/public/scss/element-plus/select-v2.css +765 -0
- package/dist/runtime/public/scss/element-plus/select.css +765 -0
- package/dist/runtime/public/scss/element-plus/skeleton-item.css +372 -0
- package/dist/runtime/public/scss/element-plus/skeleton.css +335 -0
- package/dist/runtime/public/scss/element-plus/slider.css +480 -0
- package/dist/runtime/public/scss/element-plus/space.css +317 -0
- package/dist/runtime/public/scss/element-plus/spinner.css +342 -0
- package/dist/runtime/public/scss/element-plus/statistic.css +336 -0
- package/dist/runtime/public/scss/element-plus/step.css +586 -0
- package/dist/runtime/public/scss/element-plus/steps.css +319 -0
- package/dist/runtime/public/scss/element-plus/sub-menu.css +0 -0
- package/dist/runtime/public/scss/element-plus/switch.css +594 -0
- package/dist/runtime/public/scss/element-plus/tab-pane.css +0 -0
- package/dist/runtime/public/scss/element-plus/table-column.css +382 -0
- package/dist/runtime/public/scss/element-plus/table-v2.css +520 -0
- package/dist/runtime/public/scss/element-plus/table.css +893 -0
- package/dist/runtime/public/scss/element-plus/tabs.css +892 -0
- package/dist/runtime/public/scss/element-plus/tag.css +624 -0
- package/dist/runtime/public/scss/element-plus/text.css +378 -0
- package/dist/runtime/public/scss/element-plus/time-picker.css +1023 -0
- package/dist/runtime/public/scss/element-plus/time-select.css +946 -0
- package/dist/runtime/public/scss/element-plus/timeline-item.css +415 -0
- package/dist/runtime/public/scss/element-plus/timeline.css +334 -0
- package/dist/runtime/public/scss/element-plus/tooltip-v2.css +410 -0
- package/dist/runtime/public/scss/element-plus/tooltip.css +0 -0
- package/dist/runtime/public/scss/element-plus/tour.css +461 -0
- package/dist/runtime/public/scss/element-plus/transfer.css +497 -0
- package/dist/runtime/public/scss/element-plus/tree-select.css +325 -0
- package/dist/runtime/public/scss/element-plus/tree.css +538 -0
- package/dist/runtime/public/scss/element-plus/upload.css +862 -0
- package/dist/runtime/public/scss/element-plus/var.css +389 -0
- package/dist/runtime/public/scss/element-plus/virtual-list.css +330 -0
- package/dist/runtime/public/scss/theme.css +1268 -0
- package/dist/runtime/server/tsconfig.json +6 -0
- package/dist/runtime/types.d.ts +31 -0
- package/dist/types.d.mts +7 -0
- package/dist/types.d.ts +7 -0
- package/package.json +35 -12
- package/components/TimusIcons.vue +0 -54
- package/generate-icon.js +0 -22
- package/module.ts +0 -84
- package/pages/icons.vue +0 -37
- 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
package/README.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# @timus-networks/fonts
|
|
2
|
+
|
|
3
|
+
Nuxt module for Theme Installation.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Installation](#installation)
|
|
8
|
+
- [Usage](#usage)
|
|
9
|
+
- [Scripts](#scripts)
|
|
10
|
+
- [Contributing](#contributing)
|
|
11
|
+
- [License](#license)
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
To install this module, you can use npm or yarn:
|
|
16
|
+
|
|
17
|
+
### npm
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
npm install @timus-networks/theme
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### yarn
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
yarn add @timus-networks/theme
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
1. To use this module in your Nuxt 3 project, add it to your `nuxt.config.ts`:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
export default defineNuxtConfig({
|
|
35
|
+
modules: ['@timus-networks/theme'],
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. Add below code to your **tailwind.config.js** file
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
// tint & shade color generator
|
|
43
|
+
function generateColors(baseName, start = 1, end = 9, step = 1) {
|
|
44
|
+
const colors = {};
|
|
45
|
+
|
|
46
|
+
for (let i = start; i <= end; i += step) {
|
|
47
|
+
colors[i] = `var(--el-color-${baseName}-light-${i})`;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return colors;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const colorNames = ['primary', 'secondary', 'neutral', 'danger', 'success', 'warning', 'info'];
|
|
54
|
+
const colorShades = [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
55
|
+
const classPrefixes = ['bg', 'text', 'border'];
|
|
56
|
+
const colors = colorNames.reduce((acc, color) => ({ ...acc, [`${color}`]: generateColors(color, 1, 9) }), {});
|
|
57
|
+
|
|
58
|
+
module.exports = {
|
|
59
|
+
// content: ['./pages/**/*.{vue,html}', './components/**/*.{vue,html}', './layouts/**/*.{vue,html}', './modules/**/*.{vue,html}'],
|
|
60
|
+
content: ['./modules/**/*.{vue,html}'],
|
|
61
|
+
theme: {
|
|
62
|
+
extend: {
|
|
63
|
+
colors,
|
|
64
|
+
spacing: {
|
|
65
|
+
default: '30px',
|
|
66
|
+
7.5: '30px', // 30px için özel bir sınıf ekliyoruz
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
plugins: [
|
|
71
|
+
function ({ addUtilities, theme, e }) {
|
|
72
|
+
const gridCols = theme('gridTemplateColumns');
|
|
73
|
+
const utilities = Object.entries(gridCols).map(([key, value]) => ({
|
|
74
|
+
[`.${e(`grid-cols-${key}`)}`]: {
|
|
75
|
+
'grid-template-columns': value,
|
|
76
|
+
gap: '30px', // Burada varsayılan boşluğu ayarlıyoruz
|
|
77
|
+
},
|
|
78
|
+
}));
|
|
79
|
+
|
|
80
|
+
addUtilities(utilities);
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
safelist: classPrefixes.flatMap((prefix) => colorNames.flatMap((color) => colorShades.map((i) => `${prefix}-${color}-${i}`))),
|
|
84
|
+
};
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Scripts
|
|
88
|
+
|
|
89
|
+
The following npm scripts are available:
|
|
90
|
+
|
|
91
|
+
- `test`: Run tests using Vitest.
|
|
92
|
+
- `test:watch`: Run tests in watch mode.
|
|
93
|
+
- `test:types`: Check TypeScript types.
|
|
94
|
+
- `lint:prettier`: Lint code using Prettier.
|
|
95
|
+
- `lint:eslint`: Lint code using ESLint.
|
|
96
|
+
- `lint:stylelint`: Lint styles using Stylelint.
|
|
97
|
+
- `fix`: Fix linting errors.
|
|
98
|
+
- `prepack`: Run the prepack script.
|
|
99
|
+
- `pub`: Publish the module.
|
|
100
|
+
- `release`: Release a new version.
|
|
101
|
+
|
|
102
|
+
## Contributing
|
|
103
|
+
|
|
104
|
+
If you would like to contribute, please follow these guidelines:
|
|
105
|
+
|
|
106
|
+
1. Fork the repository.
|
|
107
|
+
2. Create a new branch for your feature or bug fix.
|
|
108
|
+
3. Commit your changes.
|
|
109
|
+
4. Push your branch and create a pull request.
|
|
110
|
+
|
|
111
|
+
## License
|
|
112
|
+
|
|
113
|
+
This project is licensed under the MIT License.
|
package/dist/module.cjs
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as _nuxt_schema from '@nuxt/schema';
|
|
2
|
+
import { ModuleOptions } from 'nuxt/schema';
|
|
3
|
+
|
|
4
|
+
interface MyModuleOptions extends ModuleOptions {
|
|
5
|
+
moduleName: string;
|
|
6
|
+
version: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}
|
|
9
|
+
declare const _default: _nuxt_schema.NuxtModule<MyModuleOptions, MyModuleOptions, false>;
|
|
10
|
+
|
|
11
|
+
export { type MyModuleOptions, _default as default };
|
package/dist/module.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as _nuxt_schema from '@nuxt/schema';
|
|
2
|
+
import { ModuleOptions } from 'nuxt/schema';
|
|
3
|
+
|
|
4
|
+
interface MyModuleOptions extends ModuleOptions {
|
|
5
|
+
moduleName: string;
|
|
6
|
+
version: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}
|
|
9
|
+
declare const _default: _nuxt_schema.NuxtModule<MyModuleOptions, MyModuleOptions, false>;
|
|
10
|
+
|
|
11
|
+
export { type MyModuleOptions, _default as default };
|
package/dist/module.json
ADDED
package/dist/module.mjs
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { readdirSync } from 'node:fs';
|
|
2
|
+
import { resolve, parse, join } from 'node:path';
|
|
3
|
+
import { defineNuxtModule, createResolver, useNuxt, addImports, addPlugin, addComponent } from 'nuxt/kit';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
// -- Unbuild CommonJS Shims --
|
|
8
|
+
import __cjs_url__ from 'url';
|
|
9
|
+
import __cjs_path__ from 'path';
|
|
10
|
+
import __cjs_mod__ from 'module';
|
|
11
|
+
const __filename = __cjs_url__.fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = __cjs_path__.dirname(__filename);
|
|
13
|
+
const require = __cjs_mod__.createRequire(import.meta.url);
|
|
14
|
+
const name = "@timus-networks/theme";
|
|
15
|
+
const version = "2.2.0";
|
|
16
|
+
const description = "A comprehensive Nuxt.js module providing a tailored theme experience with integrated TailwindCSS support for applications.";
|
|
17
|
+
const type = "module";
|
|
18
|
+
const exports = {
|
|
19
|
+
".": {
|
|
20
|
+
types: "./dist/types.d.ts",
|
|
21
|
+
"import": "./dist/module.mjs",
|
|
22
|
+
require: "./dist/module.cjs"
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const main = "./dist/module.cjs";
|
|
26
|
+
const types = "./dist/types.d.ts";
|
|
27
|
+
const files = [
|
|
28
|
+
"dist"
|
|
29
|
+
];
|
|
30
|
+
const scripts = {
|
|
31
|
+
test: "vitest run",
|
|
32
|
+
"test:watch": "vitest watch",
|
|
33
|
+
"test:types": "vue-tsc --noEmit",
|
|
34
|
+
"lint:prettier": "npx prettier --write --list-different \"{**/*.js,**/*.vue,**/*.scss,!(node*)**/*.js}\"",
|
|
35
|
+
"lint:eslint": "eslint --ext \".js,.ts,.vue,.json\" .",
|
|
36
|
+
"lint:stylelint": "stylelint \"**/*.{scss,sass,html,vue}\"",
|
|
37
|
+
fix: "npm run lint:prettier && npm run lint:eslint -- --fix && npm run lint:stylelint -- --fix",
|
|
38
|
+
pub: "npm publish",
|
|
39
|
+
sass: "node generate-sass.js",
|
|
40
|
+
prepack: "nuxt-module-build build",
|
|
41
|
+
"release-old": "npm run prepack && changelogen --release && npm run pub && git push --follow-tags",
|
|
42
|
+
version: "standard-version",
|
|
43
|
+
release: "npm run prepack && standard-version && npm run pub && git push --follow-tags origin main"
|
|
44
|
+
};
|
|
45
|
+
const repository = {
|
|
46
|
+
type: "git",
|
|
47
|
+
url: "https://bitbucket.org/timus-networks/timus.modules.git"
|
|
48
|
+
};
|
|
49
|
+
const keywords = [
|
|
50
|
+
"nuxt",
|
|
51
|
+
"nuxt3",
|
|
52
|
+
"module",
|
|
53
|
+
"component",
|
|
54
|
+
"vue",
|
|
55
|
+
"vue3",
|
|
56
|
+
"theme",
|
|
57
|
+
"tailwind"
|
|
58
|
+
];
|
|
59
|
+
const peerDependencies = {
|
|
60
|
+
vue: "^3.x"
|
|
61
|
+
};
|
|
62
|
+
const author = "Serkan Konakcı<serkan.konakci@timusnetworks.com>";
|
|
63
|
+
const license = "MIT";
|
|
64
|
+
const dependencies = {
|
|
65
|
+
"@nuxt/kit": "*",
|
|
66
|
+
tailwindcss: "*",
|
|
67
|
+
"vue-tsc": "^2.0.29"
|
|
68
|
+
};
|
|
69
|
+
const devDependencies = {
|
|
70
|
+
changelogen: "^0.5.5",
|
|
71
|
+
sass: "*",
|
|
72
|
+
"sass-loader": "*"
|
|
73
|
+
};
|
|
74
|
+
const PackageJson = {
|
|
75
|
+
name: name,
|
|
76
|
+
version: version,
|
|
77
|
+
description: description,
|
|
78
|
+
type: type,
|
|
79
|
+
exports: exports,
|
|
80
|
+
main: main,
|
|
81
|
+
types: types,
|
|
82
|
+
files: files,
|
|
83
|
+
scripts: scripts,
|
|
84
|
+
"standard-version": {
|
|
85
|
+
tagPrefix: "theme-v",
|
|
86
|
+
releaseCommitMessageFormat: "chore(release): @timus-networks/theme {{currentTag}}"
|
|
87
|
+
},
|
|
88
|
+
repository: repository,
|
|
89
|
+
keywords: keywords,
|
|
90
|
+
peerDependencies: peerDependencies,
|
|
91
|
+
author: author,
|
|
92
|
+
license: license,
|
|
93
|
+
dependencies: dependencies,
|
|
94
|
+
devDependencies: devDependencies
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const folderPath = "./runtime";
|
|
98
|
+
const module = defineNuxtModule({
|
|
99
|
+
meta: {
|
|
100
|
+
name: PackageJson.name,
|
|
101
|
+
configKey: "themeOptions"
|
|
102
|
+
},
|
|
103
|
+
defaults: {
|
|
104
|
+
moduleName: PackageJson.name,
|
|
105
|
+
version: PackageJson.version,
|
|
106
|
+
description: PackageJson.description
|
|
107
|
+
},
|
|
108
|
+
hooks: {
|
|
109
|
+
"pages:extend": (pages) => {
|
|
110
|
+
const resolver = createResolver(import.meta.url);
|
|
111
|
+
const nuxt = useNuxt();
|
|
112
|
+
const isDev = nuxt.options.dev;
|
|
113
|
+
if (isDev) {
|
|
114
|
+
pages.push({
|
|
115
|
+
name: "theme",
|
|
116
|
+
path: "/theme",
|
|
117
|
+
mode: "client",
|
|
118
|
+
file: resolver.resolve(`${folderPath}/pages/theme.vue`)
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"nitro:config": async (nitroConfig) => {
|
|
123
|
+
nitroConfig.publicAssets ||= [];
|
|
124
|
+
nitroConfig.publicAssets.push({
|
|
125
|
+
dir: resolve(__dirname, `${folderPath}/public`),
|
|
126
|
+
maxAge: 60 * 60 * 24 * 365
|
|
127
|
+
// 1 year
|
|
128
|
+
});
|
|
129
|
+
nitroConfig.prerender = {
|
|
130
|
+
...nitroConfig.prerender,
|
|
131
|
+
...{ failOnError: false }
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
setup(options, nuxt) {
|
|
136
|
+
const resolver = createResolver(import.meta.url);
|
|
137
|
+
const isDev = nuxt.options.dev;
|
|
138
|
+
console.info(`'${PackageJson.name}' loaded. Version:${options.version}`);
|
|
139
|
+
const composablesDir = resolver.resolve(`${folderPath}/composables`);
|
|
140
|
+
const composableFiles = readdirSync(composablesDir).filter((file) => file.endsWith(".ts") && !file.startsWith("index"));
|
|
141
|
+
composableFiles.forEach((file) => {
|
|
142
|
+
const { name } = parse(file);
|
|
143
|
+
addImports({
|
|
144
|
+
name,
|
|
145
|
+
as: name,
|
|
146
|
+
from: `${composablesDir}/${file}`
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
const components_dir_list = [
|
|
150
|
+
{ env: "development", path: "runtime/components/development" },
|
|
151
|
+
{ env: "production", path: "runtime/components/production" }
|
|
152
|
+
];
|
|
153
|
+
const comp = [];
|
|
154
|
+
const addComponentFromFolder = (folder) => {
|
|
155
|
+
const path = resolve(__dirname, folder);
|
|
156
|
+
const files = readdirSync(path).filter((file) => file.endsWith(".vue"));
|
|
157
|
+
files.forEach((file) => {
|
|
158
|
+
const { name } = parse(file);
|
|
159
|
+
const isExit = comp.find((item) => item.name === name);
|
|
160
|
+
!isExit ? comp.push({ name, path: resolve(path, file) }) : console.log("#BU COMPONENT VAR name:", name, resolve(path, file), "\xD6nceki: ", isExit);
|
|
161
|
+
nuxt.options.build.transpile.push(resolve(path, file));
|
|
162
|
+
addComponent({
|
|
163
|
+
name: join(name),
|
|
164
|
+
filePath: resolve(path, file),
|
|
165
|
+
mode: "client"
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
nuxt.hook("components:dirs", (dirs) => {
|
|
170
|
+
components_dir_list.forEach(({ env, path }) => {
|
|
171
|
+
if (isDev || !isDev && env === "production") {
|
|
172
|
+
addComponentFromFolder(path);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
addPlugin(resolver.resolve(`${folderPath}/plugins/sample-plugin`));
|
|
177
|
+
addPlugin(resolver.resolve(`${folderPath}/plugins/disable-warnings-plugin`));
|
|
178
|
+
addPlugin(resolver.resolve(`${folderPath}/plugins/theme-provider-plugin`));
|
|
179
|
+
nuxt.options.css.push(resolver.resolve(`${folderPath}/public/scss/theme.scss`));
|
|
180
|
+
nuxt.options.css.push(resolver.resolve(`${folderPath}/public/scss/element-plus/index.scss`));
|
|
181
|
+
nuxt.hook("prepare:types", ({ references }) => {
|
|
182
|
+
references.push({ path: resolver.resolve(`${folderPath}/types.d.ts`) });
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
export { module as default };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex flex-col gap-8 mb-16">
|
|
3
|
+
<h1 class="">Alert</h1>
|
|
4
|
+
<p>Displays important alert messages.</p>
|
|
5
|
+
|
|
6
|
+
<el-card>
|
|
7
|
+
<template #header> Basic usage </template>
|
|
8
|
+
<div class="flex flex-col gap-7.5">
|
|
9
|
+
<p>
|
|
10
|
+
Alert components are non-overlay elements in the page that does not disappear automatically. Alert provides 4 types of themes defined by
|
|
11
|
+
<el-text tag="mark">type</el-text>, whose default value is <el-text tag="mark">info</el-text>.
|
|
12
|
+
</p>
|
|
13
|
+
<div class="flex gap-4 items-start flex-col">
|
|
14
|
+
<el-alert :title="`default`" />
|
|
15
|
+
<el-alert v-for="color of colors" :key="color" :title="`${color} alert`" :type="color" show-icon />
|
|
16
|
+
<el-alert v-for="color of colors" :key="color" :title="`${color} alert`" :type="color" description="This is a description." show-icon />
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<template #footer> <html-encode :tag="snippets.basic" /> </template>
|
|
20
|
+
</el-card>
|
|
21
|
+
</div>
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<script lang="ts" setup>
|
|
25
|
+
const colors = ref(['success', 'warning', 'info', 'error', 'danger']);
|
|
26
|
+
const snippets = ref({
|
|
27
|
+
basic: `<el-alert title="Title Text Goes Here" type="danger" description="This is a description." show-icon :closable="false" />`,
|
|
28
|
+
});
|
|
29
|
+
</script>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex flex-col gap-8 mb-16">
|
|
3
|
+
<h1 class="">Avatar</h1>
|
|
4
|
+
<p>Avatars can be used to represent people or objects. It supports images, Icons, or characters.</p>
|
|
5
|
+
|
|
6
|
+
<el-card>
|
|
7
|
+
<template #header> With Image </template>
|
|
8
|
+
<section class="flex flex-col gap-7.5">
|
|
9
|
+
<p>Add <el-text tag="mark">src</el-text> attribute for display an image</p>
|
|
10
|
+
<div class="flex gap-7.5">
|
|
11
|
+
<div v-for="(size, index) of sizes" :key="size" class="flex flex-col gap-2 border rounded-md p-2 w-28 items-center">
|
|
12
|
+
<h5 class="font-normal text-neutral-7 grow">{{ String(size).toUpperCase() }}</h5>
|
|
13
|
+
<el-avatar :size="size" src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png" />
|
|
14
|
+
<small class="text-neutral-4 flex items-end grow p-mini">{{ infos[index] }}px</small>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</section>
|
|
18
|
+
<template #footer> <html-encode :tag="snippets.image" /> </template>
|
|
19
|
+
</el-card>
|
|
20
|
+
|
|
21
|
+
<el-card>
|
|
22
|
+
<template #header> With Text </template>
|
|
23
|
+
<section class="flex flex-col gap-7.5">
|
|
24
|
+
<p>Insert text into tag brackets</p>
|
|
25
|
+
<div class="flex gap-7.5">
|
|
26
|
+
<div v-for="(size, index) of sizes" :key="size" class="flex flex-col gap-2 border rounded-md p-2 w-28 items-center">
|
|
27
|
+
<h5 class="font-normal text-neutral-7 grow">{{ String(size).toUpperCase() }}</h5>
|
|
28
|
+
<el-avatar :size="size">SK</el-avatar>
|
|
29
|
+
<small class="text-neutral-4 flex items-end grow p-mini">{{ infos[index] }}px</small>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</section>
|
|
33
|
+
<template #footer> <html-encode :tag="snippets.text" /> </template>
|
|
34
|
+
</el-card>
|
|
35
|
+
|
|
36
|
+
<el-card>
|
|
37
|
+
<template #header> With Isax </template>
|
|
38
|
+
<section class="flex flex-col gap-7.5">
|
|
39
|
+
<p>Add <el-text tag="mark">class="isax-*"</el-text> attribute for display to isax icon</p>
|
|
40
|
+
<div class="flex gap-7.5">
|
|
41
|
+
<div v-for="(size, index) of sizes" :key="size" class="flex flex-col gap-2 border rounded-md p-2 w-28 items-center">
|
|
42
|
+
<h5 class="font-normal text-neutral-7 grow">{{ String(size).toUpperCase() }}</h5>
|
|
43
|
+
<el-avatar :size="size" class="isax-notification" />
|
|
44
|
+
<small class="text-neutral-4 flex items-end grow p-mini">{{ infos[index] }}px</small>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</section>
|
|
48
|
+
<template #footer> <html-encode :tag="snippets.isax" /> </template>
|
|
49
|
+
</el-card>
|
|
50
|
+
|
|
51
|
+
<el-card>
|
|
52
|
+
<template #header> With Element Icon </template>
|
|
53
|
+
<section class="flex flex-col gap-7.5">
|
|
54
|
+
<p>Add <el-text tag="mark">icon</el-text> attribute for display an icon</p>
|
|
55
|
+
<div class="flex gap-7.5">
|
|
56
|
+
<div v-for="(size, index) of sizes" :key="size" class="flex flex-col gap-2 border rounded-md p-2 w-28 items-center">
|
|
57
|
+
<h5 class="font-normal text-neutral-7 grow">{{ String(size).toUpperCase() }}</h5>
|
|
58
|
+
<el-avatar :size="size" :icon="ElIconBell" />
|
|
59
|
+
<small class="text-neutral-4 flex items-end grow p-mini">{{ infos[index] }}px</small>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</section>
|
|
63
|
+
<template #footer> <html-encode :tag="snippets.icon" /> </template>
|
|
64
|
+
</el-card>
|
|
65
|
+
</div>
|
|
66
|
+
</template>
|
|
67
|
+
|
|
68
|
+
<script lang="ts" setup>
|
|
69
|
+
import { ref } from 'vue';
|
|
70
|
+
import { reactive, toRefs } from 'vue';
|
|
71
|
+
|
|
72
|
+
const state = reactive({
|
|
73
|
+
circleUrl: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
|
|
74
|
+
squareUrl: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png',
|
|
75
|
+
sizes: [50, 'default', 'large', 'medium', 'small', 'mini'] as const,
|
|
76
|
+
infos: [50, '32', '56', '44', '32', '16'] as const,
|
|
77
|
+
});
|
|
78
|
+
const { sizes, infos, circleUrl, squareUrl, sizeList } = toRefs(state);
|
|
79
|
+
const snippets = ref({
|
|
80
|
+
isax: `<el-avatar class="isax-notification" />`,
|
|
81
|
+
icon: `<el-avatar :icon="ElIconEdit" />`,
|
|
82
|
+
text: `<el-avatar>SK</el-avatar>`,
|
|
83
|
+
image: `<el-avatar src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png" />`,
|
|
84
|
+
});
|
|
85
|
+
</script>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex flex-col gap-8 mb-16">
|
|
3
|
+
<h1 class="">Badge</h1>
|
|
4
|
+
<p>A number or status mark on buttons and icons.</p>
|
|
5
|
+
|
|
6
|
+
<el-card>
|
|
7
|
+
<template #header> Basic usage </template>
|
|
8
|
+
<div class="flex flex-col gap-4">
|
|
9
|
+
<p>Displays the amount of new messages. Add <el-text tag="mark">type</el-text> to colorize it. The amount is defined with value which accepts Number or String.</p>
|
|
10
|
+
<div class="flex gap-7.5">
|
|
11
|
+
<el-badge v-for="color of colors" :key="color" :value="12" :type="color">
|
|
12
|
+
<el-button size="small">{{ color }}</el-button>
|
|
13
|
+
</el-badge>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
<template #footer> <html-encode :tag="snippets.basic" /> </template>
|
|
17
|
+
</el-card>
|
|
18
|
+
|
|
19
|
+
<el-card>
|
|
20
|
+
<template #header> Max Value </template>
|
|
21
|
+
<div class="flex flex-col gap-4">
|
|
22
|
+
<p>
|
|
23
|
+
You can customize the <el-text tag="mark">max</el-text> value. The max value is defined by property max which is a Number. Note that it only works when value is also a
|
|
24
|
+
Number.
|
|
25
|
+
</p>
|
|
26
|
+
<div class="flex gap-7.5">
|
|
27
|
+
<el-badge :value="200" :max="99" class="item">
|
|
28
|
+
<el-button>comments</el-button>
|
|
29
|
+
</el-badge>
|
|
30
|
+
<el-badge :value="100" :max="10" class="item">
|
|
31
|
+
<el-button>replies</el-button>
|
|
32
|
+
</el-badge>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<template #footer> <html-encode :tag="snippets.max" /> </template>
|
|
36
|
+
</el-card>
|
|
37
|
+
|
|
38
|
+
<el-card>
|
|
39
|
+
<template #header> Red Dot </template>
|
|
40
|
+
<div class="flex flex-col gap-4">
|
|
41
|
+
<p>Use a red dot to mark content that needs to be noticed. Use the attribute <el-text tag="mark">is-dot</el-text>. It is a Boolean.</p>
|
|
42
|
+
<div class="flex gap-7.5">
|
|
43
|
+
<el-badge is-dot class="item">query</el-badge>
|
|
44
|
+
<el-badge is-dot class="item">
|
|
45
|
+
<el-button class="share-button" :icon="ElIconShare" type="primary" />
|
|
46
|
+
</el-badge>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<template #footer> <html-encode :tag="snippets.dot" /> </template>
|
|
51
|
+
</el-card>
|
|
52
|
+
|
|
53
|
+
<el-card>
|
|
54
|
+
<template #header> Offset </template>
|
|
55
|
+
<div class="flex flex-col gap-3">
|
|
56
|
+
<p>
|
|
57
|
+
Set <el-text tag="mark">offset</el-text> of the badge dot, the format is <el-text tag="mark">[left, top]</el-text>, which represents the offset of the status dot from the
|
|
58
|
+
left and top of the default position.
|
|
59
|
+
</p>
|
|
60
|
+
<div class="flex gap-4">
|
|
61
|
+
<el-badge class="item" :value="1" :offset="[10, 5]">
|
|
62
|
+
<el-button> offset</el-button>
|
|
63
|
+
</el-badge>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
<template #footer> <html-encode :tag="snippets.offset" /> </template>
|
|
67
|
+
</el-card>
|
|
68
|
+
</div>
|
|
69
|
+
</template>
|
|
70
|
+
|
|
71
|
+
<script lang="ts" setup>
|
|
72
|
+
import { ref } from 'vue';
|
|
73
|
+
|
|
74
|
+
const colors = ref(['default', 'primary', 'secondary', 'neutral', 'success', 'warning', 'info', 'danger']);
|
|
75
|
+
const snippets = ref({
|
|
76
|
+
basic: `
|
|
77
|
+
<el-badge :value="12" type="primary">
|
|
78
|
+
<el-button>comments</el-button>
|
|
79
|
+
</el-badge>
|
|
80
|
+
`,
|
|
81
|
+
max: `
|
|
82
|
+
<el-badge :value="200" :max="99" class="item">
|
|
83
|
+
<el-button>comments</el-button>
|
|
84
|
+
</el-badge>
|
|
85
|
+
`,
|
|
86
|
+
dot: `<el-badge is-dot class="item">query</el-badge>`,
|
|
87
|
+
offset: `
|
|
88
|
+
<el-badge class="item" :value="1" :offset="[10, 5]">
|
|
89
|
+
<el-button> offset</el-button>
|
|
90
|
+
</el-badge>
|
|
91
|
+
`,
|
|
92
|
+
});
|
|
93
|
+
</script>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex flex-col gap-8 mb-16">
|
|
3
|
+
<h1 class="">Breadcrumb</h1>
|
|
4
|
+
<p>Display prompt information for mouse hover.</p>
|
|
5
|
+
|
|
6
|
+
<el-card>
|
|
7
|
+
<template #header> Basic usage </template>
|
|
8
|
+
<section class="flex flex-col gap-7.5">
|
|
9
|
+
<p>Add the <el-text tag="mark">timus-breadcrumb</el-text> component to the desired place. It will automatically grab the path and convert it into a breadcrumb.</p>
|
|
10
|
+
<timus-breadcrumb :paths="sample_path" />
|
|
11
|
+
</section>
|
|
12
|
+
<template #footer>
|
|
13
|
+
<div class="flex flex-col gap-7.5">
|
|
14
|
+
<html-encode :tag="snippets.basic" />
|
|
15
|
+
<div class="flex flex-col gap-3">
|
|
16
|
+
<h3>Usage On Tabbed Page Example:</h3>
|
|
17
|
+
<p class="p-medium">
|
|
18
|
+
This code will automatically redirect to the first tab, and the page will have a query parameter like
|
|
19
|
+
<span class="comment">http://localhost:3000/about?tab=alert</span>. Additionally, if another tab's name is manually provided in the URL, that tab will be selected by
|
|
20
|
+
default.
|
|
21
|
+
</p>
|
|
22
|
+
<html-encode :tag="snippets.composable" />
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</template>
|
|
26
|
+
</el-card>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
|
|
30
|
+
<script lang="ts" setup>
|
|
31
|
+
import { ref } from 'vue';
|
|
32
|
+
|
|
33
|
+
const sample_path = ref([{ regex: /^\/about$/, label: 'header.about.text' }]);
|
|
34
|
+
const snippets = ref({
|
|
35
|
+
basic: `<timus-breadcrumb :paths="[ { regex: /^\/about$/, label: 'header.about.text' } ]" />`,
|
|
36
|
+
composable: `
|
|
37
|
+
<template>
|
|
38
|
+
<el-tabs v-model="activeTab" @tab-click="tabChanged">
|
|
39
|
+
<el-tab-pane label="Alert" name="alert" lazy><example-alert /></el-tab-pane>
|
|
40
|
+
<el-tab-pane label="Avatar" name="avatar" lazy><example-avatar /></el-tab-pane>
|
|
41
|
+
</el-tabs>
|
|
42
|
+
</template>
|
|
43
|
+
|
|
44
|
+
<script setup lang="ts">
|
|
45
|
+
const { activeTab, tabChanged, setActiveTab, setupBreadcrumbs } = useBreadcrumb();
|
|
46
|
+
const tabs = ['avatar', 'alert'];
|
|
47
|
+
|
|
48
|
+
onMounted(() => {
|
|
49
|
+
setupBreadcrumbs(tabs);
|
|
50
|
+
});
|
|
51
|
+
<\/script>
|
|
52
|
+
`,
|
|
53
|
+
});
|
|
54
|
+
</script>
|