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
package/CLAUDE.md ADDED
@@ -0,0 +1,672 @@
1
+ # Browser Extension Manager (BEM)
2
+
3
+ ## Identity
4
+
5
+ Browser Extension Manager (BEM) is a comprehensive framework for building modern browser extensions. It provides a template-based development system with built-in build tools, component architecture, theming support, and best practices for creating cross-browser extensions.
6
+
7
+ ## Quick Start
8
+
9
+ ### For Consuming Projects (Extensions Built Using BEM)
10
+ 1. Run `npx bxm setup` to initialize the project
11
+ 2. Run `npm start` to start development
12
+ 3. Load `packaged/raw/` directory in browser as unpacked extension
13
+ 4. Edit files in `src/` - changes auto-reload via WebSocket
14
+
15
+ ### For Framework Development (This Repository)
16
+ 1. Run `npm start` to watch and compile framework changes
17
+ 2. Test changes in a consuming project by linking: `npm link` (in BEM) then `npm link browser-extension-manager` (in consuming project)
18
+ 3. Changes in `src/` compile to `dist/` automatically
19
+
20
+ ## Architecture Overview
21
+
22
+ ### Component-Based System
23
+
24
+ Extensions are organized around **components**, each representing a distinct part:
25
+
26
+ **Core Components:**
27
+ - `background` - Service worker (background script)
28
+ - `popup` - Browser action popup
29
+ - `options` - Options/settings page
30
+ - `sidepanel` - Chrome side panel
31
+ - `content` - Content scripts injected into web pages
32
+ - `pages` - Custom extension pages (e.g., dashboard, welcome)
33
+
34
+ **Each component has three parts:**
35
+ 1. **View** - HTML in `src/views/[component]/index.html`
36
+ 2. **Styles** - SCSS in `src/assets/css/components/[component]/index.scss`
37
+ 3. **Script** - JS in `src/assets/js/components/[component]/index.js`
38
+
39
+ **Compilation output:**
40
+ - `dist/views/[component]/index.html`
41
+ - `dist/assets/css/components/[component].bundle.css`
42
+ - `dist/assets/js/components/[component].bundle.js`
43
+
44
+ ### Two-Tier Architecture
45
+
46
+ **Framework Layer** (`src/` in this repository):
47
+ - Core framework code and components
48
+ - Default templates and configurations
49
+ - Build system and tooling
50
+ - Published to npm as `browser-extension-manager`
51
+
52
+ **Project Layer** (consuming extension projects):
53
+ - User's extension-specific code
54
+ - Overrides and customizations
55
+ - Receives defaults from `src/defaults/` via the `defaults` gulp task
56
+
57
+ ## Framework Structure (This Repository)
58
+
59
+ ```
60
+ browser-extension-manager/
61
+ ├── src/ # Framework source code
62
+ │ ├── assets/ # Framework assets
63
+ │ │ ├── css/ # SCSS framework
64
+ │ │ │ ├── browser-extension-manager.scss # Main entry point
65
+ │ │ │ ├── core/ # Core styles (utilities, animations, initialize)
66
+ │ │ │ ├── components/ # Component-specific styles (popup, options, content, pages)
67
+ │ │ │ └── bundles/ # Custom bundle SCSS files
68
+ │ │ ├── js/ # JavaScript framework
69
+ │ │ │ └── main.js
70
+ │ │ ├── themes/ # Theme system
71
+ │ │ │ ├── _template/ # Template for creating new themes
72
+ │ │ │ ├── bootstrap/ # Bootstrap theme (full Bootstrap 5 source)
73
+ │ │ │ └── classy/ # Classy theme (Bootstrap + custom design system)
74
+ │ │ └── vendor/ # Vendor assets
75
+ │ ├── defaults/ # Default project structure (copied to consuming projects)
76
+ │ │ ├── src/
77
+ │ │ │ ├── assets/
78
+ │ │ │ │ ├── css/
79
+ │ │ │ │ │ ├── main.scss # Global styles entry point
80
+ │ │ │ │ │ └── components/ # Component-specific overrides
81
+ │ │ │ │ ├── js/
82
+ │ │ │ │ │ └── components/ # Component JavaScript
83
+ │ │ │ │ ├── images/
84
+ │ │ │ │ └── vendor/
85
+ │ │ │ ├── views/ # HTML views (templates)
86
+ │ │ │ ├── manifest.json # Extension manifest (user-editable)
87
+ │ │ │ └── _locales/ # Internationalization
88
+ │ │ ├── hooks/ # Build hooks
89
+ │ │ ├── config/ # Configuration files
90
+ │ │ └── CLAUDE.md # Project documentation template
91
+ │ ├── config/ # Framework configuration
92
+ │ │ ├── manifest.json # Default manifest configuration
93
+ │ │ └── page-template.html # HTML template for views
94
+ │ ├── gulp/ # Build system
95
+ │ │ ├── main.js # Gulp entry point
96
+ │ │ ├── tasks/ # Gulp tasks
97
+ │ │ │ ├── defaults.js # Copy default files to project
98
+ │ │ │ ├── distribute.js # Distribute project files to dist/
99
+ │ │ │ ├── sass.js # Compile SCSS
100
+ │ │ │ ├── webpack.js # Bundle JavaScript
101
+ │ │ │ ├── html.js # Process HTML views
102
+ │ │ │ ├── icons.js # Generate icon sizes
103
+ │ │ │ ├── package.js # Package extension for distribution
104
+ │ │ │ ├── audit.js # Run audits
105
+ │ │ │ └── serve.js # Development server
106
+ │ │ └── plugins/ # Custom plugins
107
+ │ │ └── webpack/
108
+ │ │ └── strip-dev-blocks.js # Strip dev-only code
109
+ │ ├── lib/ # Utility libraries
110
+ │ │ ├── extension.js # Cross-browser extension API wrapper
111
+ │ │ ├── logger.js # Logging utility
112
+ │ │ └── logger-lite.js # Lightweight logger
113
+ │ ├── commands/ # CLI commands
114
+ │ │ ├── setup.js # Setup project
115
+ │ │ ├── clean.js # Clean build artifacts
116
+ │ │ └── version.js # Version management
117
+ │ ├── build.js # Build manager class
118
+ │ ├── background.js # Background script manager
119
+ │ ├── popup.js # Popup manager
120
+ │ ├── options.js # Options manager
121
+ │ ├── sidepanel.js # Sidepanel manager
122
+ │ ├── page.js # Page manager
123
+ │ ├── content.js # Content script manager
124
+ │ └── cli.js # CLI entry point
125
+ ├── dist/ # Compiled framework (published to npm)
126
+ ├── bin/ # CLI binaries
127
+ │ └── browser-extension-manager
128
+ ├── package.json
129
+ └── CLAUDE.md # This file
130
+ ```
131
+
132
+ ## Consuming Project Structure
133
+
134
+ When users create a project using BEM, they get this structure:
135
+
136
+ ```
137
+ my-extension/
138
+ ├── src/
139
+ │ ├── assets/
140
+ │ │ ├── css/
141
+ │ │ │ ├── main.scss # Global styles
142
+ │ │ │ └── components/ # Component-specific styles
143
+ │ │ ├── js/
144
+ │ │ │ └── components/ # Component JavaScript
145
+ │ │ ├── images/
146
+ │ │ │ └── icon.png # Source icon (1024x1024)
147
+ │ │ └── vendor/
148
+ │ ├── views/ # HTML templates
149
+ │ ├── _locales/ # i18n translations
150
+ │ └── manifest.json # Extension manifest
151
+ ├── config/
152
+ │ └── config.json # BEM configuration
153
+ ├── hooks/
154
+ │ ├── build:pre.js # Pre-build hook
155
+ │ └── build:post.js # Post-build hook
156
+ ├── dist/ # Compiled files (gitignored)
157
+ ├── packaged/ # Packaged extension (gitignored)
158
+ │ ├── raw/ # Load this in browser
159
+ │ └── extension.zip # Production build
160
+ └── package.json
161
+ ```
162
+
163
+ ## Development Instructions
164
+
165
+ ### Creating a New Component
166
+
167
+ When adding a new component type to the framework:
168
+
169
+ 1. **Create framework component styles:**
170
+ ```
171
+ src/assets/css/components/[component]/index.scss
172
+ ```
173
+
174
+ 2. **Create default template files:**
175
+ ```
176
+ src/defaults/src/assets/css/components/[component]/index.scss
177
+ src/defaults/src/assets/js/components/[component]/index.js
178
+ src/defaults/src/views/[component]/index.html
179
+ ```
180
+
181
+ 3. **Create manager class (if needed):**
182
+ ```javascript
183
+ // src/[component].js
184
+ const Manager = require('./build.js');
185
+
186
+ class ComponentManager extends Manager {
187
+ constructor(options) {
188
+ super(options);
189
+ }
190
+ }
191
+
192
+ module.exports = ComponentManager;
193
+ ```
194
+
195
+ 4. **Export in package.json:**
196
+ ```json
197
+ {
198
+ "exports": {
199
+ "./component": "./dist/component.js"
200
+ }
201
+ }
202
+ ```
203
+
204
+ ### Modifying the Build System
205
+
206
+ **Key gulp tasks:**
207
+
208
+ - **defaults** ([gulp/tasks/defaults.js](src/gulp/tasks/defaults.js)) - Copies template files from `dist/defaults/` to consuming projects
209
+ - **distribute** ([gulp/tasks/distribute.js](src/gulp/tasks/distribute.js)) - Copies project files to `dist/`
210
+ - **sass** ([gulp/tasks/sass.js](src/gulp/tasks/sass.js)) - Compiles SCSS with sophisticated load path system
211
+ - **webpack** ([gulp/tasks/webpack.js](src/gulp/tasks/webpack.js)) - Bundles JavaScript with Babel
212
+ - **html** ([gulp/tasks/html.js](src/gulp/tasks/html.js)) - Processes HTML views into templates
213
+ - **package** ([gulp/tasks/package.js](src/gulp/tasks/package.js)) - Creates packaged extension
214
+ - **serve** ([gulp/tasks/serve.js](src/gulp/tasks/serve.js)) - WebSocket server for live reload
215
+
216
+ ### Modifying Themes
217
+
218
+ **Theme location:** [src/assets/themes/](src/assets/themes/)
219
+
220
+ **Available themes:**
221
+ - `bootstrap` - Pure Bootstrap 5.3+
222
+ - `classy` - Bootstrap + custom design system
223
+ - `_template` - Template for new themes
224
+
225
+ **Theme structure:**
226
+ ```
227
+ src/assets/themes/[theme-id]/
228
+ ├── _config.scss # Theme variables (with !default)
229
+ ├── _theme.scss # Theme entry point
230
+ ├── scss/ # Theme-specific SCSS
231
+ └── js/ # Theme-specific JS
232
+ ```
233
+
234
+ **To create a new theme:**
235
+ 1. Copy `_template/` to new directory
236
+ 2. Customize `_config.scss` variables
237
+ 3. Add theme-specific styles in `scss/`
238
+ 4. Users activate via `config/config.json`
239
+
240
+ ### Working with the Defaults System
241
+
242
+ **Location:** [src/defaults/](src/defaults/)
243
+
244
+ **How it works:**
245
+ 1. Files in `src/defaults/` are the starter template
246
+ 2. During build, they're copied to `dist/defaults/`
247
+ 3. When users run `npx bxm setup`, files copy from `dist/defaults/` to their project
248
+ 4. File behavior controlled by `FILE_MAP` in [gulp/tasks/defaults.js](src/gulp/tasks/defaults.js)
249
+
250
+ **File map rules:**
251
+ ```javascript
252
+ const FILE_MAP = {
253
+ 'src/**/*': { overwrite: false }, // Never overwrite user code
254
+ 'hooks/**/*': { overwrite: false }, // Never overwrite hooks
255
+ '.nvmrc': { template: { node: '22' } }, // Template with data
256
+ // ...
257
+ };
258
+ ```
259
+
260
+ **Rule types:**
261
+ - `overwrite: false` - Never replace if exists
262
+ - `overwrite: true` - Always update
263
+ - `skip: function` - Dynamic skip logic
264
+ - `template: data` - Run templating
265
+ - `name: function` - Rename file
266
+
267
+ ### CSS Architecture
268
+
269
+ **Main entry:** [src/assets/css/browser-extension-manager.scss](src/assets/css/browser-extension-manager.scss)
270
+
271
+ **Core modules:**
272
+ - [core/_initialize.scss](src/assets/css/core/_initialize.scss) - Base resets
273
+ - [core/_utilities.scss](src/assets/css/core/_utilities.scss) - Utility classes
274
+ - [core/_animations.scss](src/assets/css/core/_animations.scss) - Animations
275
+
276
+ **Component system:**
277
+ Each component can have framework defaults in `src/assets/css/components/[name]/index.scss`
278
+
279
+ **Load path resolution:**
280
+ 1. Framework CSS (`node_modules/browser-extension-manager/dist/assets/css`)
281
+ 2. Active theme (`node_modules/browser-extension-manager/dist/assets/themes/[theme-id]`)
282
+ 3. Project dist (`dist/assets/css`)
283
+ 4. node_modules
284
+
285
+ This enables:
286
+ ```scss
287
+ @use 'browser-extension-manager' as * with ($primary: #5B47FB);
288
+ @use 'theme' as *; // Resolves to active theme
289
+ @use 'components/popup' as *; // Import default component styles
290
+ ```
291
+
292
+ ### JavaScript Architecture
293
+
294
+ **Manager classes:** [src/background.js](src/background.js), [src/popup.js](src/popup.js), [src/options.js](src/options.js), [src/sidepanel.js](src/sidepanel.js), [src/page.js](src/page.js), [src/content.js](src/content.js)
295
+
296
+ **Extension API wrapper:** [src/lib/extension.js](src/lib/extension.js)
297
+ - Provides cross-browser compatibility
298
+ - Normalizes chrome/browser APIs
299
+
300
+ **Logger:** [src/lib/logger.js](src/lib/logger.js)
301
+ - Full logging utility
302
+ - [src/lib/logger-lite.js](src/lib/logger-lite.js) for lightweight contexts
303
+
304
+ **Template replacement:**
305
+ Webpack plugin replaces markers during build:
306
+ - `%%% version %%%` → package version
307
+ - `%%% brand.name %%%` → brand name
308
+ - `%%% environment %%%` → 'production' or 'development'
309
+ - `%%% liveReloadPort %%%` → WebSocket port
310
+ - `%%% webManagerConfiguration %%%` → JSON config
311
+
312
+ ### Build Hooks System
313
+
314
+ **Hook locations:**
315
+ - `hooks/build:pre.js` - Before packaging
316
+ - `hooks/build:post.js` - After packaging
317
+
318
+ **Hook structure:**
319
+ ```javascript
320
+ module.exports = async function (index) {
321
+ // index contains build information
322
+ console.log('Hook running...');
323
+ };
324
+ ```
325
+
326
+ **Implementation:** [src/gulp/tasks/package.js](src/gulp/tasks/package.js) loads and executes hooks
327
+
328
+ ### CLI System
329
+
330
+ **Entry point:** [bin/browser-extension-manager](bin/browser-extension-manager)
331
+
332
+ **CLI implementation:** [src/cli.js](src/cli.js)
333
+
334
+ **Commands:** [src/commands/](src/commands/)
335
+ - [setup.js](src/commands/setup.js) - Initialize project
336
+ - [clean.js](src/commands/clean.js) - Clean build artifacts
337
+ - [version.js](src/commands/version.js) - Show version
338
+
339
+ **Aliases in package.json:**
340
+ ```json
341
+ {
342
+ "bin": {
343
+ "ext": "bin/browser-extension-manager",
344
+ "xm": "bin/browser-extension-manager",
345
+ "bxm": "bin/browser-extension-manager",
346
+ "browser-extension-manager": "bin/browser-extension-manager"
347
+ }
348
+ }
349
+ ```
350
+
351
+ ## Best Practices for Framework Development
352
+
353
+ ### File Organization
354
+
355
+ 1. **Keep framework code in src/** - Never edit `dist/` directly
356
+ 2. **Use modular design** - Per Ian's standards, build modular code, not one giant file
357
+ 3. **Maintain defaults/** - Keep template files up-to-date
358
+ 4. **Document changes** - Update CLAUDE.md
359
+
360
+ ### Coding Standards (Per Ian's Preferences)
361
+
362
+ **Short-circuit pattern:**
363
+ ```javascript
364
+ // Good
365
+ const $el = document.querySelector('...');
366
+ if (!$el) {
367
+ return;
368
+ }
369
+ // Long code block
370
+
371
+ // Bad
372
+ if ($el) {
373
+ // Long code block
374
+ }
375
+ ```
376
+
377
+ **Logical operators:**
378
+ ```javascript
379
+ // Good
380
+ const a = b
381
+ || c
382
+ || d;
383
+
384
+ // Bad
385
+ const a = b ||
386
+ c ||
387
+ d;
388
+ ```
389
+
390
+ **DOM element naming:**
391
+ ```javascript
392
+ const $submitBtn = document.querySelector('#submit');
393
+ const $emailInput = document.querySelector('#email');
394
+ ```
395
+
396
+ **File operations:**
397
+ ```javascript
398
+ // Prefer fs-jetpack
399
+ const jetpack = require('fs-jetpack');
400
+ jetpack.write('file.txt', 'content');
401
+ ```
402
+
403
+ ### Backwards Compatibility
404
+
405
+ **Per Ian's instructions:**
406
+ - **DO NOT** make changes backwards compatible unless explicitly requested
407
+ - Most changes are for unreleased code or local development
408
+ - If we develop something and change it later, just change it - don't maintain old way
409
+ - Only add backwards compatibility when specifically asked
410
+
411
+ ### Version Control
412
+
413
+ **Commit:**
414
+ - `src/` - All framework source code
415
+ - `package.json` - Package configuration
416
+ - Documentation (CLAUDE.md)
417
+
418
+ **Ignore:**
419
+ - `dist/` - Compiled framework (generated by prepare-package)
420
+ - `node_modules/`
421
+
422
+ ## Testing Changes
423
+
424
+ ### Local Testing
425
+
426
+ 1. **Make changes in src/**
427
+ 2. **Compile:** `npm start` (watches and compiles to dist/)
428
+ 3. **Link locally:**
429
+ ```bash
430
+ npm link
431
+ ```
432
+ 4. **In consuming project:**
433
+ ```bash
434
+ npm link browser-extension-manager
435
+ npm start
436
+ ```
437
+ 5. **Test in browser:**
438
+ Load `packaged/raw/` directory
439
+
440
+ ### Testing Build System
441
+
442
+ **Test individual gulp tasks:**
443
+ ```bash
444
+ cd consuming-project/
445
+ npm run gulp -- [task-name]
446
+ ```
447
+
448
+ **Available tasks:**
449
+ - `defaults` - Test template copying
450
+ - `sass` - Test SCSS compilation
451
+ - `webpack` - Test JS bundling
452
+ - `html` - Test HTML processing
453
+ - `package` - Test extension packaging
454
+
455
+ ### Testing CLI
456
+
457
+ **In this repository:**
458
+ ```bash
459
+ ./bin/browser-extension-manager setup
460
+ ./bin/browser-extension-manager clean
461
+ ./bin/browser-extension-manager version
462
+ ```
463
+
464
+ **Or via npm:**
465
+ ```bash
466
+ npx bxm setup
467
+ npx bxm clean
468
+ npx bxm version
469
+ ```
470
+
471
+ ## Publishing Updates
472
+
473
+ ### Preparation
474
+
475
+ 1. **Update version** in [package.json](package.json)
476
+ 2. **Compile framework:**
477
+ ```bash
478
+ npm run prepare
479
+ ```
480
+ 3. **Test in consuming project**
481
+ 4. **Update documentation** if needed
482
+
483
+ ### Publishing to npm
484
+
485
+ ```bash
486
+ npm publish
487
+ ```
488
+
489
+ **Published package includes:**
490
+ - `dist/` - Compiled framework
491
+ - `bin/` - CLI binaries
492
+ - `package.json`
493
+ - `README.md`
494
+
495
+ **Excluded via .npmignore:**
496
+ - `src/` - Source code (users don't need this)
497
+ - Development files
498
+
499
+ ## Common Development Tasks
500
+
501
+ ### Adding a Utility Class
502
+
503
+ **Location:** [src/assets/css/core/_utilities.scss](src/assets/css/core/_utilities.scss)
504
+
505
+ ```scss
506
+ // Add new utility
507
+ .shadow-lg {
508
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
509
+ }
510
+ ```
511
+
512
+ ### Adding a Theme Variable
513
+
514
+ **Location:** [src/assets/themes/classy/_config.scss](src/assets/themes/classy/_config.scss) (or relevant theme)
515
+
516
+ ```scss
517
+ $new-color: #FF6B6B !default;
518
+
519
+ // Make available to consumers
520
+ @forward '../bootstrap/scss/bootstrap.scss' with (
521
+ $new-color: $new-color
522
+ );
523
+ ```
524
+
525
+ ### Adding a Webpack Alias
526
+
527
+ **Location:** [src/gulp/tasks/webpack.js](src/gulp/tasks/webpack.js)
528
+
529
+ ```javascript
530
+ resolve: {
531
+ alias: {
532
+ '__new_alias__': path.resolve(paths.root, 'path/to/directory'),
533
+ }
534
+ }
535
+ ```
536
+
537
+ ### Adding a Template Replacement
538
+
539
+ **Location:** [src/gulp/tasks/webpack.js](src/gulp/tasks/webpack.js)
540
+
541
+ ```javascript
542
+ new ReplacePlugin({
543
+ patterns: [
544
+ {
545
+ find: /%%% newVariable %%%/g,
546
+ replacement: 'value'
547
+ }
548
+ ]
549
+ })
550
+ ```
551
+
552
+ ### Modifying Default Manifest
553
+
554
+ **Location:** [src/config/manifest.json](src/config/manifest.json)
555
+
556
+ ```json5
557
+ {
558
+ // Add new default permission
559
+ permissions: [
560
+ 'storage',
561
+ 'newPermission'
562
+ ]
563
+ }
564
+ ```
565
+
566
+ **Compilation:** [src/gulp/tasks/package.js](src/gulp/tasks/package.js) merges user manifest with defaults
567
+
568
+ ## Troubleshooting Framework Development
569
+
570
+ ### Changes not appearing in consuming project
571
+
572
+ 1. **Rebuild framework:** `npm run prepare`
573
+ 2. **Reinstall in consuming project:** `npm install browser-extension-manager@latest`
574
+ 3. **Or use local link:** `npm link` (in BEM) then `npm link browser-extension-manager` (in project)
575
+
576
+ ### Gulp task errors
577
+
578
+ 1. **Check task file:** [src/gulp/tasks/](src/gulp/tasks/)
579
+ 2. **Verify paths** are correct
580
+ 3. **Check for syntax errors**
581
+ 4. **Test task individually:** `npm run gulp -- task-name`
582
+
583
+ ### SCSS compilation errors
584
+
585
+ 1. **Check load paths** in [src/gulp/tasks/sass.js](src/gulp/tasks/sass.js)
586
+ 2. **Verify theme structure**
587
+ 3. **Check for circular imports**
588
+ 4. **Test with minimal SCSS** to isolate issue
589
+
590
+ ### Template replacement not working
591
+
592
+ 1. **Check pattern** in [src/gulp/tasks/webpack.js](src/gulp/tasks/webpack.js)
593
+ 2. **Verify replacement value** is correct
594
+ 3. **Check if file is processed** by webpack
595
+
596
+ ## Notable Dependencies
597
+
598
+ ### Web Manager
599
+ BEM integrates **Web Manager** for Firebase, analytics, and web services functionality. Each component manager initializes Web Manager automatically with configuration from `config/config.json`.
600
+
601
+ **Web Manager API:**
602
+ - Study the Web Manager API and documentation in the sibling repository
603
+ - Location: `../web-manager/` (relative to this project)
604
+ - GitHub: https://github.com/itw-creative-works/web-manager
605
+ - npm: https://www.npmjs.com/package/web-manager
606
+
607
+ **Usage in BEM:**
608
+ ```javascript
609
+ const Manager = new (require('browser-extension-manager/popup'));
610
+
611
+ Manager.initialize().then(() => {
612
+ const { webManager } = Manager;
613
+
614
+ // Web Manager provides:
615
+ // - Firebase (Firestore, Auth, Storage, etc.)
616
+ // - Analytics
617
+ // - User management
618
+ // - Utilities
619
+ const db = webManager.libraries.firebase.firestore();
620
+ });
621
+ ```
622
+
623
+ ### Other Key Dependencies
624
+ - **Gulp** - Build system and task automation
625
+ - **Webpack** - JavaScript bundling with Babel transpilation
626
+ - **Sass** - CSS preprocessing with advanced features
627
+ - **fs-jetpack** - File operations (per Ian's preference)
628
+ - **wonderful-fetch** - HTTP requests
629
+ - **wonderful-version** - Version management
630
+ - **ws** - WebSocket server for live reload
631
+
632
+ ## Resources
633
+
634
+ - **GitHub**: https://github.com/itw-creative-works/browser-extension-manager
635
+ - **npm**: https://www.npmjs.com/package/browser-extension-manager
636
+ - **Chrome Extensions**: https://developer.chrome.com/docs/extensions/
637
+ - **Firefox Add-ons**: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions
638
+
639
+ ## Key Files Reference
640
+
641
+ **Build System:**
642
+ - [src/gulp/main.js](src/gulp/main.js) - Gulp entry point
643
+ - [src/gulp/tasks/](src/gulp/tasks/) - All build tasks
644
+ - [src/build.js](src/build.js) - Build manager base class
645
+
646
+ **Manager Classes:**
647
+ - [src/background.js](src/background.js) - Background script manager
648
+ - [src/popup.js](src/popup.js) - Popup manager
649
+ - [src/options.js](src/options.js) - Options manager
650
+ - [src/sidepanel.js](src/sidepanel.js) - Sidepanel manager
651
+ - [src/page.js](src/page.js) - Custom page manager
652
+ - [src/content.js](src/content.js) - Content script manager
653
+
654
+ **Utilities:**
655
+ - [src/lib/extension.js](src/lib/extension.js) - Cross-browser API wrapper
656
+ - [src/lib/logger.js](src/lib/logger.js) - Logging utility
657
+ - [src/cli.js](src/cli.js) - CLI implementation
658
+
659
+ **CSS Framework:**
660
+ - [src/assets/css/browser-extension-manager.scss](src/assets/css/browser-extension-manager.scss) - Main entry
661
+ - [src/assets/css/core/](src/assets/css/core/) - Core styles
662
+ - [src/assets/css/components/](src/assets/css/components/) - Component styles
663
+ - [src/assets/themes/](src/assets/themes/) - Theme system
664
+
665
+ **Templates:**
666
+ - [src/defaults/](src/defaults/) - Project starter template
667
+ - [src/config/manifest.json](src/config/manifest.json) - Default manifest
668
+ - [src/config/page-template.html](src/config/page-template.html) - HTML template
669
+
670
+ **CLI:**
671
+ - [bin/browser-extension-manager](bin/browser-extension-manager) - CLI entry
672
+ - [src/commands/](src/commands/) - CLI commands
package/TODO.md CHANGED
@@ -6,3 +6,6 @@ WM
6
6
 
7
7
  BXM
8
8
  - extension version (currently bxm-version, but change it)
9
+
10
+ TODO
11
+ handle auth by redirecting to the config website url
@@ -0,0 +1,18 @@
1
+ // ============================================
2
+ // Browser Extension Manager - Main Entry
3
+ // ============================================
4
+ // This is the main SCSS entry point for Browser Extension Manager
5
+ // Import this in your extension components using:
6
+ // @use 'browser-extension-manager' as * with ($primary: #5B47FB);
7
+
8
+ // Forward the theme (allows consuming project to configure it)
9
+ @forward 'theme';
10
+ @use 'theme' as *;
11
+
12
+ // Import core extension styles
13
+ @use 'core/_initialize' as *;
14
+ @use 'core/_utilities' as *;
15
+ @use 'core/_animations' as *;
16
+
17
+ // Import component-specific styles
18
+ @use '_component-specific' as *;
@@ -0,0 +1,5 @@
1
+ // ============================================
2
+ // Content Component Styles
3
+ // ============================================
4
+
5
+ // No styles defined - add your content-specific styles here