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.
- package/CHANGELOG.md +43 -0
- package/CLAUDE.md +672 -0
- package/TODO.md +3 -0
- package/dist/assets/css/browser-extension-manager.scss +18 -0
- package/dist/assets/css/components/content/index.scss +5 -0
- package/dist/assets/css/components/options/index.scss +5 -0
- package/dist/assets/css/components/pages/index.scss +5 -0
- package/dist/assets/css/components/popup/index.scss +5 -0
- package/dist/assets/css/core/_animations.scss +64 -0
- package/dist/assets/css/core/_initialize.scss +23 -0
- package/dist/assets/css/core/_utilities.scss +80 -0
- package/dist/assets/themes/_template/_theme.js +5 -0
- package/dist/assets/themes/_template/_theme.scss +5 -0
- package/dist/assets/themes/bootstrap/_theme.js +16 -0
- package/dist/assets/themes/bootstrap/_theme.scss +232 -0
- package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
- package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
- package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
- package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
- package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
- package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
- package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
- package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
- package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
- package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
- package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
- package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
- package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
- package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
- package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
- package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
- package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
- package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
- package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
- package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
- package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
- package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
- package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
- package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
- package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
- package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
- package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
- package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
- package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
- package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
- package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
- package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
- package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
- package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
- package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
- package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
- package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
- package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
- package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
- package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
- package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
- package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
- package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
- package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
- package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
- package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
- package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
- package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
- package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
- package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
- package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
- package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
- package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
- package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
- package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
- package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
- package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
- package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
- package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
- package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
- package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
- package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
- package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
- package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
- package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
- package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
- package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
- package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
- package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
- package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
- package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
- package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
- package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
- package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
- package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
- package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
- package/dist/assets/themes/classy/README.md +75 -0
- package/dist/assets/themes/classy/_config.scss +185 -0
- package/dist/assets/themes/classy/_theme.js +29 -0
- package/dist/assets/themes/classy/_theme.scss +34 -0
- package/dist/assets/themes/classy/css/base/_animations.scss +27 -0
- package/dist/assets/themes/classy/css/base/_backgrounds.scss +191 -0
- package/dist/assets/themes/classy/css/base/_borders.scss +65 -0
- package/dist/assets/themes/classy/css/base/_root.scss +58 -0
- package/dist/assets/themes/classy/css/base/_soft-colors.scss +92 -0
- package/dist/assets/themes/classy/css/base/_spacing.scss +64 -0
- package/dist/assets/themes/classy/css/base/_typography.scss +179 -0
- package/dist/assets/themes/classy/css/base/_utilities.scss +77 -0
- package/dist/assets/themes/classy/css/components/_accordion.scss +33 -0
- package/dist/assets/themes/classy/css/components/_avatars.scss +32 -0
- package/dist/assets/themes/classy/css/components/_badges.scss +25 -0
- package/dist/assets/themes/classy/css/components/_buttons.scss +397 -0
- package/dist/assets/themes/classy/css/components/_cards.scss +33 -0
- package/dist/assets/themes/classy/css/components/_carousel.scss +41 -0
- package/dist/assets/themes/classy/css/components/_forms.scss +115 -0
- package/dist/assets/themes/classy/css/components/_links.scss +19 -0
- package/dist/assets/themes/classy/css/components/_logo-scroll.scss +57 -0
- package/dist/assets/themes/classy/css/components/_spinners.scss +19 -0
- package/dist/assets/themes/classy/css/components/_text.scss +41 -0
- package/dist/assets/themes/classy/css/layout/_blog.scss +42 -0
- package/dist/assets/themes/classy/css/layout/_general.scss +139 -0
- package/dist/assets/themes/classy/css/layout/_navigation.scss +576 -0
- package/dist/assets/themes/classy/css/layout/_team.scss +18 -0
- package/dist/assets/themes/classy/js/logo-scroll.js +83 -0
- package/dist/assets/themes/classy/js/navbar-scroll.js +65 -0
- package/dist/background.js +236 -260
- package/dist/build.js +93 -4
- package/dist/commands/setup.js +0 -268
- package/dist/config/manifest.json +11 -3
- package/dist/config/page-template.html +21 -0
- package/dist/defaults/.nvmrc +1 -1
- package/dist/defaults/CLAUDE.md +8 -0
- package/dist/defaults/config/browser-extension-manager.json +37 -0
- package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
- package/dist/defaults/src/assets/css/components/options/index.scss +14 -0
- package/dist/defaults/src/assets/css/components/pages/index.scss +10 -0
- package/dist/defaults/src/assets/css/components/popup/index.scss +10 -0
- package/dist/defaults/src/assets/css/components/sidepanel/index.scss +6 -0
- package/dist/defaults/src/assets/css/main.scss +32 -0
- package/dist/defaults/src/assets/js/components/background/index.js +22 -0
- package/dist/defaults/src/assets/js/components/content/index.js +22 -0
- package/dist/defaults/src/assets/js/components/options/index.js +22 -0
- package/dist/defaults/src/assets/js/components/pages/index.js +22 -0
- package/dist/defaults/src/assets/js/components/popup/index.js +22 -0
- package/dist/defaults/src/assets/js/components/sidepanel/index.js +20 -0
- package/dist/defaults/src/assets/vendor/.gitkeep +0 -0
- package/dist/defaults/src/manifest.json +11 -6
- package/dist/defaults/src/views/options/index.html +8 -0
- package/dist/defaults/src/views/pages/index.html +10 -0
- package/dist/defaults/src/views/popup/index.html +4 -0
- package/dist/defaults/src/views/sidepanel/index.html +4 -0
- package/dist/gulp/main.js +11 -5
- package/dist/gulp/plugins/webpack/strip-dev-blocks.js +53 -0
- package/dist/gulp/tasks/{_package.js → BU/_package.js} +1 -1
- package/dist/gulp/tasks/{developmentRebuild.js → BU/developmentRebuild.js} +1 -1
- package/dist/gulp/tasks/{themes.js → BU/themes.js} +2 -1
- package/dist/gulp/tasks/{test.js → _.js} +3 -3
- package/dist/gulp/tasks/audit.js +154 -0
- package/dist/gulp/tasks/defaults.js +308 -0
- package/dist/gulp/tasks/distribute.js +71 -78
- package/dist/gulp/tasks/html.js +150 -0
- package/dist/gulp/tasks/icons.js +3 -2
- package/dist/gulp/tasks/package.js +202 -13
- package/dist/gulp/tasks/sass.js +188 -43
- package/dist/gulp/tasks/serve.js +1 -0
- package/dist/gulp/tasks/utils/template-transform.js +50 -0
- package/dist/gulp/tasks/webpack.js +338 -134
- package/dist/index.js +34 -34
- package/dist/options.js +40 -0
- package/dist/page.js +40 -0
- package/dist/popup.js +40 -0
- package/dist/sidepanel.js +40 -0
- package/firebase-debug.log +322 -0
- package/package.json +25 -18
- package/dist/assets/css/main.scss +0 -3
- package/dist/assets/themes/bootstrap/5.3.3/css/bootstrap.css +0 -12057
- package/dist/assets/themes/bootstrap/5.3.3/css/bootstrap.css.map +0 -1
- package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.bundle.js +0 -6314
- package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.bundle.js.map +0 -1
- package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.js +0 -4494
- package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.js.map +0 -1
- package/dist/defaults/src/assets/css/content.scss +0 -2
- package/dist/defaults/src/assets/css/options.scss +0 -11
- package/dist/defaults/src/assets/css/popup.scss +0 -14
- package/dist/defaults/src/assets/js/background.js +0 -18
- package/dist/defaults/src/assets/js/content.js +0 -15
- package/dist/defaults/src/assets/js/options.js +0 -17
- package/dist/defaults/src/assets/js/popup.js +0 -17
- package/dist/defaults/src/pages/options.html +0 -26
- package/dist/defaults/src/pages/popup.html +0 -26
- /package/dist/{defaults/src/assets/images/_ → assets/css/bundles/.gitkeep} +0 -0
- /package/dist/assets/css/{fontawesome.scss → core/_fontawesome.scss} +0 -0
- /package/dist/defaults/src/assets/{vendor/_ → images/.gitkeep} +0 -0
- /package/dist/gulp/tasks/{_importer.js → BU/_importer.js} +0 -0
- /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
|
@@ -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 *;
|