@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,291 @@
|
|
|
1
|
+
# Translation
|
|
2
|
+
|
|
3
|
+
AI translation for OMEGA consumers — one engine, config-driven, with a
|
|
4
|
+
**committed** per-string cache. Shipped cp96 (Ian directive 2026-07-11),
|
|
5
|
+
replacing both legacy systems: UJM's OpenAI-only gulp task with the
|
|
6
|
+
`cache-uj-translation` GitHub-branch cache, and BXM's Claude-only task with a
|
|
7
|
+
gitignored `.cache/` (which re-translated everything on any change and on
|
|
8
|
+
every fresh clone).
|
|
9
|
+
|
|
10
|
+
## Config (shared `translation` section of omega.json5)
|
|
11
|
+
|
|
12
|
+
```json5
|
|
13
|
+
translation: {
|
|
14
|
+
enabled: true, // optional master switch (default true)
|
|
15
|
+
default: 'en', // source language (default 'en')
|
|
16
|
+
languages: ['es', 'fr'],// target codes — EMPTY/ABSENT = translation off
|
|
17
|
+
providers: { claude: {} },// the engine is a KEY (#425): claude | chatgpt. Absent block = claude
|
|
18
|
+
model: null, // optional override for the chosen engine (claude → 'sonnet' alias, chatgpt → 'gpt-5.4-nano')
|
|
19
|
+
exclude: [], // web only: BRAND page routes/folders to skip (the framework's own default pages are already excluded — #605)
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Shared section (typically brand-level; `SHARED_SECTIONS` includes it, so
|
|
24
|
+
every target inherits it through the merge chain). Language codes
|
|
25
|
+
validate against the SSOT in `@omega.js/devkit/translate` (`LANGUAGE_NAMES`,
|
|
26
|
+
~32 codes) — an unknown code is a hard config error naming the supported set.
|
|
27
|
+
The same SSOT carries `LANGUAGE_LOCALES` + `ogLocale(code)`, the one code →
|
|
28
|
+
Open Graph `language_TERRITORY` map (`es` → `es_ES`).
|
|
29
|
+
|
|
30
|
+
## Providers
|
|
31
|
+
|
|
32
|
+
| Provider | Rides | Credentials |
|
|
33
|
+
|----------|-------|-------------|
|
|
34
|
+
| `claude` (default) | the locally-installed Claude Code via `@anthropic-ai/claude-agent-sdk` | **none** — local auth |
|
|
35
|
+
| `chatgpt` | OpenAI Responses API (native fetch) | `OPENAI_API_KEY` via the .env cascade |
|
|
36
|
+
|
|
37
|
+
The claude provider runs **hermetic** sessions: `settingSources: []` (no user
|
|
38
|
+
CLAUDE.md/hooks — they pollute mechanical output; a stop-hook reply actually
|
|
39
|
+
leaked into a canary before this was locked down), a custom translator system
|
|
40
|
+
prompt instead of the CLI persona, and NO `maxTurns` cap (a plain reply
|
|
41
|
+
already counts as the final turn — `maxTurns: 1` reports `error_max_turns`
|
|
42
|
+
even though the text arrived).
|
|
43
|
+
|
|
44
|
+
**Enabling translation on web means installing the SDK (#37).** `@omega.js/web`
|
|
45
|
+
does NOT ship `@anthropic-ai/claude-agent-sdk`: translation is opt-in and the
|
|
46
|
+
SDK is heavy, so a web brand that turns it on installs it in the target itself
|
|
47
|
+
(`npm install @anthropic-ai/claude-agent-sdk`); `@omega.js/extension` still
|
|
48
|
+
declares it. The SDK is lazy-required at the first claude call, so a brand
|
|
49
|
+
without translation never pays for it, and a brand that enabled translation
|
|
50
|
+
without the SDK gets a hard error naming the package and that install command,
|
|
51
|
+
never a silent skip. The `chatgpt` provider needs no SDK at all (native fetch
|
|
52
|
+
plus `OPENAI_API_KEY`).
|
|
53
|
+
|
|
54
|
+
**The manage cycle provisions it (#168).** Nobody types that install in a
|
|
55
|
+
managed brand: the manager's workspace service reconciles it like every other
|
|
56
|
+
brand file. A web app whose RESOLVED config translates with the `claude`
|
|
57
|
+
provider gets `@anthropic-ai/claude-agent-sdk` written into its package.json
|
|
58
|
+
`dependencies` (at the range `@omega.js/web` declares as its optional peer,
|
|
59
|
+
read from the installed web package), followed by one `npm install` at the
|
|
60
|
+
brand root. Converge-to-config, so: already declared (in `dependencies` or
|
|
61
|
+
`devDependencies`) = zero-mutation no-op that never overwrites a
|
|
62
|
+
consumer-chosen spec, `--dry-run` plans without writing, translation off or
|
|
63
|
+
provider `chatgpt` leaves the target untouched, and turning translation back OFF
|
|
64
|
+
never REMOVES the dep (uninstalling on a config flip is riskier than leaving
|
|
65
|
+
it). Only web targets are provisioned, since backend and extension declare the
|
|
66
|
+
SDK as a real dependency of the framework. The loud error above stays the backstop
|
|
67
|
+
for hand-managed brands (`packages/manager/src/services/workspace/ensure/translation-sdk.js`,
|
|
68
|
+
pinned by `packages/manager/test/workspace-translation-sdk.test.js`).
|
|
69
|
+
|
|
70
|
+
## Engine protocol (`@omega.js/devkit/translate`)
|
|
71
|
+
|
|
72
|
+
`translateStrings({ strings, language, languageName, brand, extraRules, send })`
|
|
73
|
+
→ positionally-aligned translations:
|
|
74
|
+
|
|
75
|
+
- **JSON array in → same-length JSON array out**, batches of 25.
|
|
76
|
+
- **Batches fly concurrently**, `CONCURRENCY` wide (the constant at the top of
|
|
77
|
+
`packages/devkit/src/translate/engine.js`, currently 5 —
|
|
78
|
+
[#604](https://github.com/Omega-JS-Stack/omega/issues/604)). A batch is one
|
|
79
|
+
model call and the model's latency dominates it, so a serial pass paid that
|
|
80
|
+
latency once per 25 strings and one language took minutes it never needed.
|
|
81
|
+
Results are stitched back in BATCH order, never completion order, and
|
|
82
|
+
everything below still happens per batch, unchanged. Raise it only as far as
|
|
83
|
+
the providers' rate limits allow.
|
|
84
|
+
- **Duplicates are deduped before batching** ([#529](https://github.com/Omega-JS-Stack/omega/issues/529)):
|
|
85
|
+
a page sends its title and description once per meta tag (`<title>`,
|
|
86
|
+
`og:title`, `twitter:title`), so the same string used to ride a batch three
|
|
87
|
+
times over — three times the AI spend, and adjacent twins are what a model
|
|
88
|
+
merges. Each unique string is translated ONCE and the translation is fanned
|
|
89
|
+
back to every occurrence. Occurrences key on the exact source string,
|
|
90
|
+
whitespace included, so a batch is 25 UNIQUE strings.
|
|
91
|
+
- The `OMEGA-TRANSLATION-CONTROL` sentinel is appended to EVERY batch and must
|
|
92
|
+
return unchanged at its exact position — alignment proof per batch.
|
|
93
|
+
- Validation failures (parse, length, sentinel) retry up to 2× then throw.
|
|
94
|
+
- An ALIGNMENT failure (length or sentinel) that survives the retries splits the
|
|
95
|
+
batch in half and re-asks each half, down to one string
|
|
96
|
+
([#523](https://github.com/Omega-JS-Stack/omega/issues/523)): a model that
|
|
97
|
+
merges a pair of strings does it every time, so retrying the same array can
|
|
98
|
+
only fail the same way — the playground's ship-the-docs page came back
|
|
99
|
+
25-for-26 on all six attempts, in both languages, and shipped untranslated.
|
|
100
|
+
A single string that still will not come back whole throws, and the caller
|
|
101
|
+
skips that page-language pair whole (never half-translated).
|
|
102
|
+
- Original leading/trailing whitespace is re-applied to every translation.
|
|
103
|
+
- Rules baked into the system prompt: preserve HTML/URLs/placeholders
|
|
104
|
+
(`$1`, `{name}`, `{{ value }}`), never translate the brand name.
|
|
105
|
+
|
|
106
|
+
## The committed cache (`<app>/translations/`)
|
|
107
|
+
|
|
108
|
+
`translations/{lang}/{namespace}.json` maps `sha256(source)[:12]` → translated
|
|
109
|
+
string. Committed to git — that's the whole point:
|
|
110
|
+
|
|
111
|
+
- **Incremental**: editing one source string changes one hash → exactly one
|
|
112
|
+
re-translation. Everything else is a cache hit (zero provider calls).
|
|
113
|
+
- **Survives clones/CI**: a warm cache builds a fully-translated site with NO
|
|
114
|
+
AI credentials (kills the BXM parked finding where fresh clones burned live
|
|
115
|
+
Claude calls).
|
|
116
|
+
- **Human-overridable**: hand-edit a translation VALUE in the cache file and
|
|
117
|
+
it sticks for as long as the source is unchanged (the value is the
|
|
118
|
+
translation; the key only changes when the SOURCE changes).
|
|
119
|
+
- Maps are pruned to the current source set on save — no stale entries.
|
|
120
|
+
|
|
121
|
+
`@omega.js/web` ships a second cache in exactly this shape for its OWN default
|
|
122
|
+
pages, inside the package ([below](#framework-shipped-default-page-translations-621)).
|
|
123
|
+
|
|
124
|
+
## Web (`@omega.js/web`)
|
|
125
|
+
|
|
126
|
+
`omega build` translates everything by default (Ian's #24 final call): warm
|
|
127
|
+
strings come from the committed cache instantly, cold strings translate live
|
|
128
|
+
through the provider — a build ships the COMPLETE translated site whenever
|
|
129
|
+
the provider delivers, and a warm cache means zero provider calls. A provider
|
|
130
|
+
FAILURE skips that page-language pair whole, warning loudly with the page and
|
|
131
|
+
the language (the build still exits 0): no half-translated copy ever ships
|
|
132
|
+
behind full language chrome.
|
|
133
|
+
`omega build --cached-only` skips cold page-language pairs WHOLE instead (no
|
|
134
|
+
mixed-language copies, hreflang stays honest; the warning lists them) for
|
|
135
|
+
provider-free builds.
|
|
136
|
+
`omega translate` still runs the live pass standalone against an existing
|
|
137
|
+
dist/ and exits 1 on failures. `OMEGA_TRANSLATE_ONLY=<route>` limits any of
|
|
138
|
+
these to one page (canary/debug).
|
|
139
|
+
|
|
140
|
+
Per page × language: text nodes/`<title>`/meta/attribute copy translate
|
|
141
|
+
(cache-first), then the copy lands at `dist/{lang}/...` with `<html lang dir>`
|
|
142
|
+
(RTL-aware), canonical + `og:url` + `og:locale` localized, internal links
|
|
143
|
+
rewritten to `/{lang}/...`, and hreflang + `og:locale:alternate` tags
|
|
144
|
+
stitched into BOTH the copy and the original — naming only the languages
|
|
145
|
+
actually PRODUCED for that page (a pair skipped cold or failed is never
|
|
146
|
+
advertised, on the copies as on the originals), so hreflang never lies.
|
|
147
|
+
`og:locale` carries Open Graph's `language_TERRITORY` form (`en_US`,
|
|
148
|
+
`es_ES`) from the devkit language SSOT's locale map — on translated copies
|
|
149
|
+
and on the source pages the head include renders. Cache namespace:
|
|
150
|
+
`pages/{route}` (`pages/home` for `/`).
|
|
151
|
+
|
|
152
|
+
On a site served under a base path ([#355](https://github.com/Omega-JS-Stack/omega/issues/355)),
|
|
153
|
+
link rewriting composes **prefix, then language**: the pass reads the mount
|
|
154
|
+
point off the `<html data-omega-path-prefix>` stamp the build wrote (so
|
|
155
|
+
`omega translate` standalone sees it too), takes the route from underneath it,
|
|
156
|
+
and mounts the language segment after it — `/workkit/es/pricing`, never
|
|
157
|
+
`/es/workkit/pricing` ([#359](https://github.com/Omega-JS-Stack/omega/issues/359)).
|
|
158
|
+
Exclusions are matched on that same underneath-the-prefix route. ABSOLUTE URLs
|
|
159
|
+
(canonical, `og:url`, hreflang alternates, the sitemap entries) are built from
|
|
160
|
+
`brand.url`, which for a mounted site already carries the path — nothing
|
|
161
|
+
prefixes them twice.
|
|
162
|
+
|
|
163
|
+
Never sent to the PROVIDER, and the framework owns the list
|
|
164
|
+
([#605](https://github.com/Omega-JS-Stack/omega/issues/605)): every one of its
|
|
165
|
+
OWN default pages whose layout says it is plumbing rather than marketing copy —
|
|
166
|
+
the auth flows, the `/app` shell, the account/payment/portal screens, the legal
|
|
167
|
+
boilerplate, `404`, and the redirect stubs (`/login`, `/account`, `/cancel`, …).
|
|
168
|
+
Those pages still get their `/{lang}/` copies — from the translations PACKAGED
|
|
169
|
+
with `@omega.js/web`, at no cost to the brand (next section).
|
|
170
|
+
The list is DERIVED from the packaged defaults tree
|
|
171
|
+
(`packages/web/defaults/pages/**`, read by `src/translate/default-routes.js`),
|
|
172
|
+
never typed out, so a default page that moves or arrives cannot drift out of it,
|
|
173
|
+
and each excluded route guards its subtree too. On top of that: socials
|
|
174
|
+
redirects (config `socials` keys), the `admin`/`test`/`team`/`updates` folders,
|
|
175
|
+
every known language-code folder, plus config `translation.exclude` — which is
|
|
176
|
+
for the BRAND's own pages, and only those. A brand that lists `signin` or
|
|
177
|
+
`account` is listing something the framework already skips.
|
|
178
|
+
Element opt-out: `data-omega-no-translate`. Collector fixes vs UJM:
|
|
179
|
+
`aria-describedby`/`aria-labelledby` are NOT collected (ID refs), `value`
|
|
180
|
+
only on button-type inputs (hidden-input tokens stay intact).
|
|
181
|
+
|
|
182
|
+
### Framework-shipped default-page translations ([#621](https://github.com/Omega-JS-Stack/omega/issues/621))
|
|
183
|
+
|
|
184
|
+
The default pages above render the SAME chrome on every brand, so the framework
|
|
185
|
+
translates them ONCE and ships the result: `packages/web/translations/{lang}/pages/{route}.json`,
|
|
186
|
+
the identical `{lang}/{namespace}.json` shape as a consumer's own cache (same
|
|
187
|
+
loader, same `sha256(source)[:12]` keys, same prune-on-save, hand-fixable the
|
|
188
|
+
same way), committed to the package and published under `files`.
|
|
189
|
+
|
|
190
|
+
The keys are brand-NEUTRAL. The generator renders with a fixture brand and
|
|
191
|
+
replaces every occurrence of it with the sentinel `__OMEGA_BRAND__` before
|
|
192
|
+
hashing; the read-through replaces the CONSUMER's `brand.name` with the same
|
|
193
|
+
token before the lookup and puts it back on the way out, so "Sign in to MiniCo"
|
|
194
|
+
and "Sign in to Acme" are one packaged entry (`src/translate/packaged-defaults.js`).
|
|
195
|
+
|
|
196
|
+
Consumer side, on every pass — `omega build`, `--cached-only`, `omega translate`
|
|
197
|
+
alike, since it never touches a provider:
|
|
198
|
+
|
|
199
|
+
- Each default route gets its `dist/{lang}/…` copy with the same localized
|
|
200
|
+
chrome, hreflang and sitemap entry as any other page. Link rewriting is the
|
|
201
|
+
same pass too, which means links OUT to brand pages gain the language segment
|
|
202
|
+
while links between two default routes (signin → signup) do not — those routes
|
|
203
|
+
are excluded from rewriting, and that is unchanged from #605.
|
|
204
|
+
- A string the package does not carry (copy the brand overrode, a page the
|
|
205
|
+
framework has not regenerated for) stays in the source language and is
|
|
206
|
+
COUNTED — one log line per route names the miss count. Never guessed at.
|
|
207
|
+
- A brand whose NAME is a word the chrome itself uses ("Sign") still gets every
|
|
208
|
+
string that does not interpolate the brand — the lookup falls back to the raw
|
|
209
|
+
key when the sentinel-normalized one misses. The strings that DO interpolate
|
|
210
|
+
it (`Sign in to Sign`) miss, and stay in the source language.
|
|
211
|
+
- A route the package carries nothing for gets NO copy, so hreflang keeps
|
|
212
|
+
telling the truth. That is how the legal boilerplate stays one language:
|
|
213
|
+
`terms`/`privacy`/`cookies` are deliberately not generated.
|
|
214
|
+
- A configured language the package does not ship is one log line for the whole
|
|
215
|
+
run, not an error — those routes stay in the source language.
|
|
216
|
+
- A route the brand named in `translation.exclude` is left alone entirely.
|
|
217
|
+
|
|
218
|
+
**Shipped set: `es`, `fa`.** Regenerating, or extending the set, is one command
|
|
219
|
+
in `packages/web` (the ONLY place the framework's own pages ever reach a
|
|
220
|
+
provider):
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
npm run translate:defaults # the shipped set
|
|
224
|
+
npm run translate:defaults -- --languages es,fa,de # …plus a new one
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
It renders the defaults tree through the real production build against a
|
|
228
|
+
throwaway consumer (no brand repo involved), harvests with the same collector
|
|
229
|
+
the pass uses, translates ONLY the strings the packaged cache is missing —
|
|
230
|
+
across all routes at once, so the header/footer chrome every default page
|
|
231
|
+
repeats is paid for exactly once — and writes the files back. Idempotent: a
|
|
232
|
+
re-run costs nothing, adding a language costs only that language. A provider
|
|
233
|
+
failure, or a translation that dropped the sentinel, STOPS the run and writes
|
|
234
|
+
nothing.
|
|
235
|
+
|
|
236
|
+
`dist/sitemap.xml` (emitted by the build in the source language only) is
|
|
237
|
+
rewritten afterwards so it tells the same story: every PRODUCED copy joins it
|
|
238
|
+
as its own `<url>`, and each entry of a translated set — source and copies
|
|
239
|
+
alike — carries the full `xhtml:link rel="alternate"` list (`x-default` at the
|
|
240
|
+
source language) plus the source entry's `lastmod`/`changefreq`/`priority`.
|
|
241
|
+
Entries stay in loc byte order. The language-prefixed entries are owned by that
|
|
242
|
+
pass: each run drops them all and re-emits only what it produced, so a skipped
|
|
243
|
+
or failed pair is listed nowhere.
|
|
244
|
+
|
|
245
|
+
The visitor-facing **language switcher** is the footer dropup in the shared
|
|
246
|
+
base footer include (`_includes/frontend/sections/footer.html`, the base layer
|
|
247
|
+
every theme inherits). It renders CLIENT-SIDE from the page's own
|
|
248
|
+
`link[rel="alternate"][hreflang]` tags — the produced-only SSOT above — so the
|
|
249
|
+
menu can never offer a copy that was not written: `core/js/core/language-switcher.js`
|
|
250
|
+
drops `x-default`, labels each row with its native name (`Intl.DisplayNames` in
|
|
251
|
+
that language's own locale, upper-cased code as the fallback), marks
|
|
252
|
+
`documentElement.lang` as current, and leaves the mount empty and hidden when
|
|
253
|
+
fewer than two languages exist. Selecting a language is a plain link to that
|
|
254
|
+
alternate's href — never a redirect or a negotiation.
|
|
255
|
+
|
|
256
|
+
Not here yet: no default homepage exists in the D8 set, so brand sites
|
|
257
|
+
translate their own `index` when they add one.
|
|
258
|
+
|
|
259
|
+
## Extension (`@omega.js/extension`)
|
|
260
|
+
|
|
261
|
+
Build-mode gulp `translate` task (setup/dev builds only deploy):
|
|
262
|
+
|
|
263
|
+
- **messages**: per-KEY incremental — unique `message` values without a cache
|
|
264
|
+
entry translate (CWS limits ride the prompt as extra rules; violations warn
|
|
265
|
+
with the file path to shorten). `dist/_locales/{lang}/messages.json` is
|
|
266
|
+
COMPOSED from the EN source + cache (English fallback per missing key, so
|
|
267
|
+
the file is always complete; developer `description` fields stay English).
|
|
268
|
+
- **description**: whole-document per language →
|
|
269
|
+
`translations/{lang}/description.md`, first line
|
|
270
|
+
`<!-- omega:source <hash> -->` (stripped on read; source edit →
|
|
271
|
+
re-translate). The package task ships them as store assets
|
|
272
|
+
(`packaged/assets/description/{lang}.md`).
|
|
273
|
+
|
|
274
|
+
Languages/provider come from resolved config — the old hardcoded 16-language
|
|
275
|
+
list in `gulp/config/locales.js` is gone (only the CWS `limits` remain there).
|
|
276
|
+
|
|
277
|
+
## Testing
|
|
278
|
+
|
|
279
|
+
- devkit `test/translate.test.js` — engine protocol, providers, cache,
|
|
280
|
+
language SSOT, settings reader (fake `send`).
|
|
281
|
+
- web `test/translate.test.js` — handcrafted dist through the real pipeline:
|
|
282
|
+
copies/chrome/links/exclusions/alternates/cache/override/only-filter, the
|
|
283
|
+
produced-languages-only alternates, and the loud failure skip.
|
|
284
|
+
- web `test/language-switcher.test.js` — the switcher's DOM read (x-default
|
|
285
|
+
dropped, duplicates collapsed, current marked, escaping) and the built footer
|
|
286
|
+
mount in classy and newsflash.
|
|
287
|
+
- extension `build/translate.test.js` — compose + description marker glue.
|
|
288
|
+
- Live canary (cp96, local Claude): omega-brand `/about` → es (102 strings,
|
|
289
|
+
rerun 0 calls) and the extension's 4 messages (2 unique) + 2,703-char
|
|
290
|
+
description → es, both idempotent; artifacts committed under each target's
|
|
291
|
+
`translations/`.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Dependency updates (`omega update`)
|
|
2
|
+
|
|
3
|
+
One shared implementation (`@omega.js/devkit/update`) behind every framework's `omega update` verb (aliases: `outdated`, `out` — npu's muscle memory), thin wiring in web/desktop/extension (router commands), backend (colon-style command class), and the manager (brand-root fan-out). Semantics mirror Ian's `npu out` (node-power-user): report first, apply deliberately, and never trust a brand-new release.
|
|
4
|
+
|
|
5
|
+
## The report (default — no flags)
|
|
6
|
+
|
|
7
|
+
For each dependency of the target's `package.json` (prod + dev, grouped):
|
|
8
|
+
|
|
9
|
+
| Column | Meaning |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Current | the base version in `package.json` (`^1.2.3` → `1.2.3`) |
|
|
12
|
+
| Installed | the physical `node_modules` copy (nearest, climbing — npm hoists in brand monorepos) |
|
|
13
|
+
| Wanted | highest published version satisfying the range (npm-outdated semantics) |
|
|
14
|
+
| Latest | the registry `dist-tags.latest` |
|
|
15
|
+
| Bump | `patch` / `minor` / `major` — Current → Latest classification |
|
|
16
|
+
| Released | Latest's publish date + age in days |
|
|
17
|
+
| Status | `QUARANTINED` when Latest is younger than `--min-age` days (default **7**) and not already installed |
|
|
18
|
+
|
|
19
|
+
Only rows needing attention print; a fully-current tree reports one line. Rows sort prod-first.
|
|
20
|
+
|
|
21
|
+
**Quarantine (supply-chain caution, npu's `--min-age` semantics):** a release published < 7 days ago may be a compromised publish — it is flagged and **excluded from `--apply`**. `--min-age N` changes the window; `--min-age 0` or `--force-fresh` disables it. Unpublished packages (the pre-publish `@omega.js/*` set) report `not on the registry (unpublished?)` instead of a version row.
|
|
22
|
+
|
|
23
|
+
**`file:`/`link:`/git specs are SKIPPED** with a dim note — they have no registry story. In the local era every brand's `@omega.js/*` dep is a `file:` spec, so the verb never touches the linked frameworks.
|
|
24
|
+
|
|
25
|
+
## Applying (`--apply`)
|
|
26
|
+
|
|
27
|
+
- Default tier is **non-breaking**: each dep rides to its highest same-major version (npu's minor tier) — quarantined targets are held and listed.
|
|
28
|
+
- **Majors are never auto-applied**: breaking jumps are listed as held; `--apply --major` opts in explicitly.
|
|
29
|
+
- Installs run through **`npu install`** when npu is on the machine (Socket supply-chain firewall); otherwise plain `npm install` with a loud warning. Dev deps install with `--save-dev` in their own pass.
|
|
30
|
+
|
|
31
|
+
## The @omega.js family is pinned, and `omega update` is its ONE mover ([#794](https://github.com/Omega-JS-Stack/omega/issues/794))
|
|
32
|
+
|
|
33
|
+
Every `@omega.js/*` spec the manager writes into a brand is an EXACT pin, never a
|
|
34
|
+
caret: `"@omega.js/manager": "0.1.0"` at the brand root, `"@omega.js/<framework>":
|
|
35
|
+
"0.1.0"` in each target, all at the manager's own version (the family ships
|
|
36
|
+
lockstep — [publishing.md](publishing.md)). A caret would let one target float
|
|
37
|
+
ahead alone on somebody's `npm update`, which is how a brand ends up serving two
|
|
38
|
+
copies of `@omega.js/client` and validating one omega.json5 with two validators.
|
|
39
|
+
|
|
40
|
+
Pinned, the only thing that moves a brand is `omega update --apply` at the brand
|
|
41
|
+
ROOT (a bare run reports and installs nothing), and it moves every target — and
|
|
42
|
+
the root's own manager pin — together. `--apply` installs an `@omega.js/*` dep with
|
|
43
|
+
`--save-exact`, in its own command per dep group, so the mover never un-pins
|
|
44
|
+
what it just moved (npm's default save-prefix would write `^<version>` back);
|
|
45
|
+
every other dependency keeps npm's default prefix, because the pin is the
|
|
46
|
+
FAMILY's rule and not a rule for the whole tree.
|
|
47
|
+
|
|
48
|
+
The manager's boot check enforces the other half: a brand whose installed
|
|
49
|
+
versions have drifted is refused before any service or dev leg runs
|
|
50
|
+
([../manager/brand.md](../manager/brand.md)). The local era is untouched — a
|
|
51
|
+
`file:` spec has no registry story, so the verb skips it and the boot check
|
|
52
|
+
exempts it. `omega i live` (the publish-day flip back off `file:` specs) writes
|
|
53
|
+
the same exact pin ([local-dev.md](local-dev.md) § API surface).
|
|
54
|
+
|
|
55
|
+
## Brand root
|
|
56
|
+
|
|
57
|
+
`omega update` at a brand root (manager) fans out over the brand's targets — cp251's deploy fan-out shape: same target discovery, same `--target=<target|dir>` picker ([#780](https://github.com/Omega-JS-Stack/omega/issues/780)), every other flag forwarded verbatim, each target answering through its own framework's `update` verb. Unlike deploy, targets are **independent**: one failing target never blocks the rest (any failure still exits 1). The brand-root shell `package.json` rides the walk as its LAST leg ([#794](https://github.com/Omega-JS-Stack/omega/issues/794)), scoped to the one `@omega.js/*` dependency it carries — `@omega.js/manager` — and run in-process through the same devkit implementation (there is no framework bin at the root to spawn; it would dispatch straight back into this command). A brand's own root tooling is never touched, and a picked run (`--target=`) skips the root, because the picker names targets. Without that leg a manager-behind brand could never heal itself: the boot check would refuse every verb, and the fix it names would move every target except the one that was wrong.
|
|
58
|
+
|
|
59
|
+
## Testing
|
|
60
|
+
|
|
61
|
+
Registry lookups, the clock, npu detection, and exec are all injectable — the devkit suite (`packages/devkit/test/update.test.js`) runs entirely offline against fixture packuments with a frozen clock; the manager fan-out test spawns fake framework bins; framework structure tests pin the wiring. The live path is the thin defaults (native `fetch` of the full packument — the abbreviated form carries no publish times).
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# @omega.js/template-kit — the omega_* template surface as plain JS
|
|
2
|
+
|
|
3
|
+
The complete filter/tag surface of jekyll-uj-powertools (READ-ONLY reference
|
|
4
|
+
repo), ported to engine-neutral JavaScript for the SSG bake-off and
|
|
5
|
+
`@omega.js/web`. Private workspace package (`packages/template-kit`), vendored
|
|
6
|
+
into frameworks at prepare time like the other shared packages.
|
|
7
|
+
|
|
8
|
+
**Names are `omega_*` (#44).** The Jekyll-era `uj_` spelling is retired with no
|
|
9
|
+
aliases: `{% uj_icon %}` is an undefined tag, `| uj_liquify` an undefined
|
|
10
|
+
filter, and `site.uj.*` is `site.omega.*`. A legacy consumer gets the rename
|
|
11
|
+
mechanically from `omega migrate`'s `legacy-prefix` rule; a shipped surface
|
|
12
|
+
that reintroduces one fails web's `test/legacy-prefixes.test.js` guard.
|
|
13
|
+
|
|
14
|
+
Two consumption paths (plan §4 A0):
|
|
15
|
+
- **Eleventy / any LiquidJS host**: `registerLiquid(engine, options)` — registers everything under the `omega_*` names (the Ruby's behavior, one spelling newer).
|
|
16
|
+
- **Astro / direct**: import the plain functions (`filters`, `TAGS`, `jekyllCompat`) and call them.
|
|
17
|
+
|
|
18
|
+
## Filters (from `lib/filters/main.rb`)
|
|
19
|
+
|
|
20
|
+
| Name (registered) | Kind | Notes |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `omega_strip_ads` | pure | strips `<ad-unit>` blocks + adunit includes |
|
|
23
|
+
| `omega_json_escape` | pure | JSON-escape, no surrounding quotes |
|
|
24
|
+
| `omega_random` | pure | `Math.floor(random * n)` |
|
|
25
|
+
| `omega_hash` | pure | **byte-parity with Ruby verified**: full 128-bit MD5 as BigInt, mod max (`'hello'→994@1000`, `'somiibo'→305@360`, checked against ruby 4.0.0) |
|
|
26
|
+
| `omega_title_case` | pure | Ruby per-word `capitalize` parity ("hello WORLD" → "Hello World") |
|
|
27
|
+
| `omega_jsonify` | pure | pretty JSON, configurable indent |
|
|
28
|
+
| `omega_append_param` | pure | `?`/`&`-aware query param append |
|
|
29
|
+
| `omega_cachebreak` | pure | appends `cb=<process-consistent ms timestamp>` |
|
|
30
|
+
| `omega_pluralize` | pure | singular only for exactly 1; default plural = singular+`s` |
|
|
31
|
+
| `omega_commaify` | pure | **deliberate divergence**: Ruby also groups decimal digits (`1234.5678`→`1,234.5,678`, a latent bug); ours commas the whole part only (`1,234.5678`) |
|
|
32
|
+
| `omega_increment_return` | context | per-render-context counter (WeakMap in the adapter) |
|
|
33
|
+
| `omega_liquify` | context | recursive Liquid render, max depth 10, no-change guard |
|
|
34
|
+
| `omega_content_format` | context | liquify + markdownify when `page.extension === '.md'` (markdown converter injected) |
|
|
35
|
+
|
|
36
|
+
## Tags (from `lib/tags/*.rb`) — registered names are EXACT, incl. the four unprefixed ones
|
|
37
|
+
|
|
38
|
+
| Name | Kind | Engine needs |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| `iftruthy` / `iffalsy` | block | — (nil/false/`''`/0 falsy, Ruby table) |
|
|
41
|
+
| `iffile` | block | `options.fileExists(path)` |
|
|
42
|
+
| `urlmatches` | inline | `page.url` (index.html-normalized comparison) |
|
|
43
|
+
| `omega_readtime` | inline | page content default; 269 wpm, min 1 |
|
|
44
|
+
| `omega_fake_comments` | inline | words % 13 |
|
|
45
|
+
| `omega_external` | inline | `site.url` |
|
|
46
|
+
| `omega_social` | inline | `page.resolved.socials.*` + SOCIAL_URLS data |
|
|
47
|
+
| `omega_language` | inline | LANGUAGES data (184 codes, machine-extracted from the Ruby) |
|
|
48
|
+
| `omega_translation_url` | inline | `site.translation` {default, languages, exclude} |
|
|
49
|
+
| `omega_logo` | inline | `options.logos.dir`; per-instance SVG id prefixing (url()/href/xlink:href refs rewritten) |
|
|
50
|
+
| `omega_image` | inline | pure HTML builder (picture + webp sources + lazy placeholders; `max_width`, `webp=false`, external `<img>`) |
|
|
51
|
+
| `omega_video` | inline | pure HTML builder (flag attrs, mime map, lazy sources) |
|
|
52
|
+
| `omega_member` | inline | `options.getCollection('team')` — docs `{ id, url, data }` |
|
|
53
|
+
| `omega_post` | inline | `options.getCollection/getCollectionNames` — id / substring / custom `post.id` matching across collections |
|
|
54
|
+
|
|
55
|
+
Port simplification: the Ruby `member`/`post` `image-tag` property re-parsed a
|
|
56
|
+
`{% omega_image %}` template string; the JS calls the shared `buildImageHtml()`
|
|
57
|
+
directly — same output, no re-parse.
|
|
58
|
+
|
|
59
|
+
Tag options (`src/variable-resolver.js`): a typed literal resolves TYPED —
|
|
60
|
+
`max_width=640` is the number 640 and `webp=false` the boolean ([#102](https://github.com/Omega-JS-Stack/omega/issues/102));
|
|
61
|
+
quote it (`max_width="640"`) to keep a string. A bare word keeps its literal
|
|
62
|
+
text unless the context has it (`class=card` works), a dotted path always
|
|
63
|
+
resolves, and a missing path yields `null` so a typo never renders its own
|
|
64
|
+
name into the page.
|
|
65
|
+
|
|
66
|
+
## Jekyll-style helper pack (`src/jekyll-compat.js`)
|
|
67
|
+
|
|
68
|
+
These are omega's own template helpers under the familiar Jekyll-style names —
|
|
69
|
+
the names are the authoring surface Ian writes in, and the contract is CORRECT
|
|
70
|
+
BEHAVIOR, not emulation of Jekyll internals. Where Jekyll's own semantics are
|
|
71
|
+
surprising, these do the sane thing and the tests pin it ([#102](https://github.com/Omega-JS-Stack/omega/issues/102)).
|
|
72
|
+
|
|
73
|
+
`slugify` is the ONE slugifier ([#488](https://github.com/Omega-JS-Stack/omega/issues/488)):
|
|
74
|
+
downcase, non-alphanumeric runs become `-`. It is what LINKS a taxonomy term
|
|
75
|
+
and what the term's page is GENERATED at (`src/collections.js`), so `A&R` is
|
|
76
|
+
`a-r` on both sides. Eleventy ships a universal `slugify` of its own (`&` →
|
|
77
|
+
"and") that used to shadow it in templates — `src/engine.js` claims the name
|
|
78
|
+
back through a plugin, because a term whose link and page disagree is a
|
|
79
|
+
guaranteed 404 the framework's own link check fails the build on.
|
|
80
|
+
|
|
81
|
+
Implemented: `slugify`, `date_to_xmlschema`, `date_to_rfc822`, `jsonify`,
|
|
82
|
+
`strip_html`, `markdownify`, `relative_url`, `absolute_url`,
|
|
83
|
+
`number_of_words`, `where_exp`, `group_by_exp` (`push` comes from LiquidJS).
|
|
84
|
+
The `*_exp` filters read the SIMPLE expression subset (`item.path <op>
|
|
85
|
+
literal`, contains, bare paths) — extend it when a site needs more.
|
|
86
|
+
`where_exp` keeps the items whose expression is truthy; `group_by_exp` buckets
|
|
87
|
+
by the expression's VALUE, one group per distinct value in first-seen order
|
|
88
|
+
(an absent value groups under `''`).
|
|
89
|
+
|
|
90
|
+
## Adapter contract (`registerLiquid(engine, options)`)
|
|
91
|
+
|
|
92
|
+
```js
|
|
93
|
+
registerLiquid(new Liquid({ jekyllInclude: true }), {
|
|
94
|
+
site, // the site.* global — pair with @omega.js/config's toSiteGlobal()
|
|
95
|
+
getCollection: (name) => docs, // docs: { id: '/team/x', url, data } (Jekyll doc parity)
|
|
96
|
+
getCollectionNames: () => [...],
|
|
97
|
+
fileExists: (path) => boolean,
|
|
98
|
+
markdown: (content) => html, // e.g. markdown-it render
|
|
99
|
+
icons: { fontAwesomeDirs, aliasFile, flagsDir, style },
|
|
100
|
+
logos: { dir },
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`site.*` comes from `@omega.js/config`'s **`toSiteGlobal(resolvedConfig)`**
|
|
105
|
+
(`packages/config/src/site-global.js`): identity mapping of the resolved
|
|
106
|
+
config (machinery keys `targets`/`enabled` stripped; `url` derived from
|
|
107
|
+
`brand.url` unless explicit; `baseurl` defaulted) — the site.* audit showed
|
|
108
|
+
the resolved omega.json5 shape IS the template shape. Engine-owned keys
|
|
109
|
+
(`site.posts`, `site.pages`, `site.data`, `site.time`) are the SSG's
|
|
110
|
+
responsibility. `site.collections` is not among them ([#207](https://github.com/Omega-JS-Stack/omega/issues/207)):
|
|
111
|
+
it carries the `targets.web.collections` DECLARATION through the identity
|
|
112
|
+
mapping, and the engine reads it to generate each declared collection's pages.
|
|
113
|
+
|
|
114
|
+
## What is deliberately NOT here
|
|
115
|
+
|
|
116
|
+
The Ruby plugin's generators/hooks (`inject-properties.rb` = `page.resolved`,
|
|
117
|
+
`blog-taxonomy.rb`, `dynamic-pages.rb`, `limit-collections.rb`,
|
|
118
|
+
`parallel-build.rb`, `markdown-images.rb`) are ENGINE features, not template
|
|
119
|
+
functions — each bake-off candidate maps them natively (Eleventy: data
|
|
120
|
+
cascade / eleventyComputed; Astro: helpers). Plan §4 A1.
|
|
121
|
+
|
|
122
|
+
## Usage numbers that set the porting priority (2026-07-06 audit)
|
|
123
|
+
|
|
124
|
+
UJM theme/blueprints: `uj_icon` 612 (retired — icons are native markup since [#619](https://github.com/Omega-JS-Stack/omega/issues/619)), `iftruthy` ~370, `omega_content_format` 97,
|
|
125
|
+
`iffalsy` 72, `omega_liquify` 71, `omega_member` 62, `omega_cachebreak` 34,
|
|
126
|
+
`omega_title_case` 27, `urlmatches` 19, `omega_commaify` 18, `omega_post` 17,
|
|
127
|
+
`omega_readtime` 15, everything else single digits. somiibo adds only
|
|
128
|
+
`uj_icon`/`omega_liquify`/`omega_content_format` + iftruthy/iffalsy/urlmatches.
|