@amelharrak/eldo-ui 1.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.
Files changed (134) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/dist/css/eldo.css +11683 -0
  4. package/dist/css/eldo.css.map +1 -0
  5. package/dist/css/eldo.min.css +1 -0
  6. package/dist/index.cjs +2 -0
  7. package/dist/index.cjs.map +1 -0
  8. package/dist/index.mjs +64 -0
  9. package/dist/index.mjs.map +1 -0
  10. package/dist/types/__tests__/Alert.test.d.ts +1 -0
  11. package/dist/types/__tests__/Button.test.d.ts +1 -0
  12. package/dist/types/__tests__/Modal.test.d.ts +1 -0
  13. package/dist/types/components/Accordion.d.ts +15 -0
  14. package/dist/types/components/Alert.d.ts +15 -0
  15. package/dist/types/components/Avatar.d.ts +10 -0
  16. package/dist/types/components/Badge.d.ts +7 -0
  17. package/dist/types/components/Box.d.ts +27 -0
  18. package/dist/types/components/Breadcrumb.d.ts +15 -0
  19. package/dist/types/components/Button.d.ts +16 -0
  20. package/dist/types/components/ButtonGroup.d.ts +7 -0
  21. package/dist/types/components/Card.d.ts +15 -0
  22. package/dist/types/components/Carousel.d.ts +21 -0
  23. package/dist/types/components/Checkbox.d.ts +10 -0
  24. package/dist/types/components/Col.d.ts +12 -0
  25. package/dist/types/components/Collapse.d.ts +12 -0
  26. package/dist/types/components/Container.d.ts +8 -0
  27. package/dist/types/components/Dropdown.d.ts +19 -0
  28. package/dist/types/components/FileUpload.d.ts +13 -0
  29. package/dist/types/components/Input.d.ts +20 -0
  30. package/dist/types/components/InputOTP.d.ts +13 -0
  31. package/dist/types/components/ListGroup.d.ts +20 -0
  32. package/dist/types/components/Modal.d.ts +13 -0
  33. package/dist/types/components/Navbar.d.ts +17 -0
  34. package/dist/types/components/NumberInput.d.ts +15 -0
  35. package/dist/types/components/Offcanvas.d.ts +15 -0
  36. package/dist/types/components/Pagination.d.ts +14 -0
  37. package/dist/types/components/Popover.d.ts +14 -0
  38. package/dist/types/components/Progress.d.ts +11 -0
  39. package/dist/types/components/Radio.d.ts +11 -0
  40. package/dist/types/components/Row.d.ts +7 -0
  41. package/dist/types/components/Scrollspy.d.ts +13 -0
  42. package/dist/types/components/Select.d.ts +16 -0
  43. package/dist/types/components/Slider.d.ts +16 -0
  44. package/dist/types/components/Sonner.d.ts +21 -0
  45. package/dist/types/components/Spinner.d.ts +11 -0
  46. package/dist/types/components/Stat.d.ts +24 -0
  47. package/dist/types/components/Switch.d.ts +14 -0
  48. package/dist/types/components/Tabs.d.ts +20 -0
  49. package/dist/types/components/Text.d.ts +13 -0
  50. package/dist/types/components/Timeline.d.ts +41 -0
  51. package/dist/types/components/Toast.d.ts +17 -0
  52. package/dist/types/components/Tooltip.d.ts +12 -0
  53. package/dist/types/index.d.ts +40 -0
  54. package/package.json +106 -0
  55. package/setup.js +260 -0
  56. package/src/scss/abstracts/_functions.scss +19 -0
  57. package/src/scss/abstracts/_mixins.scss +33 -0
  58. package/src/scss/abstracts/_variables.scss +119 -0
  59. package/src/scss/base/_reset.scss +24 -0
  60. package/src/scss/base/_transitions.scss +10 -0
  61. package/src/scss/base/_typography.scss +50 -0
  62. package/src/scss/components/_accordion.scss +238 -0
  63. package/src/scss/components/_alert.scss +85 -0
  64. package/src/scss/components/_alerts.scss +137 -0
  65. package/src/scss/components/_avatar.scss +184 -0
  66. package/src/scss/components/_badge.scss +70 -0
  67. package/src/scss/components/_blockquote.scss +41 -0
  68. package/src/scss/components/_breadcrumb.scss +39 -0
  69. package/src/scss/components/_button-group.scss +43 -0
  70. package/src/scss/components/_button.scss +92 -0
  71. package/src/scss/components/_buttons.scss +66 -0
  72. package/src/scss/components/_calendar.scss +520 -0
  73. package/src/scss/components/_card.scss +52 -0
  74. package/src/scss/components/_cards.scss +123 -0
  75. package/src/scss/components/_carousel.scss +490 -0
  76. package/src/scss/components/_charts.scss +29 -0
  77. package/src/scss/components/_checkbox.scss +194 -0
  78. package/src/scss/components/_code.scss +70 -0
  79. package/src/scss/components/_collapse.scss +13 -0
  80. package/src/scss/components/_combobox.scss +239 -0
  81. package/src/scss/components/_date-picker.scss +102 -0
  82. package/src/scss/components/_divider.scss +55 -0
  83. package/src/scss/components/_dropdown.scss +122 -0
  84. package/src/scss/components/_file-upload.scss +233 -0
  85. package/src/scss/components/_floating-labels.scss +247 -0
  86. package/src/scss/components/_form-select.scss +49 -0
  87. package/src/scss/components/_forms.scss +41 -0
  88. package/src/scss/components/_index.scss +7 -0
  89. package/src/scss/components/_input-otp.scss +338 -0
  90. package/src/scss/components/_list-group.scss +95 -0
  91. package/src/scss/components/_modal.scss +166 -0
  92. package/src/scss/components/_nav.scss +175 -0
  93. package/src/scss/components/_navbar.scss +228 -0
  94. package/src/scss/components/_number-input.scss +67 -0
  95. package/src/scss/components/_offcanvas.scss +123 -0
  96. package/src/scss/components/_pagination.scss +64 -0
  97. package/src/scss/components/_placeholders.scss +52 -0
  98. package/src/scss/components/_popovers.scss +69 -0
  99. package/src/scss/components/_progress.scss +90 -0
  100. package/src/scss/components/_range.scss +82 -0
  101. package/src/scss/components/_scrollspy.scss +239 -0
  102. package/src/scss/components/_skeleton.scss +108 -0
  103. package/src/scss/components/_slider.scss +95 -0
  104. package/src/scss/components/_snippet.scss +79 -0
  105. package/src/scss/components/_spinners.scss +137 -0
  106. package/src/scss/components/_stat.scss +42 -0
  107. package/src/scss/components/_stepper.scss +104 -0
  108. package/src/scss/components/_switch.scss +57 -0
  109. package/src/scss/components/_table.scss +109 -0
  110. package/src/scss/components/_tag.scss +60 -0
  111. package/src/scss/components/_tags-input.scss +60 -0
  112. package/src/scss/components/_timeline.scss +238 -0
  113. package/src/scss/components/_toasts.scss +75 -0
  114. package/src/scss/components/_tooltips.scss +50 -0
  115. package/src/scss/components/_tree-view.scss +72 -0
  116. package/src/scss/components/_user.scss +26 -0
  117. package/src/scss/docs/_examples.scss +148 -0
  118. package/src/scss/docs/_layout.scss +251 -0
  119. package/src/scss/docs/_search.scss +141 -0
  120. package/src/scss/eldo.scss +74 -0
  121. package/src/scss/layout/_container.scss +37 -0
  122. package/src/scss/layout/_grid.scss +49 -0
  123. package/src/scss/pages/_landing-config.scss +135 -0
  124. package/src/scss/pages/_landing-features-enhanced.scss +165 -0
  125. package/src/scss/pages/_landing-hero-enhanced.scss +427 -0
  126. package/src/scss/pages/_landing-setup.scss +264 -0
  127. package/src/scss/pages/_landing.scss +1828 -0
  128. package/src/scss/utilities/_api.scss +66 -0
  129. package/src/scss/utilities/_colors.scss +32 -0
  130. package/src/scss/utilities/_display.scss +70 -0
  131. package/src/scss/utilities/_glass.scss +32 -0
  132. package/src/scss/utilities/_helpers.scss +16 -0
  133. package/src/scss/utilities/_map.scss +224 -0
  134. package/src/scss/utilities/_spacing.scss +58 -0
