browser-extension-manager 1.0.14 → 1.1.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.
Files changed (242) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/CLAUDE.md +672 -0
  3. package/TODO.md +3 -0
  4. package/dist/assets/css/browser-extension-manager.scss +18 -0
  5. package/dist/assets/css/components/content/index.scss +5 -0
  6. package/dist/assets/css/components/options/index.scss +5 -0
  7. package/dist/assets/css/components/pages/index.scss +5 -0
  8. package/dist/assets/css/components/popup/index.scss +5 -0
  9. package/dist/assets/css/core/_animations.scss +64 -0
  10. package/dist/assets/css/core/_initialize.scss +23 -0
  11. package/dist/assets/css/core/_utilities.scss +80 -0
  12. package/dist/assets/themes/_template/_theme.js +5 -0
  13. package/dist/assets/themes/_template/_theme.scss +5 -0
  14. package/dist/assets/themes/bootstrap/_theme.js +16 -0
  15. package/dist/assets/themes/bootstrap/_theme.scss +232 -0
  16. package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
  17. package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
  18. package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
  19. package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
  20. package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
  21. package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
  22. package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
  23. package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
  24. package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
  25. package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
  26. package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
  27. package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
  28. package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
  29. package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
  30. package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
  31. package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
  32. package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
  33. package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
  34. package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
  35. package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
  36. package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
  37. package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
  38. package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
  39. package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
  40. package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
  41. package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
  42. package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
  43. package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
  44. package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
  45. package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
  46. package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
  47. package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
  48. package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
  49. package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
  50. package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
  51. package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
  52. package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
  53. package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
  54. package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
  55. package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
  56. package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
  57. package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
  58. package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
  59. package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
  60. package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
  61. package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
  62. package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
  63. package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
  64. package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
  65. package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
  66. package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
  67. package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
  68. package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
  69. package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
  70. package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
  71. package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
  72. package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
  73. package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
  74. package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
  75. package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
  76. package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
  77. package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
  78. package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
  79. package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
  80. package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
  81. package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
  82. package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
  83. package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
  84. package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
  85. package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
  86. package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
  87. package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
  88. package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
  89. package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
  90. package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
  91. package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
  92. package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
  93. package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
  94. package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
  95. package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
  96. package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
  97. package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
  98. package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  99. package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
  100. package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
  101. package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
  102. package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
  103. package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  104. package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  105. package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  106. package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
  107. package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
  108. package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
  109. package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
  110. package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
  111. package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  112. package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  113. package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
  114. package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
  115. package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
  116. package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
  117. package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  118. package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
  119. package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
  120. package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
  121. package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
  122. package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
  123. package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
  124. package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
  125. package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
  126. package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
  127. package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
  128. package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
  129. package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
  130. package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  131. package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
  132. package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
  133. package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  134. package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
  135. package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
  136. package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  137. package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  138. package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  139. package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
  140. package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
  141. package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  142. package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
  143. package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
  144. package/dist/assets/themes/classy/README.md +75 -0
  145. package/dist/assets/themes/classy/_config.scss +185 -0
  146. package/dist/assets/themes/classy/_theme.js +29 -0
  147. package/dist/assets/themes/classy/_theme.scss +34 -0
  148. package/dist/assets/themes/classy/css/base/_animations.scss +27 -0
  149. package/dist/assets/themes/classy/css/base/_backgrounds.scss +191 -0
  150. package/dist/assets/themes/classy/css/base/_borders.scss +65 -0
  151. package/dist/assets/themes/classy/css/base/_root.scss +58 -0
  152. package/dist/assets/themes/classy/css/base/_soft-colors.scss +92 -0
  153. package/dist/assets/themes/classy/css/base/_spacing.scss +64 -0
  154. package/dist/assets/themes/classy/css/base/_typography.scss +179 -0
  155. package/dist/assets/themes/classy/css/base/_utilities.scss +77 -0
  156. package/dist/assets/themes/classy/css/components/_accordion.scss +33 -0
  157. package/dist/assets/themes/classy/css/components/_avatars.scss +32 -0
  158. package/dist/assets/themes/classy/css/components/_badges.scss +25 -0
  159. package/dist/assets/themes/classy/css/components/_buttons.scss +397 -0
  160. package/dist/assets/themes/classy/css/components/_cards.scss +33 -0
  161. package/dist/assets/themes/classy/css/components/_carousel.scss +41 -0
  162. package/dist/assets/themes/classy/css/components/_forms.scss +115 -0
  163. package/dist/assets/themes/classy/css/components/_links.scss +19 -0
  164. package/dist/assets/themes/classy/css/components/_logo-scroll.scss +57 -0
  165. package/dist/assets/themes/classy/css/components/_spinners.scss +19 -0
  166. package/dist/assets/themes/classy/css/components/_text.scss +41 -0
  167. package/dist/assets/themes/classy/css/layout/_blog.scss +42 -0
  168. package/dist/assets/themes/classy/css/layout/_general.scss +139 -0
  169. package/dist/assets/themes/classy/css/layout/_navigation.scss +576 -0
  170. package/dist/assets/themes/classy/css/layout/_team.scss +18 -0
  171. package/dist/assets/themes/classy/js/logo-scroll.js +83 -0
  172. package/dist/assets/themes/classy/js/navbar-scroll.js +65 -0
  173. package/dist/background.js +236 -260
  174. package/dist/build.js +93 -4
  175. package/dist/commands/setup.js +0 -268
  176. package/dist/config/manifest.json +11 -3
  177. package/dist/config/page-template.html +21 -0
  178. package/dist/defaults/.nvmrc +1 -1
  179. package/dist/defaults/CLAUDE.md +8 -0
  180. package/dist/defaults/config/browser-extension-manager.json +37 -0
  181. package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
  182. package/dist/defaults/src/assets/css/components/options/index.scss +14 -0
  183. package/dist/defaults/src/assets/css/components/pages/index.scss +10 -0
  184. package/dist/defaults/src/assets/css/components/popup/index.scss +10 -0
  185. package/dist/defaults/src/assets/css/components/sidepanel/index.scss +6 -0
  186. package/dist/defaults/src/assets/css/main.scss +32 -0
  187. package/dist/defaults/src/assets/js/components/background/index.js +22 -0
  188. package/dist/defaults/src/assets/js/components/content/index.js +22 -0
  189. package/dist/defaults/src/assets/js/components/options/index.js +22 -0
  190. package/dist/defaults/src/assets/js/components/pages/index.js +22 -0
  191. package/dist/defaults/src/assets/js/components/popup/index.js +22 -0
  192. package/dist/defaults/src/assets/js/components/sidepanel/index.js +20 -0
  193. package/dist/defaults/src/assets/vendor/.gitkeep +0 -0
  194. package/dist/defaults/src/manifest.json +11 -6
  195. package/dist/defaults/src/views/options/index.html +8 -0
  196. package/dist/defaults/src/views/pages/index.html +10 -0
  197. package/dist/defaults/src/views/popup/index.html +4 -0
  198. package/dist/defaults/src/views/sidepanel/index.html +4 -0
  199. package/dist/gulp/main.js +11 -5
  200. package/dist/gulp/plugins/webpack/strip-dev-blocks.js +53 -0
  201. package/dist/gulp/tasks/{_package.js → BU/_package.js} +1 -1
  202. package/dist/gulp/tasks/{developmentRebuild.js → BU/developmentRebuild.js} +1 -1
  203. package/dist/gulp/tasks/{themes.js → BU/themes.js} +2 -1
  204. package/dist/gulp/tasks/{test.js → _.js} +3 -3
  205. package/dist/gulp/tasks/audit.js +154 -0
  206. package/dist/gulp/tasks/defaults.js +308 -0
  207. package/dist/gulp/tasks/distribute.js +71 -78
  208. package/dist/gulp/tasks/html.js +150 -0
  209. package/dist/gulp/tasks/icons.js +3 -2
  210. package/dist/gulp/tasks/package.js +202 -13
  211. package/dist/gulp/tasks/sass.js +188 -43
  212. package/dist/gulp/tasks/serve.js +1 -0
  213. package/dist/gulp/tasks/utils/template-transform.js +50 -0
  214. package/dist/gulp/tasks/webpack.js +338 -134
  215. package/dist/index.js +34 -34
  216. package/dist/options.js +40 -0
  217. package/dist/page.js +40 -0
  218. package/dist/popup.js +40 -0
  219. package/dist/sidepanel.js +40 -0
  220. package/firebase-debug.log +322 -0
  221. package/package.json +25 -18
  222. package/dist/assets/css/main.scss +0 -3
  223. package/dist/assets/themes/bootstrap/5.3.3/css/bootstrap.css +0 -12057
  224. package/dist/assets/themes/bootstrap/5.3.3/css/bootstrap.css.map +0 -1
  225. package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.bundle.js +0 -6314
  226. package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.bundle.js.map +0 -1
  227. package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.js +0 -4494
  228. package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.js.map +0 -1
  229. package/dist/defaults/src/assets/css/content.scss +0 -2
  230. package/dist/defaults/src/assets/css/options.scss +0 -11
  231. package/dist/defaults/src/assets/css/popup.scss +0 -14
  232. package/dist/defaults/src/assets/js/background.js +0 -18
  233. package/dist/defaults/src/assets/js/content.js +0 -15
  234. package/dist/defaults/src/assets/js/options.js +0 -17
  235. package/dist/defaults/src/assets/js/popup.js +0 -17
  236. package/dist/defaults/src/pages/options.html +0 -26
  237. package/dist/defaults/src/pages/popup.html +0 -26
  238. /package/dist/{defaults/src/assets/images/_ → assets/css/bundles/.gitkeep} +0 -0
  239. /package/dist/assets/css/{fontawesome.scss → core/_fontawesome.scss} +0 -0
  240. /package/dist/defaults/src/assets/{vendor/_ → images/.gitkeep} +0 -0
  241. /package/dist/gulp/tasks/{_importer.js → BU/_importer.js} +0 -0
  242. /package/dist/gulp/tasks/{_vendor.js → BU/_vendor.js} +0 -0
