@omega.js/desktop 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 +166 -0
- package/bin/omega +2 -0
- package/bin/omega-desktop +2 -0
- package/bin/omg +2 -0
- package/dist/assets/css/core/_fontawesome.scss +146 -0
- package/dist/assets/css/core/_initialize.scss +38 -0
- package/dist/assets/css/omega-desktop.scss +39 -0
- package/dist/assets/css/shell/_index.scss +207 -0
- package/dist/assets/css/tokens/_index.scss +166 -0
- package/dist/assets/js/bootstrap.bundle.js +1 -0
- package/dist/assets/js/core/app-shell.js +136 -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/build.js +249 -0
- package/dist/cli-run.js +34 -0
- package/dist/cli.js +49 -0
- package/dist/commands/build.js +32 -0
- package/dist/commands/cdp/capture.js +91 -0
- package/dist/commands/cdp/client.js +140 -0
- package/dist/commands/cdp/eval.js +20 -0
- package/dist/commands/cdp/quit.js +84 -0
- package/dist/commands/cdp/relaunch.js +62 -0
- package/dist/commands/cdp/shot.js +20 -0
- package/dist/commands/cdp/status.js +38 -0
- package/dist/commands/cdp/theme.js +21 -0
- package/dist/commands/cdp.js +53 -0
- package/dist/commands/clean.js +34 -0
- package/dist/commands/deploy.js +75 -0
- package/dist/commands/finalize-release.js +238 -0
- package/dist/commands/install.js +37 -0
- package/dist/commands/launch.js +150 -0
- package/dist/commands/lib/dependencies.js +35 -0
- package/dist/commands/lib/deploy-precheck.js +117 -0
- package/dist/commands/lib/ensure-target.js +300 -0
- package/dist/commands/logs.js +185 -0
- package/dist/commands/package.js +31 -0
- package/dist/commands/publish.js +34 -0
- package/dist/commands/push-secrets.js +141 -0
- package/dist/commands/release.js +286 -0
- package/dist/commands/runner.js +1874 -0
- package/dist/commands/sign-windows.js +563 -0
- package/dist/commands/test.js +121 -0
- package/dist/commands/update.js +21 -0
- package/dist/commands/validate-certs.js +238 -0
- package/dist/commands/version.js +9 -0
- package/dist/config/page-template.html +35 -0
- package/dist/defaults/.github/workflows/build.yml +276 -0
- package/dist/defaults/AGENTS.md +109 -0
- package/dist/defaults/CHANGELOG.md +15 -0
- package/dist/defaults/CLAUDE.md +1 -0
- package/dist/defaults/_.gitignore +24 -0
- package/dist/defaults/_mas/README.md +49 -0
- package/dist/defaults/_mas/entitlements.mas.inherit.plist +12 -0
- package/dist/defaults/_mas/entitlements.mas.loginhelper.plist +8 -0
- package/dist/defaults/_mas/entitlements.mas.plist +33 -0
- package/dist/defaults/config/certs/.gitkeep +0 -0
- package/dist/defaults/config/certs/README.md +60 -0
- package/dist/defaults/config/icons/macos/dmg.png +0 -0
- package/dist/defaults/config/icons/macos/icon.png +0 -0
- package/dist/defaults/config/icons/macos/tray.png +0 -0
- package/dist/defaults/config/icons/windows/icon.png +0 -0
- package/dist/defaults/config/omega.json5 +279 -0
- package/dist/defaults/docs/README.md +17 -0
- package/dist/defaults/gulpfile.js +6 -0
- package/dist/defaults/hooks/build/post.js +9 -0
- package/dist/defaults/hooks/build/pre.js +9 -0
- package/dist/defaults/hooks/notarize/post.js +16 -0
- package/dist/defaults/hooks/release/post.js +9 -0
- package/dist/defaults/hooks/release/pre.js +9 -0
- package/dist/defaults/src/assets/js/components/about/index.js +10 -0
- package/dist/defaults/src/assets/js/components/main/index.js +14 -0
- package/dist/defaults/src/assets/js/components/settings/index.js +10 -0
- package/dist/defaults/src/assets/scss/main.scss +34 -0
- package/dist/defaults/src/assets/scss/pages/about.scss +3 -0
- package/dist/defaults/src/assets/scss/pages/main.scss +4 -0
- package/dist/defaults/src/assets/scss/pages/settings.scss +3 -0
- package/dist/defaults/src/integrations/context-menu/index.js +60 -0
- package/dist/defaults/src/integrations/menu/index.js +58 -0
- package/dist/defaults/src/integrations/tray/index.js +60 -0
- package/dist/defaults/src/main.js +78 -0
- package/dist/defaults/src/preload.js +15 -0
- package/dist/defaults/src/views/about/index.html +3 -0
- package/dist/defaults/src/views/main/index.html +8 -0
- package/dist/defaults/src/views/settings/index.html +3 -0
- package/dist/defaults/test/README.md +41 -0
- package/dist/defaults/test/_init.js +10 -0
- package/dist/gulp/main.js +144 -0
- package/dist/gulp/tasks/audit.js +82 -0
- package/dist/gulp/tasks/build-config.js +445 -0
- package/dist/gulp/tasks/bundle.js +451 -0
- package/dist/gulp/tasks/defaults.js +20 -0
- package/dist/gulp/tasks/distribute.js +8 -0
- package/dist/gulp/tasks/html.js +95 -0
- package/dist/gulp/tasks/package-quick.js +102 -0
- package/dist/gulp/tasks/package.js +53 -0
- package/dist/gulp/tasks/release.js +57 -0
- package/dist/gulp/tasks/sass.js +82 -0
- package/dist/gulp/tasks/serve.js +191 -0
- package/dist/hooks/notarize.js +70 -0
- package/dist/index.js +14 -0
- package/dist/lib/_menu-mixin.js +199 -0
- package/dist/lib/analytics.js +360 -0
- package/dist/lib/app-state.js +220 -0
- package/dist/lib/auth-flow.js +160 -0
- package/dist/lib/auth-persistence.js +207 -0
- package/dist/lib/auto-updater.js +752 -0
- package/dist/lib/client-bridge.js +371 -0
- package/dist/lib/context-menu.js +302 -0
- package/dist/lib/context.js +162 -0
- package/dist/lib/deep-link.js +370 -0
- package/dist/lib/fontawesome.js +203 -0
- package/dist/lib/ipc.js +169 -0
- package/dist/lib/logger-lite.js +259 -0
- package/dist/lib/logger.js +4 -0
- package/dist/lib/menu.js +521 -0
- package/dist/lib/protocol.js +85 -0
- package/dist/lib/remote-config.js +224 -0
- package/dist/lib/remote-scripts.js +158 -0
- package/dist/lib/restart-manager/index.js +550 -0
- package/dist/lib/restart-manager/install.js +353 -0
- package/dist/lib/restart-manager/protocol.js +274 -0
- package/dist/lib/sign-helpers/auto-unlock.js +95 -0
- package/dist/lib/sign-helpers/entitlements.js +98 -0
- package/dist/lib/sign-helpers/resolve-icons.js +171 -0
- package/dist/lib/sign-helpers/sign-events.js +75 -0
- package/dist/lib/sign-helpers/update-info.js +186 -0
- package/dist/lib/startup.js +214 -0
- package/dist/lib/storage.js +193 -0
- package/dist/lib/templating.js +85 -0
- package/dist/lib/theme.js +173 -0
- package/dist/lib/tray.js +414 -0
- package/dist/lib/usage.js +141 -0
- package/dist/lib/window-manager.js +509 -0
- package/dist/main.js +542 -0
- package/dist/omega-bin.js +6 -0
- package/dist/preload.js +241 -0
- package/dist/renderer.js +456 -0
- package/dist/test/assert.js +4 -0
- package/dist/test/fixtures/consumer-app/config/omega.json5 +39 -0
- package/dist/test/fixtures/consumer-app/package.json +13 -0
- package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +11 -0
- package/dist/test/fixtures/consumer-app/src/assets/scss/main.scss +3 -0
- package/dist/test/fixtures/consumer-app/src/main.js +17 -0
- package/dist/test/fixtures/consumer-app/src/preload.js +4 -0
- package/dist/test/fixtures/consumer-app/src/views/main/index.html +4 -0
- package/dist/test/harness/boot-entry.js +237 -0
- package/dist/test/harness/main-entry.js +494 -0
- package/dist/test/harness/package.json +6 -0
- package/dist/test/harness/renderer-entry.js +173 -0
- package/dist/test/harness/renderer-preload.js +310 -0
- package/dist/test/harness/renderer.html +12 -0
- package/dist/test/index.js +65 -0
- package/dist/test/runner.js +99 -0
- package/dist/test/runners/boot.js +414 -0
- package/dist/test/runners/electron.js +92 -0
- package/dist/test/runners/render-event.js +46 -0
- package/dist/test/suites/boot/build-isolation.test.js +54 -0
- package/dist/test/suites/boot/consumer-app-boots.test.js +99 -0
- package/dist/test/suites/boot/restart-manager.test.js +38 -0
- package/dist/test/suites/boot/storage-bundled.test.js +59 -0
- package/dist/test/suites/boot/theme.test.js +68 -0
- package/dist/test/suites/boot/view-suite.test.js +47 -0
- package/dist/test/suites/build/attach-log-file.test.js +99 -0
- package/dist/test/suites/build/audit.test.js +271 -0
- package/dist/test/suites/build/boot-fixture.test.js +48 -0
- package/dist/test/suites/build/build-config.test.js +457 -0
- package/dist/test/suites/build/build-verbs.test.js +156 -0
- package/dist/test/suites/build/build-workflow-jobs.test.js +55 -0
- package/dist/test/suites/build/cdp.test.js +89 -0
- package/dist/test/suites/build/cli.test.js +135 -0
- package/dist/test/suites/build/config-schema.test.js +133 -0
- package/dist/test/suites/build/defaults-scaffold.test.js +192 -0
- package/dist/test/suites/build/deliver-certs.test.js +95 -0
- package/dist/test/suites/build/derive-signing-env.test.js +122 -0
- package/dist/test/suites/build/electron-node-version.test.js +49 -0
- package/dist/test/suites/build/electron-targets.test.js +92 -0
- package/dist/test/suites/build/ensure-target.test.js +131 -0
- package/dist/test/suites/build/entitlements.test.js +107 -0
- package/dist/test/suites/build/env-delivery.test.js +166 -0
- package/dist/test/suites/build/env-watch.test.js +86 -0
- package/dist/test/suites/build/exports.test.js +63 -0
- package/dist/test/suites/build/finalize-release.test.js +152 -0
- package/dist/test/suites/build/format-fetch-error.test.js +85 -0
- package/dist/test/suites/build/framework-deps.test.js +173 -0
- package/dist/test/suites/build/get-config.test.js +137 -0
- package/dist/test/suites/build/github-utils.test.js +54 -0
- package/dist/test/suites/build/icon-sheet.test.js +62 -0
- package/dist/test/suites/build/license-stamp.test.js +63 -0
- package/dist/test/suites/build/logger-lite.test.js +148 -0
- package/dist/test/suites/build/logs-command.test.js +226 -0
- package/dist/test/suites/build/manager.test.js +193 -0
- package/dist/test/suites/build/menu-mixin.test.js +130 -0
- package/dist/test/suites/build/merge-line-files.test.js +230 -0
- package/dist/test/suites/build/omega-shell.test.js +94 -0
- package/dist/test/suites/build/omega-tokens.test.js +64 -0
- package/dist/test/suites/build/project-scripts-deps.test.js +90 -0
- package/dist/test/suites/build/push-secrets.test.js +226 -0
- package/dist/test/suites/build/release-pipeline.test.js +365 -0
- package/dist/test/suites/build/renderer-auth-bridge.test.js +158 -0
- package/dist/test/suites/build/renderer-entry-key.test.js +37 -0
- package/dist/test/suites/build/renderer-node-shims.test.js +125 -0
- package/dist/test/suites/build/resolve-icons.test.js +296 -0
- package/dist/test/suites/build/resolve-signing-cert.test.js +342 -0
- package/dist/test/suites/build/restart-manager-install.test.js +178 -0
- package/dist/test/suites/build/restart-manager-protocol.test.js +158 -0
- package/dist/test/suites/build/run-consumer-hook.test.js +137 -0
- package/dist/test/suites/build/runner.test.js +2599 -0
- package/dist/test/suites/build/sanitize-signing-env.test.js +98 -0
- package/dist/test/suites/build/sanitize-url.test.js +78 -0
- package/dist/test/suites/build/secure-remote-url.test.js +42 -0
- package/dist/test/suites/build/sentry.test.js +89 -0
- package/dist/test/suites/build/serve-resolve-electron.test.js +58 -0
- package/dist/test/suites/build/setup-scripts.test.js +172 -0
- package/dist/test/suites/build/sign-events.test.js +90 -0
- package/dist/test/suites/build/sign-windows-e2e.test.js +302 -0
- package/dist/test/suites/build/sign-windows.test.js +313 -0
- package/dist/test/suites/build/strip-dev-blocks.test.js +116 -0
- package/dist/test/suites/build/templating.test.js +95 -0
- package/dist/test/suites/build/test-discovery.test.js +64 -0
- package/dist/test/suites/build/test-stealth.test.js +83 -0
- package/dist/test/suites/build/test-target-no-match.test.js +119 -0
- package/dist/test/suites/build/update-info.test.js +224 -0
- package/dist/test/suites/build/url-helpers.test.js +289 -0
- package/dist/test/suites/build/validate-certs.test.js +103 -0
- package/dist/test/suites/build/validate-config.test.js +90 -0
- package/dist/test/suites/build/verb-logs.test.js +43 -0
- package/dist/test/suites/build/wave5-pins.test.js +35 -0
- package/dist/test/suites/main/analytics.test.js +364 -0
- package/dist/test/suites/main/app-state.test.js +197 -0
- package/dist/test/suites/main/auth-flow.test.js +196 -0
- package/dist/test/suites/main/auth-persistence.test.js +167 -0
- package/dist/test/suites/main/auto-updater.test.js +1138 -0
- package/dist/test/suites/main/boot-sequence.test.js +77 -0
- package/dist/test/suites/main/client-bridge.integration.test.js +134 -0
- package/dist/test/suites/main/client-bridge.test.js +249 -0
- package/dist/test/suites/main/context-menu.test.js +365 -0
- package/dist/test/suites/main/context.test.js +155 -0
- package/dist/test/suites/main/deep-link.test.js +288 -0
- package/dist/test/suites/main/epipe-handler.test.js +40 -0
- package/dist/test/suites/main/fontawesome.test.js +147 -0
- package/dist/test/suites/main/harness-cdp.test.js +49 -0
- package/dist/test/suites/main/ipc.test.js +165 -0
- package/dist/test/suites/main/menu.test.js +419 -0
- package/dist/test/suites/main/protocol.test.js +77 -0
- package/dist/test/suites/main/remote-config.test.js +189 -0
- package/dist/test/suites/main/remote-scripts.test.js +276 -0
- package/dist/test/suites/main/restart-manager.test.js +328 -0
- package/dist/test/suites/main/startup-paths-and-ua.test.js +99 -0
- package/dist/test/suites/main/startup.test.js +129 -0
- package/dist/test/suites/main/stealth-window.test.js +74 -0
- package/dist/test/suites/main/storage.test.js +89 -0
- package/dist/test/suites/main/theme.test.js +137 -0
- package/dist/test/suites/main/tray.test.js +322 -0
- package/dist/test/suites/main/truncate-on-boot.test.js +22 -0
- package/dist/test/suites/main/url-helpers.test.js +429 -0
- package/dist/test/suites/main/usage.test.js +127 -0
- package/dist/test/suites/main/window-bounds.test.js +169 -0
- package/dist/test/suites/main/window-manager.test.js +233 -0
- package/dist/test/suites/renderer/analytics-bridge.test.js +128 -0
- package/dist/test/suites/renderer/cross-context-helpers.test.js +131 -0
- package/dist/test/suites/renderer/fontawesome.test.js +190 -0
- package/dist/test/suites/renderer/round-trip.test.js +107 -0
- package/dist/test/suites/renderer/theme.test.js +118 -0
- package/dist/test/suites/renderer/tooltips.test.js +166 -0
- package/dist/test/suites/renderer/verts.test.js +100 -0
- package/dist/test/suites/renderer/window-em-surface.test.js +107 -0
- package/dist/test/utils/dist-snapshot.js +36 -0
- package/dist/test/utils/extended-mode-warning.js +13 -0
- package/dist/utils/app-root.js +28 -0
- package/dist/utils/attach-log-file.js +4 -0
- package/dist/utils/build-pipeline.js +58 -0
- package/dist/utils/deliver-certs.js +69 -0
- package/dist/utils/derive-signing-env.js +56 -0
- package/dist/utils/dist-root.js +21 -0
- package/dist/utils/electron-node-version.js +48 -0
- package/dist/utils/electron-targets.js +72 -0
- package/dist/utils/format-fetch-error.js +38 -0
- package/dist/utils/github.js +73 -0
- package/dist/utils/load-consumer-file.js +26 -0
- package/dist/utils/merge-line-files.js +5 -0
- package/dist/utils/mode-helpers.js +147 -0
- package/dist/utils/resolve-signing-cert.js +175 -0
- package/dist/utils/run-consumer-hook.js +38 -0
- package/dist/utils/runner-env.js +687 -0
- package/dist/utils/safe-install.js +4 -0
- package/dist/utils/sanitize-signing-env.js +45 -0
- package/dist/utils/sanitize-url.js +28 -0
- package/dist/utils/secure-remote-url.js +25 -0
- package/dist/utils/stealth-window.js +37 -0
- package/dist/utils/test-stealth.js +29 -0
- package/dist/utils/url-helpers.js +169 -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/analytics/adapters/ga4.js +26 -0
- package/dist/vendor/analytics/adapters/meta.js +26 -0
- package/dist/vendor/analytics/adapters/resolve.js +130 -0
- package/dist/vendor/analytics/adapters/tiktok.js +27 -0
- package/dist/vendor/analytics/catalog.js +908 -0
- package/dist/vendor/analytics/consent.js +49 -0
- package/dist/vendor/analytics/core.js +141 -0
- package/dist/vendor/analytics/identity.js +136 -0
- package/dist/vendor/analytics/index.js +170 -0
- package/dist/vendor/analytics/logger.js +40 -0
- package/dist/vendor/analytics/transports/browser.js +110 -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/certs.js +199 -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/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/prompt.js +187 -0
- package/dist/vendor/devkit/safe-install.js +18 -0
- package/dist/vendor/devkit/scaffold-guard.js +96 -0
- package/dist/vendor/devkit/stop-signals.js +28 -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/update.js +569 -0
- package/dist/vendor/monitoring/core.js +180 -0
- package/dist/vendor/monitoring/env.js +49 -0
- package/dist/vendor/monitoring/index.js +28 -0
- package/dist/vendor/monitoring/logger.js +39 -0
- package/dist/vendor/monitoring/main.js +99 -0
- package/dist/vendor/monitoring/preload.js +45 -0
- package/dist/vendor/monitoring/renderer.js +87 -0
- package/docs/analytics.md +140 -0
- package/docs/app-state.md +92 -0
- package/docs/audit.md +69 -0
- package/docs/auto-updater.md +243 -0
- package/docs/boot-sequence.md +39 -0
- package/docs/build-system.md +161 -0
- package/docs/cdp-debugging.md +169 -0
- package/docs/client-bridge.md +267 -0
- package/docs/common-mistakes.md +21 -0
- package/docs/config-schema.md +120 -0
- package/docs/context-menu.md +112 -0
- package/docs/context.md +81 -0
- package/docs/css.md +84 -0
- package/docs/deep-link.md +178 -0
- package/docs/environment-detection.md +104 -0
- package/docs/fontawesome.md +107 -0
- package/docs/hooks.md +87 -0
- package/docs/icons.md +79 -0
- package/docs/index.md +279 -0
- package/docs/installer-options.md +162 -0
- package/docs/ipc.md +61 -0
- package/docs/lib-modules.md +53 -0
- package/docs/logging.md +229 -0
- package/docs/menu.md +160 -0
- package/docs/releasing.md +229 -0
- package/docs/remote-config.md +118 -0
- package/docs/remote-scripts.md +144 -0
- package/docs/restart-manager.md +144 -0
- package/docs/runner.md +253 -0
- package/docs/sentry.md +97 -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/signing.md +267 -0
- package/docs/startup.md +142 -0
- package/docs/storage.md +59 -0
- package/docs/templating.md +101 -0
- package/docs/test-boot-layer.md +157 -0
- package/docs/test-framework.md +357 -0
- package/docs/themes.md +135 -0
- package/docs/tooltips.md +99 -0
- package/docs/tray.md +164 -0
- package/docs/usage.md +58 -0
- package/docs/verts.md +62 -0
- package/docs/windows.md +149 -0
- package/package.json +184 -0
- package/scripts/sync-nvmrc.js +100 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Package the app via electron-builder, using the materialized config at
|
|
2
|
+
// `dist/electron-builder.yml` (produced by gulp/build-config from omega.json5).
|
|
3
|
+
// Consumers never ship an electron-builder.yml — the dist version is the only source of truth.
|
|
4
|
+
//
|
|
5
|
+
// This task does NOT publish — it just produces local artifacts under `release/`.
|
|
6
|
+
// For publishing, see gulp/release.js.
|
|
7
|
+
//
|
|
8
|
+
// Skip Windows code signing during this step on the windows runner if OMEGA_SKIP_WIN_SIGN=true
|
|
9
|
+
// is set — the windows-sign job in CI signs separately.
|
|
10
|
+
|
|
11
|
+
const path = require('path');
|
|
12
|
+
const jetpack = require('fs-jetpack');
|
|
13
|
+
const Manager = new (require('../../build.js'));
|
|
14
|
+
|
|
15
|
+
const logger = Manager.logger('package');
|
|
16
|
+
|
|
17
|
+
module.exports = function packageApp(done) {
|
|
18
|
+
const projectRoot = process.cwd();
|
|
19
|
+
const config = path.join(require('../../utils/dist-root.js')(projectRoot), 'electron-builder.yml');
|
|
20
|
+
|
|
21
|
+
if (!jetpack.exists(config)) {
|
|
22
|
+
return done(new Error(`Missing ${config}. Run gulp/build-config first (it generates this file from omega.json5).`));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Resolve electron-builder from the consumer's node_modules first, then @omega.js/desktop's bundled one.
|
|
26
|
+
let builder;
|
|
27
|
+
try {
|
|
28
|
+
builder = Manager.require('electron-builder');
|
|
29
|
+
} catch (e) {
|
|
30
|
+
return done(new Error(`Could not resolve electron-builder: ${e.message}. Run \`npm i -D electron-builder\` in the consumer.`));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const relConfig = path.relative(projectRoot, config);
|
|
34
|
+
logger.log(`Packaging via electron-builder (config=${relConfig})...`);
|
|
35
|
+
|
|
36
|
+
const opts = {
|
|
37
|
+
config,
|
|
38
|
+
publish: 'never', // package only — release.js handles publishing
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// electron-builder's programmatic API returns a Promise<string[]> of artifact paths.
|
|
42
|
+
builder.build(opts)
|
|
43
|
+
.then((artifacts) => {
|
|
44
|
+
const list = (artifacts || []).map((a) => path.relative(projectRoot, a));
|
|
45
|
+
logger.log(`Packaged ${list.length} artifact(s):`);
|
|
46
|
+
list.forEach((a) => logger.log(` • ${a}`));
|
|
47
|
+
done();
|
|
48
|
+
})
|
|
49
|
+
.catch((e) => {
|
|
50
|
+
logger.error(`electron-builder failed: ${e.message}`);
|
|
51
|
+
done(e);
|
|
52
|
+
});
|
|
53
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Release task — runs electron-builder with `--publish always`, which packages AND
|
|
2
|
+
// uploads artifacts to the configured publish provider (GitHub Releases by default,
|
|
3
|
+
// generated by gulp/build-config from omega.json5's `releases` block).
|
|
4
|
+
//
|
|
5
|
+
// Auth: the GH_TOKEN env var (loaded from .env or CI secrets) authorizes the upload.
|
|
6
|
+
//
|
|
7
|
+
// Cross-platform behavior:
|
|
8
|
+
// - macOS: signs + notarizes (via the afterSign hook) + uploads .dmg / .zip
|
|
9
|
+
// - Linux: builds + uploads .AppImage / .deb (no signing)
|
|
10
|
+
// - Windows: when OMEGA_SKIP_WIN_SIGN=true (CI macOS/linux runners), this never runs the
|
|
11
|
+
// Windows target. The dedicated windows-sign job in CI handles that path.
|
|
12
|
+
//
|
|
13
|
+
// For local single-platform release runs, electron-builder targets only the host OS by default.
|
|
14
|
+
|
|
15
|
+
const path = require('path');
|
|
16
|
+
const jetpack = require('fs-jetpack');
|
|
17
|
+
const Manager = new (require('../../build.js'));
|
|
18
|
+
|
|
19
|
+
const logger = Manager.logger('release');
|
|
20
|
+
|
|
21
|
+
module.exports = function release(done) {
|
|
22
|
+
const projectRoot = process.cwd();
|
|
23
|
+
const config = path.join(require('../../utils/dist-root.js')(projectRoot), 'electron-builder.yml');
|
|
24
|
+
|
|
25
|
+
if (!jetpack.exists(config)) {
|
|
26
|
+
return done(new Error(`Missing ${config}. Run gulp/build-config first (it generates this file from omega.json5).`));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (!process.env.GH_TOKEN) {
|
|
30
|
+
logger.warn('GH_TOKEN not set — electron-builder will fail to publish to GitHub Releases.');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let builder;
|
|
34
|
+
try {
|
|
35
|
+
builder = Manager.require('electron-builder');
|
|
36
|
+
} catch (e) {
|
|
37
|
+
return done(new Error(`Could not resolve electron-builder: ${e.message}. Run \`npm i -D electron-builder\` in the consumer.`));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const relConfig = path.relative(projectRoot, config);
|
|
41
|
+
logger.log(`Releasing via electron-builder (config=${relConfig}, publish=always)...`);
|
|
42
|
+
|
|
43
|
+
builder.build({
|
|
44
|
+
config,
|
|
45
|
+
publish: 'always',
|
|
46
|
+
})
|
|
47
|
+
.then((artifacts) => {
|
|
48
|
+
const list = (artifacts || []).map((a) => path.relative(projectRoot, a));
|
|
49
|
+
logger.log(`Released ${list.length} artifact(s):`);
|
|
50
|
+
list.forEach((a) => logger.log(` • ${a}`));
|
|
51
|
+
done();
|
|
52
|
+
})
|
|
53
|
+
.catch((e) => {
|
|
54
|
+
logger.error(`Release failed: ${e.message}`);
|
|
55
|
+
done(e);
|
|
56
|
+
});
|
|
57
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// sass — compile consumer SCSS into dist/assets/css/.
|
|
2
|
+
//
|
|
3
|
+
// src/assets/scss/main.scss -> dist/assets/css/main.bundle.css (one shared bundle, every page)
|
|
4
|
+
// src/assets/scss/pages/<name>.scss -> dist/assets/css/components/<name>.bundle.css (per-view bundle)
|
|
5
|
+
//
|
|
6
|
+
// loadPaths are configured so the consumer can write `@use 'omega-desktop' as *`:
|
|
7
|
+
// - <omega-package-root>/dist/assets/css → resolves bare 'omega-desktop' to omega-desktop.scss
|
|
8
|
+
// - <omega-package-root>/dist/assets/themes/<active-theme> → resolves bare 'theme' to <theme>/_theme.scss
|
|
9
|
+
// - <omega-package-root>/dist/assets/themes → so themes can reference each other via '../<sibling>'
|
|
10
|
+
// - <consumer>/src/assets/scss → consumer's own modules
|
|
11
|
+
|
|
12
|
+
const Manager = new (require('../../build.js'));
|
|
13
|
+
const logger = Manager.logger('sass');
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const jetpack = require('fs-jetpack');
|
|
16
|
+
const sass = require('sass');
|
|
17
|
+
const { formatBytes } = require('../../vendor/devkit/bundle.js');
|
|
18
|
+
|
|
19
|
+
const projectRoot = Manager.getRootPath('project');
|
|
20
|
+
const packageRoot = Manager.getRootPath('main');
|
|
21
|
+
const outputRoot = require('../../utils/dist-root.js')(projectRoot);
|
|
22
|
+
|
|
23
|
+
module.exports = function sassTask(done) {
|
|
24
|
+
const isProd = Manager.getMode().environment === 'production';
|
|
25
|
+
const config = Manager.getConfig() || {};
|
|
26
|
+
const themeId = config.theme?.id || 'classy';
|
|
27
|
+
|
|
28
|
+
const loadPaths = [
|
|
29
|
+
path.join(packageRoot, 'dist', 'assets', 'css'), // for `@use 'omega-desktop'`
|
|
30
|
+
path.join(packageRoot, 'dist', 'assets', 'themes', themeId), // for `@use 'theme'`
|
|
31
|
+
path.join(packageRoot, 'dist', 'assets', 'themes'), // for sibling-theme references
|
|
32
|
+
path.join(projectRoot, 'src', 'assets', 'scss'), // consumer's own scss tree
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const compileOpts = {
|
|
36
|
+
style: isProd ? 'compressed' : 'expanded',
|
|
37
|
+
sourceMap: !isProd,
|
|
38
|
+
loadPaths,
|
|
39
|
+
// Suppress noisy deprecation warnings inherited from the vendored classy + Bootstrap 5.3 source.
|
|
40
|
+
// These are functional today (Dart Sass 1.x) and will be fixed when classy migrates to the
|
|
41
|
+
// modern @use/@forward + sass:color module system upstream. Until then, drowning in warnings
|
|
42
|
+
// every build hides real errors.
|
|
43
|
+
silenceDeprecations: ['import', 'global-builtin', 'color-functions', 'if-function'],
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// Compile main.scss → main.bundle.css
|
|
47
|
+
const mainEntry = path.join(projectRoot, 'src', 'assets', 'scss', 'main.scss');
|
|
48
|
+
const mainOut = path.join(outputRoot, 'assets', 'css', 'main.bundle.css');
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
if (jetpack.exists(mainEntry)) {
|
|
52
|
+
const result = sass.compile(mainEntry, compileOpts);
|
|
53
|
+
jetpack.write(mainOut, result.css);
|
|
54
|
+
if (result.sourceMap) jetpack.write(`${mainOut}.map`, JSON.stringify(result.sourceMap));
|
|
55
|
+
logger.log(`built dist/assets/css/main.bundle.css (${formatBytes(result.css.length)})`);
|
|
56
|
+
} else {
|
|
57
|
+
logger.warn(`No main scss entry at ${mainEntry} — skipping main bundle.`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Compile per-page entries: src/assets/scss/pages/<name>.scss → dist/assets/css/components/<name>.bundle.css
|
|
61
|
+
const pagesDir = path.join(projectRoot, 'src', 'assets', 'scss', 'pages');
|
|
62
|
+
if (jetpack.exists(pagesDir)) {
|
|
63
|
+
const pageFiles = jetpack.find(pagesDir, { matching: '**/*.scss', recursive: true })
|
|
64
|
+
.filter((f) => !path.basename(f).startsWith('_')); // skip partials
|
|
65
|
+
|
|
66
|
+
for (const src of pageFiles) {
|
|
67
|
+
const rel = path.relative(pagesDir, src);
|
|
68
|
+
const name = rel.replace(/\.scss$/, '').replace(/\\/g, '/');
|
|
69
|
+
const out = path.join(outputRoot, 'assets', 'css', 'components', `${name}.bundle.css`);
|
|
70
|
+
const result = sass.compile(src, compileOpts);
|
|
71
|
+
jetpack.write(out, result.css);
|
|
72
|
+
if (result.sourceMap) jetpack.write(`${out}.map`, JSON.stringify(result.sourceMap));
|
|
73
|
+
logger.log(`built dist/assets/css/components/${name}.bundle.css (${formatBytes(result.css.length)})`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
done();
|
|
78
|
+
} catch (e) {
|
|
79
|
+
logger.error('sass compile failed:', e.message || e);
|
|
80
|
+
done(e);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// serve — spawn `electron .` against the consumer project.
|
|
2
|
+
//
|
|
3
|
+
// Pass 2.0: minimum viable serve. Just launches Electron and pipes its stdio.
|
|
4
|
+
// Future passes will add: livereload websocket, watch + rebuild, renderer reload via webContents.reload(),
|
|
5
|
+
// main reload via app.relaunch().
|
|
6
|
+
|
|
7
|
+
const Manager = new (require('../../build.js'));
|
|
8
|
+
const logger = Manager.logger('serve');
|
|
9
|
+
const { spawn } = require('child_process');
|
|
10
|
+
const { watchEnvChain } = require('../../vendor/devkit/env-watch.js');
|
|
11
|
+
|
|
12
|
+
const projectRoot = Manager.getRootPath('project');
|
|
13
|
+
|
|
14
|
+
module.exports = function serve(done) {
|
|
15
|
+
// N7: resolve livereload (and CDP when requested) through the allocator —
|
|
16
|
+
// taken ports bump +1, so two targets of one brand (desktop + extension
|
|
17
|
+
// serve) land on distinct ports automatically. Config `ports.*` pins.
|
|
18
|
+
resolveServePorts()
|
|
19
|
+
.then((ports) => start(ports, done))
|
|
20
|
+
.catch(done);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
async function resolveServePorts() {
|
|
24
|
+
const { resolvePorts, envPort, CLASSIC_PORTS } = require('../../vendor/config/index.js');
|
|
25
|
+
const configPins = Manager.getConfig()?.ports || {};
|
|
26
|
+
|
|
27
|
+
const wanted = { livereload: envPort('livereload') || CLASSIC_PORTS.livereload };
|
|
28
|
+
const pins = {};
|
|
29
|
+
if (typeof configPins.livereload === 'number') pins.livereload = configPins.livereload;
|
|
30
|
+
|
|
31
|
+
// CDP is opt-in (OMEGA_CDP_PORT set) — allocate it too instead of the old
|
|
32
|
+
// "try port+1 manually" advice when 9222 is taken.
|
|
33
|
+
const cdpRequested = !!process.env.OMEGA_CDP_PORT;
|
|
34
|
+
if (cdpRequested) {
|
|
35
|
+
wanted.cdp = envPort('cdp') || CLASSIC_PORTS.cdp;
|
|
36
|
+
if (typeof configPins.cdp === 'number') pins.cdp = configPins.cdp;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const { ports, bumped } = await resolvePorts({ wanted, pins });
|
|
40
|
+
process.env.OMEGA_LIVERELOAD_PORT = String(ports.livereload);
|
|
41
|
+
if (cdpRequested) {
|
|
42
|
+
process.env.OMEGA_CDP_PORT = String(ports.cdp);
|
|
43
|
+
}
|
|
44
|
+
if (bumped.length) {
|
|
45
|
+
logger.log(`Ports bumped (classic taken): ${bumped.map((name) => `${name}→${ports[name]}`).join(', ')}`);
|
|
46
|
+
}
|
|
47
|
+
return ports;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Resolve the electron package from the consumer project — it exports the path to
|
|
51
|
+
// the platform binary. Node resolution walks UP from projectRoot, so an npm-workspaces
|
|
52
|
+
// brand that hoists electron to the monorepo root resolves just as well as a target
|
|
53
|
+
// carrying its own copy.
|
|
54
|
+
function resolveElectron(projectRoot) {
|
|
55
|
+
return require(require.resolve('electron', { paths: [projectRoot] }));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The ENV lane's watcher (#681): every layer of the `.env` chain — company,
|
|
60
|
+
* brand, this target — and each layer's `.env.<environment>` overlay. A change
|
|
61
|
+
* reloads the cascade into process.env, and the log line names the FILE, never
|
|
62
|
+
* a value. Resolution and watching live in @omega.js/devkit/env-watch, shared
|
|
63
|
+
* with the web and extension dev lanes; this binds desktop's own target name.
|
|
64
|
+
*
|
|
65
|
+
* PRE-WIRING on desktop — it has NO consumer yet, and saying otherwise would be
|
|
66
|
+
* a lie. Two reasons, both structural:
|
|
67
|
+
* 1. The dev pipeline is `series(build, serve)` (gulp/main.js) — a ONE-SHOT
|
|
68
|
+
* build that has already finished before this arms. Desktop runs no
|
|
69
|
+
* watch+rebuild lane, so there is no "next rebuild" to read a new value.
|
|
70
|
+
* 2. `start()` spawns electron with a `childEnv` SNAPSHOT of process.env, so
|
|
71
|
+
* a later reload in this gulp process cannot reach the running app.
|
|
72
|
+
* It stays wired because it is the shared devkit bind and it costs one unref'd
|
|
73
|
+
* watch; it becomes real the day desktop grows a watch+rebuild lane. Until
|
|
74
|
+
* then, do not claim desktop in the reload-lane docs.
|
|
75
|
+
*
|
|
76
|
+
* Scope even once that lands (the shared contract): a NEW key AND an EDITED
|
|
77
|
+
* value both land on the next rebuild, and a key dropped from the file is
|
|
78
|
+
* dropped from the process — `reloadEnv` re-reads what a file layer owns
|
|
79
|
+
* ([#724](https://github.com/Omega-JS-Stack/omega/issues/724)). A SHELL-set
|
|
80
|
+
* value still wins over every file, whatever the file now says.
|
|
81
|
+
*
|
|
82
|
+
* `serve` is where it arms because it is the dev lane's only long-running task
|
|
83
|
+
* — the build/package/publish series never include it, so a one-shot build
|
|
84
|
+
* never opens a watch it would have to close.
|
|
85
|
+
* @param {string} root - the target root
|
|
86
|
+
* @param {object} [options]
|
|
87
|
+
* @param {string} [options.environment] - the environment whose overlay counts
|
|
88
|
+
* @returns {{ inputs: Array<{ layer: string, path: string }>, close: function }}
|
|
89
|
+
*/
|
|
90
|
+
function watchEnvSources(root, options) {
|
|
91
|
+
return watchEnvChain({
|
|
92
|
+
projectDir: root,
|
|
93
|
+
target: 'desktop',
|
|
94
|
+
environment: options && options.environment,
|
|
95
|
+
log: (line) => logger.log(line),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function start(ports, done) {
|
|
100
|
+
const port = ports.livereload;
|
|
101
|
+
logger.log(`serve — livereload port=${port}`);
|
|
102
|
+
|
|
103
|
+
// PRE-WIRING, no consumer yet: the build above already ran one-shot and the
|
|
104
|
+
// electron child below snapshots env at spawn. See watchEnvSources.
|
|
105
|
+
watchEnvSources(projectRoot);
|
|
106
|
+
|
|
107
|
+
// Resolve the electron binary from the consumer project (see resolveElectron).
|
|
108
|
+
let electronBin;
|
|
109
|
+
try {
|
|
110
|
+
electronBin = resolveElectron(projectRoot);
|
|
111
|
+
} catch (e) {
|
|
112
|
+
logger.error(`Could not resolve electron from ${projectRoot} — no copy in the target or any parent node_modules.`);
|
|
113
|
+
return done(e);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Forward all --flags from process.argv to the Electron child. Chromium silently ignores
|
|
117
|
+
// flags it doesn't recognize, so gulp's own (--cwd, --gulpfile, etc.) are harmless noise.
|
|
118
|
+
// Usage: `npm start -- --remote-debugging-port=9222`
|
|
119
|
+
// Shorthand: `OMEGA_CDP_PORT=9222 npm start`
|
|
120
|
+
const extraArgs = process.argv.slice(2).filter(arg => arg.startsWith('--'));
|
|
121
|
+
if (process.env.OMEGA_CDP_PORT && !extraArgs.some(a => a.startsWith('--remote-debugging-port'))) {
|
|
122
|
+
extraArgs.push(`--remote-debugging-port=${process.env.OMEGA_CDP_PORT}`);
|
|
123
|
+
}
|
|
124
|
+
const electronArgs = ['.', ...extraArgs];
|
|
125
|
+
|
|
126
|
+
logger.log(`Spawning electron: ${electronBin} ${electronArgs.join(' ')} (cwd=${projectRoot})`);
|
|
127
|
+
|
|
128
|
+
const childEnv = Object.assign({}, process.env, {
|
|
129
|
+
OMEGA_LIVERELOAD_PORT: String(port),
|
|
130
|
+
// Force chalk to keep colors when stdout is a pipe; the tee strips them before writing
|
|
131
|
+
// to the log file but the terminal still gets colored output.
|
|
132
|
+
FORCE_COLOR: '1',
|
|
133
|
+
});
|
|
134
|
+
// Defensive scrub at the spawn (friction 17c): the gulp boundary strips it,
|
|
135
|
+
// but a path that bypasses the boundary would make require('electron')
|
|
136
|
+
// return the npm stub inside the target → crash at app.setName.
|
|
137
|
+
delete childEnv.ELECTRON_RUN_AS_NODE;
|
|
138
|
+
|
|
139
|
+
// Pipe stdio (instead of 'inherit') so our parent-process attach-log-file tee can capture
|
|
140
|
+
// electron's stdout/stderr too. We forward each chunk to process.stdout/stderr.write, which
|
|
141
|
+
// is the function the tee already wraps.
|
|
142
|
+
const child = spawn(electronBin, electronArgs, {
|
|
143
|
+
cwd: projectRoot,
|
|
144
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
145
|
+
env: childEnv,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
child.stdout.on('data', (chunk) => process.stdout.write(chunk));
|
|
149
|
+
child.stderr.on('data', (chunk) => process.stderr.write(chunk));
|
|
150
|
+
|
|
151
|
+
// If CDP was requested, verify the port came up after Electron boots.
|
|
152
|
+
const cdpPort = (process.env.OMEGA_CDP_PORT || '').trim()
|
|
153
|
+
|| (extraArgs.find(a => a.startsWith('--remote-debugging-port=')) || '').split('=')[1];
|
|
154
|
+
if (cdpPort) {
|
|
155
|
+
setTimeout(() => {
|
|
156
|
+
const http = require('http');
|
|
157
|
+
const req = http.get(`http://127.0.0.1:${cdpPort}/json/version`, (res) => {
|
|
158
|
+
let body = '';
|
|
159
|
+
res.on('data', (d) => body += d);
|
|
160
|
+
res.on('end', () => {
|
|
161
|
+
try {
|
|
162
|
+
const info = JSON.parse(body);
|
|
163
|
+
logger.log(`CDP active on port ${cdpPort} — ${info.Browser || 'unknown'}`);
|
|
164
|
+
} catch (_) {
|
|
165
|
+
logger.log(`CDP active on port ${cdpPort}`);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
req.on('error', () => {
|
|
170
|
+
// The port was allocator-probed free before spawn, so a dead endpoint
|
|
171
|
+
// means Electron itself didn't bring CDP up — not a port clash.
|
|
172
|
+
logger.warn(`CDP port ${cdpPort} not responding — the app may not have remote debugging enabled`);
|
|
173
|
+
});
|
|
174
|
+
req.setTimeout(3000, () => { req.destroy(); });
|
|
175
|
+
}, 5000);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
child.on('exit', (code) => {
|
|
179
|
+
logger.log(`electron exited with code ${code}`);
|
|
180
|
+
// When electron quits, end the gulp task. In dev with watch this would re-spawn instead.
|
|
181
|
+
done();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
child.on('error', (err) => {
|
|
185
|
+
logger.error('electron spawn error:', err);
|
|
186
|
+
done(err);
|
|
187
|
+
});
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
module.exports.resolveElectron = resolveElectron;
|
|
191
|
+
module.exports.watchEnvSources = watchEnvSources;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Real macOS notarization implementation. Lives inside @omega.js/desktop — consumers can extend it via
|
|
2
|
+
// hooks/notarize/post.js (called after this completes successfully).
|
|
3
|
+
//
|
|
4
|
+
// Uses Apple's notarytool with the App Store Connect API key. Legacy Apple ID + app-specific
|
|
5
|
+
// password flow is deliberately NOT supported.
|
|
6
|
+
//
|
|
7
|
+
// Required env vars:
|
|
8
|
+
// APPLE_API_KEY — path to AuthKey_XXXXXXXXXX.p8 (set by @omega.js/desktop CI workflow from base64-encoded secret)
|
|
9
|
+
// APPLE_API_KEY_ID — 10-char Key ID (matches the XXXXXXXXXX in the filename)
|
|
10
|
+
// APPLE_API_ISSUER — issuer UUID from App Store Connect → Users and Access → Keys
|
|
11
|
+
//
|
|
12
|
+
// Skipped automatically when:
|
|
13
|
+
// - building for a non-darwin platform
|
|
14
|
+
// - any of the env vars above is missing (warns, doesn't fail — useful for dev builds without certs)
|
|
15
|
+
|
|
16
|
+
const path = require('path');
|
|
17
|
+
const fs = require('fs');
|
|
18
|
+
const Logger = require('../lib/logger');
|
|
19
|
+
|
|
20
|
+
const logger = new Logger('notarize');
|
|
21
|
+
|
|
22
|
+
module.exports = async function notarize(context) {
|
|
23
|
+
const { electronPlatformName, appOutDir } = context;
|
|
24
|
+
|
|
25
|
+
if (electronPlatformName !== 'darwin') {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const appleApiKey = process.env.APPLE_API_KEY;
|
|
30
|
+
const appleApiKeyId = process.env.APPLE_API_KEY_ID;
|
|
31
|
+
const appleApiIssuer = process.env.APPLE_API_ISSUER;
|
|
32
|
+
|
|
33
|
+
if (!appleApiKey || !appleApiKeyId || !appleApiIssuer) {
|
|
34
|
+
logger.warn('Skipping — set APPLE_API_KEY, APPLE_API_KEY_ID, APPLE_API_ISSUER to notarize.');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const apiKeyPath = path.isAbsolute(appleApiKey)
|
|
39
|
+
? appleApiKey
|
|
40
|
+
: path.resolve(process.cwd(), appleApiKey);
|
|
41
|
+
|
|
42
|
+
if (!fs.existsSync(apiKeyPath)) {
|
|
43
|
+
throw new Error(`[notarize] APPLE_API_KEY file not found at ${apiKeyPath}`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const { notarize } = require('@electron/notarize');
|
|
47
|
+
const appName = context.packager.appInfo.productFilename;
|
|
48
|
+
const appPath = path.join(appOutDir, `${appName}.app`);
|
|
49
|
+
|
|
50
|
+
logger.log(`Notarizing ${appName} via App Store Connect API key (${appleApiKeyId})...`);
|
|
51
|
+
const start = Date.now();
|
|
52
|
+
|
|
53
|
+
await notarize({
|
|
54
|
+
tool: 'notarytool',
|
|
55
|
+
appPath,
|
|
56
|
+
appleApiKey: apiKeyPath,
|
|
57
|
+
appleApiKeyId,
|
|
58
|
+
appleApiIssuer,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const duration = Math.round((Date.now() - start) / 1000);
|
|
62
|
+
logger.log(`Done in ${duration}s.`);
|
|
63
|
+
|
|
64
|
+
// After @omega.js/desktop's real notarization, optionally invoke the consumer's hooks/notarize/post.js as
|
|
65
|
+
// an extension point. The consumer hook can do post-notarize work (custom stapling,
|
|
66
|
+
// archiving, notifications, etc.). It is purely additive — @omega.js/desktop's real notarize always runs
|
|
67
|
+
// first.
|
|
68
|
+
const runConsumerHook = require('../utils/run-consumer-hook.js');
|
|
69
|
+
await runConsumerHook('notarize/post', context);
|
|
70
|
+
};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Default export — re-exports per-process Managers + version.
|
|
2
|
+
// Most consumers should use the per-process subpath imports instead:
|
|
3
|
+
// require('@omega.js/desktop/main')
|
|
4
|
+
// require('@omega.js/desktop/renderer')
|
|
5
|
+
// require('@omega.js/desktop/preload')
|
|
6
|
+
const package = require('../package.json');
|
|
7
|
+
|
|
8
|
+
module.exports = {
|
|
9
|
+
version: package.version,
|
|
10
|
+
Main: require('./main.js'),
|
|
11
|
+
Renderer: require('./renderer.js'),
|
|
12
|
+
Preload: require('./preload.js'),
|
|
13
|
+
Build: require('./build.js'),
|
|
14
|
+
};
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// Shared id-path helpers used by tray, menu, and context-menu. All three deal with the same
|
|
2
|
+
// data shape — an array of MenuItemConstructorOptions descriptors with optional `submenu`
|
|
3
|
+
// arrays — so the find/insert/update/remove logic lives here once.
|
|
4
|
+
//
|
|
5
|
+
// "Id paths" are slash-separated strings: `main/check-for-updates`, `view/developer/toggle-devtools`.
|
|
6
|
+
// They map onto the descriptor tree by following each segment as a child id (via id field, NOT
|
|
7
|
+
// label). Single-segment ids (`copy`, `tray-quit`) are also valid — they just match top-level.
|
|
8
|
+
//
|
|
9
|
+
// All functions are pure-ish: they mutate the items array (or a sub-array) in place and return
|
|
10
|
+
// a boolean indicating whether anything was found/changed. Callers are expected to call their
|
|
11
|
+
// own re-render after a mutation.
|
|
12
|
+
|
|
13
|
+
// Find the descriptor at `idPath` within `items`. Returns the live descriptor or null.
|
|
14
|
+
//
|
|
15
|
+
// We match items by their **full id field**, not by walking segments. So an item with
|
|
16
|
+
// `id: 'main/check-for-updates'` is found via lookup of 'main/check-for-updates' regardless
|
|
17
|
+
// of whether the consumer thinks of it as a path. This keeps the API "id-as-path" without
|
|
18
|
+
// forcing the data structure to have segmented ids at every nesting level.
|
|
19
|
+
//
|
|
20
|
+
// As a fallback, when a search by full-id misses, we walk the path segments treating
|
|
21
|
+
// each segment as the item's **last** path component (so `main/check-for-updates` also
|
|
22
|
+
// matches an item with id `'check-for-updates'` nested under one with id `'main'`). This
|
|
23
|
+
// handles consumers who write short ids without baking the parent prefix in.
|
|
24
|
+
function findItem(items, idPath) {
|
|
25
|
+
if (!Array.isArray(items) || !idPath) return null;
|
|
26
|
+
|
|
27
|
+
// Fast path: full-id match anywhere in the tree.
|
|
28
|
+
const direct = findById(items, idPath);
|
|
29
|
+
if (direct) return direct;
|
|
30
|
+
|
|
31
|
+
// Fallback: walk segments, matching each by id === segment OR id ending in `/${segment}`.
|
|
32
|
+
const segments = String(idPath).split('/').filter(Boolean);
|
|
33
|
+
if (segments.length <= 1) return null; // no useful fallback for single-segment
|
|
34
|
+
|
|
35
|
+
let current = items;
|
|
36
|
+
let match = null;
|
|
37
|
+
for (const seg of segments) {
|
|
38
|
+
match = (current || []).find((item) => item && idMatchesSegment(item.id, seg)) || null;
|
|
39
|
+
if (!match) return null;
|
|
40
|
+
current = match.submenu || [];
|
|
41
|
+
}
|
|
42
|
+
return match;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Same as findItem, but also returns the parent array + index — used by remove + insert.
|
|
46
|
+
function findItemWithLocation(items, idPath) {
|
|
47
|
+
if (!Array.isArray(items) || !idPath) return null;
|
|
48
|
+
|
|
49
|
+
// Fast path: full-id match anywhere in the tree.
|
|
50
|
+
const direct = findByIdWithLocation(items, idPath);
|
|
51
|
+
if (direct) return direct;
|
|
52
|
+
|
|
53
|
+
const segments = String(idPath).split('/').filter(Boolean);
|
|
54
|
+
if (segments.length <= 1) return null;
|
|
55
|
+
|
|
56
|
+
let parent = items;
|
|
57
|
+
let item = null;
|
|
58
|
+
let index = -1;
|
|
59
|
+
for (const seg of segments) {
|
|
60
|
+
index = (parent || []).findIndex((it) => it && idMatchesSegment(it.id, seg));
|
|
61
|
+
if (index < 0) return null;
|
|
62
|
+
item = parent[index];
|
|
63
|
+
if (seg === segments[segments.length - 1]) break;
|
|
64
|
+
parent = item.submenu || [];
|
|
65
|
+
}
|
|
66
|
+
return { parent, index, item };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Treat `id` as matching `seg` when:
|
|
70
|
+
// - id === seg (exact)
|
|
71
|
+
// - id ends with '/' + seg (id is a path, last component is seg)
|
|
72
|
+
function idMatchesSegment(id, seg) {
|
|
73
|
+
if (!id) return false;
|
|
74
|
+
if (id === seg) return true;
|
|
75
|
+
return id.endsWith(`/${seg}`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function findById(items, id) {
|
|
79
|
+
if (!Array.isArray(items)) return null;
|
|
80
|
+
for (const item of items) {
|
|
81
|
+
if (!item) continue;
|
|
82
|
+
if (item.id === id) return item;
|
|
83
|
+
if (Array.isArray(item.submenu)) {
|
|
84
|
+
const nested = findById(item.submenu, id);
|
|
85
|
+
if (nested) return nested;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function findByIdWithLocation(items, id) {
|
|
92
|
+
if (!Array.isArray(items)) return null;
|
|
93
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
94
|
+
const item = items[i];
|
|
95
|
+
if (!item) continue;
|
|
96
|
+
if (item.id === id) return { parent: items, index: i, item };
|
|
97
|
+
if (Array.isArray(item.submenu)) {
|
|
98
|
+
const nested = findByIdWithLocation(item.submenu, id);
|
|
99
|
+
if (nested) return nested;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Splice newItem into the parent array, before or after the item at idPath.
|
|
106
|
+
// Returns true if the target was found and the splice happened, false otherwise.
|
|
107
|
+
function insertRelative(items, idPath, newItem, position /* 'before' | 'after' */) {
|
|
108
|
+
const loc = findItemWithLocation(items, idPath);
|
|
109
|
+
if (!loc) return false;
|
|
110
|
+
const offset = position === 'before' ? 0 : 1;
|
|
111
|
+
loc.parent.splice(loc.index + offset, 0, newItem);
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Push newItem into the submenu of the descriptor at idPath. Creates submenu if absent.
|
|
116
|
+
// Returns true if the parent was found, false otherwise.
|
|
117
|
+
function appendInside(items, idPath, newItem) {
|
|
118
|
+
const target = findItem(items, idPath);
|
|
119
|
+
if (!target) return false;
|
|
120
|
+
if (!Array.isArray(target.submenu)) target.submenu = [];
|
|
121
|
+
target.submenu.push(newItem);
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Patch the descriptor at idPath in place. Returns true if found.
|
|
126
|
+
function updateItem(items, idPath, patch) {
|
|
127
|
+
const item = findItem(items, idPath);
|
|
128
|
+
if (!item) return false;
|
|
129
|
+
Object.assign(item, patch || {});
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Remove the descriptor at idPath. Returns true if removed.
|
|
134
|
+
function removeItem(items, idPath) {
|
|
135
|
+
const loc = findItemWithLocation(items, idPath);
|
|
136
|
+
if (!loc) return false;
|
|
137
|
+
loc.parent.splice(loc.index, 1);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Build a unified id-path API for a host lib. The host provides:
|
|
142
|
+
// - getItems() → returns the underlying items array (live reference)
|
|
143
|
+
// - render() → re-renders the menu/tray after a mutation
|
|
144
|
+
// - logger → for warnings on missing ids
|
|
145
|
+
// Returns an object with find/has/update/remove/enable/show/hide/insertBefore/insertAfter/appendTo.
|
|
146
|
+
function buildIdApi({ getItems, render, logger }) {
|
|
147
|
+
const warnMissing = (op, idPath) => {
|
|
148
|
+
logger.warn(`${op}: no item at id path "${idPath}"`);
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
find(idPath) { return findItem(getItems(), idPath); },
|
|
153
|
+
has(idPath) { return Boolean(findItem(getItems(), idPath)); },
|
|
154
|
+
update(idPath, patch) {
|
|
155
|
+
const ok = updateItem(getItems(), idPath, patch);
|
|
156
|
+
if (ok) render(); else warnMissing('update', idPath);
|
|
157
|
+
return ok;
|
|
158
|
+
},
|
|
159
|
+
remove(idPath) {
|
|
160
|
+
const ok = removeItem(getItems(), idPath);
|
|
161
|
+
if (ok) render(); else warnMissing('remove', idPath);
|
|
162
|
+
return ok;
|
|
163
|
+
},
|
|
164
|
+
enable(idPath, value = true) {
|
|
165
|
+
return this.update(idPath, { enabled: Boolean(value) });
|
|
166
|
+
},
|
|
167
|
+
show(idPath, value = true) {
|
|
168
|
+
return this.update(idPath, { visible: Boolean(value) });
|
|
169
|
+
},
|
|
170
|
+
hide(idPath) {
|
|
171
|
+
return this.update(idPath, { visible: false });
|
|
172
|
+
},
|
|
173
|
+
insertBefore(idPath, item) {
|
|
174
|
+
const ok = insertRelative(getItems(), idPath, item, 'before');
|
|
175
|
+
if (ok) render(); else warnMissing('insertBefore', idPath);
|
|
176
|
+
return ok;
|
|
177
|
+
},
|
|
178
|
+
insertAfter(idPath, item) {
|
|
179
|
+
const ok = insertRelative(getItems(), idPath, item, 'after');
|
|
180
|
+
if (ok) render(); else warnMissing('insertAfter', idPath);
|
|
181
|
+
return ok;
|
|
182
|
+
},
|
|
183
|
+
appendTo(idPath, item) {
|
|
184
|
+
const ok = appendInside(getItems(), idPath, item);
|
|
185
|
+
if (ok) render(); else warnMissing('appendTo', idPath);
|
|
186
|
+
return ok;
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
module.exports = {
|
|
192
|
+
findItem,
|
|
193
|
+
findItemWithLocation,
|
|
194
|
+
insertRelative,
|
|
195
|
+
appendInside,
|
|
196
|
+
updateItem,
|
|
197
|
+
removeItem,
|
|
198
|
+
buildIdApi,
|
|
199
|
+
};
|