@omega.js/web 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 +640 -0
- package/bin/omega +2 -0
- package/bin/omega-web +2 -0
- package/bin/omg +2 -0
- package/core/_includes/admin/sections/sidebar.json +100 -0
- package/core/_includes/admin/sections/topbar.json +11 -0
- package/core/_includes/backend/sections/sidebar.json +39 -0
- package/core/_includes/backend/sections/topbar.json +16 -0
- package/core/_includes/core/body.html +102 -0
- package/core/_includes/core/foot.html +536 -0
- package/core/_includes/core/head.html +423 -0
- package/core/_includes/core/pricing/price-per-unit.html +33 -0
- package/core/_includes/core/showcase/entry-body.html +94 -0
- package/core/_includes/core/showcase/index-body.html +43 -0
- package/core/_includes/core/showcase/nav.html +60 -0
- package/core/_includes/frontend/sections/footer.json +74 -0
- package/core/_includes/frontend/sections/nav.json +70 -0
- package/core/_includes/global/sections/account.json +31 -0
- package/core/_includes/modules/engagement/giscus.html +26 -0
- package/core/_layouts/blueprint/404.html +10 -0
- package/core/_layouts/blueprint/about.html +10 -0
- package/core/_layouts/blueprint/account/index.html +11 -0
- package/core/_layouts/blueprint/admin/calendar/index.html +590 -0
- package/core/_layouts/blueprint/admin/dashboard/index.html +301 -0
- package/core/_layouts/blueprint/admin/firebase/index.html +214 -0
- package/core/_layouts/blueprint/admin/posts/editor.html +157 -0
- package/core/_layouts/blueprint/admin/posts/index.html +126 -0
- package/core/_layouts/blueprint/admin/stackblitz/index.html +30 -0
- package/core/_layouts/blueprint/admin/studio/index.html +85 -0
- package/core/_layouts/blueprint/admin/users/index.html +272 -0
- package/core/_layouts/blueprint/admin/users/new.html +82 -0
- package/core/_layouts/blueprint/admin/verts/index.html +204 -0
- package/core/_layouts/blueprint/alternatives/alternative.html +15 -0
- package/core/_layouts/blueprint/alternatives/index.html +10 -0
- package/core/_layouts/blueprint/app.html +10 -0
- package/core/_layouts/blueprint/auth/reset.html +19 -0
- package/core/_layouts/blueprint/auth/signin.html +19 -0
- package/core/_layouts/blueprint/auth/signup.html +19 -0
- package/core/_layouts/blueprint/auth/token.html +19 -0
- package/core/_layouts/blueprint/blog/categories/category.html +8 -0
- package/core/_layouts/blueprint/blog/categories/index.html +11 -0
- package/core/_layouts/blueprint/blog/index.html +10 -0
- package/core/_layouts/blueprint/blog/post.html +5 -0
- package/core/_layouts/blueprint/blog/tags/index.html +11 -0
- package/core/_layouts/blueprint/blog/tags/tag.html +8 -0
- package/core/_layouts/blueprint/careers.md +13 -0
- package/core/_layouts/blueprint/collection/category.html +9 -0
- package/core/_layouts/blueprint/collection/document.html +9 -0
- package/core/_layouts/blueprint/collection/index.html +9 -0
- package/core/_layouts/blueprint/connections/callback.html +11 -0
- package/core/_layouts/blueprint/contact.html +14 -0
- package/core/_layouts/blueprint/dashboard/index.html +10 -0
- package/core/_layouts/blueprint/download.html +20 -0
- package/core/_layouts/blueprint/extension/index.html +14 -0
- package/core/_layouts/blueprint/extension/installed.html +11 -0
- package/core/_layouts/blueprint/feedback.html +10 -0
- package/core/_layouts/blueprint/index.html +16 -0
- package/core/_layouts/blueprint/legal/cookies.md +57 -0
- package/core/_layouts/blueprint/legal/privacy.md +109 -0
- package/core/_layouts/blueprint/legal/terms.md +155 -0
- package/core/_layouts/blueprint/payment/checkout.html +15 -0
- package/core/_layouts/blueprint/payment/confirmation.html +14 -0
- package/core/_layouts/blueprint/portal/email-preferences.html +15 -0
- package/core/_layouts/blueprint/pricing.html +20 -0
- package/core/_layouts/blueprint/status.html +10 -0
- package/core/_layouts/blueprint/team/index.html +10 -0
- package/core/_layouts/blueprint/team/member.html +5 -0
- package/core/_layouts/blueprint/updates/index.html +10 -0
- package/core/_layouts/blueprint/updates/update.html +10 -0
- package/core/_layouts/core/root.html +45 -0
- package/core/_layouts/modules/utilities/redirect.html +129 -0
- package/core/css/_studio.scss +237 -0
- package/core/css/components/_index.scss +146 -0
- package/core/css/core/_.scss +0 -0
- package/core/css/core/_alert.scss +87 -0
- package/core/css/core/_animations.scss +343 -0
- package/core/css/core/_bindings.scss +116 -0
- package/core/css/core/_blog-search.scss +57 -0
- package/core/css/core/_chatsy.scss +61 -0
- package/core/css/core/_consent.scss +424 -0
- package/core/css/core/_custom-font-awesome.scss +146 -0
- package/core/css/core/_exit-popup.scss +42 -0
- package/core/css/core/_generated-badge.scss +33 -0
- package/core/css/core/_initialize.scss +29 -0
- package/core/css/core/_lazy-loading.scss +104 -0
- package/core/css/core/_social-sharing.scss +41 -0
- package/core/css/core/_tones.scss +32 -0
- package/core/css/core/_utilities.scss +157 -0
- package/core/css/main.scss +54 -0
- package/core/css/motion/_index.scss +368 -0
- package/core/css/pages/404/index.scss +0 -0
- package/core/css/pages/admin/calendar/index.scss +692 -0
- package/core/css/pages/admin/firebase/index.scss +33 -0
- package/core/css/pages/admin/index.scss +9 -0
- package/core/css/pages/admin/users/index.scss +9 -0
- package/core/css/pages/admin/verts/index.scss +9 -0
- package/core/css/pages/alternatives/[alternative]/index.scss +0 -0
- package/core/css/pages/blog/[slug].scss +55 -0
- package/core/css/pages/dashboard/account/index.scss +242 -0
- package/core/css/pages/download/index.scss +480 -0
- package/core/css/pages/extension/installed/index.scss +317 -0
- package/core/css/pages/feedback/index.scss +31 -0
- package/core/css/pages/payment/confirmation/index.scss +14 -0
- package/core/css/pages/pricing/index.scss +0 -0
- package/core/css/pages/status/index.scss +162 -0
- package/core/css/pages/test/libraries/layers/index.scss +28 -0
- package/core/css/pages/updates/[update].scss +46 -0
- package/core/css/pages/updates/index.scss +13 -0
- package/core/css/shell/_index.scss +207 -0
- package/core/css/tokens/_index.scss +166 -0
- package/core/icons/flags/ar.svg +1 -0
- package/core/icons/flags/bd.svg +1 -0
- package/core/icons/flags/ca.svg +1 -0
- package/core/icons/flags/ch.svg +1 -0
- package/core/icons/flags/cn.svg +1 -0
- package/core/icons/flags/co.svg +1 -0
- package/core/icons/flags/cw.svg +1 -0
- package/core/icons/flags/cz.svg +1 -0
- package/core/icons/flags/de.svg +1 -0
- package/core/icons/flags/dk.svg +1 -0
- package/core/icons/flags/eg.svg +1 -0
- package/core/icons/flags/es.svg +1 -0
- package/core/icons/flags/fi.svg +1 -0
- package/core/icons/flags/fr.svg +1 -0
- package/core/icons/flags/gb.svg +1 -0
- package/core/icons/flags/gq.svg +1 -0
- package/core/icons/flags/gr.svg +1 -0
- package/core/icons/flags/gt.svg +1 -0
- package/core/icons/flags/hn.svg +1 -0
- package/core/icons/flags/id.svg +1 -0
- package/core/icons/flags/ie.svg +1 -0
- package/core/icons/flags/in.svg +1 -0
- package/core/icons/flags/ir.svg +1 -0
- package/core/icons/flags/it.svg +1 -0
- package/core/icons/flags/jp.svg +1 -0
- package/core/icons/flags/kp.svg +1 -0
- package/core/icons/flags/kr.svg +1 -0
- package/core/icons/flags/ly.svg +1 -0
- package/core/icons/flags/ma.svg +1 -0
- package/core/icons/flags/mu.svg +1 -0
- package/core/icons/flags/mx.svg +1 -0
- package/core/icons/flags/ng.svg +1 -0
- package/core/icons/flags/pa.svg +1 -0
- package/core/icons/flags/ph.svg +1 -0
- package/core/icons/flags/pk.svg +1 -0
- package/core/icons/flags/pt.svg +1 -0
- package/core/icons/flags/ru.svg +1 -0
- package/core/icons/flags/sa.svg +1 -0
- package/core/icons/flags/sd.svg +1 -0
- package/core/icons/flags/se.svg +1 -0
- package/core/icons/flags/th.svg +1 -0
- package/core/icons/flags/tm.svg +1 -0
- package/core/icons/flags/tr.svg +1 -0
- package/core/icons/flags/us.svg +1 -0
- package/core/icons/flags/uy.svg +1 -0
- package/core/icons/flags/vn.svg +1 -0
- package/core/icons/flags/za.svg +1 -0
- package/core/images/exit-popup/subscriber-1.jpg +0 -0
- package/core/images/exit-popup/subscriber-2.jpg +0 -0
- package/core/images/exit-popup/subscriber-3.jpg +0 -0
- package/core/images/exit-popup/subscriber-4.jpg +0 -0
- package/core/images/placeholder/photo-1.jpg +0 -0
- package/core/images/placeholder/photo-2.jpg +0 -0
- package/core/images/placeholder/photo-3.jpg +0 -0
- package/core/js/core/analytics-loader.js +253 -0
- package/core/js/core/app-shell.js +136 -0
- package/core/js/core/appearance.js +195 -0
- package/core/js/core/auth.js +457 -0
- package/core/js/core/complete.js +72 -0
- package/core/js/core/consent.js +384 -0
- package/core/js/core/dev-icon-audit.js +63 -0
- package/core/js/core/dev-palette.js +670 -0
- package/core/js/core/dev-sections.js +53 -0
- package/core/js/core/exit-popup.js +276 -0
- package/core/js/core/initialize.js +8 -0
- package/core/js/core/language-switcher.js +167 -0
- package/core/js/core/lazy-loading.js +479 -0
- package/core/js/core/motion.js +28 -0
- package/core/js/core/query-strings.js +146 -0
- package/core/js/core/service-worker.js +28 -0
- package/core/js/core/social-sharing.js +293 -0
- package/core/js/first-paint.js +35 -0
- package/core/js/layouts/modules/utilities/redirect.js +122 -0
- package/core/js/libs/admin-helpers.js +62 -0
- package/core/js/libs/alert-dismiss.js +35 -0
- package/core/js/libs/analytics.js +368 -0
- package/core/js/libs/auth/email.js +144 -0
- package/core/js/libs/auth/errors.js +119 -0
- package/core/js/libs/auth/forms.js +206 -0
- package/core/js/libs/auth/index.js +181 -0
- package/core/js/libs/auth/oauth.js +394 -0
- package/core/js/libs/auth/orphan.js +110 -0
- package/core/js/libs/auth/password-toggle.js +44 -0
- package/core/js/libs/auth/session-params.js +266 -0
- package/core/js/libs/auth/tracking.js +41 -0
- package/core/js/libs/charts.js +516 -0
- package/core/js/libs/consent-region.js +127 -0
- package/core/js/libs/dev.js +150 -0
- package/core/js/libs/graph.js +201 -0
- package/core/js/libs/initialize-tooltips.js +31 -0
- package/core/js/libs/logger.js +38 -0
- package/core/js/libs/omega-copy.js +89 -0
- package/core/js/libs/path-prefix.js +44 -0
- package/core/js/libs/payment-config.js +76 -0
- package/core/js/libs/recaptcha.js +94 -0
- package/core/js/libs/sale-name.js +295 -0
- package/core/js/libs/showcase-frames.js +37 -0
- package/core/js/libs/srcset.js +69 -0
- package/core/js/libs/tracking-consent.js +161 -0
- package/core/js/main.js +144 -0
- package/core/js/pages/404/index.js +57 -0
- package/core/js/pages/admin/calendar/calendar-core.js +701 -0
- package/core/js/pages/admin/calendar/calendar-events.js +853 -0
- package/core/js/pages/admin/calendar/calendar-renderer.js +807 -0
- package/core/js/pages/admin/calendar/campaign-preview.js +105 -0
- package/core/js/pages/admin/calendar/index.js +40 -0
- package/core/js/pages/admin/firebase/index.js +727 -0
- package/core/js/pages/admin/index.js +531 -0
- package/core/js/pages/admin/posts/editor/index.js +230 -0
- package/core/js/pages/admin/posts/index.js +237 -0
- package/core/js/pages/admin/studio/index.js +538 -0
- package/core/js/pages/admin/users/index.js +669 -0
- package/core/js/pages/admin/users/new/index.js +65 -0
- package/core/js/pages/admin/verts/index.js +407 -0
- package/core/js/pages/alternatives/[alternative]/index.js +17 -0
- package/core/js/pages/app/index.js +135 -0
- package/core/js/pages/blog/[slug].js +132 -0
- package/core/js/pages/blog/_search.mjs +108 -0
- package/core/js/pages/blog/index.js +193 -0
- package/core/js/pages/blog/page/[num]/index.js +7 -0
- package/core/js/pages/connections/callback/index.js +148 -0
- package/core/js/pages/contact/index.js +170 -0
- package/core/js/pages/cookies.js +2 -0
- package/core/js/pages/dashboard/account/index.js +366 -0
- package/core/js/pages/dashboard/account/modules/orders.js +82 -0
- package/core/js/pages/dashboard/account/sections/api-keys.js +149 -0
- package/core/js/pages/dashboard/account/sections/billing.js +1667 -0
- package/core/js/pages/dashboard/account/sections/connections.js +333 -0
- package/core/js/pages/dashboard/account/sections/data-request.js +225 -0
- package/core/js/pages/dashboard/account/sections/delete.js +80 -0
- package/core/js/pages/dashboard/account/sections/notifications.js +167 -0
- package/core/js/pages/dashboard/account/sections/orders.js +151 -0
- package/core/js/pages/dashboard/account/sections/profile.js +200 -0
- package/core/js/pages/dashboard/account/sections/referrals.js +217 -0
- package/core/js/pages/dashboard/account/sections/refund.js +253 -0
- package/core/js/pages/dashboard/account/sections/security.js +726 -0
- package/core/js/pages/dashboard/account/sections/team.js +247 -0
- package/core/js/pages/download/index.js +418 -0
- package/core/js/pages/extension/index.js +164 -0
- package/core/js/pages/extension/installed/index.js +135 -0
- package/core/js/pages/feedback/index.js +193 -0
- package/core/js/pages/legal/_document.js +91 -0
- package/core/js/pages/payment/checkout/index.js +420 -0
- package/core/js/pages/payment/checkout/modules/api.js +139 -0
- package/core/js/pages/payment/checkout/modules/dev-section.js +175 -0
- package/core/js/pages/payment/checkout/modules/discount.js +69 -0
- package/core/js/pages/payment/checkout/modules/pricing.js +73 -0
- package/core/js/pages/payment/checkout/modules/state.js +339 -0
- package/core/js/pages/payment/checkout/modules/tracking.js +54 -0
- package/core/js/pages/payment/confirmation/index.js +91 -0
- package/core/js/pages/payment/confirmation/modules/celebration.js +45 -0
- package/core/js/pages/payment/confirmation/modules/state.js +112 -0
- package/core/js/pages/payment/confirmation/modules/tracking.js +133 -0
- package/core/js/pages/payment/confirmation/modules/verify.js +142 -0
- package/core/js/pages/portal/email-preferences/index.js +183 -0
- package/core/js/pages/pricing/index.js +425 -0
- package/core/js/pages/privacy.js +2 -0
- package/core/js/pages/reset/index.js +12 -0
- package/core/js/pages/signin/index.js +22 -0
- package/core/js/pages/signup/index.js +23 -0
- package/core/js/pages/status/index.js +687 -0
- package/core/js/pages/terms.js +2 -0
- package/core/js/pages/test/components/[category]/[name]/index.js +26 -0
- package/core/js/pages/test/libraries/appearance/index.js +220 -0
- package/core/js/pages/test/libraries/form-manager/index.js +328 -0
- package/core/js/pages/test/libraries/layers/index.js +16 -0
- package/core/js/pages/test/libraries/verts/index.js +68 -0
- package/core/js/pages/test/sections/[category]/[name]/index.js +28 -0
- package/core/js/pages/test/styleguide/index.js +35 -0
- package/core/js/pages/token/index.js +203 -0
- package/core/logos/brandmarks/original/apple-app-store.svg +1 -0
- package/core/logos/brandmarks/original/apple.svg +6 -0
- package/core/logos/brandmarks/original/bitbucket.svg +14 -0
- package/core/logos/brandmarks/original/bitcoin.svg +1 -0
- package/core/logos/brandmarks/original/bluesky.svg +7 -0
- package/core/logos/brandmarks/original/bootstrap.svg +43 -0
- package/core/logos/brandmarks/original/brave.svg +1 -0
- package/core/logos/brandmarks/original/chrome.svg +1 -0
- package/core/logos/brandmarks/original/discord.svg +1 -0
- package/core/logos/brandmarks/original/dropbox.svg +10 -0
- package/core/logos/brandmarks/original/edge.svg +1 -0
- package/core/logos/brandmarks/original/facebook-f.svg +1 -0
- package/core/logos/brandmarks/original/facebook.svg +8 -0
- package/core/logos/brandmarks/original/figma.svg +10 -0
- package/core/logos/brandmarks/original/firefox.svg +1 -0
- package/core/logos/brandmarks/original/github.svg +6 -0
- package/core/logos/brandmarks/original/gitlab.svg +17 -0
- package/core/logos/brandmarks/original/google-a-s.svg +1 -0
- package/core/logos/brandmarks/original/google-chrome-webstore.svg +49 -0
- package/core/logos/brandmarks/original/google-play-store.svg +1 -0
- package/core/logos/brandmarks/original/google-web-search.svg +1 -0
- package/core/logos/brandmarks/original/google.svg +1 -0
- package/core/logos/brandmarks/original/gulp.svg +4 -0
- package/core/logos/brandmarks/original/html-5.svg +1 -0
- package/core/logos/brandmarks/original/instagram.svg +1 -0
- package/core/logos/brandmarks/original/javascript.svg +1 -0
- package/core/logos/brandmarks/original/jira.svg +18 -0
- package/core/logos/brandmarks/original/kick.svg +7 -0
- package/core/logos/brandmarks/original/linkedin.svg +1 -0
- package/core/logos/brandmarks/original/linux.svg +28 -0
- package/core/logos/brandmarks/original/messenger.svg +16 -0
- package/core/logos/brandmarks/original/microsoft.svg +1 -0
- package/core/logos/brandmarks/original/npm.svg +8 -0
- package/core/logos/brandmarks/original/opera.svg +1 -0
- package/core/logos/brandmarks/original/patreon.svg +6 -0
- package/core/logos/brandmarks/original/pinterest.svg +6 -0
- package/core/logos/brandmarks/original/reddit.svg +1 -0
- package/core/logos/brandmarks/original/safari.svg +31 -0
- package/core/logos/brandmarks/original/sass.svg +3 -0
- package/core/logos/brandmarks/original/signal.svg +6 -0
- package/core/logos/brandmarks/original/skype.svg +47 -0
- package/core/logos/brandmarks/original/slack.svg +33 -0
- package/core/logos/brandmarks/original/soundcloud.svg +1 -0
- package/core/logos/brandmarks/original/spotify.svg +5 -0
- package/core/logos/brandmarks/original/steam.svg +6 -0
- package/core/logos/brandmarks/original/telegram.svg +14 -0
- package/core/logos/brandmarks/original/tiktok.svg +1 -0
- package/core/logos/brandmarks/original/trello.svg +16 -0
- package/core/logos/brandmarks/original/tumblr.svg +1 -0
- package/core/logos/brandmarks/original/twitch.svg +6 -0
- package/core/logos/brandmarks/original/twitter.svg +6 -0
- package/core/logos/brandmarks/original/unity.svg +6 -0
- package/core/logos/brandmarks/original/x.svg +7 -0
- package/core/logos/brandmarks/original/yahoo-y.svg +1 -0
- package/core/logos/brandmarks/original/youtube-square.svg +1 -0
- package/core/logos/brandmarks/original/youtube.svg +1 -0
- package/core/logos/combomarks/dark/airbnb.svg +30 -0
- package/core/logos/combomarks/dark/slack.svg +38 -0
- package/core/logos/combomarks/dark/spotify.svg +35 -0
- package/core/logos/combomarks/dark/twilio.svg +26 -0
- package/core/logos/combomarks/dark/weebly.svg +35 -0
- package/core/logos/combomarks/gray/airbnb.svg +33 -0
- package/core/logos/combomarks/gray/alphabet.svg +23 -0
- package/core/logos/combomarks/gray/amazon.svg +38 -0
- package/core/logos/combomarks/gray/boring-company.svg +91 -0
- package/core/logos/combomarks/gray/burberry.svg +239 -0
- package/core/logos/combomarks/gray/embark.svg +21 -0
- package/core/logos/combomarks/gray/fitbit.svg +61 -0
- package/core/logos/combomarks/gray/fred-perry.svg +94 -0
- package/core/logos/combomarks/gray/google.svg +27 -0
- package/core/logos/combomarks/gray/hollister.svg +34 -0
- package/core/logos/combomarks/gray/hubspot.svg +27 -0
- package/core/logos/combomarks/gray/kaplan.svg +33 -0
- package/core/logos/combomarks/gray/lenovo.svg +27 -0
- package/core/logos/combomarks/gray/levis.svg +25 -0
- package/core/logos/combomarks/gray/mapbox.svg +37 -0
- package/core/logos/combomarks/gray/netflix.svg +15 -0
- package/core/logos/combomarks/gray/new-balance.svg +32 -0
- package/core/logos/combomarks/gray/nike.svg +17 -0
- package/core/logos/combomarks/gray/paypal.svg +41 -0
- package/core/logos/combomarks/gray/puma.svg +82 -0
- package/core/logos/combomarks/gray/samsung.svg +26 -0
- package/core/logos/combomarks/gray/shopify.svg +36 -0
- package/core/logos/combomarks/gray/slack.svg +42 -0
- package/core/logos/combomarks/gray/spotify.svg +38 -0
- package/core/logos/combomarks/gray/stripe.svg +24 -0
- package/core/logos/combomarks/gray/tnf.svg +30 -0
- package/core/logos/combomarks/gray/twilio.svg +29 -0
- package/core/logos/combomarks/gray/uber.svg +24 -0
- package/core/logos/combomarks/gray/weebly.svg +38 -0
- package/core/logos/combomarks/original/airbnb.svg +33 -0
- package/core/logos/combomarks/original/alphabet.svg +23 -0
- package/core/logos/combomarks/original/amazon.svg +38 -0
- package/core/logos/combomarks/original/asana.svg +8 -0
- package/core/logos/combomarks/original/boring-company.svg +91 -0
- package/core/logos/combomarks/original/discord.svg +6 -0
- package/core/logos/combomarks/original/embark.svg +24 -0
- package/core/logos/combomarks/original/fitbit.svg +60 -0
- package/core/logos/combomarks/original/github.svg +6 -0
- package/core/logos/combomarks/original/gitlab.svg +20 -0
- package/core/logos/combomarks/original/google.svg +28 -0
- package/core/logos/combomarks/original/hubspot.svg +29 -0
- package/core/logos/combomarks/original/instagram.svg +7 -0
- package/core/logos/combomarks/original/kickstarter.svg +6 -0
- package/core/logos/combomarks/original/lenovo.svg +24 -0
- package/core/logos/combomarks/original/linkedin.svg +6 -0
- package/core/logos/combomarks/original/mapbox.svg +39 -0
- package/core/logos/combomarks/original/mastodon.svg +7 -0
- package/core/logos/combomarks/original/medium.svg +6 -0
- package/core/logos/combomarks/original/meta.svg +22 -0
- package/core/logos/combomarks/original/microsoft.svg +13 -0
- package/core/logos/combomarks/original/monday.svg +12 -0
- package/core/logos/combomarks/original/netflix.svg +15 -0
- package/core/logos/combomarks/original/notion.svg +9 -0
- package/core/logos/combomarks/original/paypal.svg +41 -0
- package/core/logos/combomarks/original/reddit.svg +13 -0
- package/core/logos/combomarks/original/samsung.svg +25 -0
- package/core/logos/combomarks/original/shopify.svg +35 -0
- package/core/logos/combomarks/original/slack.svg +47 -0
- package/core/logos/combomarks/original/spotify.svg +37 -0
- package/core/logos/combomarks/original/stackoverflow.svg +28 -0
- package/core/logos/combomarks/original/stripe.svg +24 -0
- package/core/logos/combomarks/original/tiktok.svg +12 -0
- package/core/logos/combomarks/original/tumblr.svg +6 -0
- package/core/logos/combomarks/original/uber.svg +24 -0
- package/core/logos/combomarks/original/weebly.svg +34 -0
- package/core/logos/combomarks/original/whatsapp.svg +20 -0
- package/core/logos/combomarks/original/youtube.svg +10 -0
- package/core/logos/combomarks/original/zoom.svg +7 -0
- package/core/logos/combomarks/white/airbnb.svg +33 -0
- package/core/logos/combomarks/white/alphabet.svg +23 -0
- package/core/logos/combomarks/white/amazon.svg +38 -0
- package/core/logos/combomarks/white/boring-company.svg +91 -0
- package/core/logos/combomarks/white/embark.svg +21 -0
- package/core/logos/combomarks/white/fitbit.svg +61 -0
- package/core/logos/combomarks/white/google.svg +27 -0
- package/core/logos/combomarks/white/hubspot.svg +27 -0
- package/core/logos/combomarks/white/kaplan.svg +33 -0
- package/core/logos/combomarks/white/lenovo.svg +27 -0
- package/core/logos/combomarks/white/mapbox.svg +37 -0
- package/core/logos/combomarks/white/netflix.svg +15 -0
- package/core/logos/combomarks/white/paypal.svg +40 -0
- package/core/logos/combomarks/white/samsung.svg +26 -0
- package/core/logos/combomarks/white/shopify.svg +36 -0
- package/core/logos/combomarks/white/slack.svg +42 -0
- package/core/logos/combomarks/white/spotify.svg +38 -0
- package/core/logos/combomarks/white/stripe.svg +24 -0
- package/core/logos/combomarks/white/twilio.svg +29 -0
- package/core/logos/combomarks/white/uber.svg +24 -0
- package/core/logos/combomarks/white/weebly.svg +38 -0
- package/defaults/pages/404.md +4 -0
- package/defaults/pages/about.md +4 -0
- package/defaults/pages/admin/calendar/index.html +4 -0
- package/defaults/pages/admin/firebase/index.html +4 -0
- package/defaults/pages/admin/index.md +4 -0
- package/defaults/pages/admin/posts/editor.html +4 -0
- package/defaults/pages/admin/posts/index.html +4 -0
- package/defaults/pages/admin/stackblitz/index.html +4 -0
- package/defaults/pages/admin/studio/index.html +4 -0
- package/defaults/pages/admin/users/index.html +4 -0
- package/defaults/pages/admin/users/new.html +4 -0
- package/defaults/pages/admin/verts/index.html +4 -0
- package/defaults/pages/ads-txt.html +11 -0
- package/defaults/pages/alternatives/index.md +4 -0
- package/defaults/pages/app.md +4 -0
- package/defaults/pages/auth/reset.md +4 -0
- package/defaults/pages/auth/signin.md +4 -0
- package/defaults/pages/auth/signup.md +4 -0
- package/defaults/pages/auth/token.md +4 -0
- package/defaults/pages/blog/categories/category.html +21 -0
- package/defaults/pages/blog/categories.md +4 -0
- package/defaults/pages/blog/index-json.html +27 -0
- package/defaults/pages/blog/tags/tag.html +21 -0
- package/defaults/pages/blog/tags.md +4 -0
- package/defaults/pages/blog.md +22 -0
- package/defaults/pages/careers.md +4 -0
- package/defaults/pages/connections/callback.md +4 -0
- package/defaults/pages/contact.md +4 -0
- package/defaults/pages/dashboard/account.md +4 -0
- package/defaults/pages/dashboard/index.md +12 -0
- package/defaults/pages/download.md +4 -0
- package/defaults/pages/extension/index.html +4 -0
- package/defaults/pages/extension/installed.html +4 -0
- package/defaults/pages/feedback.md +4 -0
- package/defaults/pages/feeds/posts-json.html +40 -0
- package/defaults/pages/feeds/posts-xml.html +38 -0
- package/defaults/pages/humans.html +25 -0
- package/defaults/pages/index.md +4 -0
- package/defaults/pages/legal/cookies.md +4 -0
- package/defaults/pages/legal/privacy.md +4 -0
- package/defaults/pages/legal/terms.md +4 -0
- package/defaults/pages/llms-txt.html +46 -0
- package/defaults/pages/opensearch.html +16 -0
- package/defaults/pages/pages-json.html +42 -0
- package/defaults/pages/payment/checkout.md +4 -0
- package/defaults/pages/payment/confirmation.md +4 -0
- package/defaults/pages/portal/email-preferences.md +4 -0
- package/defaults/pages/pricing.md +4 -0
- package/defaults/pages/redirects/account.md +12 -0
- package/defaults/pages/redirects/admin/dashboard.md +11 -0
- package/defaults/pages/redirects/auth/change-password.md +9 -0
- package/defaults/pages/redirects/auth/forgot.md +9 -0
- package/defaults/pages/redirects/auth/join.md +9 -0
- package/defaults/pages/redirects/auth/login.md +9 -0
- package/defaults/pages/redirects/auth/recover.md +9 -0
- package/defaults/pages/redirects/auth/register.md +9 -0
- package/defaults/pages/redirects/auth/reset-password.md +9 -0
- package/defaults/pages/redirects/billing/cancel.md +9 -0
- package/defaults/pages/redirects/billing/refund.md +9 -0
- package/defaults/pages/robots.html +36 -0
- package/defaults/pages/security-txt.html +11 -0
- package/defaults/pages/sitemap.html +37 -0
- package/defaults/pages/status.md +4 -0
- package/defaults/pages/team/index.md +4 -0
- package/defaults/pages/test/account/dashboard.html +16 -0
- package/defaults/pages/test/index.md +12 -0
- package/defaults/pages/test/libraries/appearance.html +268 -0
- package/defaults/pages/test/libraries/cover.html +50 -0
- package/defaults/pages/test/libraries/error.html +30 -0
- package/defaults/pages/test/libraries/firestore.html +202 -0
- package/defaults/pages/test/libraries/form-manager.html +374 -0
- package/defaults/pages/test/libraries/layers.html +52 -0
- package/defaults/pages/test/libraries/lazy-loading.html +450 -0
- package/defaults/pages/test/libraries/verts.html +149 -0
- package/defaults/pages/test/redirect/external.md +13 -0
- package/defaults/pages/test/redirect/internal.md +13 -0
- package/defaults/pages/test/styleguide/index.html +588 -0
- package/defaults/pages/test/translation/index.md +50 -0
- package/defaults/pages/updates/index.md +4 -0
- package/defaults/sample-posts/2026-01-12-welcome-to-the-blog.md +26 -0
- package/defaults/sample-posts/2026-02-03-a-field-guide-to-good-defaults.md +50 -0
- package/defaults/sample-posts/2026-02-24-shipping-week-notes.md +37 -0
- package/defaults/sample-posts/2026-03-17-the-case-for-one-config.md +36 -0
- package/defaults/sample-posts/2026-04-09-write-release-notes-people-read.md +34 -0
- package/defaults/sample-posts/2026-05-21-dark-mode-done-properly.md +38 -0
- package/defaults/sample-posts/2026-06-02-the-boring-deploy-is-the-good-deploy.md +30 -0
- package/defaults/sample-posts/2026-06-11-naming-things-a-survival-guide.md +30 -0
- package/defaults/sample-posts/2026-06-19-your-pricing-page-is-a-product.md +28 -0
- package/defaults/sample-posts/2026-06-30-email-is-an-api-with-feelings.md +28 -0
- package/defaults/sample-posts/2026-07-08-ship-the-docs-with-the-diff.md +30 -0
- package/defaults/sample-team/avery-quinn.md +22 -0
- package/defaults/sample-team/jordan-reyes.md +25 -0
- package/defaults/sample-team/riley-nakamura.md +22 -0
- package/defaults/sample-team/sam-okafor.md +22 -0
- package/defaults/sample-updates/v1.0.0.md +28 -0
- package/defaults/sample-updates/v1.1.0.md +27 -0
- package/defaults/sample-updates/v1.2.0.md +27 -0
- package/defaults/sample-updates/v1.3.0.md +28 -0
- package/defaults/showcase/components.html +62 -0
- package/defaults/showcase/entry.html +76 -0
- package/defaults/showcase/frame.html +62 -0
- package/defaults/showcase/index.html +59 -0
- package/dist/assets.js +1349 -0
- package/dist/brand-tokens.js +195 -0
- package/dist/build.js +192 -0
- package/dist/cachebreak-html.js +71 -0
- package/dist/cli-run.js +25 -0
- package/dist/cli.js +47 -0
- package/dist/collections.js +183 -0
- package/dist/commands/audit.js +470 -0
- package/dist/commands/build.js +197 -0
- package/dist/commands/clean.js +18 -0
- package/dist/commands/customize.js +125 -0
- package/dist/commands/deploy.js +441 -0
- package/dist/commands/dev.js +1067 -0
- package/dist/commands/install.js +31 -0
- package/dist/commands/lib/deploy-precheck.js +43 -0
- package/dist/commands/lib/ensure-target.js +115 -0
- package/dist/commands/migrate.js +86 -0
- package/dist/commands/purge.js +31 -0
- package/dist/commands/test.js +237 -0
- package/dist/commands/translate.js +57 -0
- package/dist/commands/update.js +22 -0
- package/dist/commands/version.js +11 -0
- package/dist/config-sections.js +245 -0
- package/dist/consumer-scan.js +118 -0
- package/dist/consumer.js +49 -0
- package/dist/customize.js +328 -0
- package/dist/decisions.js +153 -0
- package/dist/dist-audit.js +417 -0
- package/dist/dynamic-pages.js +357 -0
- package/dist/engine.js +1402 -0
- package/dist/firebase-auth-helpers.js +198 -0
- package/dist/font-metrics.js +420 -0
- package/dist/frontmatter-liquid.js +253 -0
- package/dist/github-secrets.js +80 -0
- package/dist/hero-animations.js +170 -0
- package/dist/imagemin.js +261 -0
- package/dist/index.js +41 -0
- package/dist/inline-icons.js +65 -0
- package/dist/language-flags.js +55 -0
- package/dist/layers.js +80 -0
- package/dist/layouts.js +44 -0
- package/dist/limit-collections.js +199 -0
- package/dist/link-resolver.js +303 -0
- package/dist/markdown-images.js +85 -0
- package/dist/merge.js +20 -0
- package/dist/migrate/codemod.js +172 -0
- package/dist/migrate/config-convert.js +448 -0
- package/dist/migrate/consumer-assets.js +130 -0
- package/dist/migrate/index.js +223 -0
- package/dist/migrate/lint.js +108 -0
- package/dist/migrate/rules.js +1929 -0
- package/dist/minify-html.js +148 -0
- package/dist/mode-helpers.js +96 -0
- package/dist/omega-bin.js +7 -0
- package/dist/overrides.js +190 -0
- package/dist/path-prefix.js +167 -0
- package/dist/paths.js +37 -0
- package/dist/pricing.js +301 -0
- package/dist/purge.js +95 -0
- package/dist/redirect-page.js +45 -0
- package/dist/sample-content.js +210 -0
- package/dist/scaffold.js +123 -0
- package/dist/sections.js +810 -0
- package/dist/service-worker.js +200 -0
- package/dist/social-pages.js +142 -0
- package/dist/srcset.js +67 -0
- package/dist/static-assets.js +154 -0
- package/dist/target-shortlinks.js +123 -0
- package/dist/theme-vocabulary.js +76 -0
- package/dist/translate/collect-text-nodes.js +93 -0
- package/dist/translate/default-routes.js +152 -0
- package/dist/translate/generate-defaults.js +297 -0
- package/dist/translate/index.js +568 -0
- package/dist/translate/packaged-defaults.js +127 -0
- package/dist/translate/sitemap.js +108 -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/bare-requires.js +153 -0
- package/dist/vendor/devkit/bundle.js +292 -0
- package/dist/vendor/devkit/ci-workflows.js +520 -0
- package/dist/vendor/devkit/cli-router.js +156 -0
- package/dist/vendor/devkit/command-path.js +46 -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/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-https.js +360 -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/omega-bin.js +345 -0
- package/dist/vendor/devkit/reads.js +274 -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-secrets.js +165 -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/dist/vendor/template-kit/data/language-flags.js +54 -0
- package/dist/vendor/template-kit/data/languages.js +195 -0
- package/dist/vendor/template-kit/data/social-urls.js +26 -0
- package/dist/vendor/template-kit/filters.js +227 -0
- package/dist/vendor/template-kit/index.js +28 -0
- package/dist/vendor/template-kit/jekyll-compat.js +268 -0
- package/dist/vendor/template-kit/register-liquid.js +0 -0
- package/dist/vendor/template-kit/tags/collections.js +191 -0
- package/dist/vendor/template-kit/tags/conditionals.js +101 -0
- package/dist/vendor/template-kit/tags/content.js +175 -0
- package/dist/vendor/template-kit/tags/index.js +33 -0
- package/dist/vendor/template-kit/tags/media.js +376 -0
- package/dist/vendor/template-kit/variable-resolver.js +163 -0
- package/docs/ads-system.md +109 -0
- package/docs/classy-v2/DIRECTION.md +92 -0
- package/docs/classy-v2/draft-1.html +1932 -0
- package/docs/classy-v2/draft-2.html +1956 -0
- package/docs/frontmatter.md +153 -0
- package/docs/index.md +254 -0
- package/docs/libs.md +298 -0
- package/docs/omega-sections-spec.md +159 -0
- package/docs/page-contract.md +112 -0
- package/docs/sections.md +845 -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/template-kit.md +128 -0
- package/docs/test-framework.md +163 -0
- package/package.json +122 -0
- package/runtime/boot.js +149 -0
- package/runtime/icons.js +77 -0
- package/runtime/manager.js +36 -0
- package/scaffold/.github/workflows/build.yml +139 -0
- package/scaffold/.nvmrc +1 -0
- package/scaffold/AGENTS.md +55 -0
- package/scaffold/CLAUDE.md +1 -0
- package/scaffold/_.gitattributes +4 -0
- package/scaffold/_.gitignore +27 -0
- package/scaffold/config/omega.json5 +20 -0
- package/scaffold/src/assets/css/pages/.gitkeep +0 -0
- package/scaffold/src/assets/images/.gitkeep +0 -0
- package/scaffold/src/assets/js/pages/.gitkeep +0 -0
- package/scaffold/src/pages/.gitkeep +0 -0
- package/scaffold/src/pages/example.md.txt +94 -0
- package/scaffold/src/service-worker.js +16 -0
- package/sw/entry.js +19 -0
- package/sw/manager.js +281 -0
- package/themes/_template/README.md +115 -0
- package/themes/_template/_config.scss +60 -0
- package/themes/_template/_theme.js +14 -0
- package/themes/_template/_theme.scss +28 -0
- package/themes/_template/css/base/_root.scss +19 -0
- package/themes/_template/css/components/_components.scss +23 -0
- package/themes/base/README.md +5 -0
- package/themes/base/_components/data/org-chart/component.html +33 -0
- package/themes/base/_components/data/org-chart/component.json5 +33 -0
- package/themes/base/_components/data/org-chart/component.scss +183 -0
- package/themes/base/_components/heading/masthead/component.html +22 -0
- package/themes/base/_components/heading/masthead/component.json5 +30 -0
- package/themes/base/_components/heading/section-head/component.html +18 -0
- package/themes/base/_components/heading/section-head/component.json5 +27 -0
- package/themes/base/_components/pricing/features/component.html +29 -0
- package/themes/base/_components/pricing/features/component.json5 +30 -0
- package/themes/base/_hero/orbit/index.html +30 -0
- package/themes/base/_hero/orbit/script.js +33 -0
- package/themes/base/_hero/orbit/style.scss +133 -0
- package/themes/base/_includes/admin/sections/sidebar.html +3 -0
- package/themes/base/_includes/admin/sections/topbar.html +3 -0
- package/themes/base/_includes/backend/sections/sidebar.html +3 -0
- package/themes/base/_includes/backend/sections/topbar.html +3 -0
- package/themes/base/_includes/frontend/components/connection-card.html +49 -0
- package/themes/base/_includes/frontend/components/post-card.html +54 -0
- package/themes/base/_includes/frontend/sections/account-connections.html +42 -0
- package/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
- package/themes/base/_includes/frontend/sections/footer.html +154 -0
- package/themes/base/_includes/frontend/sections/nav.html +276 -0
- package/themes/base/_includes/global/sections/account.html +72 -0
- package/themes/base/_includes/global/sections/app-sidebar.html +248 -0
- package/themes/base/_includes/global/sections/app-topbar.html +228 -0
- package/themes/base/_includes/global/sections/page-header.html +99 -0
- package/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
- package/themes/base/_layouts/admin/core/minimal.html +23 -0
- package/themes/base/_layouts/backend/core/base.html +57 -0
- package/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
- package/themes/base/_layouts/backend/core/minimal.html +32 -0
- package/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
- package/themes/base/_layouts/frontend/core/base.html +31 -0
- package/themes/base/_layouts/frontend/core/cover.html +40 -0
- package/themes/base/_layouts/frontend/core/minimal.html +47 -0
- package/themes/base/_layouts/frontend/pages/404.html +54 -0
- package/themes/base/_layouts/frontend/pages/about.html +144 -0
- package/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
- package/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
- package/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
- package/themes/base/_layouts/frontend/pages/app.html +142 -0
- package/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
- package/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
- package/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
- package/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
- package/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
- package/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
- package/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
- package/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
- package/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
- package/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
- package/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
- package/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
- package/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
- package/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
- package/themes/base/_layouts/frontend/pages/contact.html +214 -0
- package/themes/base/_layouts/frontend/pages/download.html +793 -0
- package/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
- package/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
- package/themes/base/_layouts/frontend/pages/feedback.html +171 -0
- package/themes/base/_layouts/frontend/pages/index.html +66 -0
- package/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
- package/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
- package/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
- package/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
- package/themes/base/_layouts/frontend/pages/pricing.html +596 -0
- package/themes/base/_layouts/frontend/pages/status.html +361 -0
- package/themes/base/_layouts/frontend/pages/team/index.html +210 -0
- package/themes/base/_layouts/frontend/pages/team/member.html +125 -0
- package/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
- package/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
- package/themes/base/_sections/about/hero/section.html +68 -0
- package/themes/base/_sections/about/hero/section.json5 +58 -0
- package/themes/base/_sections/about/letter/section.html +60 -0
- package/themes/base/_sections/about/letter/section.json5 +56 -0
- package/themes/base/_sections/about/photo-band/section.html +24 -0
- package/themes/base/_sections/about/photo-band/section.json5 +23 -0
- package/themes/base/_sections/about/principles/section.html +17 -0
- package/themes/base/_sections/about/principles/section.json5 +34 -0
- package/themes/base/_sections/about/timeline/section.html +20 -0
- package/themes/base/_sections/about/timeline/section.json5 +34 -0
- package/themes/base/_sections/marketing/bento/section.html +91 -0
- package/themes/base/_sections/marketing/bento/section.json5 +152 -0
- package/themes/base/_sections/marketing/cta/section.html +44 -0
- package/themes/base/_sections/marketing/cta/section.json5 +47 -0
- package/themes/base/_sections/marketing/faq/section.html +52 -0
- package/themes/base/_sections/marketing/faq/section.json5 +68 -0
- package/themes/base/_sections/marketing/hero/section.html +349 -0
- package/themes/base/_sections/marketing/hero/section.json5 +335 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
- package/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
- package/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
- package/themes/base/_sections/marketing/product-demo/section.html +62 -0
- package/themes/base/_sections/marketing/product-demo/section.js +44 -0
- package/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
- package/themes/base/_sections/marketing/prose/section.html +22 -0
- package/themes/base/_sections/marketing/prose/section.json5 +41 -0
- package/themes/base/_sections/marketing/showcase/section.html +35 -0
- package/themes/base/_sections/marketing/showcase/section.json5 +52 -0
- package/themes/base/_sections/marketing/stats/section.html +32 -0
- package/themes/base/_sections/marketing/stats/section.json5 +44 -0
- package/themes/base/_sections/marketing/testimonials/section.html +54 -0
- package/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
- package/themes/base/_sections/marketing/trusted-by/section.html +30 -0
- package/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
- package/themes/base/_sections/verts/unit/section.html +7 -0
- package/themes/base/_sections/verts/unit/section.js +22 -0
- package/themes/base/_sections/verts/unit/section.json5 +24 -0
- package/themes/base/_sections/verts/unit/section.scss +24 -0
- package/themes/base/_theme.js +13 -0
- package/themes/base/_theme.scss +4 -0
- package/themes/bootstrap/_theme.js +16 -0
- package/themes/bootstrap/_theme.scss +11 -0
- package/themes/bootstrap/js/index.esm.js +19 -0
- package/themes/bootstrap/js/index.umd.js +34 -0
- package/themes/bootstrap/js/src/alert.js +87 -0
- package/themes/bootstrap/js/src/base-component.js +86 -0
- package/themes/bootstrap/js/src/button.js +72 -0
- package/themes/bootstrap/js/src/carousel.js +474 -0
- package/themes/bootstrap/js/src/collapse.js +297 -0
- package/themes/bootstrap/js/src/dom/data.js +55 -0
- package/themes/bootstrap/js/src/dom/event-handler.js +317 -0
- package/themes/bootstrap/js/src/dom/manipulator.js +71 -0
- package/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
- package/themes/bootstrap/js/src/dropdown.js +458 -0
- package/themes/bootstrap/js/src/modal.js +378 -0
- package/themes/bootstrap/js/src/offcanvas.js +282 -0
- package/themes/bootstrap/js/src/popover.js +97 -0
- package/themes/bootstrap/js/src/scrollspy.js +296 -0
- package/themes/bootstrap/js/src/tab.js +315 -0
- package/themes/bootstrap/js/src/toast.js +224 -0
- package/themes/bootstrap/js/src/tooltip.js +632 -0
- package/themes/bootstrap/js/src/util/backdrop.js +151 -0
- package/themes/bootstrap/js/src/util/component-functions.js +35 -0
- package/themes/bootstrap/js/src/util/config.js +65 -0
- package/themes/bootstrap/js/src/util/focustrap.js +115 -0
- package/themes/bootstrap/js/src/util/index.js +306 -0
- package/themes/bootstrap/js/src/util/sanitizer.js +117 -0
- package/themes/bootstrap/js/src/util/scrollbar.js +114 -0
- package/themes/bootstrap/js/src/util/swipe.js +146 -0
- package/themes/bootstrap/js/src/util/template-factory.js +160 -0
- package/themes/bootstrap/overrides/_accordion.scss +21 -0
- package/themes/bootstrap/overrides/_avatars.scss +51 -0
- package/themes/bootstrap/overrides/_blog-images.scss +45 -0
- package/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
- package/themes/bootstrap/overrides/_color-shades.scss +25 -0
- package/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
- package/themes/bootstrap/overrides/_index.scss +30 -0
- package/themes/bootstrap/overrides/_links.scss +26 -0
- package/themes/bootstrap/overrides/_soft-colors.scss +99 -0
- package/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
- package/themes/bootstrap/overrides/_spinners.scss +22 -0
- package/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
- package/themes/bootstrap/scss/_accordion.scss +153 -0
- package/themes/bootstrap/scss/_alert.scss +68 -0
- package/themes/bootstrap/scss/_badge.scss +38 -0
- package/themes/bootstrap/scss/_breadcrumb.scss +40 -0
- package/themes/bootstrap/scss/_button-group.scss +147 -0
- package/themes/bootstrap/scss/_buttons.scss +216 -0
- package/themes/bootstrap/scss/_card.scss +238 -0
- package/themes/bootstrap/scss/_carousel.scss +226 -0
- package/themes/bootstrap/scss/_close.scss +66 -0
- package/themes/bootstrap/scss/_containers.scss +41 -0
- package/themes/bootstrap/scss/_dropdown.scss +250 -0
- package/themes/bootstrap/scss/_forms.scss +9 -0
- package/themes/bootstrap/scss/_functions.scss +302 -0
- package/themes/bootstrap/scss/_grid.scss +39 -0
- package/themes/bootstrap/scss/_helpers.scss +12 -0
- package/themes/bootstrap/scss/_images.scss +42 -0
- package/themes/bootstrap/scss/_list-group.scss +199 -0
- package/themes/bootstrap/scss/_maps.scss +174 -0
- package/themes/bootstrap/scss/_mixins.scss +42 -0
- package/themes/bootstrap/scss/_modal.scss +240 -0
- package/themes/bootstrap/scss/_nav.scss +197 -0
- package/themes/bootstrap/scss/_navbar.scss +289 -0
- package/themes/bootstrap/scss/_offcanvas.scss +147 -0
- package/themes/bootstrap/scss/_pagination.scss +109 -0
- package/themes/bootstrap/scss/_placeholders.scss +51 -0
- package/themes/bootstrap/scss/_popover.scss +196 -0
- package/themes/bootstrap/scss/_progress.scss +68 -0
- package/themes/bootstrap/scss/_reboot.scss +611 -0
- package/themes/bootstrap/scss/_root.scss +187 -0
- package/themes/bootstrap/scss/_spinners.scss +85 -0
- package/themes/bootstrap/scss/_tables.scss +171 -0
- package/themes/bootstrap/scss/_toasts.scss +73 -0
- package/themes/bootstrap/scss/_tooltip.scss +119 -0
- package/themes/bootstrap/scss/_transitions.scss +27 -0
- package/themes/bootstrap/scss/_type.scss +106 -0
- package/themes/bootstrap/scss/_utilities.scss +806 -0
- package/themes/bootstrap/scss/_variables-dark.scss +102 -0
- package/themes/bootstrap/scss/_variables.scss +1753 -0
- package/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
- package/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
- package/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
- package/themes/bootstrap/scss/bootstrap.scss +52 -0
- package/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
- package/themes/bootstrap/scss/forms/_form-check.scss +189 -0
- package/themes/bootstrap/scss/forms/_form-control.scss +214 -0
- package/themes/bootstrap/scss/forms/_form-range.scss +91 -0
- package/themes/bootstrap/scss/forms/_form-select.scss +80 -0
- package/themes/bootstrap/scss/forms/_form-text.scss +11 -0
- package/themes/bootstrap/scss/forms/_input-group.scss +132 -0
- package/themes/bootstrap/scss/forms/_labels.scss +36 -0
- package/themes/bootstrap/scss/forms/_validation.scss +12 -0
- package/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
- package/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
- package/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
- package/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
- package/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
- package/themes/bootstrap/scss/helpers/_position.scss +36 -0
- package/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
- package/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
- package/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
- package/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
- package/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
- package/themes/bootstrap/scss/helpers/_vr.scss +8 -0
- package/themes/bootstrap/scss/mixins/_alert.scss +18 -0
- package/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
- package/themes/bootstrap/scss/mixins/_banner.scss +7 -0
- package/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
- package/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
- package/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
- package/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
- package/themes/bootstrap/scss/mixins/_caret.scss +69 -0
- package/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
- package/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
- package/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
- package/themes/bootstrap/scss/mixins/_container.scss +11 -0
- package/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
- package/themes/bootstrap/scss/mixins/_forms.scss +163 -0
- package/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
- package/themes/bootstrap/scss/mixins/_grid.scss +151 -0
- package/themes/bootstrap/scss/mixins/_image.scss +16 -0
- package/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
- package/themes/bootstrap/scss/mixins/_lists.scss +7 -0
- package/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
- package/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
- package/themes/bootstrap/scss/mixins/_resize.scss +6 -0
- package/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
- package/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- package/themes/bootstrap/scss/mixins/_transition.scss +26 -0
- package/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
- package/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
- package/themes/bootstrap/scss/tests/jasmine.js +16 -0
- package/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
- package/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
- package/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
- package/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
- package/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
- package/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
- package/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
- package/themes/bootstrap/scss/utilities/_api.scss +47 -0
- package/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
- package/themes/classy/README.md +89 -0
- package/themes/classy/_config.scss +245 -0
- package/themes/classy/_theme.js +31 -0
- package/themes/classy/_theme.scss +57 -0
- package/themes/classy/css/app/_panels.scss +183 -0
- package/themes/classy/css/base/_fonts.scss +79 -0
- package/themes/classy/css/base/_no-raise.scss +49 -0
- package/themes/classy/css/base/_root.scss +113 -0
- package/themes/classy/css/base/_typography.scss +154 -0
- package/themes/classy/css/base/_utilities.scss +284 -0
- package/themes/classy/css/components/_alerts.scss +51 -0
- package/themes/classy/css/components/_badges.scss +46 -0
- package/themes/classy/css/components/_buttons.scss +175 -0
- package/themes/classy/css/components/_cards.scss +41 -0
- package/themes/classy/css/components/_dropdowns.scss +48 -0
- package/themes/classy/css/components/_forms.scss +171 -0
- package/themes/classy/css/components/_receipt.scss +45 -0
- package/themes/classy/css/layout/_footer.scss +298 -0
- package/themes/classy/css/layout/_general.scss +209 -0
- package/themes/classy/css/layout/_nav.scss +154 -0
- package/themes/classy/css/layout/_shell.scss +458 -0
- package/themes/classy/css/marketing/_bento.scss +238 -0
- package/themes/classy/css/marketing/_content.scss +1328 -0
- package/themes/classy/css/marketing/_downloads.scss +246 -0
- package/themes/classy/css/marketing/_hero.scss +311 -0
- package/themes/classy/css/marketing/_sections.scss +649 -0
- package/themes/classy/css/pages/404/index.scss +67 -0
- package/themes/classy/css/pages/_auth.scss +235 -0
- package/themes/classy/css/pages/admin/firebase/index.scss +22 -0
- package/themes/classy/css/pages/blog/[slug].scss +56 -0
- package/themes/classy/css/pages/cookies.scss +2 -0
- package/themes/classy/css/pages/dashboard/account/index.scss +31 -0
- package/themes/classy/css/pages/feedback/index.scss +39 -0
- package/themes/classy/css/pages/legal/_document.scss +192 -0
- package/themes/classy/css/pages/payment/checkout/index.scss +585 -0
- package/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
- package/themes/classy/css/pages/privacy.scss +2 -0
- package/themes/classy/css/pages/status/index.scss +164 -0
- package/themes/classy/css/pages/terms.scss +2 -0
- package/themes/classy/css/pages/updates/index.scss +128 -0
- package/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
- package/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
- package/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
- package/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
- package/themes/classy/js/hero-demo-form.js +56 -0
- package/themes/neobrutalism/README.md +118 -0
- package/themes/neobrutalism/_config.scss +139 -0
- package/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
- package/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
- package/themes/neobrutalism/_theme.js +24 -0
- package/themes/neobrutalism/_theme.scss +61 -0
- package/themes/neobrutalism/css/base/_mixins.scss +46 -0
- package/themes/neobrutalism/css/base/_root.scss +169 -0
- package/themes/neobrutalism/css/base/_typography.scss +61 -0
- package/themes/neobrutalism/css/base/_utilities.scss +89 -0
- package/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
- package/themes/neobrutalism/css/components/_buttons.scss +148 -0
- package/themes/neobrutalism/css/components/_cards.scss +47 -0
- package/themes/neobrutalism/css/components/_forms.scss +88 -0
- package/themes/neobrutalism/css/components/_marketing.scss +244 -0
- package/themes/neobrutalism/css/layout/_general.scss +213 -0
- package/themes/neobrutalism/css/layout/_navigation.scss +171 -0
- package/themes/neobrutalism/css/pages/index.scss +203 -0
- package/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
- package/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
- package/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
- package/themes/newsflash/README.md +117 -0
- package/themes/newsflash/_components/heading/lede/component.html +14 -0
- package/themes/newsflash/_components/heading/lede/component.json5 +23 -0
- package/themes/newsflash/_components/heading/rule-head/component.html +17 -0
- package/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
- package/themes/newsflash/_components/news/byline/component.html +12 -0
- package/themes/newsflash/_components/news/byline/component.json5 +18 -0
- package/themes/newsflash/_components/news/story-card/component.html +25 -0
- package/themes/newsflash/_components/news/story-card/component.json5 +21 -0
- package/themes/newsflash/_config.scss +147 -0
- package/themes/newsflash/_layouts/frontend/core/base.html +51 -0
- package/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
- package/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
- package/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
- package/themes/newsflash/_sections/marketing/desks/section.html +39 -0
- package/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
- package/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
- package/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
- package/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
- package/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
- package/themes/newsflash/_theme.js +24 -0
- package/themes/newsflash/_theme.scss +70 -0
- package/themes/newsflash/css/base/_fonts.scss +80 -0
- package/themes/newsflash/css/base/_mixins.scss +51 -0
- package/themes/newsflash/css/base/_root.scss +257 -0
- package/themes/newsflash/css/base/_typography.scss +49 -0
- package/themes/newsflash/css/base/_utilities.scss +122 -0
- package/themes/newsflash/css/components/_badges.scss +65 -0
- package/themes/newsflash/css/components/_billing-toggle.scss +61 -0
- package/themes/newsflash/css/components/_buttons.scss +139 -0
- package/themes/newsflash/css/components/_cards.scss +47 -0
- package/themes/newsflash/css/components/_editorial.scss +173 -0
- package/themes/newsflash/css/components/_forms.scss +75 -0
- package/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
- package/themes/newsflash/css/components/_panels.scss +156 -0
- package/themes/newsflash/css/components/_ticker.scss +67 -0
- package/themes/newsflash/css/layout/_general.scss +330 -0
- package/themes/newsflash/css/layout/_navigation.scss +168 -0
- package/themes/newsflash/css/pages/404/index.scss +79 -0
- package/themes/newsflash/css/pages/blog/[slug].scss +186 -0
- package/themes/newsflash/css/pages/blog/index.scss +17 -0
- package/themes/newsflash/css/pages/index.scss +157 -0
- package/themes/newsflash/css/pages/pricing/index.scss +55 -0
- package/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
- package/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
- package/themes/newsflash/js/pages/blog/[slug].js +29 -0
- package/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
- package/translations/es/pages/404.json +86 -0
- package/translations/es/pages/account.json +36 -0
- package/translations/es/pages/app.json +44 -0
- package/translations/es/pages/cancel.json +36 -0
- package/translations/es/pages/change-password.json +36 -0
- package/translations/es/pages/connections/callback.json +41 -0
- package/translations/es/pages/dashboard/account.json +475 -0
- package/translations/es/pages/dashboard.json +36 -0
- package/translations/es/pages/forgot.json +36 -0
- package/translations/es/pages/join.json +36 -0
- package/translations/es/pages/login.json +36 -0
- package/translations/es/pages/payment/checkout.json +83 -0
- package/translations/es/pages/payment/confirmation.json +62 -0
- package/translations/es/pages/portal/email-preferences.json +46 -0
- package/translations/es/pages/recover.json +36 -0
- package/translations/es/pages/refund.json +36 -0
- package/translations/es/pages/register.json +36 -0
- package/translations/es/pages/reset-password.json +36 -0
- package/translations/es/pages/reset.json +42 -0
- package/translations/es/pages/signin.json +45 -0
- package/translations/es/pages/signup.json +60 -0
- package/translations/es/pages/token.json +39 -0
- package/translations/fa/pages/404.json +86 -0
- package/translations/fa/pages/account.json +36 -0
- package/translations/fa/pages/app.json +44 -0
- package/translations/fa/pages/cancel.json +36 -0
- package/translations/fa/pages/change-password.json +36 -0
- package/translations/fa/pages/connections/callback.json +41 -0
- package/translations/fa/pages/dashboard/account.json +475 -0
- package/translations/fa/pages/dashboard.json +36 -0
- package/translations/fa/pages/forgot.json +36 -0
- package/translations/fa/pages/join.json +36 -0
- package/translations/fa/pages/login.json +36 -0
- package/translations/fa/pages/payment/checkout.json +83 -0
- package/translations/fa/pages/payment/confirmation.json +62 -0
- package/translations/fa/pages/portal/email-preferences.json +46 -0
- package/translations/fa/pages/recover.json +36 -0
- package/translations/fa/pages/refund.json +36 -0
- package/translations/fa/pages/register.json +36 -0
- package/translations/fa/pages/reset-password.json +36 -0
- package/translations/fa/pages/reset.json +42 -0
- package/translations/fa/pages/signin.json +45 -0
- package/translations/fa/pages/signup.json +60 -0
- package/translations/fa/pages/token.json +39 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Ruby-free CI — @omega.js/web replaces the Jekyll pipeline: no Ruby, no
|
|
2
|
+
# bundler, no Gemfile. Node + `omega build` is the whole toolchain.
|
|
3
|
+
# Regenerated by every verb's ensureTarget — customize via config/omega.json5, not here.
|
|
4
|
+
#
|
|
5
|
+
# Deliberate deploys (D13): commits never auto-publish — save = commit,
|
|
6
|
+
# publish = an explicit dispatch (`omega deploy`, the CMS publish action, or
|
|
7
|
+
# a plain HTTP workflow_dispatch/repository_dispatch call).
|
|
8
|
+
name: Compile and Build Site
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
repository_dispatch:
|
|
13
|
+
types: [omega-deploy]
|
|
14
|
+
|
|
15
|
+
concurrency:
|
|
16
|
+
group: ${{ github.ref }}
|
|
17
|
+
cancel-in-progress: true
|
|
18
|
+
|
|
19
|
+
env:
|
|
20
|
+
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
|
21
|
+
# The purge step's gate reads this (#715): the `secrets` context is available
|
|
22
|
+
# in NO `if` expression — one such line and GitHub refuses to parse the whole
|
|
23
|
+
# file, so an absent secret has to arrive as an empty env value instead.
|
|
24
|
+
CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }}
|
|
25
|
+
NODE_VERSION: '{{ versions.node }}'
|
|
26
|
+
NODE_ENV: 'production'
|
|
27
|
+
# Generated from the brand's .env cascade — one line per published Actions
|
|
28
|
+
# secret. Regenerated by every verb's ensureTarget; edit .env, not this.
|
|
29
|
+
{{ githubSecrets }}
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
build:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
timeout-minutes: 30
|
|
35
|
+
steps:
|
|
36
|
+
- name: Setup git config
|
|
37
|
+
run: |
|
|
38
|
+
git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
|
39
|
+
git config --global user.name "$GITHUB_ACTOR"
|
|
40
|
+
|
|
41
|
+
# Shallow on purpose (#568): nothing in an omega build reads git HISTORY
|
|
42
|
+
# — the service worker asks `git rev-parse --short HEAD` (present at
|
|
43
|
+
# depth 1) and `omega deploy --direct` inits a fresh repo in dist. A
|
|
44
|
+
# full-history checkout is what took an image-heavy consumer's runner
|
|
45
|
+
# down with ENOSPC (~4 GB of packed history on a ~14 GB disk).
|
|
46
|
+
- name: Checkout main branch
|
|
47
|
+
uses: actions/checkout@v7
|
|
48
|
+
with:
|
|
49
|
+
token: ${{ secrets.GH_TOKEN }}
|
|
50
|
+
fetch-depth: 1
|
|
51
|
+
|
|
52
|
+
- name: Setup node
|
|
53
|
+
uses: actions/setup-node@v6
|
|
54
|
+
with:
|
|
55
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
56
|
+
|
|
57
|
+
- name: Install Socket Firewall
|
|
58
|
+
run: npm install -g sfw
|
|
59
|
+
|
|
60
|
+
- name: Run node install
|
|
61
|
+
run: |
|
|
62
|
+
for attempt in 1 2 3; do
|
|
63
|
+
echo "Install attempt $attempt of 3 (sfw)..."
|
|
64
|
+
sfw npm install && break
|
|
65
|
+
echo "Attempt $attempt failed"
|
|
66
|
+
if [ "$attempt" -eq 3 ]; then
|
|
67
|
+
echo "⚠ All sfw attempts failed, falling back to plain npm install"
|
|
68
|
+
npm install
|
|
69
|
+
fi
|
|
70
|
+
sleep 15
|
|
71
|
+
done
|
|
72
|
+
|
|
73
|
+
- name: Log versions
|
|
74
|
+
run: |
|
|
75
|
+
echo "Node: $(node -v)"
|
|
76
|
+
echo "NPM: $(npm -v)"
|
|
77
|
+
echo "Omega: $(npx omega version)"
|
|
78
|
+
|
|
79
|
+
# Optimized-image cache (the cache-uj-imagemin branch successor):
|
|
80
|
+
# content-addressed, reproducible binaries — never committed. An exact
|
|
81
|
+
# key hit skips all image processing; a prefix hit re-processes only
|
|
82
|
+
# changed images.
|
|
83
|
+
- name: Restore optimized-image cache
|
|
84
|
+
uses: actions/cache@v4
|
|
85
|
+
with:
|
|
86
|
+
path: .omega/cache/imagemin
|
|
87
|
+
key: omega-imagemin-${{ hashFiles('src/assets/images/**') }}
|
|
88
|
+
restore-keys: |
|
|
89
|
+
omega-imagemin-
|
|
90
|
+
|
|
91
|
+
# Base path (#358): a Pages PROJECT site serves under `/<repo>/`, a
|
|
92
|
+
# custom domain (brand.url → CNAME) at the domain root — and everything
|
|
93
|
+
# the build emits is root-relative, so the build has to be told. Derived
|
|
94
|
+
# by the SAME function `omega deploy --direct` uses, off the config in
|
|
95
|
+
# this checkout (GITHUB_REPOSITORY names the repo when it carries no
|
|
96
|
+
# slug); an explicitly set OMEGA_PATH_PREFIX wins and passes through.
|
|
97
|
+
- name: Resolve base path
|
|
98
|
+
run: |
|
|
99
|
+
PREFIX="$(node -p "require('@omega.js/web/deploy').targetPathPrefix()")"
|
|
100
|
+
echo "Base path: $PREFIX"
|
|
101
|
+
echo "OMEGA_PATH_PREFIX=$PREFIX" >> "$GITHUB_ENV"
|
|
102
|
+
|
|
103
|
+
# Tracked files only (#568) — `ls -R` printed node_modules (~45k lines)
|
|
104
|
+
# and hid the build output in every run, truncating the log exactly when
|
|
105
|
+
# a failure needed reading.
|
|
106
|
+
- name: Log repo files
|
|
107
|
+
run: |
|
|
108
|
+
echo "Tracked files:"
|
|
109
|
+
git ls-files
|
|
110
|
+
|
|
111
|
+
- name: Log disk usage (before build)
|
|
112
|
+
run: df -h /
|
|
113
|
+
|
|
114
|
+
- name: Build
|
|
115
|
+
run: |
|
|
116
|
+
npm run build
|
|
117
|
+
|
|
118
|
+
# `if: always()` (#568): this reading is the one that matters when the
|
|
119
|
+
# build itself is what ran out of room.
|
|
120
|
+
- name: Log disk usage (after build)
|
|
121
|
+
if: always()
|
|
122
|
+
run: df -h /
|
|
123
|
+
|
|
124
|
+
- name: Deploy to gh-pages
|
|
125
|
+
uses: peaceiris/actions-gh-pages@v4
|
|
126
|
+
with:
|
|
127
|
+
github_token: ${{ secrets.GH_TOKEN }}
|
|
128
|
+
publish_dir: ./dist
|
|
129
|
+
# One commit on gh-pages, forever (#568). Without it the branch grows
|
|
130
|
+
# by a whole site per deploy, and the deploy action clones it again
|
|
131
|
+
# before copying the build in. It holds build artifacts only, so
|
|
132
|
+
# discarding its history is intended.
|
|
133
|
+
force_orphan: true
|
|
134
|
+
|
|
135
|
+
# Post-publish edge-cache purge — runs only when the repo has a
|
|
136
|
+
# CLOUDFLARE_TOKEN secret; skips silently otherwise.
|
|
137
|
+
- name: Purge Cloudflare cache
|
|
138
|
+
if: env.CLOUDFLARE_TOKEN != ''
|
|
139
|
+
run: npx omega purge
|
package/scaffold/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
v{{ versions.node }}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# ========== Default Values ==========
|
|
2
|
+
# @omega.js/web consumer project
|
|
3
|
+
|
|
4
|
+
<!-- MAINTAINERS (framework repo): this consumer template is MIRRORED across all OMEGA framework consumer templates (src/defaults/AGENTS.md ×N; web's lives at scaffold/AGENTS.md).
|
|
5
|
+
Same sections in the same order: framework-specific extras may be inserted; canonical sections are never reordered/renamed. Edit every framework consumer template together.
|
|
6
|
+
The mirroring rule lives in each framework guide's Doc-update parity section (docs/<framework>/index.md) -->
|
|
7
|
+
|
|
8
|
+
## Framework
|
|
9
|
+
|
|
10
|
+
This project consumes **@omega.js/web**, the OMEGA web framework (Eleventy 3 + LiquidJS). It ships ~60 default pages as virtual templates (nothing copied into this repo), layered themes with zero file copying, a `page.resolved` data cascade, the esbuild/sass/PurgeCSS asset pipeline, and an ESM boot runtime around the @omega.js/client singleton.
|
|
11
|
+
|
|
12
|
+
## 🚨 READ THE FRAMEWORK DOCS FIRST
|
|
13
|
+
|
|
14
|
+
**Before doing ANY work on this codebase, the agent MUST read the framework documentation: that is where the architecture, conventions, APIs, and gotchas live. Skipping these will result in solutions that conflict with framework patterns.**
|
|
15
|
+
|
|
16
|
+
**Required reading:**
|
|
17
|
+
- **`node_modules/@omega.js/AGENTS.md`**: the OMEGA map, the one agent entry into the framework docs; follow it to `docs/web/index.md` (the @omega.js/web guide: identity, architecture, conventions)
|
|
18
|
+
- **the deep references beside that guide** (`docs/web/sections.md`, `docs/web/template-kit.md`, `docs/shared/theming.md`, …): read the relevant ones for the task at hand
|
|
19
|
+
|
|
20
|
+
## 🚨 READ @omega.js/client TOO
|
|
21
|
+
|
|
22
|
+
**@omega.js/web boots `@omega.js/client` as a runtime singleton on every page.**
|
|
23
|
+
- It powers auth, Firebase, reactive `data-omega-bind` directives, analytics, error tracking, and utilities (`escapeHTML`, etc.).
|
|
24
|
+
- Any task that touches auth flows, Firestore reads/writes, subscription resolution, push notifications, or DOM bindings means you are working with @omega.js/client as much as with @omega.js/web.
|
|
25
|
+
|
|
26
|
+
**Required reading:**
|
|
27
|
+
- **`node_modules/@omega.js/AGENTS.md`** → `docs/client/index.md`, the @omega.js/client guide: identity, module list, conventions
|
|
28
|
+
- **`node_modules/@omega.js/client/docs/`**: module deep references (Auth, Bindings, Firestore, Notifications, etc.)
|
|
29
|
+
|
|
30
|
+
## Quick start
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm start # omega dev: dev server (Eleventy watch + asset rebuild)
|
|
34
|
+
npm run build # omega build: production build → dist/
|
|
35
|
+
npm test # omega test: production build + smoke checks + test/
|
|
36
|
+
npm run deploy # omega deploy: commit + push, then dispatch the build workflow (CI publishes)
|
|
37
|
+
npx omega clean # remove dist/ and .omega/
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Project layout
|
|
41
|
+
|
|
42
|
+
- `src/pages/`: your pages (frontmatter-only files override same-URL default pages). `example.md.txt` is a commented walkthrough of meta-only frontmatter and `{% section %}` composition; its `.txt` suffix keeps it out of the build, so copy it to `<name>.md` to start from it
|
|
43
|
+
- `src/_posts/`: blog posts (`YYYY-MM-DD-slug.md`)
|
|
44
|
+
- `src/_layouts/`: consumer-local layouts (top layout layer)
|
|
45
|
+
- `src/assets/js/pages/`, `src/assets/css/pages/`: per-page modules/styles (layered over theme + core)
|
|
46
|
+
- `config/omega.json5`: the ONE config file (never put secrets here; use `.env`)
|
|
47
|
+
- `dist/`, `.omega/`: build output + machinery (gitignored, never edit)
|
|
48
|
+
|
|
49
|
+
## Rules
|
|
50
|
+
|
|
51
|
+
- Only work in `src/` and `config/`, never `dist/`, `.omega/`, or `node_modules/`.
|
|
52
|
+
- Framework defaults (this file's Default section, `.gitignore`, `.env`, CI workflow) are re-synced by every omega verb; customize below the Custom marker only.
|
|
53
|
+
|
|
54
|
+
# ========== Custom Values ==========
|
|
55
|
+
<!-- Add your project-specific notes below this line -->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# Machine-written translation string caches — committed build INPUT (they make
|
|
2
|
+
# clone→build deterministic and credential-free), but collapsed in PR diffs and
|
|
3
|
+
# excluded from language stats. See @omega.js/web docs/shared/translation.md.
|
|
4
|
+
translations/** linguist-generated=true
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# ========== Default Values ==========
|
|
2
|
+
# macOS
|
|
3
|
+
.DS_Store
|
|
4
|
+
|
|
5
|
+
# Logs
|
|
6
|
+
logs
|
|
7
|
+
*.log
|
|
8
|
+
npm-debug.log*
|
|
9
|
+
|
|
10
|
+
# Dependency directories
|
|
11
|
+
node_modules/
|
|
12
|
+
|
|
13
|
+
# dotenv environment variables file
|
|
14
|
+
.env
|
|
15
|
+
|
|
16
|
+
# Build output + machinery (omega build / omega dev)
|
|
17
|
+
/dist
|
|
18
|
+
/.omega
|
|
19
|
+
/.cache
|
|
20
|
+
/.temp
|
|
21
|
+
|
|
22
|
+
# Output of 'npm pack'
|
|
23
|
+
*.tgz
|
|
24
|
+
|
|
25
|
+
# ========== Custom Values ==========
|
|
26
|
+
# Add your custom ignore patterns below this line
|
|
27
|
+
# ...
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
// OMEGA config — one file, one shape, every project type.
|
|
3
|
+
// Docs: node_modules/@omega.js/web/README.md + docs/shared/config.md in the Omega repo.
|
|
4
|
+
// Secrets NEVER live here — they go in .env (the validator hard-fails on
|
|
5
|
+
// secret-shaped keys).
|
|
6
|
+
brand: {
|
|
7
|
+
id: 'my-brand',
|
|
8
|
+
name: 'My Brand',
|
|
9
|
+
url: 'https://example.com',
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
theme: {
|
|
13
|
+
id: 'classy',
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
// Key presence = this project enables this target
|
|
17
|
+
targets: {
|
|
18
|
+
web: {},
|
|
19
|
+
},
|
|
20
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
This file is a WALKTHROUGH, not a page. The `.txt` suffix keeps it out of the
|
|
2
|
+
build (Eleventy only templates .md/.html/.liquid here, and nothing under
|
|
3
|
+
src/pages is copied verbatim), so it can sit in your project as a reference
|
|
4
|
+
for as long as it is useful.
|
|
5
|
+
|
|
6
|
+
To turn it into a real page: copy it to `src/pages/<name>.md`, drop everything
|
|
7
|
+
above and below the rule lines, and edit. The file path IS the URL unless a
|
|
8
|
+
permalink says otherwise: `src/pages/about.md` serves /about.
|
|
9
|
+
|
|
10
|
+
Everything inside the rule lines is safe to ship as-is: the notes in it are
|
|
11
|
+
Liquid comments, which the render drops. An HTML comment would NOT be. It is
|
|
12
|
+
shipped bytes, published to every visitor, so keep private notes in the
|
|
13
|
+
Liquid form.
|
|
14
|
+
|
|
15
|
+
────────────────────────────────────────────────────────────────────────────
|
|
16
|
+
---
|
|
17
|
+
# Page frontmatter is META-ONLY. These are the only keys the engine reads:
|
|
18
|
+
#
|
|
19
|
+
# layout which layout renders the page chrome
|
|
20
|
+
# permalink the URL, when it isn't the file path
|
|
21
|
+
# meta title / description / image / index for the <head>
|
|
22
|
+
# schema structured data (JSON-LD) for this page
|
|
23
|
+
# config per-page omega.json5 overrides (theme, client…)
|
|
24
|
+
# redirect url / querystring for the redirect layout
|
|
25
|
+
# templateEngineOverride the engine, when it isn't inferred
|
|
26
|
+
# eleventyExcludeFromCollections keep the page out of collections
|
|
27
|
+
#
|
|
28
|
+
# Any OTHER key is content-in-frontmatter, a lane that does not exist. The
|
|
29
|
+
# build strips it before rendering and warns; sections never see it. Content
|
|
30
|
+
# lives in the page BODY, below, as {% section %} calls. The `config:` rule
|
|
31
|
+
# runs both ways: a config section (theme, client, analytics…) restated BARE
|
|
32
|
+
# is a build ERROR, and a key under `config:` that omega.json5 has no section
|
|
33
|
+
# for is one too. Everything above except `config` is page machinery — `meta`
|
|
34
|
+
# included, which is why omega.json5 carries no meta section at all.
|
|
35
|
+
layout: frontend/core/base
|
|
36
|
+
permalink: /example
|
|
37
|
+
meta:
|
|
38
|
+
title: Example page
|
|
39
|
+
description: How a page composes sections.
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
{% comment %}
|
|
43
|
+
A page is a stack of full-width bands. Each section call names a section
|
|
44
|
+
id and passes its args; the section's own defaults fill in the rest, so
|
|
45
|
+
you write only what you want to change.
|
|
46
|
+
|
|
47
|
+
These notes are LIQUID comments, and that is deliberate. An HTML comment
|
|
48
|
+
is shipped bytes: it survives into dist/ for every visitor to read. So
|
|
49
|
+
anything you would not publish belongs in a Liquid comment, which the
|
|
50
|
+
render drops. Two more traps worth knowing: Liquid runs INSIDE an HTML
|
|
51
|
+
comment (a tag in there really executes), and a comment of either kind is
|
|
52
|
+
still tokenized, so a stray brace is a build error even here. That is why
|
|
53
|
+
these notes spell no tags.
|
|
54
|
+
{% endcomment %}
|
|
55
|
+
|
|
56
|
+
{% comment %} Inline form: simple values, which are real Liquid expressions. {% endcomment %}
|
|
57
|
+
{% section "marketing/hero", headline: "Everything you need", description: "Built with {{ resolved.config.brand.name }}." %}
|
|
58
|
+
|
|
59
|
+
{% comment %} No args at all: the section renders its own defaults. {% endcomment %}
|
|
60
|
+
{% section "marketing/stats" %}
|
|
61
|
+
|
|
62
|
+
{% comment %}
|
|
63
|
+
Block form: structured args, written as YAML. Liquid output tokens
|
|
64
|
+
inside the values render against this page.
|
|
65
|
+
{% endcomment %}
|
|
66
|
+
{% section "marketing/faq" %}
|
|
67
|
+
headline: "Questions, answered"
|
|
68
|
+
items:
|
|
69
|
+
- question: "Do I have to write every page?"
|
|
70
|
+
answer: "No. The stock pages already render; this one is extra."
|
|
71
|
+
- question: "Where does the copy live?"
|
|
72
|
+
answer: "Right here, in the section call, never in frontmatter."
|
|
73
|
+
{% endsection %}
|
|
74
|
+
|
|
75
|
+
{% comment %} Slots pass finished MARKUP where a string won't do. {% endcomment %}
|
|
76
|
+
{% section "marketing/hero" %}
|
|
77
|
+
{% slot demo_html %}
|
|
78
|
+
<div class="my-demo"><i class="fa-solid fa-rocket"></i> {{ resolved.config.brand.name }}</div>
|
|
79
|
+
{% endslot %}
|
|
80
|
+
{% endsection %}
|
|
81
|
+
────────────────────────────────────────────────────────────────────────────
|
|
82
|
+
|
|
83
|
+
Every stock page (home, pricing, about, the legal set, the whole auth flow)
|
|
84
|
+
already renders without a file here; this directory is empty on purpose. To
|
|
85
|
+
start from one of them instead of a blank page, materialize it:
|
|
86
|
+
|
|
87
|
+
npx omega customize <url>
|
|
88
|
+
|
|
89
|
+
`npx omega customize /pricing` writes the real pricing page into src/pages/
|
|
90
|
+
with its composition intact, yours to edit. Bare `npx omega customize` lists
|
|
91
|
+
every customizable URL.
|
|
92
|
+
|
|
93
|
+
The framework's docs/web/sections.md is the full contract: every section id,
|
|
94
|
+
the arg schemas, slots, and the directory-data lane for site-wide overrides.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// The OMEGA service worker manager is bundled into /service-worker.js by the
|
|
2
|
+
// framework build (esbuild). Custom service-worker code goes below.
|
|
3
|
+
import Manager from '@omega.js/web/service-worker';
|
|
4
|
+
|
|
5
|
+
// Load Manager
|
|
6
|
+
const manager = new Manager();
|
|
7
|
+
|
|
8
|
+
// Initialize
|
|
9
|
+
manager.initialize()
|
|
10
|
+
.then(() => {
|
|
11
|
+
// Log
|
|
12
|
+
console.log('Initialized service-worker.js');
|
|
13
|
+
|
|
14
|
+
// Custom code
|
|
15
|
+
// ...
|
|
16
|
+
});
|
package/sw/entry.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The default service-worker entry — used when the consumer has no
|
|
3
|
+
* src/service-worker.js of its own. The scaffolded consumer file starts as
|
|
4
|
+
* an exact copy of this; custom SW code goes there.
|
|
5
|
+
*/
|
|
6
|
+
import Manager from '@omega.js/web/service-worker';
|
|
7
|
+
|
|
8
|
+
// Load Manager
|
|
9
|
+
const manager = new Manager();
|
|
10
|
+
|
|
11
|
+
// Initialize
|
|
12
|
+
manager.initialize()
|
|
13
|
+
.then(() => {
|
|
14
|
+
// Log
|
|
15
|
+
console.log('Initialized service-worker.js');
|
|
16
|
+
|
|
17
|
+
// Custom code
|
|
18
|
+
// ...
|
|
19
|
+
});
|
package/sw/manager.js
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The OMEGA service worker manager — the master-service-worker successor.
|
|
3
|
+
* Bundled (esbuild iife) from the consumer's src/service-worker.js entry
|
|
4
|
+
* (or the packaged default) to dist root /service-worker.js.
|
|
5
|
+
*
|
|
6
|
+
* Config transport: the build emits /build.js (`self.OMEGA_BUILD_JSON = {…}`)
|
|
7
|
+
* with the brand id, environment, version, cacheBreaker, main asset URLs and
|
|
8
|
+
* firebase config — imported synchronously below, BEFORE the class reads it.
|
|
9
|
+
* Because the registration uses `updateViaCache: 'none'`, a changed /build.js
|
|
10
|
+
* (new build, or a DIFFERENT project on the same localhost port) makes the
|
|
11
|
+
* browser install this worker fresh: skipWaiting + clients.claim take the
|
|
12
|
+
* scope over immediately, and initialize() evicts every cache that doesn't
|
|
13
|
+
* carry this brand+build's name. One project per origin, self-healing.
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ NO fetch handler, ON PURPOSE (Ian 2026-07-18: page speed wins) — with
|
|
16
|
+
* no fetch listener the browser skips SW startup for navigations entirely,
|
|
17
|
+
* so pages load at full network speed. Adding offline caching means adding
|
|
18
|
+
* a fetch handler, which taxes EVERY request through the worker; don't.
|
|
19
|
+
*/
|
|
20
|
+
const sw = self;
|
|
21
|
+
|
|
22
|
+
// The base path this site is mounted under (#355/#360). A worker has no
|
|
23
|
+
// document to read the `data-omega-path-prefix` stamp from, so @omega.js/client
|
|
24
|
+
// hands the value over on this script's query string at registration time —
|
|
25
|
+
// which also scopes the worker to `<prefix>/`. Empty means the domain root.
|
|
26
|
+
const PATH_PREFIX = new URLSearchParams(sw.location.search).get('omega-path-prefix') || '';
|
|
27
|
+
|
|
28
|
+
// Mount a root-relative site URL under that base path. A no-op at the domain
|
|
29
|
+
// root, and anything the payload supplies (absolute URLs from FCM) is left alone.
|
|
30
|
+
function sitePath(url) {
|
|
31
|
+
if (!PATH_PREFIX || typeof url !== 'string') return url;
|
|
32
|
+
if (!url.startsWith('/') || url.startsWith('//')) return url;
|
|
33
|
+
|
|
34
|
+
return `${PATH_PREFIX}${url}`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Cache warming is DISABLED (Ian 2026-07-18: page speed wins — nothing reads
|
|
38
|
+
// the cache today, and no fetch handler exists to serve from it). The
|
|
39
|
+
// machinery stays wired (updateCache + the update-cache message command) so
|
|
40
|
+
// this single flag re-enables it if an offline/caching lane ever lands.
|
|
41
|
+
const CACHE_WARMING_ENABLED = false;
|
|
42
|
+
|
|
43
|
+
// Build config — synchronous, top-level (importScripts cannot run later)
|
|
44
|
+
importScripts(sitePath('/build.js'));
|
|
45
|
+
|
|
46
|
+
// ⚠️ Global listeners BEFORE the Firebase imports — firebase-messaging
|
|
47
|
+
// registers its own notificationclick handler, and ours must come first:
|
|
48
|
+
// https://stackoverflow.com/questions/78270541
|
|
49
|
+
setupGlobalHandlers();
|
|
50
|
+
|
|
51
|
+
// Firebase compat libraries for background messaging (FCM push). The version
|
|
52
|
+
// is pinned at build time to @omega.js/client's own firebase dependency.
|
|
53
|
+
// Skipped when the brand has no firebase config, and guarded either way — a
|
|
54
|
+
// failed CDN fetch (offline, CSP, blocked gstatic) must never abort script
|
|
55
|
+
// evaluation and take down the SW's cache-eviction/takeover role.
|
|
56
|
+
let firebaseScriptsLoaded = false;
|
|
57
|
+
if (sw.OMEGA_BUILD_JSON && sw.OMEGA_BUILD_JSON.firebase) {
|
|
58
|
+
try {
|
|
59
|
+
importScripts(
|
|
60
|
+
`https://www.gstatic.com/firebasejs/${__OMEGA_FIREBASE_VERSION__}/firebase-app-compat.js`,
|
|
61
|
+
`https://www.gstatic.com/firebasejs/${__OMEGA_FIREBASE_VERSION__}/firebase-messaging-compat.js`,
|
|
62
|
+
);
|
|
63
|
+
firebaseScriptsLoaded = true;
|
|
64
|
+
} catch (e) {
|
|
65
|
+
console.error('[service-worker] Firebase libraries failed to load; push messaging disabled:', e);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Manager Class
|
|
70
|
+
class Manager {
|
|
71
|
+
constructor() {
|
|
72
|
+
// Properties
|
|
73
|
+
this.serviceWorker = null;
|
|
74
|
+
|
|
75
|
+
// Load config from the emitted /build.js
|
|
76
|
+
this.config = sw.OMEGA_BUILD_JSON || {};
|
|
77
|
+
|
|
78
|
+
// Defaults
|
|
79
|
+
this.brand = this.config.brand || 'default';
|
|
80
|
+
this.environment = this.config.environment || 'production';
|
|
81
|
+
this.cache = {
|
|
82
|
+
breaker: this.config.cacheBreaker || new Date().getTime(),
|
|
83
|
+
};
|
|
84
|
+
this.cache.name = `${this.brand}-${this.cache.breaker}`;
|
|
85
|
+
|
|
86
|
+
// Libraries
|
|
87
|
+
this.libraries = {
|
|
88
|
+
firebase: false,
|
|
89
|
+
messaging: false,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Initialize
|
|
94
|
+
async initialize() {
|
|
95
|
+
// Properties
|
|
96
|
+
this.serviceWorker = sw;
|
|
97
|
+
|
|
98
|
+
// Setup instance-specific message handlers
|
|
99
|
+
this.setupInstanceHandlers();
|
|
100
|
+
|
|
101
|
+
// Initialize Firebase
|
|
102
|
+
this.initializeFirebase();
|
|
103
|
+
|
|
104
|
+
// Evict caches that don't belong to this brand+build — a previous build's
|
|
105
|
+
// caches, or a DIFFERENT project's caches left on this origin (the
|
|
106
|
+
// localhost:4000 case). Then warm this build's cache (a no-op while
|
|
107
|
+
// CACHE_WARMING_ENABLED is off — eviction still clears leftovers).
|
|
108
|
+
await this.cleanCaches();
|
|
109
|
+
this.updateCache();
|
|
110
|
+
|
|
111
|
+
// Log
|
|
112
|
+
console.log(`[service-worker] Initialized: ${this.cache.name} (${this.environment})`, sw.location.pathname);
|
|
113
|
+
|
|
114
|
+
// Return
|
|
115
|
+
return sw;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Setup instance-specific message handlers
|
|
119
|
+
setupInstanceHandlers() {
|
|
120
|
+
sw.addEventListener('message', (event) => {
|
|
121
|
+
// Get the data
|
|
122
|
+
const data = event.data || {};
|
|
123
|
+
|
|
124
|
+
// Parse the data
|
|
125
|
+
const command = data.command || '';
|
|
126
|
+
const payload = data.payload || {};
|
|
127
|
+
|
|
128
|
+
// Quit if no command
|
|
129
|
+
if (!command) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Log
|
|
134
|
+
console.log('[service-worker] message', command, payload);
|
|
135
|
+
|
|
136
|
+
// Handle commands
|
|
137
|
+
if (command === 'update-cache') {
|
|
138
|
+
const pages = payload.pages || [];
|
|
139
|
+
this.updateCache(pages)
|
|
140
|
+
.then(() => {
|
|
141
|
+
event.ports[0]?.postMessage({ status: 'success' });
|
|
142
|
+
})
|
|
143
|
+
.catch((error) => {
|
|
144
|
+
event.ports[0]?.postMessage({ status: 'error', error: error.message });
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Setup Firebase init
|
|
151
|
+
initializeFirebase() {
|
|
152
|
+
// Get Firebase config
|
|
153
|
+
const firebaseConfig = this.config.firebase;
|
|
154
|
+
|
|
155
|
+
// Check if Firebase config is available
|
|
156
|
+
if (!firebaseConfig) {
|
|
157
|
+
console.log('[service-worker] Firebase config not available, skipping Firebase initialization');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Check the libraries actually loaded (guarded top-level importScripts)
|
|
162
|
+
if (!firebaseScriptsLoaded) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Check if already initialized
|
|
167
|
+
if (this.libraries.firebase) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Initialize app (libraries were already imported at the top)
|
|
172
|
+
firebase.initializeApp(firebaseConfig);
|
|
173
|
+
|
|
174
|
+
// Initialize messaging
|
|
175
|
+
this.libraries.messaging = firebase.messaging();
|
|
176
|
+
|
|
177
|
+
// Handle background push messages (when the page is not focused)
|
|
178
|
+
this.libraries.messaging.onBackgroundMessage((payload) => {
|
|
179
|
+
console.log('[service-worker] Background message received:', payload);
|
|
180
|
+
|
|
181
|
+
const notification = payload.notification || {};
|
|
182
|
+
const data = payload.data || {};
|
|
183
|
+
|
|
184
|
+
const title = notification.title || 'New notification';
|
|
185
|
+
const options = {
|
|
186
|
+
body: notification.body || '',
|
|
187
|
+
icon: notification.icon || notification.image || sitePath('/assets/images/favicon/favicon-192x192.png'),
|
|
188
|
+
data: payload,
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
if (data.click_action) {
|
|
192
|
+
options.data.click_action = data.click_action;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
sw.registration.showNotification(title, options);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
// Attach firebase to the manager
|
|
199
|
+
this.libraries.firebase = firebase;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Delete every cache on this origin that isn't THIS brand+build's cache
|
|
203
|
+
cleanCaches() {
|
|
204
|
+
return caches.keys()
|
|
205
|
+
.then((names) => {
|
|
206
|
+
const stale = names.filter((name) => name !== this.cache.name);
|
|
207
|
+
return Promise.all(stale.map((name) => caches.delete(name)))
|
|
208
|
+
.then(() => {
|
|
209
|
+
if (stale.length > 0) {
|
|
210
|
+
console.log('[service-worker] Evicted stale caches:', stale);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
})
|
|
214
|
+
.catch((error) => console.error('[service-worker] Failed to clean caches:', error));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Setup cache update — disabled by CACHE_WARMING_ENABLED (see top of file)
|
|
218
|
+
updateCache(pages) {
|
|
219
|
+
if (!CACHE_WARMING_ENABLED) {
|
|
220
|
+
return Promise.resolve();
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Set default resources to cache: the home page + the main bundles
|
|
224
|
+
// (their URLs ride /build.js — hashed names in production builds)
|
|
225
|
+
const defaults = ['/', this.config.assets?.js, this.config.assets?.css].filter(Boolean).map(sitePath);
|
|
226
|
+
|
|
227
|
+
// Ensure pages is an array, mounted the same way the defaults are: the
|
|
228
|
+
// update-cache caller supplies SITE-relative pages (it knows nothing about
|
|
229
|
+
// this worker's base path), so they ride sitePath() too
|
|
230
|
+
pages = (pages || []).map(sitePath);
|
|
231
|
+
|
|
232
|
+
// Merge with additional pages
|
|
233
|
+
const pagesToCache = [...new Set([...defaults, ...pages])];
|
|
234
|
+
|
|
235
|
+
// Open cache and add pages
|
|
236
|
+
return caches.open(this.cache.name)
|
|
237
|
+
.then((cache) => cache.addAll(pagesToCache))
|
|
238
|
+
.then(() => console.log('[service-worker] Cached resources:', pagesToCache))
|
|
239
|
+
.catch((error) => console.error('[service-worker] Failed to cache resources:', error));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Helper: Setup global listeners
|
|
244
|
+
// Called at top-level before the Firebase imports so these register first
|
|
245
|
+
function setupGlobalHandlers() {
|
|
246
|
+
// Force this service worker to take the scope over immediately — the
|
|
247
|
+
// cross-project takeover depends on it
|
|
248
|
+
sw.addEventListener('install', () => {
|
|
249
|
+
sw.skipWaiting();
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
sw.addEventListener('activate', (event) => {
|
|
253
|
+
event.waitUntil(sw.clients.claim());
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Handle clicks on notifications
|
|
257
|
+
// ⚠️ MUST be registered before the Firebase imports
|
|
258
|
+
sw.addEventListener('notificationclick', (event) => {
|
|
259
|
+
// Get the properties of the notification
|
|
260
|
+
const notification = event.notification;
|
|
261
|
+
const data = (notification.data && notification.data.FCM_MSG ? notification.data.FCM_MSG.data : null) || {};
|
|
262
|
+
const payload = (notification.data && notification.data.FCM_MSG ? notification.data.FCM_MSG.notification : null) || {};
|
|
263
|
+
|
|
264
|
+
// Get the click action
|
|
265
|
+
const clickAction = payload.click_action || data.click_action || sitePath('/');
|
|
266
|
+
|
|
267
|
+
// Log
|
|
268
|
+
console.log('[service-worker] notificationclick', clickAction, event);
|
|
269
|
+
|
|
270
|
+
// Handle the click
|
|
271
|
+
event.waitUntil(
|
|
272
|
+
sw.clients.openWindow(clickAction)
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
// Close the notification
|
|
276
|
+
notification.close();
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Export
|
|
281
|
+
export default Manager;
|