pgo-uiux2 1.0.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/.env +1 -0
- package/.env.production +1 -0
- package/.prettierrc +13 -0
- package/.vscode/extensions.json +3 -0
- package/BUTTON_GUIDE.md +257 -0
- package/README.md +49 -0
- package/THEME_REFERENCE.md +310 -0
- package/eslint.config.ts +27 -0
- package/index.html +13 -0
- package/package.json +85 -0
- package/public/favicon.ico +0 -0
- package/src/App.vue +368 -0
- package/src/assets/fonts/Faruma.ttf +0 -0
- package/src/components/examples/AppBarExample.vue +101 -0
- package/src/components/examples/AvatarExample.vue +47 -0
- package/src/components/examples/BannerExample.vue +287 -0
- package/src/components/examples/BaseInputExample.vue +25 -0
- package/src/components/examples/BreadcrumbExample.vue +53 -0
- package/src/components/examples/CardExample.vue +77 -0
- package/src/components/examples/ChipExample.vue +225 -0
- package/src/components/examples/DatePickerExample.vue +31 -0
- package/src/components/examples/DropdownExample.vue +84 -0
- package/src/components/examples/EditorExample.vue +200 -0
- package/src/components/examples/ExpansionPanelExample.vue +42 -0
- package/src/components/examples/FileUploadExample.vue +40 -0
- package/src/components/examples/FormExample.vue +121 -0
- package/src/components/examples/HugeTest.vue +8 -0
- package/src/components/examples/LayoutContainerExample.vue +80 -0
- package/src/components/examples/ModalExample.vue +82 -0
- package/src/components/examples/NavDrawerExample.vue +170 -0
- package/src/components/examples/NumberFieldExample.vue +145 -0
- package/src/components/examples/RadioButtonExample.vue +161 -0
- package/src/components/examples/SearchExample.vue +322 -0
- package/src/components/examples/SelectExample.vue +121 -0
- package/src/components/examples/StackedTableViewExample.vue +53 -0
- package/src/components/examples/TabExample.vue +336 -0
- package/src/components/examples/TableExample.vue +228 -0
- package/src/components/examples/TextFieldExample.vue +181 -0
- package/src/components/examples/TextareaExample.vue +173 -0
- package/src/components/examples/ThemeToggle.vue +50 -0
- package/src/components/examples/TimelineExample.vue +66 -0
- package/src/components/examples/TipTapEditorExample.vue +20 -0
- package/src/components/examples/TooltipExample.vue +53 -0
- package/src/components/examples/VueDatePickerShowcase.vue +214 -0
- package/src/components/examples/_DatePickerExample.vue +33 -0
- package/src/components/examples/__FormExample.vue +77 -0
- package/src/components/index.ts +25 -0
- package/src/components/pgo/AppBar.vue +347 -0
- package/src/components/pgo/Avatar.vue +139 -0
- package/src/components/pgo/Banner.vue +300 -0
- package/src/components/pgo/Breadcrumb.vue +101 -0
- package/src/components/pgo/Button.vue +171 -0
- package/src/components/pgo/Card.vue +178 -0
- package/src/components/pgo/ConfirmationModel.vue +32 -0
- package/src/components/pgo/DataTable.vue +845 -0
- package/src/components/pgo/DatePicker/CalendarPanel.vue +43 -0
- package/src/components/pgo/DatePicker/__DatePicker.vue +122 -0
- package/src/components/pgo/DatePicker/types.ts +11 -0
- package/src/components/pgo/DatePicker/useCalendar.ts +39 -0
- package/src/components/pgo/DatePicker/useDatePicker.ts +31 -0
- package/src/components/pgo/Deprecated/ToastContainer.vue +51 -0
- package/src/components/pgo/Deprecated/ToastItem.vue +55 -0
- package/src/components/pgo/Dropdown.vue +296 -0
- package/src/components/pgo/DropdownItem.vue +40 -0
- package/src/components/pgo/Editor.vue +511 -0
- package/src/components/pgo/ExpansionPanel.vue +185 -0
- package/src/components/pgo/Footer.vue +39 -0
- package/src/components/pgo/HeroIcon.vue +124 -0
- package/src/components/pgo/InputSearch.vue +194 -0
- package/src/components/pgo/LayoutContainer.vue +104 -0
- package/src/components/pgo/Main.vue +37 -0
- package/src/components/pgo/Modal.vue +273 -0
- package/src/components/pgo/NavDrawer.vue +127 -0
- package/src/components/pgo/NavDrawerItem.vue +161 -0
- package/src/components/pgo/NavigationDrawer.vue +849 -0
- package/src/components/pgo/OLDNavDrawer.vue +661 -0
- package/src/components/pgo/OldAppBar.vue +223 -0
- package/src/components/pgo/PApp.vue +102 -0
- package/src/components/pgo/Pagination.vue +242 -0
- package/src/components/pgo/Search copy.vue +310 -0
- package/src/components/pgo/Search.vue +411 -0
- package/src/components/pgo/StackedTableView.vue +167 -0
- package/src/components/pgo/Tab.vue +617 -0
- package/src/components/pgo/TestInput.vue +395 -0
- package/src/components/pgo/Timeline.vue +367 -0
- package/src/components/pgo/TimelineItem.vue +80 -0
- package/src/components/pgo/TipTapEditor.vue +315 -0
- package/src/components/pgo/Tooltip.NOTES.md +12 -0
- package/src/components/pgo/Tooltip.PROPS.md +21 -0
- package/src/components/pgo/Tooltip.vue +281 -0
- package/src/components/pgo/base/Base.vue +444 -0
- package/src/components/pgo/buttons/Chip.vue +324 -0
- package/src/components/pgo/buttons/ChipGroup.vue +224 -0
- package/src/components/pgo/buttons/Radio.vue +424 -0
- package/src/components/pgo/filters/FilterSection.vue +188 -0
- package/src/components/pgo/filters/Searchbar.vue +216 -0
- package/src/components/pgo/forms/DynamicForm.vue +45 -0
- package/src/components/pgo/forms/Form.vue +132 -0
- package/src/components/pgo/index.ts +15 -0
- package/src/components/pgo/inputs/Checkbox.vue +320 -0
- package/src/components/pgo/inputs/DatePicker.vue +395 -0
- package/src/components/pgo/inputs/FileUpload.vue +326 -0
- package/src/components/pgo/inputs/NumberField.vue +243 -0
- package/src/components/pgo/inputs/Radio.vue +162 -0
- package/src/components/pgo/inputs/RadioGroup.vue +188 -0
- package/src/components/pgo/inputs/Select.vue +535 -0
- package/src/components/pgo/inputs/TextField.vue +194 -0
- package/src/components/pgo/inputs/Textarea.vue +181 -0
- package/src/main.js +12 -0
- package/src/pgo-components/_index.js +31 -0
- package/src/pgo-components/assets/fonts/Faruma.ttf +0 -0
- package/src/pgo-components/assets/fonts/logo.png +0 -0
- package/src/pgo-components/composables/useTheme.js +10 -0
- package/src/pgo-components/directives/tooltip-directive.ts +393 -0
- package/src/pgo-components/index.js +96 -0
- package/src/pgo-components/lib/componentConfig.js +147 -0
- package/src/pgo-components/lib/core/composables/_useCalendar.ts +127 -0
- package/src/pgo-components/lib/core/composables/useDefaults.ts +15 -0
- package/src/pgo-components/lib/core/composables/useLanguageSelect.js +0 -0
- package/src/pgo-components/lib/core/composables/useRtl.ts +12 -0
- package/src/pgo-components/lib/core/defaults/createDefaults.ts +5 -0
- package/src/pgo-components/lib/core/defaults/defaults.ts +7 -0
- package/src/pgo-components/lib/core/rtl/rtl.ts +3 -0
- package/src/pgo-components/lib/core/rtl/setRtl.ts +19 -0
- package/src/pgo-components/lib/drawerState.ts +3 -0
- package/src/pgo-components/lib/i18n/defaultLables.js +71 -0
- package/src/pgo-components/lib/i18n/i18nPlugin.js +52 -0
- package/src/pgo-components/lib/i18n/useI18n.js +35 -0
- package/src/pgo-components/lib/index.ts +38 -0
- package/src/pgo-components/pages/Component.vue +7 -0
- package/src/pgo-components/pages/ComponentRenderer.vue +85 -0
- package/src/pgo-components/pages/Home.vue +130 -0
- package/src/pgo-components/pages/ListView.vue +370 -0
- package/src/pgo-components/pages/Page1.vue +296 -0
- package/src/pgo-components/pages/_Page1.vue +180 -0
- package/src/pgo-components/plugins/SnackBar.vue +251 -0
- package/src/pgo-components/plugins/SnackBarContainer.vue +53 -0
- package/src/pgo-components/plugins/SnackBarPlugin.ts +136 -0
- package/src/pgo-components/plugins/theme-plugin.js +114 -0
- package/src/pgo-components/plugins/types.ts +46 -0
- package/src/pgo-components/plugins/useSnackBar.js +11 -0
- package/src/pgo-components/plugins/useSnackBar.ts +21 -0
- package/src/pgo-components/plugins/validation-plugin.js +11 -0
- package/src/pgo-components/services/Entry.json +813 -0
- package/src/pgo-components/services/axios.js +54 -0
- package/src/pgo-components/services/data.json +90 -0
- package/src/pgo-components/services/person.json +260 -0
- package/src/pgo-components/services/toast.ts +44 -0
- package/src/pgo-components/styles/global.css +234 -0
- package/src/pgo-components/styles/reset.css +96 -0
- package/src/pgo-components/styles/tokens.css +18 -0
- package/src/pgo-components/styles/utilities/border-radius.css +57 -0
- package/src/pgo-components/styles/utilities/borders.css +85 -0
- package/src/pgo-components/styles/utilities/colors.css +38 -0
- package/src/pgo-components/styles/utilities/cursor.css +19 -0
- package/src/pgo-components/styles/utilities/display.css +78 -0
- package/src/pgo-components/styles/utilities/elevation.css +33 -0
- package/src/pgo-components/styles/utilities/flex.css +403 -0
- package/src/pgo-components/styles/utilities/float.css +41 -0
- package/src/pgo-components/styles/utilities/hover.css +9 -0
- package/src/pgo-components/styles/utilities/index.css +18 -0
- package/src/pgo-components/styles/utilities/opacity.css +27 -0
- package/src/pgo-components/styles/utilities/overflow.css +26 -0
- package/src/pgo-components/styles/utilities/palette.css +515 -0
- package/src/pgo-components/styles/utilities/position.css +14 -0
- package/src/pgo-components/styles/utilities/sizing.css +70 -0
- package/src/pgo-components/styles/utilities/spacing.css +578 -0
- package/src/pgo-components/styles/utilities/transitions.css +58 -0
- package/src/pgo-components/styles/utilities/typography.css +91 -0
- package/src/pgo-components/styles/utilities/z-index.css +11 -0
- package/src/pgo-components/tokens/index.js +337 -0
- package/src/router/index.js +88 -0
- package/src/shims-vue.d.ts +14 -0
- package/src/validations/validationRules.js +50 -0
- package/tailwind.config.js +73 -0
- package/test.php +5 -0
- package/tsconfig.json +25 -0
- package/ui +31 -0
- package/ui.pgo.mv.conf +18 -0
- package/vite.config.js +42 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
@layer utilities {
|
|
2
|
+
/* =========================
|
|
3
|
+
Headings
|
|
4
|
+
========================= */
|
|
5
|
+
.vts-text-h1 { font-size: 6rem; font-weight: 300; line-height: 1; letter-spacing: -0.015625em; }
|
|
6
|
+
.vts-text-h2 { font-size: 3.75rem; font-weight: 300; line-height: 1; letter-spacing: -0.0083333333em; }
|
|
7
|
+
.vts-text-h3 { font-size: 3rem; font-weight: 400; line-height: 1.05; letter-spacing: normal; }
|
|
8
|
+
.vts-text-h4 { font-size: 2.125rem; font-weight: 400; line-height: 1.175; letter-spacing: 0.0073529412em; }
|
|
9
|
+
.vts-text-h5 { font-size: 1.5rem; font-weight: 400; line-height: 1.333; }
|
|
10
|
+
.vts-text-h6 { font-size: 1.25rem; font-weight: 500; line-height: 1.6; letter-spacing: 0.0125em; }
|
|
11
|
+
|
|
12
|
+
/* =========================
|
|
13
|
+
Subtitles
|
|
14
|
+
========================= */
|
|
15
|
+
.vts-text-subtitle-1 { font-size: 1rem; font-weight: normal; line-height: 1.75; letter-spacing: 0.009375em; }
|
|
16
|
+
.vts-text-subtitle-2 { font-size: 0.875rem; font-weight: 500; line-height: 1.6; letter-spacing: 0.0071428571em; }
|
|
17
|
+
|
|
18
|
+
/* =========================
|
|
19
|
+
Body text
|
|
20
|
+
========================= */
|
|
21
|
+
.vts-text-body-1 { font-size: 1rem; font-weight: 400; line-height: 1.5; letter-spacing: 0.03125em; }
|
|
22
|
+
.vts-text-body-2 { font-size: 0.875rem; font-weight: 400; line-height: 1.425; letter-spacing: 0.0178571429em; }
|
|
23
|
+
|
|
24
|
+
/* =========================
|
|
25
|
+
Button
|
|
26
|
+
========================= */
|
|
27
|
+
.vts-text-button { font-size: 0.875rem; font-weight: 500; line-height: 2.6; letter-spacing: 0.0892857143em; text-transform: uppercase; }
|
|
28
|
+
|
|
29
|
+
/* =========================
|
|
30
|
+
Caption / Overline
|
|
31
|
+
========================= */
|
|
32
|
+
.vts-text-caption { font-size: 0.75rem; font-weight: 400; line-height: 1.667; letter-spacing: 0.0333333333em; }
|
|
33
|
+
.vts-text-overline { font-size: 0.75rem; font-weight: 500; line-height: 2.667; letter-spacing: 0.1666666667em; text-transform: uppercase; }
|
|
34
|
+
|
|
35
|
+
/* =========================
|
|
36
|
+
Emphasis
|
|
37
|
+
========================= */
|
|
38
|
+
.vts-text-high-emphasis { color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); }
|
|
39
|
+
.vts-text-medium-emphasis { color: rgba(var(--v-theme-on-background), var(--v-medium-emphasis-opacity)); }
|
|
40
|
+
.vts-text-disabled { color: rgba(var(--v-theme-on-background), var(--v-disabled-opacity)); }
|
|
41
|
+
|
|
42
|
+
/* =========================
|
|
43
|
+
Text transform
|
|
44
|
+
========================= */
|
|
45
|
+
.vts-text-uppercase { text-transform: uppercase; }
|
|
46
|
+
.vts-text-lowercase { text-transform: lowercase; }
|
|
47
|
+
.vts-text-capitalize { text-transform: capitalize; }
|
|
48
|
+
.vts-text-none { text-transform: none; }
|
|
49
|
+
|
|
50
|
+
/* =========================
|
|
51
|
+
Text alignment
|
|
52
|
+
========================= */
|
|
53
|
+
.vts-text-start { text-align: start; }
|
|
54
|
+
.vts-text-center { text-align: center; }
|
|
55
|
+
.vts-text-end { text-align: end; }
|
|
56
|
+
.vts-text-justify { text-align: justify; }
|
|
57
|
+
.vts-text-left { text-align: left; }
|
|
58
|
+
.vts-text-right { text-align: right; }
|
|
59
|
+
|
|
60
|
+
/* =========================
|
|
61
|
+
Text overflow / wrapping
|
|
62
|
+
========================= */
|
|
63
|
+
.vts-text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
64
|
+
.vts-text-no-wrap { white-space: nowrap; }
|
|
65
|
+
.vts-text-pre-wrap { white-space: pre-wrap; }
|
|
66
|
+
.vts-text-break { overflow-wrap: break-word; }
|
|
67
|
+
|
|
68
|
+
/* =========================
|
|
69
|
+
Text decoration
|
|
70
|
+
========================= */
|
|
71
|
+
.vts-text-decoration-none { text-decoration: none; }
|
|
72
|
+
.vts-text-decoration-overline { text-decoration: overline; }
|
|
73
|
+
.vts-text-decoration-underline { text-decoration: underline; }
|
|
74
|
+
.vts-text-decoration-line-through { text-decoration: line-through; }
|
|
75
|
+
|
|
76
|
+
/* =========================
|
|
77
|
+
Font weight
|
|
78
|
+
========================= */
|
|
79
|
+
.vts-font-weight-black { font-weight: 900; }
|
|
80
|
+
.vts-font-weight-bold { font-weight: 700; }
|
|
81
|
+
.vts-font-weight-semibold { font-weight: 600; }
|
|
82
|
+
.vts-font-weight-medium { font-weight: 500; }
|
|
83
|
+
.vts-font-weight-regular { font-weight: 400; }
|
|
84
|
+
.vts-font-weight-light { font-weight: 300; }
|
|
85
|
+
.vts-font-weight-thin { font-weight: 100; }
|
|
86
|
+
|
|
87
|
+
/* =========================
|
|
88
|
+
Font style
|
|
89
|
+
========================= */
|
|
90
|
+
.vts-font-italic { font-style: italic; }
|
|
91
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* prettier-ignore */
|
|
2
|
+
@layer utilities {
|
|
3
|
+
/* Z-Index Utilities */
|
|
4
|
+
.vts-z-auto { z-index: auto; }
|
|
5
|
+
.vts-z-0 { z-index: 0; }
|
|
6
|
+
.vts-z-10 { z-index: 10; }
|
|
7
|
+
.vts-z-20 { z-index: 20; }
|
|
8
|
+
.vts-z-30 { z-index: 30; }
|
|
9
|
+
.vts-z-40 { z-index: 40; }
|
|
10
|
+
.vts-z-50 { z-index: 50; }
|
|
11
|
+
}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
export const themes = {
|
|
2
|
+
default: {
|
|
3
|
+
light: {
|
|
4
|
+
color: {
|
|
5
|
+
text: '#0b0b0b',
|
|
6
|
+
textSecondary: '#6b7280',
|
|
7
|
+
background: '#ffffff',
|
|
8
|
+
surface: '#f7f7f8',
|
|
9
|
+
surfaceElevated: '#f9fafb',
|
|
10
|
+
primary: '#950050',
|
|
11
|
+
primaryText: '#ffffff',
|
|
12
|
+
secondary: '#64748b',
|
|
13
|
+
secondaryText: '#ffffff',
|
|
14
|
+
muted: '#6b7280',
|
|
15
|
+
border: 'rgba(0,0,0,0.06)',
|
|
16
|
+
borderLight: 'rgba(0,0,0,0.04)',
|
|
17
|
+
borderHeavy: 'rgba(0,0,0,0.12)',
|
|
18
|
+
divider: 'rgba(0,0,0,0.08)',
|
|
19
|
+
overlay: 'rgba(0,0,0,0.5)',
|
|
20
|
+
success: '#10b981',
|
|
21
|
+
warning: '#f59e0b',
|
|
22
|
+
error: '#ef4444',
|
|
23
|
+
info: '#3b82f6',
|
|
24
|
+
focus: '#950050',
|
|
25
|
+
shadow: '#000000',
|
|
26
|
+
disable: '#9ca3af'
|
|
27
|
+
// inputBackground: '#ed0786'
|
|
28
|
+
},
|
|
29
|
+
radius: {
|
|
30
|
+
sm: '4px',
|
|
31
|
+
md: '8px',
|
|
32
|
+
lg: '12px',
|
|
33
|
+
xl: '16px',
|
|
34
|
+
full: '9999px'
|
|
35
|
+
},
|
|
36
|
+
shadow: {
|
|
37
|
+
sm: '0 1px 3px rgba(2,6,23,0.06)',
|
|
38
|
+
md: '0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)',
|
|
39
|
+
lg: '0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06)',
|
|
40
|
+
xl: '0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)'
|
|
41
|
+
},
|
|
42
|
+
elevation: {
|
|
43
|
+
0: 'none',
|
|
44
|
+
1: '0 1px 3px rgba(2,6,23,0.06)',
|
|
45
|
+
2: '0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)',
|
|
46
|
+
3: '0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06)',
|
|
47
|
+
4: '0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)'
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
dark: {
|
|
51
|
+
color: {
|
|
52
|
+
text: '#e6eef8',
|
|
53
|
+
textSecondary: '#9aa4b2',
|
|
54
|
+
background: '#0b1220',
|
|
55
|
+
surface: '#0f1724',
|
|
56
|
+
surfaceElevated: '#1a2332',
|
|
57
|
+
primary: '#3b82f6',
|
|
58
|
+
primaryText: '#061225',
|
|
59
|
+
secondary: '#64748b',
|
|
60
|
+
secondaryText: '#f1f5f9',
|
|
61
|
+
muted: '#9aa4b2',
|
|
62
|
+
border: 'rgba(255,255,255,0.08)',
|
|
63
|
+
borderLight: 'rgba(255,255,255,0.05)',
|
|
64
|
+
borderHeavy: 'rgba(255,255,255,0.12)',
|
|
65
|
+
divider: 'rgba(255,255,255,0.1)',
|
|
66
|
+
overlay: 'rgba(0,0,0,0.7)',
|
|
67
|
+
success: '#10b981',
|
|
68
|
+
warning: '#f59e0b',
|
|
69
|
+
error: '#ef4444',
|
|
70
|
+
info: '#3b82f6',
|
|
71
|
+
focus: '#3b82f6',
|
|
72
|
+
shadow: '#000000',
|
|
73
|
+
disable: '#4b5563'
|
|
74
|
+
// inputBackground: '#ed0786'
|
|
75
|
+
},
|
|
76
|
+
radius: {
|
|
77
|
+
sm: '4px',
|
|
78
|
+
md: '8px',
|
|
79
|
+
lg: '12px',
|
|
80
|
+
xl: '16px',
|
|
81
|
+
full: '9999px'
|
|
82
|
+
},
|
|
83
|
+
shadow: {
|
|
84
|
+
sm: '0 1px 4px rgba(2,6,23,0.6)',
|
|
85
|
+
md: '0 4px 6px rgba(0, 0, 0, 0.2), 0 1px 3px rgba(0, 0, 0, 0.1)',
|
|
86
|
+
lg: '0 10px 15px rgba(0, 0, 0, 0.3), 0 4px 6px rgba(0, 0, 0, 0.2)',
|
|
87
|
+
xl: '0 20px 25px rgba(0, 0, 0, 0.4), 0 10px 10px rgba(0, 0, 0, 0.3)'
|
|
88
|
+
},
|
|
89
|
+
elevation: {
|
|
90
|
+
0: 'none',
|
|
91
|
+
1: '0 1px 4px rgba(2,6,23,0.6)',
|
|
92
|
+
2: '0 4px 6px rgba(0, 0, 0, 0.2), 0 1px 3px rgba(0, 0, 0, 0.1)',
|
|
93
|
+
3: '0 10px 15px rgba(0, 0, 0, 0.3), 0 4px 6px rgba(0, 0, 0, 0.2)',
|
|
94
|
+
4: '0 20px 25px rgba(0, 0, 0, 0.4), 0 10px 10px rgba(0, 0, 0, 0.3)'
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
classic: {
|
|
100
|
+
light: {
|
|
101
|
+
color: {
|
|
102
|
+
text: '#1b1b18',
|
|
103
|
+
textSecondary: '#7a6e6e',
|
|
104
|
+
background: '#fffdf6',
|
|
105
|
+
surface: '#fff7e6',
|
|
106
|
+
surfaceElevated: '#fffdf6',
|
|
107
|
+
primary: '#9b4dca',
|
|
108
|
+
primaryText: '#ffffff',
|
|
109
|
+
secondary: '#8b7355',
|
|
110
|
+
secondaryText: '#ffffff',
|
|
111
|
+
muted: '#7a6e6e',
|
|
112
|
+
border: 'rgba(27,27,24,0.08)',
|
|
113
|
+
borderLight: 'rgba(27,27,24,0.05)',
|
|
114
|
+
borderHeavy: 'rgba(27,27,24,0.12)',
|
|
115
|
+
divider: 'rgba(27,27,24,0.1)',
|
|
116
|
+
overlay: 'rgba(27,27,24,0.4)',
|
|
117
|
+
success: '#10b981',
|
|
118
|
+
warning: '#f59e0b',
|
|
119
|
+
error: '#ef4444',
|
|
120
|
+
info: '#3b82f6',
|
|
121
|
+
focus: '#950050'
|
|
122
|
+
},
|
|
123
|
+
radius: {
|
|
124
|
+
sm: '3px',
|
|
125
|
+
md: '6px',
|
|
126
|
+
lg: '10px',
|
|
127
|
+
xl: '14px',
|
|
128
|
+
full: '9999px'
|
|
129
|
+
},
|
|
130
|
+
shadow: {
|
|
131
|
+
sm: '0 1px 2px rgba(0,0,0,0.04)',
|
|
132
|
+
md: '0 2px 4px rgba(0,0,0,0.06)',
|
|
133
|
+
lg: '0 4px 6px rgba(0,0,0,0.08)',
|
|
134
|
+
xl: '0 10px 15px rgba(0,0,0,0.1)'
|
|
135
|
+
},
|
|
136
|
+
elevation: {
|
|
137
|
+
0: 'none',
|
|
138
|
+
1: '0 1px 2px rgba(0,0,0,0.04)',
|
|
139
|
+
2: '0 2px 4px rgba(0,0,0,0.06)',
|
|
140
|
+
3: '0 4px 6px rgba(0,0,0,0.08)',
|
|
141
|
+
4: '0 10px 15px rgba(0,0,0,0.1)'
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
dark: {
|
|
145
|
+
color: {
|
|
146
|
+
text: '#f6f3ee',
|
|
147
|
+
textSecondary: '#a8a09a',
|
|
148
|
+
background: '#11100f',
|
|
149
|
+
surface: '#191817',
|
|
150
|
+
surfaceElevated: '#242220',
|
|
151
|
+
primary: '#b083e8',
|
|
152
|
+
primaryText: '#0f0b10',
|
|
153
|
+
secondary: '#9b8b7d',
|
|
154
|
+
secondaryText: '#f6f3ee',
|
|
155
|
+
muted: '#a8a09a',
|
|
156
|
+
border: 'rgba(246,243,238,0.08)',
|
|
157
|
+
borderLight: 'rgba(246,243,238,0.05)',
|
|
158
|
+
borderHeavy: 'rgba(246,243,238,0.12)',
|
|
159
|
+
divider: 'rgba(246,243,238,0.1)',
|
|
160
|
+
overlay: 'rgba(17,16,15,0.7)',
|
|
161
|
+
success: '#10b981',
|
|
162
|
+
warning: '#f59e0b',
|
|
163
|
+
error: '#ef4444',
|
|
164
|
+
info: '#3b82f6',
|
|
165
|
+
focus: '#9b4dca'
|
|
166
|
+
},
|
|
167
|
+
radius: {
|
|
168
|
+
sm: '3px',
|
|
169
|
+
md: '6px',
|
|
170
|
+
lg: '10px',
|
|
171
|
+
xl: '14px',
|
|
172
|
+
full: '9999px'
|
|
173
|
+
},
|
|
174
|
+
shadow: {
|
|
175
|
+
sm: '0 1px 3px rgba(0,0,0,0.6)',
|
|
176
|
+
md: '0 2px 6px rgba(0,0,0,0.7)',
|
|
177
|
+
lg: '0 4px 10px rgba(0,0,0,0.8)',
|
|
178
|
+
xl: '0 10px 20px rgba(0,0,0,0.9)'
|
|
179
|
+
},
|
|
180
|
+
elevation: {
|
|
181
|
+
0: 'none',
|
|
182
|
+
1: '0 1px 3px rgba(0,0,0,0.6)',
|
|
183
|
+
2: '0 2px 6px rgba(0,0,0,0.7)',
|
|
184
|
+
3: '0 4px 10px rgba(0,0,0,0.8)',
|
|
185
|
+
4: '0 10px 20px rgba(0,0,0,0.9)'
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
sap: {
|
|
191
|
+
light: {
|
|
192
|
+
color: {
|
|
193
|
+
text: '#1d1d1f', // Dark grey for text
|
|
194
|
+
background: '#f4f7f6', // Very light grey background to reduce glare
|
|
195
|
+
surface: '#ffffff', // White surface for cards, inputs, etc.
|
|
196
|
+
primary: '#006c8e', // SAP Blue for primary elements (buttons, links)
|
|
197
|
+
primaryText: '#ffffff', // White text for primary buttons and highlights
|
|
198
|
+
secondary: '#7d8a91', // Muted grey for secondary elements
|
|
199
|
+
muted: '#7d8a91', // Lighter grey for less important text and elements
|
|
200
|
+
success: '#4CAF50', // Success messages (green)
|
|
201
|
+
error: '#F44336', // Error messages (red)
|
|
202
|
+
warning: '#FF9800', // Warning messages (orange)
|
|
203
|
+
info: '#2196F3' // Informational messages (blue)
|
|
204
|
+
},
|
|
205
|
+
radius: {
|
|
206
|
+
sm: '4px', // Small border radius for smaller elements (buttons, inputs)
|
|
207
|
+
md: '8px', // Medium border radius for larger elements (cards, modals)
|
|
208
|
+
lg: '12px' // Larger border radius for bigger elements
|
|
209
|
+
},
|
|
210
|
+
shadow: {
|
|
211
|
+
sm: '0 1px 4px rgba(0, 0, 0, 0.1)', // Light shadow for subtle depth
|
|
212
|
+
md: '0 4px 6px rgba(0, 0, 0, 0.1)', // Medium shadow for more pronounced depth
|
|
213
|
+
lg: '0 10px 20px rgba(0, 0, 0, 0.15)' // Larger shadow for cards or modals
|
|
214
|
+
},
|
|
215
|
+
// typography: {
|
|
216
|
+
// fontFamily: '"Segoe UI", "Roboto", "Arial", system-ui, sans-serif', // SAP-like system fonts
|
|
217
|
+
// fontSize: {
|
|
218
|
+
// sm: '0.875rem', // Small text
|
|
219
|
+
// md: '1rem', // Regular body text
|
|
220
|
+
// lg: '1.25rem', // Large text for headings
|
|
221
|
+
// xl: '1.5rem' // Extra large text
|
|
222
|
+
// },
|
|
223
|
+
// fontWeight: {
|
|
224
|
+
// regular: '400', // Regular weight for text
|
|
225
|
+
// bold: '600' // Bold weight for headings and important text
|
|
226
|
+
// },
|
|
227
|
+
// lineHeight: {
|
|
228
|
+
// sm: '1.25', // Small line height for compact text
|
|
229
|
+
// md: '1.5', // Standard line height for readability
|
|
230
|
+
// lg: '1.75' // Larger line height for headings
|
|
231
|
+
// }
|
|
232
|
+
// },
|
|
233
|
+
// spacing: {
|
|
234
|
+
// xs: '4px', // Extra small spacing (margins/paddings)
|
|
235
|
+
// sm: '8px', // Small spacing (margins/paddings)
|
|
236
|
+
// md: '16px', // Medium spacing (margins/paddings)
|
|
237
|
+
// lg: '32px', // Large spacing (margins/paddings)
|
|
238
|
+
// xl: '64px' // Extra large spacing (margins/paddings)
|
|
239
|
+
// },
|
|
240
|
+
// buttons: {
|
|
241
|
+
// primary: {
|
|
242
|
+
// backgroundColor: '#006c8e', // SAP Blue for primary buttons
|
|
243
|
+
// color: '#ffffff', // White text on primary buttons
|
|
244
|
+
// borderRadius: '8px', // Medium rounded corners
|
|
245
|
+
// padding: '8px 16px', // Padding for primary buttons
|
|
246
|
+
// boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)', // Soft shadow for depth
|
|
247
|
+
// hover: {
|
|
248
|
+
// backgroundColor: '#005b72', // Darker SAP blue on hover
|
|
249
|
+
// boxShadow: '0 6px 10px rgba(0, 0, 0, 0.2)' // Slightly stronger shadow on hover
|
|
250
|
+
// }
|
|
251
|
+
// },
|
|
252
|
+
// secondary: {
|
|
253
|
+
// backgroundColor: '#f4f7f6', // Light background for secondary buttons
|
|
254
|
+
// color: '#006c8e', // SAP blue text for secondary buttons
|
|
255
|
+
// borderRadius: '8px', // Medium rounded corners
|
|
256
|
+
// padding: '8px 16px', // Padding for secondary buttons
|
|
257
|
+
// border: '1px solid #006c8e', // Border with SAP blue
|
|
258
|
+
// hover: {
|
|
259
|
+
// backgroundColor: '#e3eaf1', // Lighter background on hover
|
|
260
|
+
// color: '#005b72', // Darker SAP blue on hover
|
|
261
|
+
// borderColor: '#005b72' // Darker border on hover
|
|
262
|
+
// }
|
|
263
|
+
// }
|
|
264
|
+
// },
|
|
265
|
+
// inputs: {
|
|
266
|
+
// backgroundColor: '#ffffff', // White background for inputs
|
|
267
|
+
// borderColor: '#cccccc', // Light grey border for inputs
|
|
268
|
+
// borderRadius: '4px', // Small rounded corners
|
|
269
|
+
// padding: '8px 12px', // Padding inside inputs
|
|
270
|
+
// focus: {
|
|
271
|
+
// borderColor: '#006c8e', // SAP Blue on focus
|
|
272
|
+
// boxShadow: '0 0 5px rgba(0, 108, 142, 0.4)' // Soft blue glow on focus
|
|
273
|
+
// }
|
|
274
|
+
// },
|
|
275
|
+
// cards: {
|
|
276
|
+
// backgroundColor: '#ffffff', // White background for cards
|
|
277
|
+
// borderColor: '#f1f1f1', // Very light grey border for cards
|
|
278
|
+
// borderRadius: '8px', // Medium rounded corners for cards
|
|
279
|
+
// boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)', // Light shadow for cards
|
|
280
|
+
// padding: '16px' // Padding inside cards
|
|
281
|
+
// },
|
|
282
|
+
// links: {
|
|
283
|
+
// color: '#006c8e', // SAP Blue for links
|
|
284
|
+
// hover: {
|
|
285
|
+
// color: '#005b72', // Darker SAP Blue on hover
|
|
286
|
+
// textDecoration: 'underline' // Underline on hover
|
|
287
|
+
// }
|
|
288
|
+
// },
|
|
289
|
+
// header: {
|
|
290
|
+
// backgroundColor: '#ffffff', // White background for header
|
|
291
|
+
// color: '#1d1d1f', // Dark text color for the header
|
|
292
|
+
// boxShadow: '0 2px 4px rgba(0, 0, 0, 0.1)', // Light shadow for header
|
|
293
|
+
// padding: '16px' // Padding for the header
|
|
294
|
+
// },
|
|
295
|
+
// footer: {
|
|
296
|
+
// backgroundColor: '#f4f7f6', // Light grey background for footer
|
|
297
|
+
// color: '#7d8a91', // Muted text color for footer
|
|
298
|
+
// padding: '16px' // Padding for footer
|
|
299
|
+
// },
|
|
300
|
+
// modal: {
|
|
301
|
+
// backgroundColor: '#ffffff', // White background for modal
|
|
302
|
+
// borderRadius: '8px', // Medium rounded corners for modal
|
|
303
|
+
// boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)', // Light shadow for modal
|
|
304
|
+
// padding: '24px', // Padding inside modal
|
|
305
|
+
// overlay: {
|
|
306
|
+
// backgroundColor: 'rgba(0, 0, 0, 0.4)' // Semi-transparent black overlay
|
|
307
|
+
// }
|
|
308
|
+
// },
|
|
309
|
+
// alert: {
|
|
310
|
+
// success: {
|
|
311
|
+
// backgroundColor: '#4CAF50', // Green background for success alerts
|
|
312
|
+
// color: '#ffffff', // White text for success alerts
|
|
313
|
+
// borderRadius: '8px', // Medium rounded corners
|
|
314
|
+
// padding: '8px 16px' // Padding for success alerts
|
|
315
|
+
// },
|
|
316
|
+
// error: {
|
|
317
|
+
// backgroundColor: '#F44336', // Red background for error alerts
|
|
318
|
+
// color: '#ffffff', // White text for error alerts
|
|
319
|
+
// borderRadius: '8px', // Medium rounded corners
|
|
320
|
+
// padding: '8px 16px' // Padding for error alerts
|
|
321
|
+
// },
|
|
322
|
+
// warning: {
|
|
323
|
+
// backgroundColor: '#FF9800', // Orange background for warning alerts
|
|
324
|
+
// color: '#ffffff', // White text for warning alerts
|
|
325
|
+
// borderRadius: '8px', // Medium rounded corners
|
|
326
|
+
// padding: '8px 16px' // Padding for warning alerts
|
|
327
|
+
// },
|
|
328
|
+
// info: {
|
|
329
|
+
// backgroundColor: '#2196F3', // Blue background for info alerts
|
|
330
|
+
// color: '#ffffff', // White text for info alerts
|
|
331
|
+
// borderRadius: '8px', // Medium rounded corners
|
|
332
|
+
// padding: '8px 16px' // Padding for info alerts
|
|
333
|
+
// }
|
|
334
|
+
// }
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { createRouter, createWebHistory } from 'vue-router'
|
|
2
|
+
|
|
3
|
+
import Home from '../pgo-components/pages/Home.vue'
|
|
4
|
+
import Page1 from '../pgo-components/pages/Page1.vue'
|
|
5
|
+
import ComponentDemo from '../pgo-components/pages/Component.vue'
|
|
6
|
+
import ComponentRenderer from '../pgo-components/pages/ComponentRenderer.vue'
|
|
7
|
+
|
|
8
|
+
const routes = [
|
|
9
|
+
{
|
|
10
|
+
path: '/',
|
|
11
|
+
name: 'Home',
|
|
12
|
+
component: Home,
|
|
13
|
+
meta: {
|
|
14
|
+
title: 'Home - PGO UI Components',
|
|
15
|
+
breadcrumb: [
|
|
16
|
+
{ label: 'Home', to: '/' },
|
|
17
|
+
{ label: 'Examples', to: '/asdf' },
|
|
18
|
+
{ label: 'Page 1' }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
path: '/page/:modelName/:componentName',
|
|
24
|
+
name: 'Custom Home',
|
|
25
|
+
model: 'modelName',
|
|
26
|
+
componentName: 'componentName',
|
|
27
|
+
component: ComponentRenderer,
|
|
28
|
+
meta: {
|
|
29
|
+
title: 'Home - PGO UI Components',
|
|
30
|
+
breadcrumb: [
|
|
31
|
+
{ label: 'Home', to: '/' },
|
|
32
|
+
{ label: 'Examples', to: '/asdf' },
|
|
33
|
+
{ label: 'Page 1' }
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
path: '/Components',
|
|
39
|
+
name: 'Components',
|
|
40
|
+
component: Page1,
|
|
41
|
+
meta: {
|
|
42
|
+
title: 'Components - PGO UI Components',
|
|
43
|
+
breadcrumb: [
|
|
44
|
+
{ label: 'Home', to: '/' },
|
|
45
|
+
{ label: 'Components', to: '/Components' },
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
path: '/Components/:id',
|
|
51
|
+
name: 'ComponentDetail',
|
|
52
|
+
component: ComponentDemo,
|
|
53
|
+
meta: {
|
|
54
|
+
title: 'Components - PGO UI Components',
|
|
55
|
+
breadcrumb: (route) => [
|
|
56
|
+
{ label: 'Home', to: '/' },
|
|
57
|
+
{ label: 'Components', to: '/Components' },
|
|
58
|
+
{ label: route.params.id, to: `/Components/${route.params.id}` }
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// {
|
|
63
|
+
// path: '/:pathMatch(.*)*',
|
|
64
|
+
// name: 'NotFound',
|
|
65
|
+
// component: () => import('@/pages/NotFound.vue')
|
|
66
|
+
// }
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
const router = createRouter({
|
|
70
|
+
history: createWebHistory(),
|
|
71
|
+
routes,
|
|
72
|
+
scrollBehavior(to, from, savedPosition) {
|
|
73
|
+
if (savedPosition) {
|
|
74
|
+
return savedPosition
|
|
75
|
+
} else {
|
|
76
|
+
return { top: 0 }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// Update document title
|
|
82
|
+
router.beforeEach((to, from, next) => {
|
|
83
|
+
const title = (to && to.meta && to.meta.title) ? String(to.meta.title) : 'PGO UI Components'
|
|
84
|
+
document.title = title
|
|
85
|
+
next()
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
export default router
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare module '*.vue' {
|
|
2
|
+
import { DefineComponent } from 'vue'
|
|
3
|
+
const component: DefineComponent<{}, {}, any>
|
|
4
|
+
export default component
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// Add this to help JSX types be recognized
|
|
8
|
+
declare namespace JSX {
|
|
9
|
+
interface IntrinsicElements {
|
|
10
|
+
svg: any;
|
|
11
|
+
path: any;
|
|
12
|
+
// Add more elements if necessary, like rect, circle, etc.
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const rules = {
|
|
2
|
+
required: (value) => {
|
|
3
|
+
const msg = {
|
|
4
|
+
en: 'This field is required.',
|
|
5
|
+
dv: 'ފުރަންޖެހޭ'
|
|
6
|
+
}
|
|
7
|
+
return !!value || msg
|
|
8
|
+
},
|
|
9
|
+
email: (value) => {
|
|
10
|
+
const pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
|
11
|
+
return pattern.test(value) || 'Invalid email address.'
|
|
12
|
+
},
|
|
13
|
+
min: (min) => {
|
|
14
|
+
return (value) => {
|
|
15
|
+
return (value && value.length >= min) || `Minimum length is ${min} characters.`
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
max: (max) => {
|
|
19
|
+
return (value) => {
|
|
20
|
+
return (value && value.length <= max) || `Maximum length is ${max} characters.`
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
numeric: (value) => {
|
|
24
|
+
return !isNaN(parseFloat(value)) && isFinite(value) || 'This field must be a number.'
|
|
25
|
+
},
|
|
26
|
+
nid:(country) =>{
|
|
27
|
+
return (value) => {
|
|
28
|
+
if(country === 'mv'){
|
|
29
|
+
const pattern = /^A\d{6}$/
|
|
30
|
+
return pattern.test(value) || 'NID must start with A followed by 6 digits for Maldives'
|
|
31
|
+
}
|
|
32
|
+
// Add more country-specific NID patterns as needed
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
// Custom pattern validator that takes a condition function and a regex pattern
|
|
37
|
+
customPattern: (conditionFn, pattern, errorMsg = 'Invalid format.') => {
|
|
38
|
+
return (value) => {
|
|
39
|
+
// If condition is met, validate with pattern
|
|
40
|
+
if (conditionFn()) {
|
|
41
|
+
const regex = new RegExp(pattern)
|
|
42
|
+
return regex.test(value) || errorMsg
|
|
43
|
+
}
|
|
44
|
+
// If condition not met, skip validation
|
|
45
|
+
return true
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default rules;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
content: [
|
|
3
|
+
'./index.html',
|
|
4
|
+
'./src/**/*.{vue,js,ts,jsx,tsx}',
|
|
5
|
+
],
|
|
6
|
+
darkMode: 'selector',
|
|
7
|
+
safelist: [
|
|
8
|
+
// color backgrounds and hover variants (add any color names you use)
|
|
9
|
+
{
|
|
10
|
+
pattern: /bg-(blue|red|green|yellow|gray|purple|indigo|pink)-(50|100|200|300|400|500|600|700|800|900)/,
|
|
11
|
+
variants: ['hover', 'focus']
|
|
12
|
+
},
|
|
13
|
+
// text colors
|
|
14
|
+
{
|
|
15
|
+
pattern: /text-(blue|red|green|yellow|gray|purple|indigo|pink)-(50|100|200|300|400|500|600|700|800|900)/
|
|
16
|
+
},
|
|
17
|
+
// borders
|
|
18
|
+
{
|
|
19
|
+
pattern: /border-(blue|red|green|yellow|gray|purple|indigo|pink)-(50|100|200|300|400|500|600|700|800|900)/,
|
|
20
|
+
variants: ['hover']
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
theme: {
|
|
24
|
+
extend: {
|
|
25
|
+
// Add RTL and app font families for easier usage in utilities or components
|
|
26
|
+
fontFamily: {
|
|
27
|
+
app: ['var(--app-font)'],
|
|
28
|
+
rtl: [
|
|
29
|
+
'Faruma',
|
|
30
|
+
'system-ui',
|
|
31
|
+
'sans-serif',
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
colors: {
|
|
36
|
+
// background: '#05644D',
|
|
37
|
+
primary: '#05644D',
|
|
38
|
+
// secondary: '#FFA500',
|
|
39
|
+
// third: '#1E40AF',
|
|
40
|
+
// appcolor: '#05644D',
|
|
41
|
+
|
|
42
|
+
// required defaults (otherwise classes like bg-white fail)
|
|
43
|
+
white: '#ffffff',
|
|
44
|
+
black: '#000000',
|
|
45
|
+
transparent: 'transparent',
|
|
46
|
+
current: 'currentColor',
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
fontFamily: {
|
|
50
|
+
// Make Tailwind's default font-sans use the app font CSS variable
|
|
51
|
+
sans: ['var(--app-font)'],
|
|
52
|
+
dv: ['Faruma', 'sans-serif'],
|
|
53
|
+
en: ['Roboto', 'sans-serif'],
|
|
54
|
+
// keep `app` and `rtl` in extend above for convenience
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
// Optional (Vuetify compatibility)
|
|
59
|
+
corePlugins: {
|
|
60
|
+
preflight: false,
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
plugins: [
|
|
64
|
+
// Add small utilities to toggle app font and rtl font via classes
|
|
65
|
+
function ({ addUtilities, theme }) {
|
|
66
|
+
const newUtilities = {
|
|
67
|
+
'.font-app': { 'font-family': theme('fontFamily.app', 'var(--app-font)') },
|
|
68
|
+
'.rtl-font': { 'font-family': theme('fontFamily.rtl').join(', ') },
|
|
69
|
+
}
|
|
70
|
+
addUtilities(newUtilities, { variants: ['responsive'] })
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
}
|