@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,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Production HTML minification — the UJM minifyHtml successor, as an
|
|
3
|
+
* Eleventy transform (engine.js mounts it for production builds only; dev
|
|
4
|
+
* and the test harness ship readable HTML). The Rust minifier
|
|
5
|
+
* (@minify-html/node) does the heavy lifting; three content classes are
|
|
6
|
+
* extracted first and restored after, exactly the legacy dance:
|
|
7
|
+
*
|
|
8
|
+
* 1. JSON-LD scripts — minified as JSON (parse → stringify; unparseable
|
|
9
|
+
* blocks pass through verbatim), because the HTML minifier can mangle
|
|
10
|
+
* structured data.
|
|
11
|
+
* 2. Inline scripts (no src, not JSON-LD) — minified with esbuild
|
|
12
|
+
* (already a dependency; legacy used terser because minify-html's
|
|
13
|
+
* built-in JS minifier was buggy — it stays off here too). A script
|
|
14
|
+
* esbuild can't parse ships verbatim.
|
|
15
|
+
* 3. IE conditional comments — keep_comments is off, which would strip
|
|
16
|
+
* them; they're restored verbatim (head.html still carries one).
|
|
17
|
+
*
|
|
18
|
+
* Ordinary comments go FIRST, before any of that, scanning left to right:
|
|
19
|
+
* a `<script` mentioned inside a comment is comment text, and a `<!--` inside
|
|
20
|
+
* a script body is script text. The extraction regexes alone could not tell
|
|
21
|
+
* (#762: a head comment saying "plain <script src> fetches" was read as a
|
|
22
|
+
* script running to the motion stamp's `</script>`, the comment's `-->` went
|
|
23
|
+
* with it, and the minifier ate every tag up to the next comment close).
|
|
24
|
+
*
|
|
25
|
+
* A page that fails to minify ships unminified — never a failed build. A
|
|
26
|
+
* placeholder the minifier lost counts as a failure: the page ships whole.
|
|
27
|
+
*/
|
|
28
|
+
const { minify } = require('@minify-html/node');
|
|
29
|
+
const esbuild = require('esbuild');
|
|
30
|
+
|
|
31
|
+
// UJM's proven option set. minify_js stays OFF: inline scripts are
|
|
32
|
+
// extracted and esbuild-minified instead (minify-html's JS pass is buggy).
|
|
33
|
+
const MINIFY_OPTIONS = {
|
|
34
|
+
keep_closing_tags: false,
|
|
35
|
+
keep_comments: false,
|
|
36
|
+
keep_html_and_head_opening_tags: false,
|
|
37
|
+
keep_spaces_between_attributes: false,
|
|
38
|
+
keep_ssi_comments: false,
|
|
39
|
+
minify_css: true,
|
|
40
|
+
minify_js: false,
|
|
41
|
+
remove_bangs: false,
|
|
42
|
+
remove_processing_instructions: false,
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const JSON_LD_REGEX = /<script[^>]*type=(?:["']?application\/ld\+json["']?)[^>]*>([\s\S]*?)<\/script>/gi;
|
|
46
|
+
// Inline scripts only: no src attribute, not JSON-LD (already extracted)
|
|
47
|
+
const INLINE_SCRIPT_REGEX = /<script(?![^>]*type=(?:["']?application\/ld\+json["']?))(?![^>]*\bsrc=)([^>]*)>([\s\S]*?)<\/script>/gi;
|
|
48
|
+
const CONDITIONAL_COMMENT_REGEX = /<!--\[if[\s\S]*?<!\[endif\]-->/gi;
|
|
49
|
+
// One left-to-right scan: whichever of a comment, a script or a style starts
|
|
50
|
+
// first owns everything up to its own close. Conditional comments are not
|
|
51
|
+
// ordinary comments (the lookahead leaves them for step 3).
|
|
52
|
+
const COMMENT_OR_RAW_TEXT_REGEX = /<!--(?!\[if)[\s\S]*?-->|<script\b[\s\S]*?<\/script>|<style\b[\s\S]*?<\/style>/gi;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Drop every ordinary HTML comment, leaving script and style bodies alone.
|
|
56
|
+
* @param {string} html
|
|
57
|
+
* @returns {string}
|
|
58
|
+
*/
|
|
59
|
+
function stripComments(html) {
|
|
60
|
+
return html.replace(COMMENT_OR_RAW_TEXT_REGEX, (match) => (match.startsWith('<!--') ? '' : match));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Replace every regex match with an indexed placeholder token.
|
|
65
|
+
* @param {string} html
|
|
66
|
+
* @param {RegExp} regex
|
|
67
|
+
* @param {string} token - placeholder stem, e.g. 'JSON_LD'
|
|
68
|
+
* @param {function} capture - (match, ...groups) → string stored for restore
|
|
69
|
+
* @returns {{ content: string, extracted: string[] }}
|
|
70
|
+
*/
|
|
71
|
+
function extract(html, regex, token, capture) {
|
|
72
|
+
const extracted = [];
|
|
73
|
+
const content = html.replace(regex, (...args) => {
|
|
74
|
+
extracted.push(capture(...args));
|
|
75
|
+
return `__OMEGA_${token}_${extracted.length - 1}__`;
|
|
76
|
+
});
|
|
77
|
+
return { content, extracted };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Swap placeholder tokens back for their stored strings.
|
|
82
|
+
* @param {string} html
|
|
83
|
+
* @param {string} token
|
|
84
|
+
* @param {string[]} extracted
|
|
85
|
+
* @returns {string}
|
|
86
|
+
*/
|
|
87
|
+
function restore(html, token, extracted) {
|
|
88
|
+
return extracted.reduce((content, block, index) => {
|
|
89
|
+
const placeholder = `__OMEGA_${token}_${index}__`;
|
|
90
|
+
if (!content.includes(placeholder)) {
|
|
91
|
+
// The minifier ate the placeholder (a comment or raw-text context we
|
|
92
|
+
// failed to see swallowed it), so the page cannot be trusted: throw, and
|
|
93
|
+
// minifyHtml() ships it unminified rather than truncated (#762)
|
|
94
|
+
throw new Error(`minify-html lost ${placeholder}`);
|
|
95
|
+
}
|
|
96
|
+
return content.replace(placeholder, () => block);
|
|
97
|
+
}, html);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Minify one rendered HTML page. Synchronous — mounted directly as an
|
|
102
|
+
* Eleventy transform.
|
|
103
|
+
* @param {string} html
|
|
104
|
+
* @returns {string} minified page (or the input verbatim if minification throws)
|
|
105
|
+
*/
|
|
106
|
+
function minifyHtml(html) {
|
|
107
|
+
try {
|
|
108
|
+
// 0. Ordinary comments out for good (keep_comments is off anyway), so no
|
|
109
|
+
// extraction below can match markup a comment merely talks about
|
|
110
|
+
const stripped = stripComments(html);
|
|
111
|
+
|
|
112
|
+
// 1. JSON-LD out (minified as JSON, not HTML)
|
|
113
|
+
const jsonLd = extract(stripped, JSON_LD_REGEX, 'JSON_LD', (match, body) => {
|
|
114
|
+
try {
|
|
115
|
+
return `<script type=application/ld+json>${JSON.stringify(JSON.parse(body))}</script>`;
|
|
116
|
+
} catch (error) {
|
|
117
|
+
return match;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// 2. Inline scripts out (esbuild-minified; attributes preserved)
|
|
122
|
+
const scripts = extract(jsonLd.content, INLINE_SCRIPT_REGEX, 'SCRIPT', (match, attrs, body) => {
|
|
123
|
+
if (!body.trim()) {
|
|
124
|
+
return match;
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const minified = esbuild.transformSync(body, { minify: true }).code.trimEnd();
|
|
128
|
+
return `<script${attrs}>${minified}</script>`;
|
|
129
|
+
} catch (error) {
|
|
130
|
+
return match;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// 3. IE conditional comments out (keep_comments: false would eat them)
|
|
135
|
+
const conditionals = extract(scripts.content, CONDITIONAL_COMMENT_REGEX, 'IE_COMMENT', (match) => match);
|
|
136
|
+
|
|
137
|
+
let minified = minify(Buffer.from(conditionals.content), MINIFY_OPTIONS).toString();
|
|
138
|
+
|
|
139
|
+
minified = restore(minified, 'IE_COMMENT', conditionals.extracted);
|
|
140
|
+
minified = restore(minified, 'SCRIPT', scripts.extracted);
|
|
141
|
+
minified = restore(minified, 'JSON_LD', jsonLd.extracted);
|
|
142
|
+
return minified;
|
|
143
|
+
} catch (error) {
|
|
144
|
+
return html;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
module.exports = { minifyHtml };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The environment surface ([#717](https://github.com/Omega-JS-Stack/omega/issues/717))
|
|
3
|
+
* — the same four calls the three sibling frameworks answer
|
|
4
|
+
* (@omega.js/backend's Manager, @omega.js/desktop's and @omega.js/extension's
|
|
5
|
+
* mode-helpers): `getEnvironment()` plus `isDevelopment()` / `isProduction()` /
|
|
6
|
+
* `isTesting()`. Web used to be the outlier: a bare `options.environment`
|
|
7
|
+
* string threaded positionally through the build, reachable from nothing.
|
|
8
|
+
*
|
|
9
|
+
* `getEnvironment()` is the SINGLE SOURCE OF TRUTH — the ONLY function that
|
|
10
|
+
* reads the raw signals and resolves them to exactly ONE of three
|
|
11
|
+
* mutually-exclusive values. The three is*() checks DERIVE from it, so they can
|
|
12
|
+
* never disagree with it: `isDevelopment()` is NOT true in testing, and
|
|
13
|
+
* `isProduction()` is a real positive check, never `!isDevelopment()`. Gate
|
|
14
|
+
* "anything non-production" with `!isProduction()` or `isDevelopment() ||
|
|
15
|
+
* isTesting()` intentionally.
|
|
16
|
+
*
|
|
17
|
+
* The vocabulary is @omega.js/config's (`ENV_ENVIRONMENTS`, #586) — the same
|
|
18
|
+
* three names the `.env.<environment>` overlay files are spelled with — so a
|
|
19
|
+
* `.env.development` and an `isDevelopment()` can never mean different things.
|
|
20
|
+
*
|
|
21
|
+
* Web's contexts are the plain options objects the build lanes already thread
|
|
22
|
+
* (`{ environment, consumerDir, … }`), not Manager instances, so the surface is
|
|
23
|
+
* called on one: `getEnvironment.call(options)`. It is mixed into web's Manager
|
|
24
|
+
* equivalent — the CLI Main class (src/cli.js) — by attachTo() below.
|
|
25
|
+
*/
|
|
26
|
+
const { ENV_ENVIRONMENTS } = require('./vendor/config/index.js');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The running environment, resolved from every raw signal.
|
|
30
|
+
* Precedence: testing → the context's explicit environment → build signals →
|
|
31
|
+
* development.
|
|
32
|
+
* @returns {'development'|'testing'|'production'} exactly one of the three
|
|
33
|
+
*/
|
|
34
|
+
function getEnvironment() {
|
|
35
|
+
// 1. Testing wins — a test run is not development, whatever else says.
|
|
36
|
+
if (process.env.OMEGA_TEST_MODE === 'true') return 'testing';
|
|
37
|
+
|
|
38
|
+
// 2. The context's own environment: the deliberate value web's verbs already
|
|
39
|
+
// thread (`omega build` → production, `omega dev` → development) and the
|
|
40
|
+
// build lanes pass down. It beats the ambient signals, exactly as
|
|
41
|
+
// @omega.js/desktop's config override beats its auto-detected packaged state.
|
|
42
|
+
if (this && ENV_ENVIRONMENTS.includes(this.environment)) return this.environment;
|
|
43
|
+
|
|
44
|
+
// 3. Build-time / Node signals.
|
|
45
|
+
if (process.env.OMEGA_BUILD_MODE === 'true') return 'production';
|
|
46
|
+
if (process.env.NODE_ENV === 'production') return 'production';
|
|
47
|
+
if (process.env.NODE_ENV === 'development') return 'development';
|
|
48
|
+
|
|
49
|
+
// 4. Default: development. Web's deployed artifact is static HTML emitted by
|
|
50
|
+
// a build that CARRIED its signal (the production environment is baked
|
|
51
|
+
// into build.json at emit time), so reaching here means a bare tooling
|
|
52
|
+
// context, where development is the sensible answer. (Contrast
|
|
53
|
+
// @omega.js/backend and @omega.js/desktop, whose deployed RUNTIME can
|
|
54
|
+
// legitimately lack a signal, so they default to production.)
|
|
55
|
+
return 'development';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @returns {boolean} true only in development (never in testing)
|
|
60
|
+
*/
|
|
61
|
+
function isDevelopment() {
|
|
62
|
+
return getEnvironment.call(this) === 'development';
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @returns {boolean} true only in production — a real positive check
|
|
67
|
+
*/
|
|
68
|
+
function isProduction() {
|
|
69
|
+
return getEnvironment.call(this) === 'production';
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @returns {boolean} true only while web's test framework runs this process
|
|
74
|
+
*/
|
|
75
|
+
function isTesting() {
|
|
76
|
+
return getEnvironment.call(this) === 'testing';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Mix the surface into a Manager constructor's prototype AND the constructor
|
|
81
|
+
* itself, so `Manager.isTesting()` works statically too — the idiom
|
|
82
|
+
* @omega.js/desktop and @omega.js/extension attach with.
|
|
83
|
+
* @param {Function} Manager - the constructor to extend
|
|
84
|
+
*/
|
|
85
|
+
function attachTo(Manager) {
|
|
86
|
+
Manager.prototype.getEnvironment = getEnvironment;
|
|
87
|
+
Manager.prototype.isDevelopment = isDevelopment;
|
|
88
|
+
Manager.prototype.isProduction = isProduction;
|
|
89
|
+
Manager.prototype.isTesting = isTesting;
|
|
90
|
+
Manager.getEnvironment = getEnvironment;
|
|
91
|
+
Manager.isDevelopment = isDevelopment;
|
|
92
|
+
Manager.isProduction = isProduction;
|
|
93
|
+
Manager.isTesting = isTesting;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
module.exports = { attachTo, getEnvironment, isDevelopment, isProduction, isTesting };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Entry for the `omega`/`omg` bins — dispatches to the framework that owns the
|
|
2
|
+
// cwd's target (this one, or a sibling target's framework in a brand monorepo).
|
|
3
|
+
// @omega.js/web serves src/ directly (no dist), so devkit resolves live here.
|
|
4
|
+
require('./vendor/devkit/omega-bin.js').run({
|
|
5
|
+
hostName: '@omega.js/web',
|
|
6
|
+
hostRun: () => require('./cli-run.js').run(),
|
|
7
|
+
});
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The layered override map (#94) — what `omega customize --list` prints and
|
|
3
|
+
* what `omega customize <path>` materializes.
|
|
4
|
+
*
|
|
5
|
+
* A consumer overrides a framework file by OWNING the same relative path; until
|
|
6
|
+
* now nothing listed those paths, so restyling one section meant reading the
|
|
7
|
+
* theme source tree. This module answers both questions from the SAME layer
|
|
8
|
+
* chains the build resolves through (`resolveThemeLayers` + `collectProviders`
|
|
9
|
+
* in ./layers.js) — never a second table of layer order:
|
|
10
|
+
*
|
|
11
|
+
* - sections/components — consumer → active theme → base (engine.js hands
|
|
12
|
+
* registerSectionTags exactly these bases; core owns no entries). Resolution
|
|
13
|
+
* is per ENTRY, not per file: the layer owning `section.html` wins the whole
|
|
14
|
+
* folder unless the winner declares `inherit` (docs/web/sections.md), so a
|
|
15
|
+
* materialized asset file carries that note.
|
|
16
|
+
* - includes — consumer → theme layers → core (engine.js includeRoots).
|
|
17
|
+
* - css — ONLY `main.scss`, the one stylesheet the sass layer chain RESOLVES
|
|
18
|
+
* (assets.js): the first layer that ships one wins, and it extends the layers
|
|
19
|
+
* below with `@use 'omega:main'`. Page and layout sheets are deliberately
|
|
20
|
+
* absent (#624): every layer's sheet for a key loads, so a consumer's copy
|
|
21
|
+
* shadows nothing — materializing one would duplicate every rule it carries
|
|
22
|
+
* rather than replace it. Every other stylesheet is reached by a bare relative
|
|
23
|
+
* `@import`/`@use`, which Dart Sass resolves relative to the IMPORTING file
|
|
24
|
+
* before any loadPath — a consumer copy of `css/base/_utilities.scss` never
|
|
25
|
+
* loads. Listing either kind would hand a consumer a file that does the wrong
|
|
26
|
+
* thing, so the map lists neither. Paths carry the `assets/` prefix because
|
|
27
|
+
* the consumer's css layer root is `src/assets`.
|
|
28
|
+
* - pages — the URL-addressable default pages, straight from ./customize.js's
|
|
29
|
+
* listCustomizable (the page lane keeps its own two materialize modes).
|
|
30
|
+
*
|
|
31
|
+
* Every non-page path in the map is CONSUMER-RELATIVE (`src/`), so the string
|
|
32
|
+
* `--list` prints is the string `omega customize <path>` takes and the place
|
|
33
|
+
* the copy lands.
|
|
34
|
+
*/
|
|
35
|
+
const fs = require('node:fs');
|
|
36
|
+
const path = require('node:path');
|
|
37
|
+
const { collectProviders, resolveThemeLayers } = require('./layers.js');
|
|
38
|
+
const { listCustomizable } = require('./customize.js');
|
|
39
|
+
const { PATHS } = require('./paths.js');
|
|
40
|
+
|
|
41
|
+
// The one css lane the sass build RESOLVES by layer (assets.js).
|
|
42
|
+
const CSS_MAIN = /^main\.scss$/;
|
|
43
|
+
// Section entries are folders of these four files.
|
|
44
|
+
const SECTION_ENTRY = /^(?:.*\/)?(section|component)\.(html|scss|js|json5)$/;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The ordered layer roots per lane, labelled by owning layer.
|
|
48
|
+
* @param {object} options
|
|
49
|
+
* @param {string} options.consumerDir - the consumer's src dir
|
|
50
|
+
* @param {object} [options.siteData] - resolved config (theme.id names the active theme)
|
|
51
|
+
* @returns {Array<{ kind: string, subdirs: string[], prefix: string, roots: Array<{dir: string, layer: string}>, filter: RegExp|undefined }>}
|
|
52
|
+
*/
|
|
53
|
+
function overrideLanes({ consumerDir, siteData }) {
|
|
54
|
+
const themeRoots = resolveThemeLayers({
|
|
55
|
+
activeTheme: siteData?.theme?.id,
|
|
56
|
+
consumerDir,
|
|
57
|
+
themesDir: PATHS.themes,
|
|
58
|
+
}).map((dir) => ({ dir, layer: `theme:${path.basename(dir)}` }));
|
|
59
|
+
|
|
60
|
+
const consumer = { dir: consumerDir, layer: 'consumer' };
|
|
61
|
+
const consumerAssets = { dir: path.join(consumerDir, 'assets'), layer: 'consumer' };
|
|
62
|
+
const core = { dir: PATHS.core, layer: 'framework' };
|
|
63
|
+
|
|
64
|
+
return [
|
|
65
|
+
{ kind: 'section', subdirs: ['_sections', '_components'], prefix: '', roots: [consumer, ...themeRoots], filter: SECTION_ENTRY },
|
|
66
|
+
{ kind: 'include', subdirs: ['_includes'], prefix: '', roots: [consumer, ...themeRoots, core], filter: undefined },
|
|
67
|
+
// main.scss layers across the whole chain — the one sheet a consumer copy
|
|
68
|
+
// takes over rather than joins
|
|
69
|
+
{ kind: 'css', subdirs: ['css'], prefix: 'assets/', roots: [consumerAssets, ...themeRoots, core], filter: CSS_MAIN },
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Every shadowable file, with its owning layer and whether the consumer
|
|
75
|
+
* already shadows it.
|
|
76
|
+
* @param {object} options
|
|
77
|
+
* @param {string} options.consumerDir - the consumer's src dir
|
|
78
|
+
* @param {object} [options.siteData]
|
|
79
|
+
* @returns {Array<object>} entries — { kind, path, layer, shadowed, source, shadows, target }
|
|
80
|
+
*/
|
|
81
|
+
function buildOverrideMap({ consumerDir, siteData }) {
|
|
82
|
+
const entries = [];
|
|
83
|
+
|
|
84
|
+
for (const lane of overrideLanes({ consumerDir, siteData })) {
|
|
85
|
+
const layerOf = new Map();
|
|
86
|
+
for (const root of lane.roots) {
|
|
87
|
+
for (const subdir of lane.subdirs) layerOf.set(path.join(root.dir, subdir), root.layer);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
for (const subdir of lane.subdirs) {
|
|
91
|
+
const dirs = lane.roots.map((root) => path.join(root.dir, subdir));
|
|
92
|
+
|
|
93
|
+
for (const [rel, providers] of collectProviders(dirs, lane.filter)) {
|
|
94
|
+
const stack = providers.map(({ dir, file }) => ({ layer: layerOf.get(dir), file }));
|
|
95
|
+
const shadowPath = `${lane.prefix}${path.join(subdir, rel)}`;
|
|
96
|
+
const framework = stack.find((provider) => provider.layer !== 'consumer') || null;
|
|
97
|
+
|
|
98
|
+
entries.push({
|
|
99
|
+
kind: lane.kind,
|
|
100
|
+
path: shadowPath,
|
|
101
|
+
layer: stack[0].layer,
|
|
102
|
+
shadowed: stack[0].layer === 'consumer',
|
|
103
|
+
// What a materialize would copy: the file the consumer would shadow
|
|
104
|
+
source: framework && framework.file,
|
|
105
|
+
shadows: stack.slice(1).map((provider) => provider.layer),
|
|
106
|
+
target: path.join(consumerDir, shadowPath),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Pages keep their own lane — URL-addressable, two materialize modes
|
|
113
|
+
for (const page of listCustomizable({ consumerDir, siteData })) {
|
|
114
|
+
entries.push({
|
|
115
|
+
kind: 'page',
|
|
116
|
+
path: page.url,
|
|
117
|
+
layer: page.owned ? 'consumer' : 'framework',
|
|
118
|
+
shadowed: Boolean(page.owned),
|
|
119
|
+
lane: page.lane,
|
|
120
|
+
source: null,
|
|
121
|
+
shadows: [],
|
|
122
|
+
target: page.owned || null,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return entries.sort((a, b) => a.kind.localeCompare(b.kind) || a.path.localeCompare(b.path));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The provenance header for a materialized file, in the file's own comment
|
|
131
|
+
* syntax. JSON carries no comments, so it gets none.
|
|
132
|
+
* The first line opens with the `omega:consumer-override:` marker on purpose
|
|
133
|
+
* ([#452](https://github.com/Omega-JS-Stack/omega/issues/452)): a materialize
|
|
134
|
+
* IS the deliberate consumer copy, so the omega:guard hook — which reads the
|
|
135
|
+
* first five lines — has to see it declared without anybody typing it back in.
|
|
136
|
+
* @param {object} entry - a map entry
|
|
137
|
+
* @param {string[]} [notes] - extra lines
|
|
138
|
+
* @returns {string} the header (empty when the format has no comment form)
|
|
139
|
+
*/
|
|
140
|
+
function provenanceHeader(entry, notes = []) {
|
|
141
|
+
const lines = [
|
|
142
|
+
`omega:consumer-override: materialized by omega customize ${entry.path} — a copy of the ${entry.layer} layer's file.`,
|
|
143
|
+
'This consumer file now SHADOWS it. Delete it to return to the framework\'s.',
|
|
144
|
+
...notes,
|
|
145
|
+
];
|
|
146
|
+
const extension = path.extname(entry.path);
|
|
147
|
+
|
|
148
|
+
if (['.html', '.liquid', '.md'].includes(extension)) {
|
|
149
|
+
return `{% comment %}\n${lines.map((line) => ` ${line}`).join('\n')}\n{% endcomment %}\n`;
|
|
150
|
+
}
|
|
151
|
+
if (['.scss', '.css', '.js', '.json5'].includes(extension)) {
|
|
152
|
+
return `${lines.map((line) => `// ${line}`).join('\n')}\n`;
|
|
153
|
+
}
|
|
154
|
+
return '';
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Materialize ONE shadowable file into the consumer tree. Idempotent: an
|
|
159
|
+
* existing consumer file is never overwritten — the caller is told it exists.
|
|
160
|
+
* @param {object} options
|
|
161
|
+
* @param {string} options.path - a map path (`_includes/…`, `assets/css/…`)
|
|
162
|
+
* @param {string} options.consumerDir
|
|
163
|
+
* @param {object} [options.siteData]
|
|
164
|
+
* @returns {object} { status: 'created'|'exists'|'unknown', ... }
|
|
165
|
+
*/
|
|
166
|
+
function materializeOverride({ path: shadowPath, consumerDir, siteData }) {
|
|
167
|
+
const wanted = String(shadowPath || '').trim().replace(/^\.?\//, '');
|
|
168
|
+
const map = buildOverrideMap({ consumerDir, siteData });
|
|
169
|
+
const entry = map.find((candidate) => candidate.kind !== 'page' && candidate.path === wanted);
|
|
170
|
+
|
|
171
|
+
if (!entry) return { status: 'unknown', path: wanted, known: map.filter((c) => c.kind !== 'page').map((c) => c.path) };
|
|
172
|
+
if (entry.shadowed || fs.existsSync(entry.target)) return { ...entry, status: 'exists' };
|
|
173
|
+
|
|
174
|
+
// Sections resolve per entry: shadowing an asset lane alone changes nothing
|
|
175
|
+
// unless the winning section.html moves too (or declares inherit).
|
|
176
|
+
const notes = entry.kind === 'section' && !/\.html$/.test(entry.path)
|
|
177
|
+
? [
|
|
178
|
+
'Sections resolve per ENTRY: the layer owning section.html wins the whole',
|
|
179
|
+
'folder. Shadow the entry\'s .html too, or declare `inherit` in its json5.',
|
|
180
|
+
]
|
|
181
|
+
: [];
|
|
182
|
+
|
|
183
|
+
const header = provenanceHeader(entry, notes);
|
|
184
|
+
fs.mkdirSync(path.dirname(entry.target), { recursive: true });
|
|
185
|
+
fs.writeFileSync(entry.target, header + fs.readFileSync(entry.source, 'utf8'));
|
|
186
|
+
|
|
187
|
+
return { ...entry, status: 'created', headed: Boolean(header) };
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
module.exports = { buildOverrideMap, materializeOverride, overrideLanes };
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base-path support (#355) — the build-time half of serving a site under a URL
|
|
3
|
+
* PATH instead of a domain root (`https://<user>.github.io/<repo>/`, the
|
|
4
|
+
* GitHub Pages project-site case). Every URL the build writes is root-relative,
|
|
5
|
+
* so a site mounted under a path asks the DOMAIN root for its assets and 404s.
|
|
6
|
+
*
|
|
7
|
+
* The base path is a PUBLISHER input, never an end-user one: whatever machinery
|
|
8
|
+
* publishes the site knows its mount point (workkit's publish reads it off the
|
|
9
|
+
* Pages API) and exports `OMEGA_PATH_PREFIX` around `omega build`. Hosts that
|
|
10
|
+
* serve at the domain root (Netlify, Vercel, a custom domain) pass nothing.
|
|
11
|
+
*
|
|
12
|
+
* Three emit lanes carry it, one mechanism each:
|
|
13
|
+
* HTML - the `omega-path-prefix` Eleventy transform (src/engine.js), which
|
|
14
|
+
* rewrites the URL attributes of a rendered page and stamps the value
|
|
15
|
+
* on <html> for the browser half. The asset MANIFEST stays
|
|
16
|
+
* root-relative on purpose: it is an internal index, and the transform
|
|
17
|
+
* is the ONE place its URLs become markup — prefixing both would
|
|
18
|
+
* mount them twice.
|
|
19
|
+
* CSS - the emit step in src/assets.js (theme sheets carry
|
|
20
|
+
* `url(/assets/fonts/…)`, which no HTML pass can reach).
|
|
21
|
+
* JS - core/js/libs/path-prefix.js, the browser helper that reads the
|
|
22
|
+
* stamp; nothing is baked into a bundle.
|
|
23
|
+
*
|
|
24
|
+
* An unset (or `/`) prefix is a no-op everywhere — the transform is not even
|
|
25
|
+
* registered — so today's output is unchanged byte for byte.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
const { mapSrcset } = require('./srcset.js');
|
|
29
|
+
|
|
30
|
+
// The attributes a browser resolves as a URL. The lookbehind keeps `data-src`,
|
|
31
|
+
// `data-srcset` and friends out of scope (same guard cachebreak-html.js uses):
|
|
32
|
+
// those are runtime-consumed values, and the browser half mounts them itself.
|
|
33
|
+
const URL_ATTR_PATTERN = /(?<![-\w])(href|src|srcset|action)=(?:"([^"]*)"|'([^']*)')/gi;
|
|
34
|
+
|
|
35
|
+
// A url() target in emitted CSS, with or without quotes.
|
|
36
|
+
const CSS_URL_PATTERN = /url\(\s*(?:"([^"]*)"|'([^']*)'|([^'")]*))\s*\)/gi;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Normalize a publisher-supplied base path. External input, so it is treated
|
|
40
|
+
* defensively: leading slash ensured, trailing slashes stripped, inner doubles
|
|
41
|
+
* collapsed. `/` (and anything empty) means "serves at the domain root" and
|
|
42
|
+
* normalizes to '' — the no-op every lane tests for.
|
|
43
|
+
* @param {string|undefined|null} value - e.g. process.env.OMEGA_PATH_PREFIX
|
|
44
|
+
* @returns {string} '' (no prefix) or a normalized '/base' with no trailing slash
|
|
45
|
+
*/
|
|
46
|
+
function resolvePathPrefix(value) {
|
|
47
|
+
const trimmed = String(value == null ? '' : value).trim();
|
|
48
|
+
const prefix = `/${trimmed}`.replace(/\/{2,}/g, '/').replace(/\/+$/, '');
|
|
49
|
+
|
|
50
|
+
return prefix === '/' ? '' : prefix;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Mount one URL under the base path. Only ROOT-RELATIVE URLs move: absolute
|
|
55
|
+
* and protocol-relative URLs belong to another origin, and bare-relative ones
|
|
56
|
+
* (and anchors, mailto:, data: …) already resolve against the mounted page.
|
|
57
|
+
* @param {string} url
|
|
58
|
+
* @param {string} prefix - resolvePathPrefix output
|
|
59
|
+
* @returns {string}
|
|
60
|
+
*/
|
|
61
|
+
function prefixUrl(url, prefix) {
|
|
62
|
+
if (!prefix) return url;
|
|
63
|
+
|
|
64
|
+
const value = String(url);
|
|
65
|
+
if (!value.startsWith('/') || value.startsWith('//')) return value;
|
|
66
|
+
|
|
67
|
+
return `${prefix}${value}`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The inverse of prefixUrl: the SITE-relative path of an already mounted URL.
|
|
72
|
+
* Post-build passes that reason about routes (the translation pass composes
|
|
73
|
+
* prefix-then-lang, #359) need the route the build knows, not the mounted one.
|
|
74
|
+
* A path that does not carry the prefix is returned as it came.
|
|
75
|
+
* @param {string} pathname - a root-relative path
|
|
76
|
+
* @param {string} prefix - resolvePathPrefix output
|
|
77
|
+
* @returns {string}
|
|
78
|
+
*/
|
|
79
|
+
function stripPathPrefix(pathname, prefix) {
|
|
80
|
+
const value = String(pathname);
|
|
81
|
+
if (!prefix || !(value === prefix || value.startsWith(`${prefix}/`))) return value;
|
|
82
|
+
|
|
83
|
+
return value.slice(prefix.length) || '/';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* The base path a built page carries. prefixHtml stamps the mount point on
|
|
88
|
+
* <html> for the browser half, and that stamp is equally the record a
|
|
89
|
+
* post-build pass reads instead of re-plumbing the publisher's value.
|
|
90
|
+
* @param {string} html - a built page
|
|
91
|
+
* @returns {string} resolvePathPrefix output ('' when the page is unmounted)
|
|
92
|
+
*/
|
|
93
|
+
function readPathPrefixStamp(html) {
|
|
94
|
+
const match = /<html\b[^>]*\bdata-omega-path-prefix="([^"]*)"/i.exec(String(html));
|
|
95
|
+
|
|
96
|
+
return resolvePathPrefix(match ? match[1] : '');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The base path a whole BUILD carries, off the stamp `prefixHtml` leaves on
|
|
101
|
+
* <html> — one answer for the post-build passes that read a dist page by page
|
|
102
|
+
* (the #468 audit, the #430 link check). '' (an unmounted site) is what most
|
|
103
|
+
* builds answer, and the first stamped page settles it: one build, one mount.
|
|
104
|
+
* @param {Iterable<string>} pages - the built pages' HTML
|
|
105
|
+
* @returns {string} resolvePathPrefix output
|
|
106
|
+
*/
|
|
107
|
+
function readBuildPathPrefix(pages) {
|
|
108
|
+
for (const html of pages) {
|
|
109
|
+
const stamp = readPathPrefixStamp(html);
|
|
110
|
+
if (stamp) return stamp;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return '';
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Rewrite a rendered page for a mounted site: every root-relative URL
|
|
118
|
+
* attribute moves under the base path, and <html> carries the value so the
|
|
119
|
+
* browser half (core/js/libs/path-prefix.js) can build URLs too.
|
|
120
|
+
* @param {string} html - rendered page
|
|
121
|
+
* @param {string} prefix - resolvePathPrefix output ('' → the page is returned as-is)
|
|
122
|
+
* @returns {string}
|
|
123
|
+
*/
|
|
124
|
+
function prefixHtml(html, prefix) {
|
|
125
|
+
if (!prefix) return html;
|
|
126
|
+
|
|
127
|
+
const mounted = String(html).replace(
|
|
128
|
+
URL_ATTR_PATTERN,
|
|
129
|
+
(attr, name, doubleQuoted, singleQuoted) => {
|
|
130
|
+
const value = doubleQuoted !== undefined ? doubleQuoted : singleQuoted;
|
|
131
|
+
const quote = doubleQuoted !== undefined ? '"' : "'";
|
|
132
|
+
const next = name.toLowerCase() === 'srcset'
|
|
133
|
+
? mapSrcset(value, (url) => prefixUrl(url, prefix))
|
|
134
|
+
: prefixUrl(value, prefix);
|
|
135
|
+
|
|
136
|
+
return `${name}=${quote}${next}${quote}`;
|
|
137
|
+
},
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
// Stamped AFTER the rewrite, so the value itself can never be mounted twice.
|
|
141
|
+
return mounted.replace(/<html\b/i, `<html data-omega-path-prefix="${prefix}"`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Rewrite an emitted stylesheet for a mounted site — the @font-face and
|
|
146
|
+
* background url() targets theme sheets write root-relative.
|
|
147
|
+
* @param {string} css - compiled stylesheet
|
|
148
|
+
* @param {string} prefix - resolvePathPrefix output ('' → the sheet is returned as-is)
|
|
149
|
+
* @returns {string}
|
|
150
|
+
*/
|
|
151
|
+
function prefixCss(css, prefix) {
|
|
152
|
+
if (!prefix) return css;
|
|
153
|
+
|
|
154
|
+
return String(css).replace(
|
|
155
|
+
CSS_URL_PATTERN,
|
|
156
|
+
(match, doubleQuoted, singleQuoted, bare) => {
|
|
157
|
+
const value = doubleQuoted ?? singleQuoted ?? bare;
|
|
158
|
+
const next = prefixUrl(value, prefix);
|
|
159
|
+
if (next === value) return match;
|
|
160
|
+
|
|
161
|
+
const quote = doubleQuoted !== undefined ? '"' : (singleQuoted !== undefined ? "'" : '');
|
|
162
|
+
return `url(${quote}${next}${quote})`;
|
|
163
|
+
},
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
module.exports = { resolvePathPrefix, prefixUrl, stripPathPrefix, readPathPrefixStamp, readBuildPathPrefix, prefixHtml, prefixCss };
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Packaged framework content locations — the theme layers, core assets
|
|
3
|
+
* (icons/logos/css/js), default pages, and the default-page translations that
|
|
4
|
+
* ship WITH @omega.js/web.
|
|
5
|
+
* Engine and build entry points default to these; tests and harnesses may
|
|
6
|
+
* override per call.
|
|
7
|
+
*/
|
|
8
|
+
const path = require('node:path');
|
|
9
|
+
|
|
10
|
+
const PKG = path.resolve(__dirname, '..');
|
|
11
|
+
|
|
12
|
+
const PATHS = {
|
|
13
|
+
themes: path.join(PKG, 'themes'),
|
|
14
|
+
core: path.join(PKG, 'core'),
|
|
15
|
+
defaults: path.join(PKG, 'defaults'),
|
|
16
|
+
scaffold: path.join(PKG, 'scaffold'),
|
|
17
|
+
runtime: path.join(PKG, 'runtime'),
|
|
18
|
+
// The default-page translations the framework ships (#621) — the cache
|
|
19
|
+
// src/translate/packaged-defaults.js reads and generate-defaults.js writes.
|
|
20
|
+
translations: path.join(PKG, 'translations'),
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the @omega.js/client entry (the `@omega.js/client` esbuild alias target).
|
|
25
|
+
* In the monorepo this resolves the workspace package; published tarballs
|
|
26
|
+
* carry a vendored copy (publish wiring is a later gated step).
|
|
27
|
+
* @returns {string} absolute path to the client entry module
|
|
28
|
+
*/
|
|
29
|
+
function resolveClientEntry() {
|
|
30
|
+
try {
|
|
31
|
+
return require.resolve('@omega.js/client');
|
|
32
|
+
} catch (error) {
|
|
33
|
+
throw new Error('Could not resolve the @omega.js/client client package — reinstall @omega.js/web (npm install) and retry');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = { PATHS, resolveClientEntry };
|