@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
@@ -0,0 +1,175 @@
1
+ @use "sass:color";
2
+ @use "../abstracts/variables" as *;
3
+
4
+ // Base Nav
5
+ .nav {
6
+ display: flex;
7
+ flex-wrap: wrap;
8
+ padding-left: 0;
9
+ margin-bottom: 0;
10
+ list-style: none;
11
+ gap: 0.5rem; // Add gap
12
+ }
13
+
14
+ .nav-link {
15
+ display: block;
16
+ padding: 0.5rem 1rem;
17
+ color: $gray-600;
18
+ text-decoration: none;
19
+ border-radius: $border-radius; // Default rounded
20
+ transition: all 0.2s ease;
21
+ font-weight: 500;
22
+
23
+ &:hover,
24
+ &:focus {
25
+ color: $dark;
26
+ background-color: $gray-100;
27
+ outline: 0;
28
+ }
29
+
30
+ &.disabled {
31
+ color: $gray-400;
32
+ pointer-events: none;
33
+ cursor: default;
34
+ }
35
+
36
+ &.active {
37
+ color: $primary;
38
+ font-weight: 600;
39
+ }
40
+ }
41
+
42
+ // Tabs (Underline style)
43
+ .nav-tabs {
44
+ border-bottom: 2px solid $gray-200;
45
+ gap: 0; // No gap for connected tabs
46
+ margin-bottom: 0;
47
+
48
+ .nav-link {
49
+ margin-bottom: -2px;
50
+ background: none;
51
+ border: 0;
52
+ border-bottom: 2px solid transparent;
53
+ border-radius: 0;
54
+ color: $gray-600;
55
+
56
+ &:hover {
57
+ color: $dark;
58
+ background-color: transparent;
59
+ border-bottom-color: $gray-300;
60
+ }
61
+
62
+ &.active {
63
+ color: $primary;
64
+ background: none;
65
+ border-bottom-color: $primary;
66
+ }
67
+ }
68
+ }
69
+
70
+ // Line Tabs (Chakra Style)
71
+ .nav-tabs-line {
72
+ border-bottom: 2px solid $gray-100;
73
+ gap: 1.5rem;
74
+ margin-bottom: 0;
75
+
76
+ .nav-link {
77
+ padding: 0.75rem 0;
78
+ border: 0;
79
+ border-bottom: 2px solid transparent;
80
+ border-radius: 0;
81
+ color: $gray-500;
82
+ margin-bottom: -2px;
83
+
84
+ &:hover {
85
+ color: $dark;
86
+ border-bottom-color: $gray-200;
87
+ }
88
+
89
+ &.active {
90
+ color: $primary;
91
+ border-bottom-color: $primary;
92
+ background: none;
93
+ }
94
+ }
95
+ }
96
+
97
+ // Enclosed Tabs
98
+ .nav-tabs-enclosed {
99
+ background-color: $gray-50;
100
+ padding: 0.25rem;
101
+ border-radius: $border-radius-lg;
102
+ display: inline-flex;
103
+ border: 1px solid $gray-200;
104
+ margin-bottom: 0;
105
+
106
+ .nav-link {
107
+ border-radius: $border-radius;
108
+ color: $gray-600;
109
+ padding: 0.4rem 1.25rem;
110
+ border: 1px solid transparent;
111
+
112
+ &.active {
113
+ background-color: $white;
114
+ color: $primary;
115
+ border-color: $gray-200;
116
+ box-shadow: $box-shadow-sm;
117
+ }
118
+
119
+ &:hover:not(.active) {
120
+ background-color: rgba($white, 0.5);
121
+ color: $dark;
122
+ }
123
+ }
124
+ }
125
+
126
+ // Pills (Segmented Control / HeroUI Capsular)
127
+ .nav-pills {
128
+ background-color: $gray-100; // Container bg
129
+ padding: 0.25rem;
130
+ border-radius: $border-radius-lg;
131
+ display: inline-flex;
132
+ gap: 0;
133
+
134
+ .nav-link {
135
+ border-radius: $border-radius;
136
+ color: $gray-600;
137
+ padding: 0.375rem 1rem;
138
+
139
+ &:hover {
140
+ color: $dark;
141
+ background-color: rgba(255, 255, 255, 0.5);
142
+ }
143
+
144
+ &.active,
145
+ .show>.nav-link {
146
+ color: $dark;
147
+ background-color: #fff;
148
+ box-shadow: $box-shadow-sm; // Elevated pill
149
+ }
150
+ }
151
+
152
+ // Fill variant
153
+ &.nav-fill {
154
+ display: flex;
155
+ width: 100%;
156
+
157
+ .nav-item,
158
+ .nav-link {
159
+ flex: 1 1 auto;
160
+ text-align: center;
161
+ }
162
+ }
163
+ }
164
+
165
+ // Tab Content
166
+ .tab-content {
167
+ >.tab-pane {
168
+ display: none;
169
+
170
+ &.active,
171
+ &.show {
172
+ display: block;
173
+ }
174
+ }
175
+ }
@@ -0,0 +1,228 @@
1
+ @use "../abstracts/variables" as *;
2
+
3
+ .navbar {
4
+ position: relative;
5
+ display: flex;
6
+ flex-wrap: wrap;
7
+ align-items: center;
8
+ justify-content: space-between;
9
+ padding: 0.75rem 1.5rem;
10
+ transition: all 0.3s ease;
11
+ background-color: #fff;
12
+ border-bottom: 1px solid #e2e8f0;
13
+
14
+ // Glassmorphism variant
15
+ &.navbar-glass {
16
+ background-color: rgba(255, 255, 255, 0.85);
17
+ backdrop-filter: blur(12px);
18
+ -webkit-backdrop-filter: blur(12px);
19
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
20
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.03);
21
+ position: sticky;
22
+ top: 0;
23
+ z-index: 1020;
24
+ }
25
+
26
+ &.navbar-transparent {
27
+ background-color: transparent;
28
+ border-bottom: none;
29
+ box-shadow: none;
30
+ }
31
+
32
+ &.navbar-dark {
33
+ background-color: #0f172a; // Slate-900
34
+ border-bottom: 1px solid #1e293b;
35
+ color: #fff;
36
+
37
+ .navbar-brand,
38
+ .nav-link {
39
+ color: #f8fafc;
40
+
41
+ &:hover {
42
+ color: #fff;
43
+ background-color: rgba(255, 255, 255, 0.1);
44
+ }
45
+ }
46
+
47
+ .form-control {
48
+ background-color: #1e293b;
49
+ border-color: #334155;
50
+ color: #fff;
51
+
52
+ &::placeholder {
53
+ color: #94a3b8;
54
+ }
55
+
56
+ &:focus {
57
+ background-color: #0f172a;
58
+ border-color: #3b82f6;
59
+ }
60
+ }
61
+ }
62
+ }
63
+
64
+ .navbar-brand {
65
+ padding: 0;
66
+ margin-right: 2rem;
67
+ font-size: 1.25rem;
68
+ font-weight: 700;
69
+ text-decoration: none;
70
+ color: #0f172a; // Slate-900
71
+ white-space: nowrap;
72
+ display: flex;
73
+ align-items: center;
74
+ gap: 0.75rem;
75
+ letter-spacing: -0.025em;
76
+
77
+ img {
78
+ height: 32px;
79
+ width: auto;
80
+ }
81
+ }
82
+
83
+ .navbar-nav {
84
+ display: flex;
85
+ flex-direction: row;
86
+ padding-left: 0;
87
+ margin-bottom: 0;
88
+ list-style: none;
89
+ gap: 0.5rem;
90
+
91
+ @media (max-width: 991.98px) {
92
+ flex-direction: column;
93
+ width: 100%;
94
+ margin-top: 1rem;
95
+ gap: 0.25rem;
96
+ }
97
+ }
98
+
99
+ .nav-link {
100
+ display: block;
101
+ padding: 0.5rem 1rem;
102
+ text-decoration: none;
103
+ font-weight: 500;
104
+ color: #64748b; // Slate-500
105
+ border-radius: 0.375rem;
106
+ transition: all 0.2s ease;
107
+ font-size: 0.9375rem;
108
+
109
+ &:hover {
110
+ color: #0f172a; // Slate-900
111
+ background-color: #f1f5f9; // Slate-100
112
+ }
113
+
114
+ &.active {
115
+ color: #2563eb; // Primary Blue
116
+ background-color: rgba(37, 99, 235, 0.08);
117
+ font-weight: 600;
118
+ }
119
+ }
120
+
121
+ // Utilities for Navbar
122
+ .navbar-actions {
123
+ display: flex;
124
+ align-items: center;
125
+ gap: 1rem;
126
+ }
127
+
128
+ .navbar-search {
129
+ position: relative;
130
+ max-width: 320px;
131
+ width: 100%;
132
+
133
+ .form-control {
134
+ padding-left: 2.5rem;
135
+ border-radius: 99px;
136
+ font-size: 0.875rem;
137
+ }
138
+
139
+ .search-icon {
140
+ position: absolute;
141
+ left: 1rem;
142
+ top: 50%;
143
+ transform: translateY(-50%);
144
+ color: #94a3b8;
145
+ pointer-events: none;
146
+ }
147
+ }
148
+
149
+ // Toggler logic
150
+ .navbar-toggler {
151
+ padding: 0.25rem 0.75rem;
152
+ font-size: 1.25rem;
153
+ line-height: 1;
154
+ background-color: transparent;
155
+ border: 1px solid transparent;
156
+ border-radius: 0.375rem;
157
+ transition: box-shadow 0.15s ease-in-out;
158
+ color: rgba(0, 0, 0, 0.55);
159
+ border-color: rgba(0, 0, 0, 0.1);
160
+
161
+ &:focus {
162
+ text-decoration: none;
163
+ outline: 0;
164
+ box-shadow: 0 0 0 0.25rem rgba(37, 99, 235, 0.25);
165
+ }
166
+ }
167
+
168
+ .navbar-toggler-icon {
169
+ display: inline-block;
170
+ width: 1.5em;
171
+ height: 1.5em;
172
+ vertical-align: middle;
173
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
174
+ background-repeat: no-repeat;
175
+ background-position: center;
176
+ background-size: 100%;
177
+ }
178
+
179
+ // Dark variant toggler
180
+ .navbar-dark {
181
+ .navbar-toggler {
182
+ color: rgba(255, 255, 255, 0.55);
183
+ border-color: rgba(255, 255, 255, 0.1);
184
+ }
185
+
186
+ .navbar-toggler-icon {
187
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
188
+ }
189
+ }
190
+
191
+ // Responsive layout enforcement
192
+ @media (max-width: 991.98px) {
193
+ .navbar-collapse {
194
+ margin-top: 1rem;
195
+ padding: 1rem;
196
+ background-color: #fff;
197
+ border-radius: 0.5rem;
198
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
199
+
200
+ // Ensure within glass navbar it looks seamless or distinct
201
+ .navbar-glass & {
202
+ background-color: rgba(255, 255, 255, 0.95);
203
+ backdrop-filter: blur(10px);
204
+ }
205
+
206
+ .navbar-dark & {
207
+ background-color: #1e293b; // Slate-800
208
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
209
+ }
210
+ }
211
+
212
+ .navbar-nav {
213
+ flex-direction: column !important; // Force column layout overriding Bootstrap
214
+ gap: 0.5rem;
215
+ width: 100%;
216
+ }
217
+
218
+ .navbar-actions {
219
+ margin-top: 1rem;
220
+ justify-content: flex-start; // Align left on mobile
221
+ flex-wrap: wrap;
222
+ }
223
+
224
+ .navbar-search {
225
+ max-width: 100%; // Full width on mobile
226
+ margin-bottom: 1rem;
227
+ }
228
+ }
@@ -0,0 +1,67 @@
1
+ @use "sass:color";
2
+ @use "../abstracts/variables" as *;
3
+
4
+ .number-input {
5
+ display: flex;
6
+ align-items: center;
7
+ border: 1px solid $gray-300;
8
+ border-radius: $border-radius;
9
+ overflow: hidden;
10
+ width: fit-content;
11
+
12
+ button {
13
+ background-color: $gray-100;
14
+ border: none;
15
+ padding: 0.5rem 0.75rem;
16
+ cursor: pointer;
17
+ color: $gray-600;
18
+ transition: background-color 0.2s, color 0.2s;
19
+
20
+ &:hover:not(:disabled) {
21
+ background-color: $gray-200;
22
+ color: $dark;
23
+ }
24
+
25
+ &:active:not(:disabled) {
26
+ background-color: $gray-300;
27
+ }
28
+
29
+ &:disabled {
30
+ opacity: 0.5;
31
+ cursor: not-allowed;
32
+ }
33
+ }
34
+
35
+ input[type="number"] {
36
+ border: none;
37
+ text-align: center;
38
+ width: 3rem;
39
+ padding: 0.5rem 0;
40
+ -moz-appearance: textfield;
41
+ appearance: textfield;
42
+
43
+ &:focus {
44
+ outline: none;
45
+ }
46
+
47
+ &::-webkit-outer-spin-button,
48
+ &::-webkit-inner-spin-button {
49
+ -webkit-appearance: none;
50
+ margin: 0;
51
+ }
52
+ }
53
+
54
+ // Solid Variant
55
+ &.number-input-solid {
56
+ border: none;
57
+ background-color: $gray-100;
58
+
59
+ input {
60
+ background-color: transparent;
61
+ }
62
+
63
+ button {
64
+ background-color: transparent;
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,123 @@
1
+ @use "sass:color";
2
+ @use "../abstracts/variables" as *;
3
+
4
+ .offcanvas {
5
+ position: fixed;
6
+ bottom: 0;
7
+ z-index: 1045;
8
+ display: flex;
9
+ flex-direction: column;
10
+ max-width: 100%;
11
+ visibility: hidden;
12
+ background-color: #fff;
13
+ background-clip: padding-box;
14
+ outline: 0;
15
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
16
+ box-shadow: $box-shadow-lg; // Stronger shadow
17
+
18
+ &.show {
19
+ visibility: visible;
20
+ }
21
+ }
22
+
23
+ .offcanvas-start {
24
+ top: 0;
25
+ left: 0;
26
+ width: 400px;
27
+ border-right: 0; // Remove border, use shadow
28
+ transform: translateX(-100%);
29
+
30
+ &.show {
31
+ transform: none;
32
+ }
33
+ }
34
+
35
+ .offcanvas-end {
36
+ top: 0;
37
+ right: 0;
38
+ width: 400px;
39
+ border-left: 0;
40
+ transform: translateX(100%);
41
+
42
+ &.show {
43
+ transform: none;
44
+ }
45
+ }
46
+
47
+ .offcanvas-top {
48
+ top: 0;
49
+ right: 0;
50
+ left: 0;
51
+ height: 30vh;
52
+ max-height: 100%;
53
+ border-bottom: 0;
54
+ transform: translateY(-100%);
55
+
56
+ &.show {
57
+ transform: none;
58
+ }
59
+ }
60
+
61
+ .offcanvas-bottom {
62
+ right: 0;
63
+ left: 0;
64
+ height: 30vh;
65
+ max-height: 100%;
66
+ border-top: 0;
67
+ transform: translateY(100%);
68
+
69
+ &.show {
70
+ transform: none;
71
+ }
72
+ }
73
+
74
+ .offcanvas-header {
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: space-between;
78
+ padding: 1.5rem; // More breathing room
79
+
80
+ .btn-close {
81
+ padding: 0.5rem;
82
+ margin-right: -0.5rem;
83
+ color: $gray-500;
84
+ transition: color 0.2s;
85
+
86
+ &:hover {
87
+ color: $dark;
88
+ }
89
+ }
90
+ }
91
+
92
+ .offcanvas-title {
93
+ margin-bottom: 0;
94
+ line-height: 1.5;
95
+ font-weight: $font-weight-bold;
96
+ font-size: 1.25rem;
97
+ }
98
+
99
+ .offcanvas-body {
100
+ flex-grow: 1;
101
+ padding: 1.5rem;
102
+ overflow-y: auto;
103
+ }
104
+
105
+ .offcanvas-backdrop {
106
+ position: fixed;
107
+ top: 0;
108
+ left: 0;
109
+ z-index: 1040;
110
+ width: 100vw;
111
+ height: 100vh;
112
+ background-color: rgba(0, 0, 0, 0.3); // Lighter overlay
113
+ backdrop-filter: blur(4px); // HeroUI Blur
114
+ transition: opacity 0.3s linear;
115
+
116
+ &.fade {
117
+ opacity: 0;
118
+ }
119
+
120
+ &.show {
121
+ opacity: 1;
122
+ }
123
+ }
@@ -0,0 +1,64 @@
1
+ @use "sass:color";
2
+ @use "../abstracts/variables" as *;
3
+
4
+ .pagination {
5
+ display: flex;
6
+ padding-left: 0;
7
+ list-style: none;
8
+ }
9
+
10
+ .page-item {
11
+ &:first-child {
12
+ .page-link {
13
+ border-top-left-radius: $border-radius;
14
+ border-bottom-left-radius: $border-radius;
15
+ }
16
+ }
17
+
18
+ &:last-child {
19
+ .page-link {
20
+ border-top-right-radius: $border-radius;
21
+ border-bottom-right-radius: $border-radius;
22
+ }
23
+ }
24
+
25
+ &.active .page-link {
26
+ z-index: 3;
27
+ color: #fff;
28
+ background-color: $primary;
29
+ border-color: $primary;
30
+ }
31
+
32
+ &.disabled .page-link {
33
+ color: $secondary;
34
+ pointer-events: none;
35
+ background-color: #fff;
36
+ border-color: #dee2e6;
37
+ }
38
+ }
39
+
40
+ .page-link {
41
+ position: relative;
42
+ display: block;
43
+ color: $primary;
44
+ text-decoration: none;
45
+ background-color: #fff;
46
+ border: 1px solid #dee2e6;
47
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
48
+ padding: 0.375rem 0.75rem;
49
+
50
+ &:hover {
51
+ z-index: 2;
52
+ color: color.scale($primary, $lightness: -20%);
53
+ background-color: #e9ecef;
54
+ border-color: #dee2e6;
55
+ }
56
+
57
+ &:focus {
58
+ z-index: 3;
59
+ color: color.scale($primary, $lightness: -20%);
60
+ background-color: #e9ecef;
61
+ outline: 0;
62
+ box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
63
+ }
64
+ }
@@ -0,0 +1,52 @@
1
+ @use "sass:color";
2
+ @use "../abstracts/variables" as *;
3
+
4
+ .placeholder {
5
+ display: inline-block;
6
+ min-height: 1em;
7
+ vertical-align: middle;
8
+ cursor: wait;
9
+ background-color: currentColor;
10
+ opacity: 0.5;
11
+
12
+ &.btn::before {
13
+ display: inline-block;
14
+ content: "";
15
+ }
16
+ }
17
+
18
+ .placeholder-xs {
19
+ min-height: .6em;
20
+ }
21
+
22
+ .placeholder-sm {
23
+ min-height: .8em;
24
+ }
25
+
26
+ .placeholder-lg {
27
+ min-height: 1.2em;
28
+ }
29
+
30
+ .placeholder-glow {
31
+ .placeholder {
32
+ animation: placeholder-glow 2s ease-in-out infinite;
33
+ }
34
+ }
35
+
36
+ @keyframes placeholder-glow {
37
+ 50% {
38
+ opacity: 0.2;
39
+ }
40
+ }
41
+
42
+ .placeholder-wave {
43
+ mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);
44
+ mask-size: 200% 100%;
45
+ animation: placeholder-wave 2s linear infinite;
46
+ }
47
+
48
+ @keyframes placeholder-wave {
49
+ 100% {
50
+ mask-position: -200% 0%;
51
+ }
52
+ }