@omega.js/extension 0.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/LICENSE +98 -0
- package/README.md +194 -0
- package/bin/omega +2 -0
- package/bin/omega-extension +2 -0
- package/bin/omg +2 -0
- package/dist/assets/css/bundles/.gitkeep +0 -0
- package/dist/assets/css/components/content/index.scss +5 -0
- package/dist/assets/css/components/options/index.scss +9 -0
- package/dist/assets/css/components/pages/index.scss +5 -0
- package/dist/assets/css/components/popup/index.scss +9 -0
- package/dist/assets/css/core/_animations.scss +64 -0
- package/dist/assets/css/core/_fontawesome.scss +146 -0
- package/dist/assets/css/core/_initialize.scss +23 -0
- package/dist/assets/css/core/_utilities.scss +80 -0
- package/dist/assets/css/omega-extension.scss +43 -0
- package/dist/assets/css/shell/_index.scss +207 -0
- package/dist/assets/css/tokens/_index.scss +166 -0
- package/dist/assets/js/core/app-shell.js +136 -0
- package/dist/assets/js/libs/initialize-tooltips.js +31 -0
- package/dist/assets/js/libs/recaptcha.js +94 -0
- package/dist/assets/js/main.js +4 -0
- package/dist/assets/themes/_template/README.md +115 -0
- package/dist/assets/themes/_template/_config.scss +60 -0
- package/dist/assets/themes/_template/_theme.js +14 -0
- package/dist/assets/themes/_template/_theme.scss +28 -0
- package/dist/assets/themes/_template/css/base/_root.scss +19 -0
- package/dist/assets/themes/_template/css/components/_components.scss +23 -0
- package/dist/assets/themes/base/README.md +5 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
- package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
- package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
- package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
- package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
- package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
- package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
- package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
- package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
- package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
- package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
- package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
- package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
- package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
- package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
- package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
- package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
- package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
- package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
- package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
- package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
- package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
- package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
- package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
- package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
- package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
- package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
- package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
- package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
- package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
- package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
- package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
- package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
- package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
- package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
- package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
- package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
- package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
- package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
- package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
- package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
- package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
- package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
- package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
- package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
- package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
- package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
- package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
- package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
- package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
- package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
- package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
- package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
- package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
- package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
- package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
- package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
- package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
- package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
- package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
- package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
- package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
- package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
- package/dist/assets/themes/base/_theme.js +13 -0
- package/dist/assets/themes/base/_theme.scss +4 -0
- package/dist/assets/themes/bootstrap/_theme.js +16 -0
- package/dist/assets/themes/bootstrap/_theme.scss +11 -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/overrides/_accordion.scss +21 -0
- package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
- package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
- package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
- package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
- package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
- package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
- package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
- package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
- package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
- package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
- package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -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 +89 -0
- package/dist/assets/themes/classy/_config.scss +245 -0
- package/dist/assets/themes/classy/_theme.js +31 -0
- package/dist/assets/themes/classy/_theme.scss +57 -0
- package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
- package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
- package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
- package/dist/assets/themes/classy/css/base/_root.scss +113 -0
- package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
- package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
- package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
- package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
- package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
- package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
- package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
- package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
- package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
- package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
- package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
- package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
- package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
- package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
- package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
- package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
- package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
- package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
- package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
- package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
- package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
- package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
- package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
- package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
- package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
- package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
- package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
- package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
- package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
- package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
- package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
- package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
- package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
- package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
- package/dist/assets/themes/neobrutalism/README.md +118 -0
- package/dist/assets/themes/neobrutalism/_config.scss +139 -0
- package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
- package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
- package/dist/assets/themes/neobrutalism/_theme.js +24 -0
- package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
- package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
- package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
- package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
- package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
- package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
- package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
- package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
- package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
- package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
- package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
- package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
- package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
- package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
- package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
- package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
- package/dist/assets/themes/newsflash/README.md +117 -0
- package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
- package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
- package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
- package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
- package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
- package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
- package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
- package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
- package/dist/assets/themes/newsflash/_config.scss +147 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
- package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
- package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
- package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
- package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
- package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
- package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
- package/dist/assets/themes/newsflash/_theme.js +24 -0
- package/dist/assets/themes/newsflash/_theme.scss +70 -0
- package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
- package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
- package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
- package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
- package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
- package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
- package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
- package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
- package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
- package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
- package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
- package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
- package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
- package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
- package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
- package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
- package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
- package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
- package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
- package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
- package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
- package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
- package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
- package/dist/background.js +684 -0
- package/dist/build.js +268 -0
- package/dist/cli-run.js +25 -0
- package/dist/cli.js +30 -0
- package/dist/commands/build.js +67 -0
- package/dist/commands/clean.js +29 -0
- package/dist/commands/deploy.js +97 -0
- package/dist/commands/install.js +58 -0
- package/dist/commands/lib/dependencies.js +33 -0
- package/dist/commands/lib/deploy-precheck.js +57 -0
- package/dist/commands/lib/ensure-target.js +151 -0
- package/dist/commands/lib/push-secrets.js +60 -0
- package/dist/commands/migrate.js +77 -0
- package/dist/commands/test.js +110 -0
- package/dist/commands/update.js +21 -0
- package/dist/commands/version.js +12 -0
- package/dist/config/manifest.json +117 -0
- package/dist/config/page-template.html +21 -0
- package/dist/content.js +37 -0
- package/dist/defaults/.github/workflows/publish.yml +86 -0
- package/dist/defaults/.nvmrc +1 -0
- package/dist/defaults/.vscode/settings.json +8 -0
- package/dist/defaults/AGENTS.md +113 -0
- package/dist/defaults/CHANGELOG.md +15 -0
- package/dist/defaults/CLAUDE.md +1 -0
- package/dist/defaults/_.gitignore +75 -0
- package/dist/defaults/config/description.md +46 -0
- package/dist/defaults/config/messages.json +20 -0
- package/dist/defaults/config/omega.json5 +64 -0
- package/dist/defaults/docs/README.md +17 -0
- package/dist/defaults/gulpfile.js +6 -0
- package/dist/defaults/hooks/build/post.js +8 -0
- package/dist/defaults/hooks/build/pre.js +8 -0
- package/dist/defaults/src/assets/css/bundles/.gitkeep +0 -0
- package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
- package/dist/defaults/src/assets/css/components/offscreen/index.scss +4 -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/images/.gitkeep +0 -0
- package/dist/defaults/src/assets/js/components/background/index.js +25 -0
- package/dist/defaults/src/assets/js/components/content/index.js +22 -0
- package/dist/defaults/src/assets/js/components/offscreen/index.js +25 -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 +131 -0
- package/dist/defaults/src/views/offscreen/index.html +3 -0
- 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/defaults/test/README.md +41 -0
- package/dist/defaults/test/_init.js +10 -0
- package/dist/defaults/test/boot/externally-connectable.test.js +28 -0
- package/dist/gulp/config/locales.js +12 -0
- package/dist/gulp/main.js +78 -0
- package/dist/gulp/tasks/_.js +18 -0
- package/dist/gulp/tasks/audit.js +222 -0
- package/dist/gulp/tasks/bundle.js +687 -0
- package/dist/gulp/tasks/defaults.js +281 -0
- package/dist/gulp/tasks/distribute.js +172 -0
- package/dist/gulp/tasks/fontawesome.js +25 -0
- package/dist/gulp/tasks/html.js +163 -0
- package/dist/gulp/tasks/icons.js +126 -0
- package/dist/gulp/tasks/package.js +742 -0
- package/dist/gulp/tasks/publish.js +417 -0
- package/dist/gulp/tasks/sass.js +252 -0
- package/dist/gulp/tasks/serve.js +103 -0
- package/dist/gulp/tasks/translate.js +252 -0
- package/dist/gulp/tasks/utils/build-json.js +43 -0
- package/dist/gulp/tasks/utils/template-transform.js +50 -0
- package/dist/gulp/templates/BUILD_INSTRUCTIONS.md +69 -0
- package/dist/index.js +46 -0
- package/dist/lib/affiliatizer.js +224 -0
- package/dist/lib/analytics.js +26 -0
- package/dist/lib/auth-helpers.js +213 -0
- package/dist/lib/extension.js +116 -0
- package/dist/lib/icons.js +36 -0
- package/dist/lib/logger-lite.js +35 -0
- package/dist/lib/logger.js +4 -0
- package/dist/lib/messaging.js +48 -0
- package/dist/lib/safe-install.js +4 -0
- package/dist/lib/theme.js +73 -0
- package/dist/lib/verts.js +68 -0
- package/dist/offscreen.js +31 -0
- package/dist/omega-bin.js +6 -0
- package/dist/options.js +80 -0
- package/dist/page.js +80 -0
- package/dist/popup.js +80 -0
- package/dist/sidepanel.js +80 -0
- package/dist/test/assert.js +4 -0
- package/dist/test/fixtures/consumer-extension/dist/background.js +23 -0
- package/dist/test/fixtures/consumer-extension/dist/manifest.json +20 -0
- package/dist/test/fixtures/consumer-extension/dist/options.html +10 -0
- package/dist/test/fixtures/consumer-extension/dist/popup.bundle.js +5 -0
- package/dist/test/fixtures/consumer-extension/dist/popup.html +12 -0
- package/dist/test/harness/extension/background.js +26 -0
- package/dist/test/harness/extension/manifest.json +27 -0
- package/dist/test/harness/extension/options.html +12 -0
- package/dist/test/harness/extension/popup.html +12 -0
- package/dist/test/harness/extension/sidepanel.html +12 -0
- package/dist/test/index.js +63 -0
- package/dist/test/runner.js +99 -0
- package/dist/test/runners/boot.js +221 -0
- package/dist/test/runners/chromium.js +391 -0
- package/dist/test/runners/helpers.js +24 -0
- package/dist/test/suites/background/messaging.test.js +44 -0
- package/dist/test/suites/background/storage.test.js +46 -0
- package/dist/test/suites/background/sw-context.test.js +49 -0
- package/dist/test/suites/boot/build-json-bake.test.js +80 -0
- package/dist/test/suites/boot/extension-loads.test.js +58 -0
- package/dist/test/suites/build/affiliatizer.test.js +64 -0
- package/dist/test/suites/build/app-launch.test.js +65 -0
- package/dist/test/suites/build/attach-log-file.test.js +99 -0
- package/dist/test/suites/build/auth-emulator-gate.test.js +118 -0
- package/dist/test/suites/build/auth-triggers.test.js +71 -0
- package/dist/test/suites/build/boot-discovery.test.js +134 -0
- package/dist/test/suites/build/boot-timeout.test.js +92 -0
- package/dist/test/suites/build/build-error-notification.test.js +122 -0
- package/dist/test/suites/build/build-json-bake.test.js +302 -0
- package/dist/test/suites/build/build-verb.test.js +138 -0
- package/dist/test/suites/build/bundle-targets.test.js +66 -0
- package/dist/test/suites/build/cache-warming.test.js +44 -0
- package/dist/test/suites/build/cli.test.js +150 -0
- package/dist/test/suites/build/default-boot-test.test.js +100 -0
- package/dist/test/suites/build/defaults-scaffold.test.js +287 -0
- package/dist/test/suites/build/deploy-dispatch.test.js +76 -0
- package/dist/test/suites/build/distribute-task.test.js +111 -0
- package/dist/test/suites/build/ensure-target.test.js +141 -0
- package/dist/test/suites/build/env-delivery.test.js +239 -0
- package/dist/test/suites/build/env-watch.test.js +86 -0
- package/dist/test/suites/build/expect.test.js +48 -0
- package/dist/test/suites/build/exports.test.js +53 -0
- package/dist/test/suites/build/extension-fallback.test.js +82 -0
- package/dist/test/suites/build/framework-deps.test.js +176 -0
- package/dist/test/suites/build/global-handlers.test.js +70 -0
- package/dist/test/suites/build/icon-sheet.test.js +74 -0
- package/dist/test/suites/build/logger-lite.test.js +61 -0
- package/dist/test/suites/build/manager.test.js +249 -0
- package/dist/test/suites/build/mode-helpers.test.js +136 -0
- package/dist/test/suites/build/omega-shell.test.js +103 -0
- package/dist/test/suites/build/omega-tokens.test.js +76 -0
- package/dist/test/suites/build/package-task.test.js +831 -0
- package/dist/test/suites/build/setup-scripts.test.js +172 -0
- package/dist/test/suites/build/strip-dev-blocks.test.js +122 -0
- package/dist/test/suites/build/template-replace.test.js +116 -0
- package/dist/test/suites/build/test-discovery.test.js +64 -0
- package/dist/test/suites/build/test-target-no-match.test.js +119 -0
- package/dist/test/suites/build/theme-resolve.test.js +115 -0
- package/dist/test/suites/build/translate.test.js +85 -0
- package/dist/test/suites/build/url-helpers.test.js +119 -0
- package/dist/test/suites/build/verb-logs.test.js +43 -0
- package/dist/test/suites/build/verts-binding.test.js +67 -0
- package/dist/test/suites/build/wakeup-ping.test.js +90 -0
- package/dist/test/suites/build/wave5-messenger.test.js +80 -0
- package/dist/test/suites/view/options-and-sidepanel.test.js +16 -0
- package/dist/test/suites/view/popup-context.test.js +53 -0
- package/dist/test/suites/view/sidepanel.test.js +16 -0
- package/dist/test/utils/extended-mode-warning.js +13 -0
- package/dist/utils/attach-log-file.js +4 -0
- package/dist/utils/mode-helpers.js +117 -0
- package/dist/utils/url-helpers.js +69 -0
- package/dist/vendor/account/engine.js +182 -0
- package/dist/vendor/account/features.js +220 -0
- package/dist/vendor/account/index.js +53 -0
- package/dist/vendor/account/schema.js +272 -0
- package/dist/vendor/account/subscription.js +38 -0
- package/dist/vendor/config/company.js +31 -0
- package/dist/vendor/config/defaults.js +173 -0
- package/dist/vendor/config/demo.js +18 -0
- package/dist/vendor/config/desktop-artifacts.js +110 -0
- package/dist/vendor/config/edit.js +769 -0
- package/dist/vendor/config/env-delivery.js +145 -0
- package/dist/vendor/config/env-rules.js +93 -0
- package/dist/vendor/config/env-schema.js +1078 -0
- package/dist/vendor/config/env.js +445 -0
- package/dist/vendor/config/hooks.js +97 -0
- package/dist/vendor/config/index.js +237 -0
- package/dist/vendor/config/instances.js +208 -0
- package/dist/vendor/config/load.js +490 -0
- package/dist/vendor/config/merge.js +68 -0
- package/dist/vendor/config/order.js +139 -0
- package/dist/vendor/config/ports.js +374 -0
- package/dist/vendor/config/providers.js +32 -0
- package/dist/vendor/config/repo.js +142 -0
- package/dist/vendor/config/retired-keys.js +430 -0
- package/dist/vendor/config/schema.js +1610 -0
- package/dist/vendor/config/secrets.js +50 -0
- package/dist/vendor/config/seed.js +34 -0
- package/dist/vendor/config/site-global.js +205 -0
- package/dist/vendor/config/validate.js +554 -0
- package/dist/vendor/config/winback.js +61 -0
- package/dist/vendor/devkit/actions-secrets.js +145 -0
- package/dist/vendor/devkit/attach-log-file.js +262 -0
- package/dist/vendor/devkit/bundle.js +292 -0
- package/dist/vendor/devkit/ci-workflows.js +520 -0
- package/dist/vendor/devkit/clean-dirs.js +28 -0
- package/dist/vendor/devkit/cli-router.js +156 -0
- package/dist/vendor/devkit/defaults-engine.js +372 -0
- package/dist/vendor/devkit/deploy-precheck.js +54 -0
- package/dist/vendor/devkit/deploy-record.js +180 -0
- package/dist/vendor/devkit/deploy.js +286 -0
- package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
- package/dist/vendor/devkit/env-watch.js +132 -0
- package/dist/vendor/devkit/framework-deps.js +46 -0
- package/dist/vendor/devkit/icons.js +178 -0
- package/dist/vendor/devkit/license.js +155 -0
- package/dist/vendor/devkit/local.js +1905 -0
- package/dist/vendor/devkit/logger.js +128 -0
- package/dist/vendor/devkit/merge-line-files.js +296 -0
- package/dist/vendor/devkit/npm-registry.js +52 -0
- package/dist/vendor/devkit/omega-bin.js +345 -0
- package/dist/vendor/devkit/safe-install.js +18 -0
- package/dist/vendor/devkit/scaffold-guard.js +96 -0
- package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
- package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
- package/dist/vendor/devkit/target-dependencies.js +137 -0
- package/dist/vendor/devkit/target-secrets.js +165 -0
- package/dist/vendor/devkit/test/assert.js +120 -0
- package/dist/vendor/devkit/test/define-cases.js +104 -0
- package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
- package/dist/vendor/devkit/test/runner-core.js +554 -0
- package/dist/vendor/devkit/test/scope.js +162 -0
- package/dist/vendor/devkit/translate/cache.js +84 -0
- package/dist/vendor/devkit/translate/engine.js +243 -0
- package/dist/vendor/devkit/translate/index.js +49 -0
- package/dist/vendor/devkit/translate/languages.js +134 -0
- package/dist/vendor/devkit/translate/providers.js +188 -0
- package/dist/vendor/devkit/update.js +569 -0
- package/docs/affiliatizer.md +81 -0
- package/docs/audit.md +67 -0
- package/docs/auth.md +149 -0
- package/docs/build-system.md +176 -0
- package/docs/cdp-debugging.md +42 -0
- package/docs/cli.md +73 -0
- package/docs/common-mistakes.md +10 -0
- package/docs/components.md +87 -0
- package/docs/css.md +133 -0
- package/docs/defaults.md +72 -0
- package/docs/environment-detection.md +79 -0
- package/docs/extension.md +93 -0
- package/docs/hooks.md +111 -0
- package/docs/icons.md +47 -0
- package/docs/index.md +291 -0
- package/docs/logging.md +33 -0
- package/docs/managers.md +100 -0
- package/docs/offscreen.md +57 -0
- package/docs/publishing.md +182 -0
- package/docs/shared/agent-docs.md +89 -0
- package/docs/shared/analytics.md +612 -0
- package/docs/shared/brands.md +51 -0
- package/docs/shared/breaking-changes.md +497 -0
- package/docs/shared/config.md +1387 -0
- package/docs/shared/deploys.md +215 -0
- package/docs/shared/icons.md +201 -0
- package/docs/shared/local-dev.md +147 -0
- package/docs/shared/logging.md +202 -0
- package/docs/shared/monitoring.md +153 -0
- package/docs/shared/publishing.md +183 -0
- package/docs/shared/rulings.md +34 -0
- package/docs/shared/testing.md +147 -0
- package/docs/shared/theming.md +604 -0
- package/docs/shared/translation.md +291 -0
- package/docs/shared/updates.md +61 -0
- package/docs/templating.md +66 -0
- package/docs/test-boot-layer.md +143 -0
- package/docs/test-framework.md +411 -0
- package/docs/themes.md +89 -0
- package/docs/translations.md +73 -0
- package/docs/verts.md +67 -0
- package/docs/xss-prevention.md +95 -0
- package/package.json +159 -0
package/docs/css.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# CSS Architecture
|
|
2
|
+
|
|
3
|
+
SCSS-based, theme-pluggable, with a load-path system that lets consumer SCSS reference framework + theme styles via short names (`@use 'omega-extension'`, `@use 'theme'`).
|
|
4
|
+
|
|
5
|
+
## Main entry
|
|
6
|
+
|
|
7
|
+
[src/assets/css/@omega.js/extension.scss](../src/assets/css/@omega.js/extension.scss) is the framework's CSS entry point. Consumers `@use` it to get framework defaults + utilities + theme.
|
|
8
|
+
|
|
9
|
+
## Core modules
|
|
10
|
+
|
|
11
|
+
| Module | Source |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `core/_initialize.scss` | Base resets (box-sizing, body defaults) |
|
|
14
|
+
| `core/_utilities.scss` | Utility classes (`.shadow-lg`, `.text-truncate`, spacing, color, etc.) |
|
|
15
|
+
| `core/_animations.scss` | Keyframe animations + transition mixins |
|
|
16
|
+
| `core/_fontawesome.scss` | Icon presentation: the square glyph-centered box, the `fa-2xs`…`fa-6xl` size scale, `fa-spin`/`fa-bounce`/`fa-beat`. Vendored VERBATIM from @omega.js/web at prepare (package.json `omega.vendorAssets`), never hand-edited here. See [shared/icons.md](shared/icons.md) |
|
|
17
|
+
|
|
18
|
+
## Per-component styles
|
|
19
|
+
|
|
20
|
+
Each component can have framework defaults in `src/assets/css/components/<name>/index.scss`. These define the FRAMEWORK'S default look — e.g. `src/assets/css/components/popup/index.scss` defines popup-specific layout that ALL @omega.js/extension extensions inherit unless they override.
|
|
21
|
+
|
|
22
|
+
Consumer extensions add their OWN per-component overrides in `src/assets/css/components/<name>/index.scss` (in the consumer project, not the framework).
|
|
23
|
+
|
|
24
|
+
## Load-path resolution
|
|
25
|
+
|
|
26
|
+
The SCSS load path is set up by [src/gulp/tasks/sass.js](../src/gulp/tasks/sass.js) with this search order:
|
|
27
|
+
|
|
28
|
+
1. **Framework CSS** — `node_modules/@omega.js/extension/dist/assets/css`
|
|
29
|
+
2. **Active theme** — `node_modules/@omega.js/extension/dist/assets/themes/<theme-id>`
|
|
30
|
+
3. **Project dist** — `<consumer>/dist/assets/css`
|
|
31
|
+
4. **node_modules** — for npm-installed SCSS packages
|
|
32
|
+
|
|
33
|
+
So this just works in a consumer's `src/assets/css/main.scss`:
|
|
34
|
+
|
|
35
|
+
```scss
|
|
36
|
+
// 1. Resolves to @omega.js/extension's main entry — sets up Bootstrap, utilities, etc.
|
|
37
|
+
@use 'omega-extension' as * with (
|
|
38
|
+
$primary: #2563EB,
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
// 2. Resolves to the active theme's _theme.scss
|
|
42
|
+
@use 'theme' as *;
|
|
43
|
+
|
|
44
|
+
// 3. Resolves to @omega.js/extension's bundled popup defaults
|
|
45
|
+
@use 'components/popup' as *;
|
|
46
|
+
|
|
47
|
+
// 4. Resolves to npm-installed CSS package
|
|
48
|
+
@use 'pkg:bootstrap-icons' as *;
|
|
49
|
+
|
|
50
|
+
// Consumer-authored overrides come last
|
|
51
|
+
.my-custom-rule { color: $primary; }
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Component bundle output
|
|
55
|
+
|
|
56
|
+
Each component context gets a CSS bundle:
|
|
57
|
+
|
|
58
|
+
- `src/assets/css/components/<component>/index.scss` → `dist/assets/css/components/<component>.bundle.css`
|
|
59
|
+
|
|
60
|
+
The HTML pipeline auto-injects `<link rel="stylesheet" href="../assets/css/components/<component>.bundle.css">` into each view via the page template.
|
|
61
|
+
|
|
62
|
+
## Theme integration
|
|
63
|
+
|
|
64
|
+
Theme SCSS is vendored from @omega.js/web's `themes/` tree into `dist/assets/themes/<theme-id>/` at prepare (C4 cp109 — one theme tree for web/desktop/extension). The load path resolves `@use 'theme'` to the active theme — flip `config.theme.id` to switch themes without code changes. See [themes.md](themes.md).
|
|
65
|
+
|
|
66
|
+
## App shell
|
|
67
|
+
|
|
68
|
+
Dashboard-style views (options, side panel, extension pages) use the `.omega-shell` layout — a sidebar + topbar + main grid with a collapsible desktop rail and a mobile drawer. Two layers ship, both vendored from @omega.js/web at prepare: the MECHANICS (`dist/assets/css/shell/_index.scss` — the grid, region geometry, states, and the `--omega-shell-*` tokens, loaded by the `omega-extension` entry before the theme) and the theme's SKIN (`dist/assets/themes/<theme-id>/css/layout/_shell.scss`, layered over it). Nothing to import — `@use 'omega-extension'` gets both.
|
|
69
|
+
|
|
70
|
+
Emit this markup in the view's HTML:
|
|
71
|
+
|
|
72
|
+
```html
|
|
73
|
+
<div class="omega-shell" data-omega-shell>
|
|
74
|
+
<aside class="omega-shell__sidebar" id="app-sidebar">
|
|
75
|
+
<!-- pinned head (brand, selector) sits here, outside the scroll region -->
|
|
76
|
+
<div class="omega-shell__sidebar-scroll">
|
|
77
|
+
<!-- nav scrolls HERE (the rail itself clips nothing, so popovers can
|
|
78
|
+
escape); text that should hide in the collapsed rail wears
|
|
79
|
+
.omega-shell__label -->
|
|
80
|
+
</div>
|
|
81
|
+
</aside>
|
|
82
|
+
|
|
83
|
+
<header class="omega-shell__topbar">
|
|
84
|
+
<div class="omega-shell__topbar-start">
|
|
85
|
+
<button data-shell-toggle="drawer" aria-expanded="false" aria-controls="app-sidebar">☰</button>
|
|
86
|
+
<button data-shell-toggle="collapse" aria-expanded="true" aria-controls="app-sidebar">⇤</button>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="omega-shell__topbar-end"><!-- account menu, actions --></div>
|
|
89
|
+
</header>
|
|
90
|
+
|
|
91
|
+
<main class="omega-shell__main"><!-- page content --></main>
|
|
92
|
+
|
|
93
|
+
<div class="omega-shell__scrim" data-shell-dismiss></div>
|
|
94
|
+
</div>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Wire the behavior from the view's script (`src/assets/js/components/<component>/index.js`) — `__main_assets__` is the build alias for @omega.js/extension's vendored core assets:
|
|
98
|
+
|
|
99
|
+
```js
|
|
100
|
+
import appShell from '__main_assets__/js/core/app-shell.js';
|
|
101
|
+
|
|
102
|
+
appShell();
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The module is delegated and declarative: `[data-shell-toggle="collapse"]` toggles the rail, `[data-shell-toggle="drawer"]` toggles the mobile drawer, `[data-shell-dismiss]` (and Escape) closes it. It stamps the state on the container — `data-shell-collapsed="true"` (persisted under the `shell.collapsed` storage key) and `data-shell-open="true"` — which is what the CSS keys off; the API is also registered at `omega._library.appShell`. Add `.omega-shell--locked` when `main` should never scroll (the view manages its own interior scroll).
|
|
106
|
+
|
|
107
|
+
## Adding a utility class
|
|
108
|
+
|
|
109
|
+
[src/assets/css/core/_utilities.scss](../src/assets/css/core/_utilities.scss):
|
|
110
|
+
|
|
111
|
+
```scss
|
|
112
|
+
.shadow-lg {
|
|
113
|
+
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
After adding, run `npm run prepare` in @omega.js/extension (or `npm start` in the consumer) and the new utility is available framework-wide.
|
|
118
|
+
|
|
119
|
+
## Why this load-path system
|
|
120
|
+
|
|
121
|
+
Without it, every consumer SCSS file would need:
|
|
122
|
+
|
|
123
|
+
```scss
|
|
124
|
+
@use '../../../../node_modules/@omega.js/extension/dist/assets/css/@omega.js/extension' as *;
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Brittle, ugly, breaks with hoisted/non-hoisted npm installs. The load-path lets `@use 'omega-extension'` work regardless of where @omega.js/extension is installed. Same pattern UJM uses for Jekyll themes.
|
|
128
|
+
|
|
129
|
+
## See also
|
|
130
|
+
|
|
131
|
+
- [themes.md](themes.md) — theme system that the load path resolves
|
|
132
|
+
- [components.md](components.md) — three-part component structure (view + styles + script)
|
|
133
|
+
- [build-system.md](build-system.md) — gulp/sass task details
|
package/docs/defaults.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Defaults System
|
|
2
|
+
|
|
3
|
+
`src/defaults/` is the starter template that @omega.js/extension copies into consumer projects on the first verb they run (`ensureTarget()`). It mirrors a "fresh @omega.js/extension project" — manifest, views, components, config, .nvmrc, .gitignore, .env, etc.
|
|
4
|
+
|
|
5
|
+
## How it works
|
|
6
|
+
|
|
7
|
+
1. During @omega.js/extension's own build (`prepare-package`), files in `src/defaults/` are copied to `dist/defaults/`.
|
|
8
|
+
2. On every consumer verb, the `gulp defaults` task scaffolds files from `dist/defaults/` into the consumer's project root — dispatch runs through the shared devkit defaults engine (`applyDefaults`, vendored into `dist/vendor/devkit/`).
|
|
9
|
+
3. File behavior (overwrite, skip, template, rename, merge) is controlled by `FILE_MAP` in [src/gulp/tasks/defaults.js](../src/gulp/tasks/defaults.js) — minimatch patterns, last-match-wins.
|
|
10
|
+
|
|
11
|
+
## FILE_MAP rules
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
const FILE_MAP = {
|
|
15
|
+
'src/**/*': { overwrite: false }, // never overwrite user code
|
|
16
|
+
'hooks/**/*': { overwrite: false }, // never overwrite hooks
|
|
17
|
+
'_.gitignore': { mergeLines: true }, // marker-section merge (rename is an engine built-in)
|
|
18
|
+
'AGENTS.md': { mergeLines: true }, // the agent-docs chain; CLAUDE.md is the one-line pointer
|
|
19
|
+
'config/omega.json5': { overwrite: true, merge: true }, // JSON5 defaults merge
|
|
20
|
+
'.nvmrc': { template: cleanVersions }, // `{{ versions.node }}` render
|
|
21
|
+
};
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Rule types
|
|
25
|
+
|
|
26
|
+
| Rule | Behavior |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `overwrite: false` | Never replace if the file exists in the project. Default for `src/**`. |
|
|
29
|
+
| `overwrite: true` | Always overwrite — for files @omega.js/extension owns (writes are skipped when byte-identical). |
|
|
30
|
+
| `skip: bool\|function` | Never process — `(item) => boolean` for dynamic decisions. |
|
|
31
|
+
| `template: data` | Render `{{ key.path }}` tokens with `data` (tolerant — unknown keys survive). |
|
|
32
|
+
| `merge: true` | JSON5 defaults merge — consumer values and consumer-only keys survive, framework template provides shape. |
|
|
33
|
+
| `mergeLines: true` | OMEGA marker-section merge (`Default Values` framework-owned / `Custom Values` consumer-owned). |
|
|
34
|
+
| `name`/`path: function` | Rename / re-destination on copy. |
|
|
35
|
+
|
|
36
|
+
Engine built-ins (no rule needed): `_.foo` → `.foo` renames, `.gitkeep` creates the directory without copying the file, `.DS_Store` never copies, archive dirs (non-final `_x` segments) never ship, and every write is skipped when the content is unchanged. On top of the per-rule handling, the task's site-token pass (`[ site.x ]` brackets) runs on `html/md/liquid/json/yml/yaml` files via the engine's `transform` hook.
|
|
37
|
+
|
|
38
|
+
## Brand monorepos
|
|
39
|
+
|
|
40
|
+
When the target sits inside a brand monorepo (`{brand}/targets/{target}` — the `@omega.js/config` seed mode), `scaffoldDefaults` adjusts the map: the local-layer `config/omega.json5` is skipped (the brand root's `targets.*` is the home), per-target docs retire to the brand root, and **`.github/**` never scaffolds**. GitHub executes workflows from the REPO ROOT's `.github/workflows/` only, so a per-target copy is dead on arrival — no CI build, no store publish, silently ([#265](https://github.com/Omega-JS-Stack/omega/issues/265)).
|
|
41
|
+
|
|
42
|
+
Instead, setup composes the framework's workflow into the brand root as `.github/workflows/<target>-<workflow>.yml` (`extension-publish.yml`) via the shared devkit `ci-workflows` module:
|
|
43
|
+
|
|
44
|
+
- every `run:` step that follows its job's `actions/checkout` is scoped to the target (a per-step `working-directory: targets/extension`), while `uses:` actions still run at the repo root, which is what checkout wants. Per step, not a workflow-level `defaults.run.working-directory`: that also scopes the steps running BEFORE the checkout (the git config step), where the target dir does not exist yet — the job dies on step 1;
|
|
45
|
+
- an action's inputs ignore `working-directory:` entirely, so the path-bearing ones on post-checkout `uses:` steps are rewritten to the target dir from an explicit per-action table (`actions/cache`/`upload-artifact`/`download-artifact` `path`, `peaceiris/actions-gh-pages` `publish_dir`), as are `hashFiles()` patterns, which glob from the workspace root wherever they sit. The extension template uses none of them today — it carries only checkout and setup-node — so its composed file differs from the template by the `working-directory:` lines alone;
|
|
46
|
+
- each target gets its own concurrency group, so one target's deploy never cancels another's;
|
|
47
|
+
- the file is regenerated from the template on every setup — a rerun updates that one file and can never duplicate a job;
|
|
48
|
+
- a target-level copy left by an older setup is deleted when it is still the untouched framework file, and KEPT with a warning when it differs from the current template (your edits, or an older framework version) — the warning names the composed file to compare it against.
|
|
49
|
+
|
|
50
|
+
Scoping is by working directory, not a `paths:` trigger filter: OMEGA workflows carry no push triggers by design (deliberate deploys), and a path filter on a dispatch-only workflow filters nothing. `omega deploy` dispatches the composed name in a brand, the plain `publish.yml` standalone.
|
|
51
|
+
|
|
52
|
+
## Why the underscore prefix?
|
|
53
|
+
|
|
54
|
+
Files like `_.gitignore` are stored with a `_` prefix in `src/defaults/` so they don't interfere with @omega.js/extension's own development and so npm's tarball filter doesn't drop them. The engine strips the leading `_` on copy.
|
|
55
|
+
|
|
56
|
+
## Adding a new default
|
|
57
|
+
|
|
58
|
+
1. Drop the file under `src/defaults/<path-where-it-goes-in-the-consumer>`
|
|
59
|
+
2. If it needs special handling, add an entry to `FILE_MAP` in [tasks/defaults.js](../src/gulp/tasks/defaults.js)
|
|
60
|
+
3. Run `npm run prepare` to refresh @omega.js/extension's `dist/`
|
|
61
|
+
4. Verify in a fresh consumer project: `mkdir test-consumer && cd test-consumer && npm i ../@omega.js/extension && npx omega build`
|
|
62
|
+
|
|
63
|
+
## Why this exists
|
|
64
|
+
|
|
65
|
+
Consumers shouldn't have to hand-author boilerplate (manifest, sample views, sample SCSS, sample background.js, .nvmrc, .gitignore). The defaults system seeds a working extension on the first verb. Same idea as `create-react-app` or `vite create`, just integrated with @omega.js/extension's CLI.
|
|
66
|
+
|
|
67
|
+
When @omega.js/extension ships a framework improvement (e.g. a better default popup template), bumping @omega.js/extension in a consumer + running any verb again pulls the improvements WITHOUT overwriting user changes (because most `src/**` entries are `overwrite: false`).
|
|
68
|
+
|
|
69
|
+
## See also
|
|
70
|
+
|
|
71
|
+
- [cli.md](cli.md) — every verb's `ensureTarget()` invokes the defaults task
|
|
72
|
+
- [build-system.md](build-system.md) — gulp tasks pipeline
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Environment Detection
|
|
2
|
+
|
|
3
|
+
`getEnvironment()` returns exactly ONE of three mutually-exclusive, exhaustive values:
|
|
4
|
+
|
|
5
|
+
```javascript
|
|
6
|
+
Manager.getEnvironment() // 'development' | 'testing' | 'production'
|
|
7
|
+
|
|
8
|
+
Manager.isDevelopment() // true ONLY in development
|
|
9
|
+
Manager.isTesting() // true ONLY in testing
|
|
10
|
+
Manager.isProduction() // true ONLY in production
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**The Manager is the single source of truth.** `getEnvironment()` is the ONLY function that reads the raw signals (`OMEGA_TEST_MODE` / `chrome.runtime.getManifest().update_url` / `OMEGA_BUILD_MODE` / `NODE_ENV` / `config.bxm.environment`). The three `is*()` checks **derive** from it live on every call — they never read raw signals themselves, so they can never disagree with `getEnvironment()`.
|
|
14
|
+
|
|
15
|
+
**One implementation, mixed into all eight Managers.** @omega.js/extension has eight Manager entry points (build / background / popup / options / content / sidepanel / page / offscreen). The helpers are defined once in [src/utils/mode-helpers.js](../src/utils/mode-helpers.js) and mixed into each via `attachTo(Manager)`, available as both prototype methods (`manager.isTesting()`) and statics (`Manager.isTesting()`).
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
manager.getEnvironment() // same answer in every extension context
|
|
19
|
+
Manager.isTesting() // static form, for build-time scripts
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Resolution order:** testing wins first, then production, else development. The three checks are mutually exclusive — exactly one is true. `isDevelopment()` is **false** during testing, and `isProduction()` is a real positive check (it is NOT `!isDevelopment()`).
|
|
23
|
+
|
|
24
|
+
## Available helpers
|
|
25
|
+
|
|
26
|
+
| Helper | Returns |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `getEnvironment()` | `'development' \| 'testing' \| 'production'` — the SSOT resolver; the only reader of raw signals. |
|
|
29
|
+
| `isDevelopment()` | `true` ONLY in development (unpacked extension via chrome://extensions / dev build), and NOT testing. Derives from `getEnvironment()`. |
|
|
30
|
+
| `isTesting()` | `true` ONLY in testing (`OMEGA_TEST_MODE === 'true'`). **Takes precedence** — a test run is not development. |
|
|
31
|
+
| `isProduction()` | `true` ONLY in production (packed / store-installed extension, `manifest.update_url` present). A **real positive check** — NOT `!isDevelopment()`. |
|
|
32
|
+
|
|
33
|
+
## Gating side effects — use the INTENTIONAL check
|
|
34
|
+
|
|
35
|
+
Because there are three environments, never gate a side effect on a two-value assumption. State what you mean:
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
// Production-only (skip real telemetry / production behavior in dev AND testing):
|
|
39
|
+
if (isProduction()) { /* do the real thing */ }
|
|
40
|
+
if (!isProduction()) { /* skip / use the safe local behavior */ }
|
|
41
|
+
|
|
42
|
+
// Local-or-test (anything that should run in BOTH dev and testing):
|
|
43
|
+
if (isDevelopment() || isTesting()) { /* DevTools menu items, verbose logging */ }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Avoid** `if (!isDevelopment())` or `if (env !== 'development')` to gate production behavior — those wrongly include `testing` as production and leak real side effects during test runs. This is the bug class that motivated the 3-value model. (A genuinely dev-only feature like live-reload is the exception: `env !== 'development'` correctly skips it in both testing and production.)
|
|
47
|
+
|
|
48
|
+
## URL helpers
|
|
49
|
+
|
|
50
|
+
@omega.js/extension owns ONE backend URL helper, `getApiUrl()` in [src/utils/url-helpers.js](../src/utils/url-helpers.js), mixed into every context Manager beside the mode helpers. It follows the same local-in-dev/testing, production-otherwise convention as @omega.js/client's `getApiUrl`. The local port comes from whichever channel the context has: the `OMEGA_HTTPS_PORT` / `OMEGA_HOSTING_PORT` env vars (build-time Node and the test harness), then the `dev.ports` map the build baked into `OMEGA_BUILD_JSON` (a browser context has no `process.env`, so a bumped emulator port reaches it this way, [#744](https://github.com/Omega-JS-Stack/omega/issues/744)), then the classic 5002. The rule "call the getter, never hardcode" applies everywhere; the runtime contexts' other backend URLs come from the `@omega.js/client` singleton.
|
|
51
|
+
|
|
52
|
+
## Where they live
|
|
53
|
+
|
|
54
|
+
Source: [src/utils/mode-helpers.js](../src/utils/mode-helpers.js) for `getEnvironment()` + `is*()` + `getVersion()`. The module exposes the functions plus an `attachTo(Manager)` mixin. Attached at the bottom of all eight Manager files ([build.js](../src/build.js), [background.js](../src/background.js), [popup.js](../src/popup.js), [options.js](../src/options.js), [content.js](../src/content.js), [sidepanel.js](../src/sidepanel.js), [page.js](../src/page.js), [offscreen.js](../src/offscreen.js)), so every extension context resolves the environment identically.
|
|
55
|
+
|
|
56
|
+
## How detection works
|
|
57
|
+
|
|
58
|
+
`getEnvironment()` resolves in this precedence order:
|
|
59
|
+
|
|
60
|
+
1. **Testing** — `process.env.OMEGA_TEST_MODE === 'true'`, `globalThis.OMEGA_TEST_MODE === true`, or a build baked with `config.bxm.environment === 'testing'` (set by the harness before any consumer JS runs). A test run is a test run regardless of any other signal.
|
|
61
|
+
2. **Production / Development (runtime)** — `chrome.runtime.getManifest().update_url`: present → production (packed / store-installed), absent → development (unpacked). This is the authoritative runtime signal in an extension context. In build-time Node, `chrome` is undefined, so it falls through.
|
|
62
|
+
3. **Build-time + config signals** — `OMEGA_BUILD_MODE === 'true'` → production; `NODE_ENV === 'development'` → development; `config.bxm.environment` (`'development'` / `'production'`) override.
|
|
63
|
+
4. **Default** — development. @omega.js/extension's deployed artifacts always carry their signal (a packed / store extension has `manifest.update_url`; build-time Node sets `OMEGA_BUILD_MODE`), so reaching here means a bare tooling / unpacked context where development is correct. (Contrast @omega.js/backend/EM, whose deployed *runtime* can legitimately lack a signal, so they default to **production**.)
|
|
64
|
+
|
|
65
|
+
## Adding a new helper
|
|
66
|
+
|
|
67
|
+
Write the function in [src/utils/mode-helpers.js](../src/utils/mode-helpers.js) (or a new `src/utils/<topic>-helpers.js` module), expose it from `attachTo(Manager)`, then call `attachTo` at the bottom of all eight Manager files. Don't define helpers on individual Manager prototypes — that leads to duplicated semantics. For anything environment-derived, derive from `getEnvironment()` rather than reading `chrome.runtime` / `process.env` directly, so there is one source of truth and no chance of drift.
|
|
68
|
+
|
|
69
|
+
## Why this matters
|
|
70
|
+
|
|
71
|
+
**One signal, used everywhere.** The test runner sets `OMEGA_TEST_MODE=true`; every piece of code that calls `isTesting()` (framework or consumer) then sees `true` — no need to invent a per-module env var.
|
|
72
|
+
|
|
73
|
+
**Sub-modules check the same signal.** When framework code (an auto-update probe, an analytics flush) needs to skip side effects in tests, it checks `isTesting()` — the same answer the consumer's own code gets. No drift.
|
|
74
|
+
|
|
75
|
+
**`is*()` can never disagree with `getEnvironment()`.** Because the checks derive from the single resolver instead of reading raw signals (`manifest.update_url` vs `OMEGA_BUILD_MODE`), there is exactly one definition of "what environment is this," and a wrong-but-confident gate is structurally impossible.
|
|
76
|
+
|
|
77
|
+
## See also
|
|
78
|
+
|
|
79
|
+
- [test-framework.md](test-framework.md) — `OMEGA_TEST_MODE` is set automatically by the test runners; extended mode (`--extended` / `TEST_EXTENDED_MODE=true`) gates real external APIs.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Cross-Browser API Wrapper (`lib/extension.js`)
|
|
2
|
+
|
|
3
|
+
A singleton that normalizes the `chrome.*` / `browser.*` extension API surface so consumers write their extension once and it works on Chrome, Firefox, Edge, and other Chromium-based browsers.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
const ext = require('@omega.js/extension/lib/extension');
|
|
9
|
+
|
|
10
|
+
// or as a Manager property:
|
|
11
|
+
const Manager = new (require('@omega.js/extension/popup'));
|
|
12
|
+
await Manager.initialize();
|
|
13
|
+
const { extension } = Manager; // same singleton
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## How it works
|
|
17
|
+
|
|
18
|
+
For each known extension API, the wrapper tries in order:
|
|
19
|
+
1. `chrome.<api>` (Chrome, Edge, Opera, Brave)
|
|
20
|
+
2. `browser.<api>` (Firefox)
|
|
21
|
+
3. `browser.extension.<api>` (legacy Firefox fallback)
|
|
22
|
+
|
|
23
|
+
The first one that resolves becomes the singleton's `<api>` property. `window` is deliberately never probed: no chrome extension API lives on it, and DOM globals of the same name (`window.history` in any DOM context) would shadow the real API. Each lookup is wrapped in try/catch so unknown globals don't throw at module-load time — that's what makes the wrapper safe to import from Node contexts too (where none of these globals exist).
|
|
24
|
+
|
|
25
|
+
## Supported APIs
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
action, alarms, bookmarks, browsingData, browserAction,
|
|
29
|
+
certificateProvider, commands, contentSettings, contextMenus,
|
|
30
|
+
cookies, debugger, declarativeContent, declarativeNetRequest,
|
|
31
|
+
devtools, dns, documentScan, downloads, enterprise, events,
|
|
32
|
+
extension, extensionTypes, fileBrowserHandler, fileSystemProvider,
|
|
33
|
+
fontSettings, gcm, history, i18n, identity, idle, input, instanceID,
|
|
34
|
+
management, notifications, offscreen, omnibox, pageAction,
|
|
35
|
+
permissions, platformKeys, power, printerProvider, privacy, proxy,
|
|
36
|
+
runtime, scripting, search, sessions, sidePanel, storage, tabGroups,
|
|
37
|
+
tabs, topSites, tts, ttsEngine, userScripts, vpnProvider, wallpaper,
|
|
38
|
+
webNavigation, webRequest, windows
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If a browser doesn't expose a given API, the property is `null` (not undefined), so consumers can branch on `if (extension.sidePanel) { ... }`.
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
```js
|
|
46
|
+
const Manager = new (require('@omega.js/extension/popup'));
|
|
47
|
+
await Manager.initialize();
|
|
48
|
+
const { extension } = Manager;
|
|
49
|
+
|
|
50
|
+
// Works on Chrome, Firefox, Edge — identical call sites
|
|
51
|
+
extension.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
|
52
|
+
console.log('Active tab:', tabs[0]);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
extension.storage.get('key', (result) => { /* ... */ });
|
|
56
|
+
extension.runtime.sendMessage({ type: 'hello' });
|
|
57
|
+
extension.notifications.create({ /* ... */ });
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Storage normalization
|
|
61
|
+
|
|
62
|
+
The wrapper auto-resolves `storage` to `storage.sync` when available (preferred — synced across the user's Chrome sign-in), falling back to `storage.local` when sync isn't available (e.g. some Firefox MV2 contexts).
|
|
63
|
+
|
|
64
|
+
```js
|
|
65
|
+
extension.storage.set({ foo: 'bar' });
|
|
66
|
+
extension.storage.get('foo', (result) => console.log(result.foo));
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
If you specifically need local-only storage (per-machine, larger quota), use `chrome.storage.local.*` directly — bypass the wrapper.
|
|
70
|
+
|
|
71
|
+
## Node-safe by design
|
|
72
|
+
|
|
73
|
+
The wrapper imports cleanly from Node (build-time scripts, tests, gulp tasks) — every property is `null` in that context because none of the browser globals exist. This is what makes @omega.js/extension's build-layer tests possible:
|
|
74
|
+
|
|
75
|
+
```js
|
|
76
|
+
// build-layer test (Node)
|
|
77
|
+
const ext = require('@omega.js/extension/lib/extension');
|
|
78
|
+
ctx.expect(ext.runtime).toBeNull(); // no chrome global in Node
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Why not `webextension-polyfill`?
|
|
82
|
+
|
|
83
|
+
`webextension-polyfill` shims Firefox's promise-returning APIs onto Chrome's callback-based APIs. Useful, but:
|
|
84
|
+
- Adds an npm dep that has to be loaded as a content-script before user code
|
|
85
|
+
- Doesn't address the case where APIs simply don't exist on a browser (e.g. `sidePanel` on Firefox)
|
|
86
|
+
- Slow boot in SW context
|
|
87
|
+
|
|
88
|
+
@omega.js/extension's wrapper is simpler: detect what's there, expose null when it isn't, let user code branch. Combine with the promisification Chrome added in MV3 (callbacks return promises when omitted) for a polyfill-free async-friendly API.
|
|
89
|
+
|
|
90
|
+
## See also
|
|
91
|
+
|
|
92
|
+
- [managers.md](managers.md) — every Manager exposes `extension` after `initialize()`
|
|
93
|
+
- [components.md](components.md) — which API surface is available in which context
|
package/docs/hooks.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Build Hooks
|
|
2
|
+
|
|
3
|
+
Two lifecycle hooks let consumers run custom logic during the build pipeline.
|
|
4
|
+
|
|
5
|
+
## Hook files
|
|
6
|
+
|
|
7
|
+
| Hook | Source | When |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `build:pre` | `hooks/build/pre.js` (in consumer project) | Before packaging — after `dist/` is built but before `packaged/` is assembled |
|
|
10
|
+
| `build:post` | `hooks/build/post.js` | After packaging — `packaged/<browser>/raw/` and `.zip` exist |
|
|
11
|
+
|
|
12
|
+
Hooks are optional — `gulp/tasks/package.js` checks for the file's presence and runs it if present.
|
|
13
|
+
|
|
14
|
+
The NESTED path above is authoritative: it is what `src/defaults/hooks/build/` scaffolds and what setup's migration moves a flat `hooks/build:pre.js` to. The task resolves it first and falls back to the flat pre-migration path during the transition, so an unmigrated project keeps building ([#571](https://github.com/Omega-JS-Stack/omega/issues/571)).
|
|
15
|
+
|
|
16
|
+
## Hook shape
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
// hooks/build/pre.js
|
|
20
|
+
module.exports = async function ({ manager, projectRoot, mode }) {
|
|
21
|
+
console.log('Pre-build hook running for', manager.getConfig().brand.name);
|
|
22
|
+
|
|
23
|
+
// Mutate files, generate assets, validate, anything you want.
|
|
24
|
+
// Return a Promise (or use async fn) to make the build wait.
|
|
25
|
+
};
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## The `ctx` argument
|
|
29
|
+
|
|
30
|
+
Hooks take the ONE hook-argument shape every OMEGA framework passes — the same `ctx` @omega.js/desktop hands its lifecycle hooks:
|
|
31
|
+
|
|
32
|
+
- `ctx.manager` — the build `Manager` instance (`@omega.js/extension/build`)
|
|
33
|
+
- `ctx.projectRoot` — the consumer project root, absolute
|
|
34
|
+
- `ctx.mode` — `'production'` when `OMEGA_BUILD_MODE=true`, else `'development'`
|
|
35
|
+
|
|
36
|
+
Everything else a build hook needs comes off `ctx.manager`:
|
|
37
|
+
|
|
38
|
+
| What you want | Where it is |
|
|
39
|
+
|---|---|
|
|
40
|
+
| Parsed `package.json` | `manager.getPackage('project')` |
|
|
41
|
+
| Parsed `src/manifest.json` (JSON5) | `manager.getManifest()` |
|
|
42
|
+
| Resolved `config/omega.json5` (targets.extension overlaid onto the top level) | `manager.getConfig()` |
|
|
43
|
+
| The brand block | `manager.getConfig().brand` |
|
|
44
|
+
| The project / framework roots | `manager.getRootPath('project')` / `manager.getRootPath('main')` |
|
|
45
|
+
|
|
46
|
+
Until [#591](https://github.com/Omega-JS-Stack/omega/issues/591) this page described an `index` build-info object nothing ever built — the task passed its internal watch counter, so a hook written from these docs read `undefined` at its first property.
|
|
47
|
+
|
|
48
|
+
## Common uses
|
|
49
|
+
|
|
50
|
+
### Sync a CHANGELOG version into the manifest
|
|
51
|
+
|
|
52
|
+
```js
|
|
53
|
+
// hooks/build/pre.js
|
|
54
|
+
const fs = require('fs');
|
|
55
|
+
const path = require('path');
|
|
56
|
+
|
|
57
|
+
module.exports = async function ({ manager, projectRoot }) {
|
|
58
|
+
const manifest = manager.getManifest();
|
|
59
|
+
const changelog = fs.readFileSync(path.join(projectRoot, 'CHANGELOG.md'), 'utf8');
|
|
60
|
+
const latestVersion = changelog.match(/## \[([\d.]+)\]/)?.[1];
|
|
61
|
+
if (latestVersion && latestVersion !== manifest.version) {
|
|
62
|
+
console.warn(`Manifest version (${manifest.version}) doesn't match CHANGELOG latest (${latestVersion})`);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Inject a build timestamp
|
|
68
|
+
|
|
69
|
+
```js
|
|
70
|
+
// hooks/build/pre.js
|
|
71
|
+
const fs = require('fs');
|
|
72
|
+
const path = require('path');
|
|
73
|
+
|
|
74
|
+
module.exports = async function ({ projectRoot }) {
|
|
75
|
+
const buildInfo = {
|
|
76
|
+
builtAt: new Date().toISOString(),
|
|
77
|
+
gitSha: require('child_process').execSync('git rev-parse HEAD').toString().trim(),
|
|
78
|
+
};
|
|
79
|
+
fs.writeFileSync(path.join(projectRoot, 'dist', 'build-info.json'), JSON.stringify(buildInfo, null, 2));
|
|
80
|
+
};
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Trigger a post-publish webhook
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
// hooks/build/post.js
|
|
87
|
+
module.exports = async function ({ manager }) {
|
|
88
|
+
if (process.env.OMEGA_IS_PUBLISH !== 'true') return; // only after real publish
|
|
89
|
+
await fetch('https://api.myservice.com/extension-released', {
|
|
90
|
+
method: 'POST',
|
|
91
|
+
body: JSON.stringify({ version: manager.getManifest().version }),
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Async by default
|
|
97
|
+
|
|
98
|
+
Hooks are awaited — the build waits for them to resolve before continuing. Throw or reject to fail the build (and abort packaging / publishing).
|
|
99
|
+
|
|
100
|
+
## Where hooks are invoked
|
|
101
|
+
|
|
102
|
+
[src/gulp/tasks/package.js](../src/gulp/tasks/package.js) loads and runs them. Search for `hook(` in that file to see the exact wiring.
|
|
103
|
+
|
|
104
|
+
## Why not just edit gulp tasks?
|
|
105
|
+
|
|
106
|
+
You COULD fork @omega.js/extension's gulp tasks for any custom build behavior. Hooks exist so consumers don't need to. Hooks are stable contract (the `ctx` shape is the same one every OMEGA framework passes), survive @omega.js/extension upgrades, and live in the consumer's repo (where build-specific concerns belong).
|
|
107
|
+
|
|
108
|
+
## See also
|
|
109
|
+
|
|
110
|
+
- [build-system.md](build-system.md) — gulp pipeline details
|
|
111
|
+
- [publishing.md](publishing.md) — store auto-publishing happens AFTER `build:post`
|
package/docs/icons.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Icons
|
|
2
|
+
|
|
3
|
+
@omega.js/extension generates every extension icon size from ONE consumer-supplied source image — drop a single file, the build derives the rest.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
<consumer>/config/icon.png ← your ONE source icon (png or svg)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
That's it. The `icons` gulp task picks up `config/icon.{png,svg}` and generates:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
dist/assets/images/icons/icon.png (original, converted to png)
|
|
15
|
+
dist/assets/images/icons/icon-1024x.png
|
|
16
|
+
dist/assets/images/icons/icon-512x.png
|
|
17
|
+
dist/assets/images/icons/icon-256x.png
|
|
18
|
+
dist/assets/images/icons/icon-128x.png
|
|
19
|
+
dist/assets/images/icons/icon-64x.png
|
|
20
|
+
dist/assets/images/icons/icon-48x.png
|
|
21
|
+
dist/assets/images/icons/icon-32x.png
|
|
22
|
+
dist/assets/images/icons/icon-24x.png
|
|
23
|
+
dist/assets/images/icons/icon-16x.png
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Where the sizes are used
|
|
27
|
+
|
|
28
|
+
- **Manifest** — @omega.js/extension's manifest template wires the `icons` map to the generated paths (`assets/images/icons/icon-<size>x.png`), covering Chrome's required 16/32/48/128 plus the larger store sizes.
|
|
29
|
+
- **Store packaging** — the `package` task copies `icon-128x.png` into the store-assets directory for listing uploads.
|
|
30
|
+
|
|
31
|
+
## Sizes — ship ONE large source
|
|
32
|
+
|
|
33
|
+
Supply the source at the largest size you have (1024×1024 recommended) — generation resizes DOWN with quality 100 and strips metadata. Small sources are enlarged (`withoutEnlargement: false`), but upscaled icons look soft; start big.
|
|
34
|
+
|
|
35
|
+
## Watch behavior
|
|
36
|
+
|
|
37
|
+
In dev (`npm start`) the task watches `config/icon.*` and regenerates on change. In build mode the watcher is skipped — generation runs once in the pipeline.
|
|
38
|
+
|
|
39
|
+
## Source files
|
|
40
|
+
|
|
41
|
+
- [src/gulp/tasks/icons.js](../src/gulp/tasks/icons.js) — generation task (gulp-responsive-modern)
|
|
42
|
+
- [src/config/manifest.json](../src/config/manifest.json) — framework manifest wiring the `icons` map
|
|
43
|
+
|
|
44
|
+
## See also
|
|
45
|
+
|
|
46
|
+
- [build-system.md](build-system.md) — where the icons task runs in the pipeline
|
|
47
|
+
- [extension.md](extension.md) — cross-browser API + manifest reference
|