@@ -0,0 +1,77 @@
1
+ // Classy Utility Classes
2
+ // Custom helper classes and theme-specific utilities
3
+
4
+ // ============================================
5
+ // Section Spacing
6
+ // ============================================
7
+
8
+ // Section Spacing
9
+ // .section {
10
+ // padding: $classy-spacing-4xl 0;
11
+
12
+ // &.section-sm {
13
+ // padding: $classy-spacing-2xl 0;
14
+ // }
15
+
16
+ // &.section-lg {
17
+ // padding: 6rem 0;
18
+ // }
19
+
20
+ // &.section-xl {
21
+ // padding: 8rem 0;
22
+ // }
23
+ // }
24
+
25
+ // Hero Sections
26
+ // .hero {
27
+ // padding: 6rem 0;
28
+ // position: relative;
29
+ // overflow: hidden;
30
+
31
+ // &.hero-gradient {
32
+ // background: $classy-gradient-primary;
33
+ // }
34
+
35
+ // &.hero-pattern {
36
+ // &::before {
37
+ // content: "";
38
+ // position: absolute;
39
+ // top: 0;
40
+ // left: 0;
41
+ // right: 0;
42
+ // bottom: 0;
43
+ // background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%235B47FB' fill-opacity='0.1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
44
+ // opacity: 0.1;
45
+ // z-index: 0;
46
+ // }
47
+ // }
48
+
49
+ // .hero-content {
50
+ // position: relative;
51
+ // z-index: 1;
52
+ // }
53
+ // }
54
+
55
+ // ============================================
56
+ // Shadow Utilities
57
+ // ============================================
58
+ .shadow-xs { box-shadow: $classy-shadow-xs !important; }
59
+ .shadow-sm { box-shadow: $classy-shadow-sm !important; }
60
+ .shadow-md { box-shadow: $classy-shadow-md !important; }
61
+ .shadow-lg { box-shadow: $classy-shadow-lg !important; }
62
+ .shadow-xl { box-shadow: $classy-shadow-xl !important; }
63
+ .shadow-2xl { box-shadow: $classy-shadow-2xl !important; }
64
+ .shadow-glow { box-shadow: $classy-shadow-glow !important; }
65
+ .shadow-none { box-shadow: none !important; }
66
+
67
+
68
+ // ============================================
69
+ // Cursor Utilities
70
+ // ============================================
71
+ // TODO: cursor-move, cursor-grab
72
+
73
+ // .cursor-pointer { cursor: pointer !important; }
74
+ // .cursor-default { cursor: default !important; }
75
+ // .cursor-wait { cursor: wait !important; }
76
+ // .cursor-not-allowed { cursor: not-allowed !important; }
77
+
@@ -0,0 +1,33 @@
1
+ // Classy Theme Accordion Component
2
+ // SVG plus/minus icons using Bootstrap's official approach
3
+
4
+ // ============================================
5
+ // Accordion Base Styles
6
+ // ============================================
7
+ .accordion-item {
8
+ background-color: var(--bs-secondary-bg);
9
+ }
10
+
11
+ .accordion-button {
12
+ background-color: var(--bs-secondary-bg);
13
+
14
+ &:not(.collapsed) {
15
+ background-color: var(--bs-secondary-bg);
16
+ }
17
+ }
18
+
19
+ .accordion-body {
20
+ background-color: var(--bs-secondary-bg);
21
+ }
22
+
23
+ // Light mode icons
24
+ .accordion-button::after {
25
+ --bs-accordion-btn-icon: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23212529'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z'/%3E%3C/svg%3E");
26
+ --bs-accordion-btn-active-icon: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23212529'%3E%3Cpath d='M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z'/%3E%3C/svg%3E");
27
+ }
28
+
29
+ // Dark mode icons - match Bootstrap's exact selector pattern
30
+ [data-bs-theme="dark"] .accordion-button::after {
31
+ --bs-accordion-btn-icon: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ffffff'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z'/%3E%3C/svg%3E");
32
+ --bs-accordion-btn-active-icon: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ffffff'%3E%3Cpath d='M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z'/%3E%3C/svg%3E");
33
+ }
@@ -0,0 +1,32 @@
1
+ // Classy Avatar Components
2
+ // Circular profile images with responsive sizing
3
+ // Uses $avatar-sizes map from config
4
+
5
+ // ============================================
6
+ // Base Avatar Styles
7
+ // ============================================
8
+ .avatar {
9
+ display: inline-block;
10
+ height: map-get($avatar-sizes, null);
11
+ position: relative;
12
+ width: map-get($avatar-sizes, null);
13
+
14
+ img {
15
+ height: 100%;
16
+ -o-object-fit: cover;
17
+ object-fit: cover;
18
+ width: 100%;
19
+ }
20
+ }
21
+
22
+ // ============================================
23
+ // Size Class Generation
24
+ // ============================================
25
+ @each $size, $dimension in $avatar-sizes {
26
+ @if $size != null {
27
+ .avatar-#{$size} {
28
+ height: $dimension;
29
+ width: $dimension;
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,25 @@
1
+ // Classy Badge Components
2
+ // Badges and labels that can extend outside their containers
3
+
4
+ // ============================================
5
+ // Badge Soft Colors & Gradient
6
+ // ============================================
7
+ .badge-gradient {
8
+ background: $classy-gradient-primary;
9
+ }
10
+
11
+ .badge-soft-primary {
12
+ background: $classy-primary-soft;
13
+ }
14
+
15
+ // Global fix - any element containing a badge should not clip
16
+ // * {
17
+ // &:has(.badge) {
18
+ // overflow: visible !important;
19
+ // }
20
+ // }
21
+
22
+ // Base badge styling improvements
23
+ .badge {
24
+ z-index: 100; // Ensure badge is always on top
25
+ }
@@ -0,0 +1,397 @@
1
+ // Classy Button Components
2
+ // Modern button styles inspired by premium SaaS websites
3
+
4
+ // ============================================
5
+ // Base Button Styles
6
+ // ============================================
7
+ .btn {
8
+ font-weight: 600;
9
+ border-radius: $classy-radius-lg;
10
+ border: 2px solid transparent;
11
+ transition: all 0.2s ease;
12
+ position: relative;
13
+ overflow: hidden;
14
+ letter-spacing: -0.01em;
15
+
16
+ &:focus {
17
+ box-shadow: 0 0 0 0.25rem rgba($primary, 0.25);
18
+ }
19
+
20
+ // // Slot machine hover effect
21
+ // // Works on direct text nodes when wrapped in any inline element
22
+ // > * {
23
+ // position: relative;
24
+ // display: inline-block;
25
+ // transition: transform 0.3s ease;
26
+
27
+ // // Create duplicate text below using the same content
28
+ // &::before {
29
+ // content: attr(data-hover);
30
+ // position: absolute;
31
+ // top: 100%;
32
+ // left: 0;
33
+ // width: max-content;
34
+ // transform: translate3d(0, 0, 0);
35
+ // }
36
+ // }
37
+
38
+ // // On hover, slide the content upward
39
+ // &:hover > * {
40
+ // transform: translateY(-100%);
41
+ // }
42
+ }
43
+
44
+ // ============================================
45
+ // Primary Button Enhancement
46
+ // ============================================
47
+ .btn-primary {
48
+ box-shadow: $classy-shadow-md, inset 0 1px 0 rgba(255, 255, 255, 0.15);
49
+
50
+ &:hover {
51
+ box-shadow: $classy-shadow-lg, inset 0 1px 0 rgba(255, 255, 255, 0.15);
52
+ }
53
+
54
+ &:active {
55
+ box-shadow: $classy-shadow-sm, inset 0 1px 0 rgba(255, 255, 255, 0.15);
56
+ }
57
+ }
58
+
59
+ // ============================================
60
+ // Glass Morphism Buttons
61
+ // ============================================
62
+ .btn-glass {
63
+ background: rgba(255, 255, 255, 0.1);
64
+ backdrop-filter: blur(10px);
65
+ -webkit-backdrop-filter: blur(10px);
66
+ border: 1px solid rgba(255, 255, 255, 0.18);
67
+ color: var(--bs-body-color);
68
+
69
+ &:hover {
70
+ background: rgba(255, 255, 255, 0.2);
71
+ color: var(--bs-body-color);
72
+ box-shadow: $classy-shadow-lg;
73
+ }
74
+
75
+ &.btn-glass-dark {
76
+ background: rgba(0, 0, 0, 0.1);
77
+
78
+ &:hover {
79
+ background: rgba(0, 0, 0, 0.2);
80
+ }
81
+ }
82
+ }
83
+
84
+ // ============================================
85
+ // Glow Effect Button
86
+ // ============================================
87
+ .btn-glow {
88
+ background: $primary;
89
+ color: white;
90
+ box-shadow: 0 0 20px rgba($primary, 0.4);
91
+
92
+ &:hover {
93
+ background: darken($primary, 5%);
94
+ color: white;
95
+ box-shadow: 0 0 30px rgba($primary, 0.6);
96
+ transform: translateY(-2px);
97
+ }
98
+ }
99
+
100
+ // ============================================
101
+ // Secondary Button
102
+ // ============================================
103
+ .btn-secondary {
104
+ &:hover {
105
+ box-shadow: $classy-shadow-md;
106
+ }
107
+ }
108
+
109
+ // ============================================
110
+ // Outline Button Overrides
111
+ // ============================================
112
+ [class*="btn-outline-"] {
113
+ background: transparent !important;
114
+ border-width: 2px !important;
115
+ border-style: solid !important;
116
+
117
+ &:not(:hover) {
118
+ background: transparent !important;
119
+ }
120
+ }
121
+
122
+ .btn-outline-primary {
123
+ border-color: $primary !important;
124
+ color: $primary !important;
125
+
126
+ &:hover {
127
+ background: $primary !important;
128
+ border-color: $primary !important;
129
+ color: white !important;
130
+ box-shadow: $classy-shadow-md;
131
+ }
132
+ }
133
+
134
+ .btn-outline-secondary {
135
+ border-color: $secondary !important;
136
+ color: $secondary !important;
137
+
138
+ &:hover {
139
+ background: $secondary !important;
140
+ border-color: $secondary !important;
141
+ color: white !important;
142
+ }
143
+ }
144
+
145
+ .btn-outline-success {
146
+ border-color: $success !important;
147
+ color: $success !important;
148
+
149
+ &:hover {
150
+ background: $success !important;
151
+ border-color: $success !important;
152
+ color: white !important;
153
+ }
154
+ }
155
+
156
+ .btn-outline-danger {
157
+ border-color: $danger !important;
158
+ color: $danger !important;
159
+
160
+ &:hover {
161
+ background: $danger !important;
162
+ border-color: $danger !important;
163
+ color: white !important;
164
+ }
165
+ }
166
+
167
+ .btn-outline-warning {
168
+ border-color: $warning !important;
169
+ color: $warning !important;
170
+
171
+ &:hover {
172
+ background: $warning !important;
173
+ border-color: $warning !important;
174
+ color: white !important;
175
+ }
176
+ }
177
+
178
+ .btn-outline-info {
179
+ border-color: $info !important;
180
+ color: $info !important;
181
+
182
+ &:hover {
183
+ background: $info !important;
184
+ border-color: $info !important;
185
+ color: white !important;
186
+ }
187
+ }
188
+
189
+ .btn-outline-light {
190
+ border-color: $light !important;
191
+ color: $light !important;
192
+
193
+ &:hover {
194
+ background: $light !important;
195
+ border-color: $light !important;
196
+ color: $dark !important;
197
+ }
198
+ }
199
+
200
+ .btn-outline-dark {
201
+ border-color: $dark !important;
202
+ color: $dark !important;
203
+
204
+ &:hover {
205
+ background: $dark !important;
206
+ border-color: $dark !important;
207
+ color: white !important;
208
+ }
209
+ }
210
+
211
+ // ============================================
212
+ // Ghost Button
213
+ // ============================================
214
+ .btn-ghost {
215
+ background: transparent;
216
+ box-shadow: none;
217
+ }
218
+
219
+ // ============================================
220
+ // Soft Buttons
221
+ // ============================================
222
+ .btn-soft-primary {
223
+ background: rgba($primary, 0.1);
224
+ color: $primary;
225
+
226
+ &:hover {
227
+ background: rgba($primary, 0.2);
228
+ color: $primary;
229
+ box-shadow: $classy-shadow-md;
230
+ }
231
+ }
232
+
233
+ .btn-soft-secondary {
234
+ background: rgba($secondary, 0.1);
235
+ color: $secondary;
236
+
237
+ &:hover {
238
+ background: rgba($secondary, 0.2);
239
+ color: $secondary;
240
+ }
241
+ }
242
+
243
+ .btn-soft-success {
244
+ background: rgba($success, 0.1);
245
+ color: $success;
246
+
247
+ &:hover {
248
+ background: rgba($success, 0.2);
249
+ color: $success;
250
+ }
251
+ }
252
+
253
+ .btn-soft-danger {
254
+ background: rgba($danger, 0.1);
255
+ color: $danger;
256
+
257
+ &:hover {
258
+ background: rgba($danger, 0.2);
259
+ color: $danger;
260
+ }
261
+ }
262
+
263
+ .btn-soft-warning {
264
+ background: rgba($warning, 0.1);
265
+ color: $warning;
266
+
267
+ &:hover {
268
+ background: rgba($warning, 0.2);
269
+ color: $warning;
270
+ }
271
+ }
272
+
273
+ .btn-soft-info {
274
+ background: rgba($info, 0.1);
275
+ color: $info;
276
+
277
+ &:hover {
278
+ background: rgba($info, 0.2);
279
+ color: $info;
280
+ }
281
+ }
282
+
283
+ // ============================================
284
+ // Button Groups
285
+ // ============================================
286
+ .btn-group {
287
+ .btn {
288
+ border-radius: 0;
289
+
290
+ &:first-child {
291
+ border-top-left-radius: $classy-radius-lg;
292
+ border-bottom-left-radius: $classy-radius-lg;
293
+ }
294
+
295
+ &:last-child {
296
+ border-top-right-radius: $classy-radius-lg;
297
+ border-bottom-right-radius: $classy-radius-lg;
298
+ }
299
+ }
300
+
301
+ &.btn-group-pill .btn {
302
+ &:first-child {
303
+ border-top-left-radius: $classy-radius-full;
304
+ border-bottom-left-radius: $classy-radius-full;
305
+ }
306
+
307
+ &:last-child {
308
+ border-top-right-radius: $classy-radius-full;
309
+ border-bottom-right-radius: $classy-radius-full;
310
+ }
311
+ }
312
+ }
313
+
314
+ // ============================================
315
+ // Adaptive Theme Buttons
316
+ // ============================================
317
+ .btn-adaptive {
318
+ @extend .btn-dark;
319
+ }
320
+
321
+ [data-bs-theme="dark"] .btn-adaptive {
322
+ @extend .btn-light;
323
+ }
324
+
325
+ .btn-outline-adaptive {
326
+ @extend .btn-outline-dark;
327
+ color: var(--bs-body-color) !important;
328
+
329
+ &:hover {
330
+ color: white !important;
331
+ }
332
+
333
+ &.active,
334
+ &:active {
335
+ background: $dark !important;
336
+ border-color: $dark !important;
337
+ color: white !important;
338
+ }
339
+ }
340
+
341
+ [data-bs-theme="dark"] .btn-outline-adaptive {
342
+ @extend .btn-outline-light;
343
+ color: var(--bs-body-color) !important;
344
+
345
+ &:hover {
346
+ color: $dark !important;
347
+ }
348
+
349
+ &.active,
350
+ &:active {
351
+ background: $light !important;
352
+ border-color: $light !important;
353
+ color: $dark !important;
354
+ }
355
+ }
356
+
357
+ // ============================================
358
+ // Adaptive Inverse Buttons
359
+ // ============================================
360
+ // .btn-adaptive-inverse {
361
+ // @extend .btn-light;
362
+ // // color: $dark !important;
363
+
364
+ // // &:hover {
365
+ // // background: $dark !important;
366
+ // // color: white !important;
367
+ // // }
368
+ // }
369
+
370
+ // [data-bs-theme="dark"] .btn-adaptive-inverse {
371
+ // @extend .btn-dark;
372
+ // // color: white !important;
373
+
374
+ // // &:hover {
375
+ // // background: white !important;
376
+ // // color: $dark !important;
377
+ // // }
378
+ // }
379
+
380
+ // ============================================
381
+ // Gradient Rainbow Button
382
+ // ============================================
383
+ .btn-gradient-rainbow {
384
+ border-width: 0 !important;
385
+ border-color: transparent !important;
386
+ background-color: transparent !important;
387
+ background-image: $classy-gradient-rainbow !important;
388
+ background-size: 300% 300% !important;
389
+ text-transform: none !important;
390
+ color: rgba(255, 255, 255, 1) !important;
391
+ box-shadow: 0px 4px 6px -1px rgba(0, 0, 0, 0.1), 0px 2px 4px -1px rgba(0, 0, 0, 0.06) !important;
392
+ transition-duration: 0.3s !important;
393
+
394
+ &:hover {
395
+ opacity: 0.70;
396
+ }
397
+ }
@@ -0,0 +1,33 @@
1
+ // Classy Card Components
2
+ // Modern card designs with glass effects and subtle animations
3
+
4
+ // ============================================
5
+ // Base Card Styles
6
+ // ============================================
7
+ .card {
8
+ background: var(--bs-secondary-bg);
9
+ border: 1px solid rgba(0, 0, 0, 0.05);
10
+ border-radius: $classy-radius-xl;
11
+ box-shadow: $classy-shadow-sm;
12
+ position: relative;
13
+
14
+ // Allow badges to overflow
15
+ &:has(.badge) {
16
+ overflow: visible !important;
17
+ }
18
+
19
+ .card-header {
20
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
21
+ padding: 1.5rem;
22
+ font-weight: 600;
23
+ }
24
+
25
+ .card-body {
26
+ padding: 1.5rem;
27
+ }
28
+
29
+ .card-footer {
30
+ border-top: 1px solid rgba(0, 0, 0, 0.05);
31
+ padding: 1rem 1.5rem;
32
+ }
33
+ }
@@ -0,0 +1,41 @@
1
+ // Classy Carousel Component
2
+ // Better contrast for navigation arrows
3
+
4
+ // ============================================
5
+ // Carousel Controls
6
+ // ============================================
7
+ .carousel-control-prev,
8
+ .carousel-control-next {
9
+ // Add semi-transparent dark background for better contrast
10
+ width: 50px;
11
+ height: 50px;
12
+ top: 50%;
13
+ transform: translateY(-50%);
14
+ opacity: 0.8;
15
+ transition: opacity 0.3s ease;
16
+
17
+ &:hover {
18
+ opacity: 1;
19
+ }
20
+
21
+ // Add background circle for better visibility
22
+ .carousel-control-prev-icon,
23
+ .carousel-control-next-icon {
24
+ background-color: rgba(0, 0, 0, 0.6);
25
+ border-radius: 50%;
26
+ padding: 12px;
27
+ width: 50px;
28
+ height: 50px;
29
+ }
30
+ }
31
+
32
+ // Dark mode adjustments
33
+ // [data-bs-theme="dark"] {
34
+ // .carousel-control-prev,
35
+ // .carousel-control-next {
36
+ // .carousel-control-prev-icon,
37
+ // .carousel-control-next-icon {
38
+ // background-color: rgba(255, 255, 255, 0.9);
39
+ // }
40
+ // }
41
+ // }