package/setup.js ADDED
@@ -0,0 +1,260 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Eldo UI Interactive Setup
5
+ * Interactive CLI tool to customize your Eldo UI installation
6
+ */
7
+
8
+ const readline = require('readline');
9
+ const { exec } = require('child_process');
10
+ const fs = require('fs');
11
+ const path = require('path');
12
+
13
+ // ANSI color codes
14
+ const colors = {
15
+ reset: '\x1b[0m',
16
+ bright: '\x1b[1m',
17
+ dim: '\x1b[2m',
18
+ green: '\x1b[32m',
19
+ blue: '\x1b[34m',
20
+ cyan: '\x1b[36m',
21
+ yellow: '\x1b[33m',
22
+ magenta: '\x1b[35m',
23
+ red: '\x1b[31m',
24
+ };
25
+
26
+ // Available components
27
+ const components = [
28
+ { id: 'buttons', name: 'Buttons', size: '8kb', selected: false },
29
+ { id: 'alerts', name: 'Alerts', size: '6kb', selected: false },
30
+ { id: 'cards', name: 'Cards', size: '5kb', selected: false },
31
+ { id: 'forms', name: 'Form Controls', size: '12kb', selected: false },
32
+ { id: 'modals', name: 'Modals', size: '10kb', selected: false },
33
+ { id: 'navbar', name: 'Navbar', size: '9kb', selected: false },
34
+ { id: 'badges', name: 'Badges', size: '3kb', selected: false },
35
+ { id: 'progress', name: 'Progress Bars', size: '4kb', selected: false },
36
+ { id: 'tooltips', name: 'Tooltips', size: '7kb', selected: false },
37
+ { id: 'dropdown', name: 'Dropdowns', size: '8kb', selected: false },
38
+ ];
39
+
40
+ let currentIndex = 0;
41
+
42
+ // Clear screen
43
+ function clearScreen() {
44
+ console.clear();
45
+ }
46
+
47
+ // Print header
48
+ function printHeader() {
49
+ console.log(`${colors.bright}${colors.cyan}
50
+ ╔═══════════════════════════════════════════════════════╗
51
+ ║ ║
52
+ ║ 🎨 Eldo UI Interactive Setup 🎨 ║
53
+ ║ ║
54
+ ║ Select components to include in your build ║
55
+ ║ ║
56
+ ╚═══════════════════════════════════════════════════════╝
57
+ ${colors.reset}\n`);
58
+ }
59
+
60
+ // Print instructions
61
+ function printInstructions() {
62
+ console.log(`${colors.dim}Instructions:${colors.reset}`);
63
+ console.log(` ${colors.green}↑/↓${colors.reset} Navigate`);
64
+ console.log(` ${colors.green}Space${colors.reset} Toggle selection`);
65
+ console.log(` ${colors.green}A${colors.reset} Select all`);
66
+ console.log(` ${colors.green}D${colors.reset} Deselect all`);
67
+ console.log(` ${colors.green}Enter${colors.reset} Confirm and continue\n`);
68
+ }
69
+
70
+ // Print component list
71
+ function printComponents() {
72
+ console.log(`${colors.bright}Available Components:${colors.reset}\n`);
73
+
74
+ components.forEach((component, index) => {
75
+ const cursor = index === currentIndex ? '❯' : ' ';
76
+ const checkbox = component.selected ? '☑' : '☐';
77
+ const highlight = index === currentIndex ? colors.cyan : '';
78
+ const reset = index === currentIndex ? colors.reset : '';
79
+
80
+ console.log(` ${highlight}${cursor} ${checkbox} ${component.name}${reset} ${colors.dim}(${component.size})${colors.reset}`);
81
+ });
82
+
83
+ console.log();
84
+ }
85
+
86
+ // Print summary
87
+ function printSummary() {
88
+ const selectedCount = components.filter(c => c.selected).length;
89
+ const totalSize = components
90
+ .filter(c => c.selected)
91
+ .reduce((sum, c) => sum + parseInt(c.size), 0);
92
+
93
+ console.log(`${colors.bright}Selection Summary:${colors.reset}`);
94
+ console.log(` Components: ${colors.green}${selectedCount}${colors.reset}/${components.length}`);
95
+ console.log(` Total size: ${colors.green}~${totalSize}kb${colors.reset}\n`);
96
+ }
97
+
98
+ // Render UI
99
+ function render() {
100
+ clearScreen();
101
+ printHeader();
102
+ printInstructions();
103
+ printComponents();
104
+ printSummary();
105
+ }
106
+
107
+ // Handle key press
108
+ function handleKeyPress(key) {
109
+ if (key === '\u001B[A') { // Up arrow
110
+ currentIndex = Math.max(0, currentIndex - 1);
111
+ render();
112
+ } else if (key === '\u001B[B') { // Down arrow
113
+ currentIndex = Math.min(components.length - 1, currentIndex + 1);
114
+ render();
115
+ } else if (key === ' ') { // Space
116
+ components[currentIndex].selected = !components[currentIndex].selected;
117
+ render();
118
+ } else if (key.toLowerCase() === 'a') { // Select all
119
+ components.forEach(c => c.selected = true);
120
+ render();
121
+ } else if (key.toLowerCase() === 'd') { // Deselect all
122
+ components.forEach(c => c.selected = false);
123
+ render();
124
+ } else if (key === '\r' || key === '\n') { // Enter
125
+ return true; // Continue to next step
126
+ }
127
+ return false;
128
+ }
129
+
130
+ // Generate import code
131
+ function generateImports() {
132
+ const selectedComponents = components.filter(c => c.selected);
133
+
134
+ if (selectedComponents.length === 0) {
135
+ return '// No components selected';
136
+ }
137
+
138
+ const imports = selectedComponents.map(c =>
139
+ `import { ${c.name.replace(/\s+/g, '')} } from 'eldo-ui/${c.id}';`
140
+ ).join('\n');
141
+
142
+ const scssImports = selectedComponents.map(c =>
143
+ `@use 'eldo-ui/scss/components/${c.id}';`
144
+ ).join('\n');
145
+
146
+ return { js: imports, scss: scssImports };
147
+ }
148
+
149
+ // Show progress bar
150
+ function showProgress(message, percentage) {
151
+ const barLength = 40;
152
+ const filled = Math.round((percentage / 100) * barLength);
153
+ const empty = barLength - filled;
154
+
155
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
156
+ process.stdout.write(`\r${colors.cyan}${message}${colors.reset} [${colors.green}${bar}${colors.reset}] ${percentage}%`);
157
+
158
+ if (percentage === 100) {
159
+ console.log();
160
+ }
161
+ }
162
+
163
+ // Simulate installation
164
+ async function install() {
165
+ clearScreen();
166
+ printHeader();
167
+
168
+ const selectedComponents = components.filter(c => c.selected);
169
+ console.log(`${colors.bright}Installing ${selectedComponents.length} components...${colors.reset}\n`);
170
+
171
+ // Show commands
172
+ console.log(`${colors.dim}Commands to execute:${colors.reset}`);
173
+ selectedComponents.forEach(c => {
174
+ console.log(` ${colors.yellow}$${colors.reset} npm install @eldo-ui/${c.id}`);
175
+ });
176
+ console.log();
177
+
178
+ // Simulate progress
179
+ for (let i = 0; i <= 100; i += 10) {
180
+ showProgress('Installing packages', i);
181
+ await new Promise(resolve => setTimeout(resolve, 200));
182
+ }
183
+
184
+ console.log();
185
+
186
+ // Generate code
187
+ const code = generateImports();
188
+
189
+ console.log(`\n${colors.bright}${colors.green}✓ Installation complete!${colors.reset}\n`);
190
+
191
+ // Show generated code
192
+ console.log(`${colors.bright}JavaScript imports:${colors.reset}`);
193
+ console.log(`${colors.dim}// Add to your main.js${colors.reset}`);
194
+ console.log(`${colors.cyan}${code.js}${colors.reset}\n`);
195
+
196
+ console.log(`${colors.bright}SCSS imports:${colors.reset}`);
197
+ console.log(`${colors.dim}// Add to your styles.scss${colors.reset}`);
198
+ console.log(`${colors.cyan}${code.scss}${colors.reset}\n`);
199
+
200
+ // Save to file
201
+ const outputDir = './eldo-ui-setup';
202
+ if (!fs.existsSync(outputDir)) {
203
+ fs.mkdirSync(outputDir);
204
+ }
205
+
206
+ fs.writeFileSync(
207
+ path.join(outputDir, 'imports.js'),
208
+ code.js
209
+ );
210
+
211
+ fs.writeFileSync(
212
+ path.join(outputDir, 'imports.scss'),
213
+ code.scss
214
+ );
215
+
216
+ console.log(`${colors.green}✓${colors.reset} Files saved to ${colors.cyan}./eldo-ui-setup/${colors.reset}\n`);
217
+
218
+ // Show bundle size
219
+ const totalSize = selectedComponents.reduce((sum, c) => sum + parseInt(c.size), 0);
220
+ console.log(`${colors.bright}Bundle size:${colors.reset} ${colors.green}~${totalSize}kb${colors.reset}`);
221
+ console.log(`${colors.dim}(93% smaller than full bundle)${colors.reset}\n`);
222
+ }
223
+
224
+ // Main function
225
+ async function main() {
226
+ // Setup readline
227
+ readline.emitKeypressEvents(process.stdin);
228
+ if (process.stdin.isTTY) {
229
+ process.stdin.setRawMode(true);
230
+ }
231
+
232
+ render();
233
+
234
+ // Listen for keypress
235
+ return new Promise((resolve) => {
236
+ process.stdin.on('keypress', async (str, key) => {
237
+ if (key.ctrl && key.name === 'c') {
238
+ process.exit();
239
+ }
240
+
241
+ const shouldContinue = handleKeyPress(str);
242
+
243
+ if (shouldContinue) {
244
+ process.stdin.setRawMode(false);
245
+ process.stdin.pause();
246
+ await install();
247
+ resolve();
248
+ }
249
+ });
250
+ });
251
+ }
252
+
253
+ // Run
254
+ main().then(() => {
255
+ console.log(`${colors.bright}${colors.green}Happy coding! 🚀${colors.reset}\n`);
256
+ process.exit(0);
257
+ }).catch(err => {
258
+ console.error(`${colors.red}Error:${colors.reset}`, err);
259
+ process.exit(1);
260
+ });
@@ -0,0 +1,19 @@
1
+ @use "sass:math";
2
+ @use "sass:color";
3
+
4
+ // Check if color is light or dark to determine text color
5
+ @function color-contrast($color) {
6
+ $r: color.channel($color, "red", $space: rgb);
7
+ $g: color.channel($color, "green", $space: rgb);
8
+ $b: color.channel($color, "blue", $space: rgb);
9
+
10
+ $yiq: math.div(($r * 299) + ($g * 587) + ($b * 114), 1000);
11
+
12
+ @if ($yiq >=150) {
13
+ @return #000;
14
+ }
15
+
16
+ @else {
17
+ @return #fff;
18
+ }
19
+ }
@@ -0,0 +1,33 @@
1
+ @use "sass:map";
2
+ @use "variables" as *;
3
+
4
+ // Breakpoint Mixin
5
+ @mixin media-up($breakpoint) {
6
+ @if map.has-key($grid-breakpoints, $breakpoint) {
7
+ $min: map.get($grid-breakpoints, $breakpoint);
8
+
9
+ @if $min !=0 {
10
+ @media (min-width: $min) {
11
+ @content;
12
+ }
13
+ }
14
+
15
+ @else {
16
+ @content;
17
+ }
18
+ }
19
+
20
+ @else {
21
+ @warn "No value retrieved for breakpoint: #{$breakpoint}.";
22
+ }
23
+ }
24
+
25
+ @mixin media-down($breakpoint) {
26
+ @if map.has-key($grid-breakpoints, $breakpoint) {
27
+ $max: map.get($grid-breakpoints, $breakpoint);
28
+
29
+ @media (max-width: $max - 0.02) {
30
+ @content;
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,119 @@
1
+ @use "sass:color";
2
+ // Color Palette System (HSL for easy manipulation)
3
+ $default: hsl(240, 5%, 26%) !default; // Zinc-like
4
+ $primary: hsl(212, 100%, 47%) !default; // HeroUI Blue
5
+ $secondary: hsl(270, 59%, 58%) !default; // HeroUI Purple
6
+ $success: hsl(152, 57%, 50%) !default; // HeroUI Green
7
+ $info: hsl(190, 80%, 50%) !default;
8
+ $warning: hsl(36, 100%, 50%) !default; // HeroUI Yellow/Orange
9
+ $danger: hsl(338, 70%, 50%) !default; // HeroUI Red/Pinkish
10
+ $light: hsl(210, 20%, 98%) !default;
11
+ $dark: hsl(220, 30%, 15%) !default;
12
+
13
+ // Basic Colors
14
+ $white: #fff !default;
15
+ $black: #000 !default;
16
+
17
+ // Grays
18
+ $gray-50: #f9fafb !default;
19
+ $gray-100: #f4f4f5 !default; // Zinc 100
20
+ $gray-200: #e4e4e7 !default;
21
+ $gray-300: #d4d4d8 !default;
22
+ $gray-400: #a1a1aa !default;
23
+ $gray-500: #71717a !default;
24
+ $gray-600: #52525b !default;
25
+ $gray-700: #3f3f46 !default;
26
+ $gray-800: #27272a !default;
27
+ $gray-900: #18181b !default;
28
+
29
+ // Body & Text
30
+ $body-bg: $white !default;
31
+ $body-color: $gray-900 !default;
32
+ $font-family-base: "Inter", system-ui, -apple-system, sans-serif !default; // HeroUI uses Inter often
33
+ $font-size-base: 1rem !default;
34
+ $font-size-sm: 0.875rem !default;
35
+ $font-weight-light: 300 !default;
36
+ $font-weight-normal: 400 !default;
37
+ $font-weight-medium: 500 !default;
38
+ $font-weight-bold: 700 !default;
39
+ $font-weight-semibold: 600 !default;
40
+ $line-height-base: 1.5 !default;
41
+ $line-height-base: 1.5 !default;
42
+
43
+ $h1-font-size: 2.5rem !default;
44
+ $h2-font-size: 2rem !default;
45
+ $h3-font-size: 1.75rem !default;
46
+ $h4-font-size: 1.5rem !default;
47
+ $h5-font-size: 1.25rem !default;
48
+ $h6-font-size: 1rem !default;
49
+
50
+ $font-family-code: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace !default;
51
+
52
+ // Spacing
53
+ $spacer: 1rem !default;
54
+ $spacers: (
55
+ 0: 0,
56
+ 1: $spacer * 0.25,
57
+ 2: $spacer * 0.5,
58
+ 3: $spacer,
59
+ 4: $spacer * 1.5,
60
+ 5: $spacer * 3) !default;
61
+
62
+ // Border Radius
63
+ $border-radius: 0.5rem !default; // Base rounded-lg
64
+ $border-radius-sm: 0.375rem !default;
65
+ $border-radius-lg: 0.75rem !default;
66
+ $border-radius-xl: 1rem !default;
67
+
68
+ // Box Shadow
69
+ $box-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !default;
70
+ $box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
71
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06) !default; // Tailwind/HeroUI style
72
+ $box-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
73
+ 0 4px 6px -2px rgba(0, 0, 0, 0.05) !default;
74
+
75
+ // Breakpoints
76
+ $grid-breakpoints: (
77
+ xs: 0,
78
+ sm: 576px,
79
+ md: 768px,
80
+ lg: 992px,
81
+ xl: 1200px,
82
+ xxl: 1400px) !default;
83
+
84
+ $theme-colors: (
85
+ "default": $default,
86
+ "primary": $primary,
87
+ "secondary": $secondary,
88
+ "success": $success,
89
+ "info": $info,
90
+ "warning": $warning,
91
+ "danger": $danger,
92
+ "light": $light,
93
+ "dark": $dark) !default;
94
+
95
+ // CSS Custom Properties Root
96
+ :root {
97
+ --e-default: #{$default};
98
+ --e-primary: #{$primary};
99
+ --e-secondary: #{$secondary};
100
+ --e-success: #{$success};
101
+ --e-info: #{$info};
102
+ --e-warning: #{$warning};
103
+ --e-danger: #{$danger};
104
+ --e-light: #{$light};
105
+ --e-dark: #{$dark};
106
+
107
+ // Soft Variants (10% opacity equivalent for light mode)
108
+ --e-primary-soft: #{color.scale($primary, $lightness: 90%)};
109
+ --e-secondary-soft: #{color.scale($secondary, $lightness: 90%)};
110
+ --e-success-soft: #{color.scale($success, $lightness: 90%)};
111
+ --e-info-soft: #{color.scale($info, $lightness: 90%)};
112
+ --e-warning-soft: #{color.scale($warning, $lightness: 90%)};
113
+ --e-danger-soft: #{color.scale($danger, $lightness: 90%)};
114
+
115
+ --e-body-bg: #{$body-bg};
116
+ --e-body-color: #{$body-color};
117
+
118
+ --e-font-sans: #{$font-family-base};
119
+ }
@@ -0,0 +1,24 @@
1
+ @use "../abstracts/variables" as *;
2
+
3
+ *,
4
+ *::before,
5
+ *::after {
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ body {
10
+ margin: 0;
11
+ font-family: var(--e-font-sans);
12
+ font-size: 1rem;
13
+ font-weight: 400;
14
+ line-height: 1.5;
15
+ color: var(--e-body-color);
16
+ background-color: var(--e-body-bg);
17
+ -webkit-text-size-adjust: 100%;
18
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
19
+ }
20
+
21
+ img {
22
+ max-width: 100%;
23
+ height: auto;
24
+ }
@@ -0,0 +1,10 @@
1
+ // Transitions
2
+ // Base classes for Bootstrap-compatible animations
3
+
4
+ .fade {
5
+ transition: opacity .15s linear;
6
+
7
+ &:not(.show) {
8
+ opacity: 0;
9
+ }
10
+ }
@@ -0,0 +1,50 @@
1
+ h1,
2
+ h2,
3
+ h3,
4
+ h4,
5
+ h5,
6
+ h6 {
7
+ margin-top: 0;
8
+ margin-bottom: 0.5rem;
9
+ font-weight: 500;
10
+ line-height: 1.2;
11
+ text-wrap: balance;
12
+ }
13
+
14
+ h1 {
15
+ font-size: 2.5rem;
16
+ }
17
+
18
+ h2 {
19
+ font-size: 2rem;
20
+ }
21
+
22
+ h3 {
23
+ font-size: 1.75rem;
24
+ }
25
+
26
+ h4 {
27
+ font-size: 1.5rem;
28
+ }
29
+
30
+ h5 {
31
+ font-size: 1.25rem;
32
+ }
33
+
34
+ h6 {
35
+ font-size: 1rem;
36
+ }
37
+
38
+ p {
39
+ margin-top: 0;
40
+ margin-bottom: 1rem;
41
+ }
42
+
43
+ a {
44
+ color: var(--e-primary);
45
+ text-decoration: none;
46
+
47
+ &:hover {
48
+ text-decoration: underline;
49
+ }
50
+ }