@omega.js/extension 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (684) hide show
  1. package/LICENSE +98 -0
  2. package/README.md +194 -0
  3. package/bin/omega +2 -0
  4. package/bin/omega-extension +2 -0
  5. package/bin/omg +2 -0
  6. package/dist/assets/css/bundles/.gitkeep +0 -0
  7. package/dist/assets/css/components/content/index.scss +5 -0
  8. package/dist/assets/css/components/options/index.scss +9 -0
  9. package/dist/assets/css/components/pages/index.scss +5 -0
  10. package/dist/assets/css/components/popup/index.scss +9 -0
  11. package/dist/assets/css/core/_animations.scss +64 -0
  12. package/dist/assets/css/core/_fontawesome.scss +146 -0
  13. package/dist/assets/css/core/_initialize.scss +23 -0
  14. package/dist/assets/css/core/_utilities.scss +80 -0
  15. package/dist/assets/css/omega-extension.scss +43 -0
  16. package/dist/assets/css/shell/_index.scss +207 -0
  17. package/dist/assets/css/tokens/_index.scss +166 -0
  18. package/dist/assets/js/core/app-shell.js +136 -0
  19. package/dist/assets/js/libs/initialize-tooltips.js +31 -0
  20. package/dist/assets/js/libs/recaptcha.js +94 -0
  21. package/dist/assets/js/main.js +4 -0
  22. package/dist/assets/themes/_template/README.md +115 -0
  23. package/dist/assets/themes/_template/_config.scss +60 -0
  24. package/dist/assets/themes/_template/_theme.js +14 -0
  25. package/dist/assets/themes/_template/_theme.scss +28 -0
  26. package/dist/assets/themes/_template/css/base/_root.scss +19 -0
  27. package/dist/assets/themes/_template/css/components/_components.scss +23 -0
  28. package/dist/assets/themes/base/README.md +5 -0
  29. package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
  30. package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
  31. package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
  32. package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
  33. package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
  34. package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
  35. package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
  36. package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
  37. package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
  38. package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
  39. package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
  40. package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
  41. package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
  42. package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
  43. package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
  44. package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
  45. package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
  46. package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
  47. package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
  48. package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
  49. package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
  50. package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
  51. package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
  52. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
  53. package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
  54. package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
  55. package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
  56. package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
  57. package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
  58. package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
  59. package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
  60. package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
  61. package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
  62. package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
  63. package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
  64. package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
  65. package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
  66. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
  67. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
  68. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
  69. package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
  70. package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
  71. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
  72. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
  73. package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
  74. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
  75. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
  76. package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
  77. package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
  78. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
  79. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
  80. package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
  81. package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
  82. package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
  83. package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
  84. package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
  85. package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
  86. package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
  87. package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
  88. package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
  89. package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
  90. package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
  91. package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
  92. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
  93. package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
  94. package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
  95. package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
  96. package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
  97. package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
  98. package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
  99. package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
  100. package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
  101. package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
  102. package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
  103. package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
  104. package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
  105. package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
  106. package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
  107. package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
  108. package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
  109. package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
  110. package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
  111. package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
  112. package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
  113. package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
  114. package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
  115. package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
  116. package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
  117. package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
  118. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
  119. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
  120. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
  121. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
  122. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
  123. package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
  124. package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
  125. package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
  126. package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
  127. package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
  128. package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
  129. package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
  130. package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
  131. package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
  132. package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
  133. package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
  134. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
  135. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
  136. package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
  137. package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
  138. package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
  139. package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
  140. package/dist/assets/themes/base/_theme.js +13 -0
  141. package/dist/assets/themes/base/_theme.scss +4 -0
  142. package/dist/assets/themes/bootstrap/_theme.js +16 -0
  143. package/dist/assets/themes/bootstrap/_theme.scss +11 -0
  144. package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
  145. package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
  146. package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
  147. package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
  148. package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
  149. package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
  150. package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
  151. package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
  152. package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
  153. package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
  154. package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
  155. package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
  156. package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
  157. package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
  158. package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
  159. package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
  160. package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
  161. package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
  162. package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
  163. package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
  164. package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
  165. package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
  166. package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
  167. package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
  168. package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
  169. package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
  170. package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
  171. package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
  172. package/dist/assets/themes/bootstrap/overrides/_accordion.scss +21 -0
  173. package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
  174. package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
  175. package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
  176. package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
  177. package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
  178. package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
  179. package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
  180. package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
  181. package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
  182. package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
  183. package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
  184. package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
  185. package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
  186. package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
  187. package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
  188. package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
  189. package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
  190. package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
  191. package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
  192. package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
  193. package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
  194. package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
  195. package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
  196. package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
  197. package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
  198. package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
  199. package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
  200. package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
  201. package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
  202. package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
  203. package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
  204. package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
  205. package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
  206. package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
  207. package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
  208. package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
  209. package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
  210. package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
  211. package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
  212. package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
  213. package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
  214. package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
  215. package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
  216. package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
  217. package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
  218. package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
  219. package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
  220. package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
  221. package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
  222. package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
  223. package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
  224. package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
  225. package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
  226. package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
  227. package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
  228. package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
  229. package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
  230. package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
  231. package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
  232. package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
  233. package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
  234. package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
  235. package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
  236. package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
  237. package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
  238. package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  239. package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
  240. package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
  241. package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
  242. package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
  243. package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  244. package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  245. package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  246. package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
  247. package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
  248. package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
  249. package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
  250. package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
  251. package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  252. package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  253. package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
  254. package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
  255. package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
  256. package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
  257. package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  258. package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
  259. package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
  260. package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
  261. package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
  262. package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
  263. package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
  264. package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
  265. package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
  266. package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
  267. package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
  268. package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
  269. package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
  270. package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  271. package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
  272. package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
  273. package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  274. package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
  275. package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
  276. package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  277. package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  278. package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  279. package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
  280. package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
  281. package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  282. package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
  283. package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
  284. package/dist/assets/themes/classy/README.md +89 -0
  285. package/dist/assets/themes/classy/_config.scss +245 -0
  286. package/dist/assets/themes/classy/_theme.js +31 -0
  287. package/dist/assets/themes/classy/_theme.scss +57 -0
  288. package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
  289. package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
  290. package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
  291. package/dist/assets/themes/classy/css/base/_root.scss +113 -0
  292. package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
  293. package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
  294. package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
  295. package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
  296. package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
  297. package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
  298. package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
  299. package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
  300. package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
  301. package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
  302. package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
  303. package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
  304. package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
  305. package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
  306. package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
  307. package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
  308. package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
  309. package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
  310. package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
  311. package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
  312. package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
  313. package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
  314. package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
  315. package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
  316. package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
  317. package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
  318. package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
  319. package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
  320. package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
  321. package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
  322. package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
  323. package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
  324. package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
  325. package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
  326. package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
  327. package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
  328. package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
  329. package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
  330. package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
  331. package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
  332. package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
  333. package/dist/assets/themes/neobrutalism/README.md +118 -0
  334. package/dist/assets/themes/neobrutalism/_config.scss +139 -0
  335. package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
  336. package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
  337. package/dist/assets/themes/neobrutalism/_theme.js +24 -0
  338. package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
  339. package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
  340. package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
  341. package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
  342. package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
  343. package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
  344. package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
  345. package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
  346. package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
  347. package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
  348. package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
  349. package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
  350. package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
  351. package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
  352. package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
  353. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
  354. package/dist/assets/themes/newsflash/README.md +117 -0
  355. package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
  356. package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
  357. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
  358. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
  359. package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
  360. package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
  361. package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
  362. package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
  363. package/dist/assets/themes/newsflash/_config.scss +147 -0
  364. package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
  365. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
  366. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
  367. package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
  368. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
  369. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
  370. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
  371. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
  372. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
  373. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
  374. package/dist/assets/themes/newsflash/_theme.js +24 -0
  375. package/dist/assets/themes/newsflash/_theme.scss +70 -0
  376. package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
  377. package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
  378. package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
  379. package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
  380. package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
  381. package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
  382. package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
  383. package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
  384. package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
  385. package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
  386. package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
  387. package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
  388. package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
  389. package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
  390. package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
  391. package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
  392. package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
  393. package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
  394. package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
  395. package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
  396. package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
  397. package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
  398. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
  399. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
  400. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
  401. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
  402. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
  403. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
  404. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
  405. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
  406. package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
  407. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
  408. package/dist/background.js +684 -0
  409. package/dist/build.js +268 -0
  410. package/dist/cli-run.js +25 -0
  411. package/dist/cli.js +30 -0
  412. package/dist/commands/build.js +67 -0
  413. package/dist/commands/clean.js +29 -0
  414. package/dist/commands/deploy.js +97 -0
  415. package/dist/commands/install.js +58 -0
  416. package/dist/commands/lib/dependencies.js +33 -0
  417. package/dist/commands/lib/deploy-precheck.js +57 -0
  418. package/dist/commands/lib/ensure-target.js +151 -0
  419. package/dist/commands/lib/push-secrets.js +60 -0
  420. package/dist/commands/migrate.js +77 -0
  421. package/dist/commands/test.js +110 -0
  422. package/dist/commands/update.js +21 -0
  423. package/dist/commands/version.js +12 -0
  424. package/dist/config/manifest.json +117 -0
  425. package/dist/config/page-template.html +21 -0
  426. package/dist/content.js +37 -0
  427. package/dist/defaults/.github/workflows/publish.yml +86 -0
  428. package/dist/defaults/.nvmrc +1 -0
  429. package/dist/defaults/.vscode/settings.json +8 -0
  430. package/dist/defaults/AGENTS.md +113 -0
  431. package/dist/defaults/CHANGELOG.md +15 -0
  432. package/dist/defaults/CLAUDE.md +1 -0
  433. package/dist/defaults/_.gitignore +75 -0
  434. package/dist/defaults/config/description.md +46 -0
  435. package/dist/defaults/config/messages.json +20 -0
  436. package/dist/defaults/config/omega.json5 +64 -0
  437. package/dist/defaults/docs/README.md +17 -0
  438. package/dist/defaults/gulpfile.js +6 -0
  439. package/dist/defaults/hooks/build/post.js +8 -0
  440. package/dist/defaults/hooks/build/pre.js +8 -0
  441. package/dist/defaults/src/assets/css/bundles/.gitkeep +0 -0
  442. package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
  443. package/dist/defaults/src/assets/css/components/offscreen/index.scss +4 -0
  444. package/dist/defaults/src/assets/css/components/options/index.scss +14 -0
  445. package/dist/defaults/src/assets/css/components/pages/index.scss +10 -0
  446. package/dist/defaults/src/assets/css/components/popup/index.scss +10 -0
  447. package/dist/defaults/src/assets/css/components/sidepanel/index.scss +6 -0
  448. package/dist/defaults/src/assets/css/main.scss +32 -0
  449. package/dist/defaults/src/assets/images/.gitkeep +0 -0
  450. package/dist/defaults/src/assets/js/components/background/index.js +25 -0
  451. package/dist/defaults/src/assets/js/components/content/index.js +22 -0
  452. package/dist/defaults/src/assets/js/components/offscreen/index.js +25 -0
  453. package/dist/defaults/src/assets/js/components/options/index.js +22 -0
  454. package/dist/defaults/src/assets/js/components/pages/index.js +22 -0
  455. package/dist/defaults/src/assets/js/components/popup/index.js +22 -0
  456. package/dist/defaults/src/assets/js/components/sidepanel/index.js +20 -0
  457. package/dist/defaults/src/assets/vendor/.gitkeep +0 -0
  458. package/dist/defaults/src/manifest.json +131 -0
  459. package/dist/defaults/src/views/offscreen/index.html +3 -0
  460. package/dist/defaults/src/views/options/index.html +8 -0
  461. package/dist/defaults/src/views/pages/index.html +10 -0
  462. package/dist/defaults/src/views/popup/index.html +4 -0
  463. package/dist/defaults/src/views/sidepanel/index.html +4 -0
  464. package/dist/defaults/test/README.md +41 -0
  465. package/dist/defaults/test/_init.js +10 -0
  466. package/dist/defaults/test/boot/externally-connectable.test.js +28 -0
  467. package/dist/gulp/config/locales.js +12 -0
  468. package/dist/gulp/main.js +78 -0
  469. package/dist/gulp/tasks/_.js +18 -0
  470. package/dist/gulp/tasks/audit.js +222 -0
  471. package/dist/gulp/tasks/bundle.js +687 -0
  472. package/dist/gulp/tasks/defaults.js +281 -0
  473. package/dist/gulp/tasks/distribute.js +172 -0
  474. package/dist/gulp/tasks/fontawesome.js +25 -0
  475. package/dist/gulp/tasks/html.js +163 -0
  476. package/dist/gulp/tasks/icons.js +126 -0
  477. package/dist/gulp/tasks/package.js +742 -0
  478. package/dist/gulp/tasks/publish.js +417 -0
  479. package/dist/gulp/tasks/sass.js +252 -0
  480. package/dist/gulp/tasks/serve.js +103 -0
  481. package/dist/gulp/tasks/translate.js +252 -0
  482. package/dist/gulp/tasks/utils/build-json.js +43 -0
  483. package/dist/gulp/tasks/utils/template-transform.js +50 -0
  484. package/dist/gulp/templates/BUILD_INSTRUCTIONS.md +69 -0
  485. package/dist/index.js +46 -0
  486. package/dist/lib/affiliatizer.js +224 -0
  487. package/dist/lib/analytics.js +26 -0
  488. package/dist/lib/auth-helpers.js +213 -0
  489. package/dist/lib/extension.js +116 -0
  490. package/dist/lib/icons.js +36 -0
  491. package/dist/lib/logger-lite.js +35 -0
  492. package/dist/lib/logger.js +4 -0
  493. package/dist/lib/messaging.js +48 -0
  494. package/dist/lib/safe-install.js +4 -0
  495. package/dist/lib/theme.js +73 -0
  496. package/dist/lib/verts.js +68 -0
  497. package/dist/offscreen.js +31 -0
  498. package/dist/omega-bin.js +6 -0
  499. package/dist/options.js +80 -0
  500. package/dist/page.js +80 -0
  501. package/dist/popup.js +80 -0
  502. package/dist/sidepanel.js +80 -0
  503. package/dist/test/assert.js +4 -0
  504. package/dist/test/fixtures/consumer-extension/dist/background.js +23 -0
  505. package/dist/test/fixtures/consumer-extension/dist/manifest.json +20 -0
  506. package/dist/test/fixtures/consumer-extension/dist/options.html +10 -0
  507. package/dist/test/fixtures/consumer-extension/dist/popup.bundle.js +5 -0
  508. package/dist/test/fixtures/consumer-extension/dist/popup.html +12 -0
  509. package/dist/test/harness/extension/background.js +26 -0
  510. package/dist/test/harness/extension/manifest.json +27 -0
  511. package/dist/test/harness/extension/options.html +12 -0
  512. package/dist/test/harness/extension/popup.html +12 -0
  513. package/dist/test/harness/extension/sidepanel.html +12 -0
  514. package/dist/test/index.js +63 -0
  515. package/dist/test/runner.js +99 -0
  516. package/dist/test/runners/boot.js +221 -0
  517. package/dist/test/runners/chromium.js +391 -0
  518. package/dist/test/runners/helpers.js +24 -0
  519. package/dist/test/suites/background/messaging.test.js +44 -0
  520. package/dist/test/suites/background/storage.test.js +46 -0
  521. package/dist/test/suites/background/sw-context.test.js +49 -0
  522. package/dist/test/suites/boot/build-json-bake.test.js +80 -0
  523. package/dist/test/suites/boot/extension-loads.test.js +58 -0
  524. package/dist/test/suites/build/affiliatizer.test.js +64 -0
  525. package/dist/test/suites/build/app-launch.test.js +65 -0
  526. package/dist/test/suites/build/attach-log-file.test.js +99 -0
  527. package/dist/test/suites/build/auth-emulator-gate.test.js +118 -0
  528. package/dist/test/suites/build/auth-triggers.test.js +71 -0
  529. package/dist/test/suites/build/boot-discovery.test.js +134 -0
  530. package/dist/test/suites/build/boot-timeout.test.js +92 -0
  531. package/dist/test/suites/build/build-error-notification.test.js +122 -0
  532. package/dist/test/suites/build/build-json-bake.test.js +302 -0
  533. package/dist/test/suites/build/build-verb.test.js +138 -0
  534. package/dist/test/suites/build/bundle-targets.test.js +66 -0
  535. package/dist/test/suites/build/cache-warming.test.js +44 -0
  536. package/dist/test/suites/build/cli.test.js +150 -0
  537. package/dist/test/suites/build/default-boot-test.test.js +100 -0
  538. package/dist/test/suites/build/defaults-scaffold.test.js +287 -0
  539. package/dist/test/suites/build/deploy-dispatch.test.js +76 -0
  540. package/dist/test/suites/build/distribute-task.test.js +111 -0
  541. package/dist/test/suites/build/ensure-target.test.js +141 -0
  542. package/dist/test/suites/build/env-delivery.test.js +239 -0
  543. package/dist/test/suites/build/env-watch.test.js +86 -0
  544. package/dist/test/suites/build/expect.test.js +48 -0
  545. package/dist/test/suites/build/exports.test.js +53 -0
  546. package/dist/test/suites/build/extension-fallback.test.js +82 -0
  547. package/dist/test/suites/build/framework-deps.test.js +176 -0
  548. package/dist/test/suites/build/global-handlers.test.js +70 -0
  549. package/dist/test/suites/build/icon-sheet.test.js +74 -0
  550. package/dist/test/suites/build/logger-lite.test.js +61 -0
  551. package/dist/test/suites/build/manager.test.js +249 -0
  552. package/dist/test/suites/build/mode-helpers.test.js +136 -0
  553. package/dist/test/suites/build/omega-shell.test.js +103 -0
  554. package/dist/test/suites/build/omega-tokens.test.js +76 -0
  555. package/dist/test/suites/build/package-task.test.js +831 -0
  556. package/dist/test/suites/build/setup-scripts.test.js +172 -0
  557. package/dist/test/suites/build/strip-dev-blocks.test.js +122 -0
  558. package/dist/test/suites/build/template-replace.test.js +116 -0
  559. package/dist/test/suites/build/test-discovery.test.js +64 -0
  560. package/dist/test/suites/build/test-target-no-match.test.js +119 -0
  561. package/dist/test/suites/build/theme-resolve.test.js +115 -0
  562. package/dist/test/suites/build/translate.test.js +85 -0
  563. package/dist/test/suites/build/url-helpers.test.js +119 -0
  564. package/dist/test/suites/build/verb-logs.test.js +43 -0
  565. package/dist/test/suites/build/verts-binding.test.js +67 -0
  566. package/dist/test/suites/build/wakeup-ping.test.js +90 -0
  567. package/dist/test/suites/build/wave5-messenger.test.js +80 -0
  568. package/dist/test/suites/view/options-and-sidepanel.test.js +16 -0
  569. package/dist/test/suites/view/popup-context.test.js +53 -0
  570. package/dist/test/suites/view/sidepanel.test.js +16 -0
  571. package/dist/test/utils/extended-mode-warning.js +13 -0
  572. package/dist/utils/attach-log-file.js +4 -0
  573. package/dist/utils/mode-helpers.js +117 -0
  574. package/dist/utils/url-helpers.js +69 -0
  575. package/dist/vendor/account/engine.js +182 -0
  576. package/dist/vendor/account/features.js +220 -0
  577. package/dist/vendor/account/index.js +53 -0
  578. package/dist/vendor/account/schema.js +272 -0
  579. package/dist/vendor/account/subscription.js +38 -0
  580. package/dist/vendor/config/company.js +31 -0
  581. package/dist/vendor/config/defaults.js +173 -0
  582. package/dist/vendor/config/demo.js +18 -0
  583. package/dist/vendor/config/desktop-artifacts.js +110 -0
  584. package/dist/vendor/config/edit.js +769 -0
  585. package/dist/vendor/config/env-delivery.js +145 -0
  586. package/dist/vendor/config/env-rules.js +93 -0
  587. package/dist/vendor/config/env-schema.js +1078 -0
  588. package/dist/vendor/config/env.js +445 -0
  589. package/dist/vendor/config/hooks.js +97 -0
  590. package/dist/vendor/config/index.js +237 -0
  591. package/dist/vendor/config/instances.js +208 -0
  592. package/dist/vendor/config/load.js +490 -0
  593. package/dist/vendor/config/merge.js +68 -0
  594. package/dist/vendor/config/order.js +139 -0
  595. package/dist/vendor/config/ports.js +374 -0
  596. package/dist/vendor/config/providers.js +32 -0
  597. package/dist/vendor/config/repo.js +142 -0
  598. package/dist/vendor/config/retired-keys.js +430 -0
  599. package/dist/vendor/config/schema.js +1610 -0
  600. package/dist/vendor/config/secrets.js +50 -0
  601. package/dist/vendor/config/seed.js +34 -0
  602. package/dist/vendor/config/site-global.js +205 -0
  603. package/dist/vendor/config/validate.js +554 -0
  604. package/dist/vendor/config/winback.js +61 -0
  605. package/dist/vendor/devkit/actions-secrets.js +145 -0
  606. package/dist/vendor/devkit/attach-log-file.js +262 -0
  607. package/dist/vendor/devkit/bundle.js +292 -0
  608. package/dist/vendor/devkit/ci-workflows.js +520 -0
  609. package/dist/vendor/devkit/clean-dirs.js +28 -0
  610. package/dist/vendor/devkit/cli-router.js +156 -0
  611. package/dist/vendor/devkit/defaults-engine.js +372 -0
  612. package/dist/vendor/devkit/deploy-precheck.js +54 -0
  613. package/dist/vendor/devkit/deploy-record.js +180 -0
  614. package/dist/vendor/devkit/deploy.js +286 -0
  615. package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
  616. package/dist/vendor/devkit/env-watch.js +132 -0
  617. package/dist/vendor/devkit/framework-deps.js +46 -0
  618. package/dist/vendor/devkit/icons.js +178 -0
  619. package/dist/vendor/devkit/license.js +155 -0
  620. package/dist/vendor/devkit/local.js +1905 -0
  621. package/dist/vendor/devkit/logger.js +128 -0
  622. package/dist/vendor/devkit/merge-line-files.js +296 -0
  623. package/dist/vendor/devkit/npm-registry.js +52 -0
  624. package/dist/vendor/devkit/omega-bin.js +345 -0
  625. package/dist/vendor/devkit/safe-install.js +18 -0
  626. package/dist/vendor/devkit/scaffold-guard.js +96 -0
  627. package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
  628. package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
  629. package/dist/vendor/devkit/target-dependencies.js +137 -0
  630. package/dist/vendor/devkit/target-secrets.js +165 -0
  631. package/dist/vendor/devkit/test/assert.js +120 -0
  632. package/dist/vendor/devkit/test/define-cases.js +104 -0
  633. package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
  634. package/dist/vendor/devkit/test/runner-core.js +554 -0
  635. package/dist/vendor/devkit/test/scope.js +162 -0
  636. package/dist/vendor/devkit/translate/cache.js +84 -0
  637. package/dist/vendor/devkit/translate/engine.js +243 -0
  638. package/dist/vendor/devkit/translate/index.js +49 -0
  639. package/dist/vendor/devkit/translate/languages.js +134 -0
  640. package/dist/vendor/devkit/translate/providers.js +188 -0
  641. package/dist/vendor/devkit/update.js +569 -0
  642. package/docs/affiliatizer.md +81 -0
  643. package/docs/audit.md +67 -0
  644. package/docs/auth.md +149 -0
  645. package/docs/build-system.md +176 -0
  646. package/docs/cdp-debugging.md +42 -0
  647. package/docs/cli.md +73 -0
  648. package/docs/common-mistakes.md +10 -0
  649. package/docs/components.md +87 -0
  650. package/docs/css.md +133 -0
  651. package/docs/defaults.md +72 -0
  652. package/docs/environment-detection.md +79 -0
  653. package/docs/extension.md +93 -0
  654. package/docs/hooks.md +111 -0
  655. package/docs/icons.md +47 -0
  656. package/docs/index.md +291 -0
  657. package/docs/logging.md +33 -0
  658. package/docs/managers.md +100 -0
  659. package/docs/offscreen.md +57 -0
  660. package/docs/publishing.md +182 -0
  661. package/docs/shared/agent-docs.md +89 -0
  662. package/docs/shared/analytics.md +612 -0
  663. package/docs/shared/brands.md +51 -0
  664. package/docs/shared/breaking-changes.md +497 -0
  665. package/docs/shared/config.md +1387 -0
  666. package/docs/shared/deploys.md +215 -0
  667. package/docs/shared/icons.md +201 -0
  668. package/docs/shared/local-dev.md +147 -0
  669. package/docs/shared/logging.md +202 -0
  670. package/docs/shared/monitoring.md +153 -0
  671. package/docs/shared/publishing.md +183 -0
  672. package/docs/shared/rulings.md +34 -0
  673. package/docs/shared/testing.md +147 -0
  674. package/docs/shared/theming.md +604 -0
  675. package/docs/shared/translation.md +291 -0
  676. package/docs/shared/updates.md +61 -0
  677. package/docs/templating.md +66 -0
  678. package/docs/test-boot-layer.md +143 -0
  679. package/docs/test-framework.md +411 -0
  680. package/docs/themes.md +89 -0
  681. package/docs/translations.md +73 -0
  682. package/docs/verts.md +67 -0
  683. package/docs/xss-prevention.md +95 -0
  684. package/package.json +159 -0
@@ -0,0 +1,417 @@
1
+ // Libraries
2
+ const Manager = new (require('../../build.js'));
3
+ const logger = Manager.logger('publish');
4
+ const chromeLogger = Manager.logger('publish:chrome');
5
+ const firefoxLogger = Manager.logger('publish:firefox');
6
+ const edgeLogger = Manager.logger('publish:edge');
7
+ const argv = Manager.getArguments();
8
+ const { series } = require('gulp');
9
+ const jetpack = require('fs-jetpack');
10
+ const path = require('path');
11
+ const { execute } = require('node-powertools');
12
+
13
+ // Load package
14
+ const project = Manager.getPackage('project');
15
+
16
+ // Helper to parse browser filter from --browser flag or OMEGA_BROWSER env var
17
+ // Returns array of browser names to publish to, or null for all
18
+ function getBrowserFilter() {
19
+ // Check env var first (works across npm && chains), then CLI arg
20
+ const browser = process.env.OMEGA_BROWSER || argv.browser;
21
+
22
+ // If true or undefined, publish to all
23
+ if (browser === true || browser === undefined) {
24
+ return null;
25
+ }
26
+
27
+ // If false, publish to none
28
+ if (browser === false) {
29
+ return [];
30
+ }
31
+
32
+ // If string, parse comma-separated list
33
+ if (typeof browser === 'string') {
34
+ return browser.split(',').map((b) => b.trim().toLowerCase());
35
+ }
36
+
37
+ return null;
38
+ }
39
+
40
+ // Paths for each target
41
+ const PATHS = {
42
+ chromium: {
43
+ zip: path.join(process.cwd(), 'packaged', 'chromium', 'extension.zip'),
44
+ raw: path.join(process.cwd(), 'packaged', 'chromium', 'raw'),
45
+ },
46
+ firefox: {
47
+ zip: path.join(process.cwd(), 'packaged', 'firefox', 'extension.zip'),
48
+ raw: path.join(process.cwd(), 'packaged', 'firefox', 'raw'),
49
+ },
50
+ opera: {
51
+ zip: path.join(process.cwd(), 'packaged', 'opera', 'extension.zip'),
52
+ raw: path.join(process.cwd(), 'packaged', 'opera', 'raw'),
53
+ },
54
+ };
55
+
56
+ // Helper to check if a credential is valid (not empty or placeholder)
57
+ function isValidCredential(value) {
58
+ return value && !value.startsWith('your-');
59
+ }
60
+
61
+ // Store configurations - all credentials come from .env file
62
+ const STORES = {
63
+ chrome: {
64
+ name: 'Chrome Web Store',
65
+ submitUrl: 'https://chrome.google.com/webstore/devconsole',
66
+ apiUrl: 'https://developer.chrome.com/docs/webstore/using_webstore_api/',
67
+ enabled: () => isValidCredential(process.env.CHROME_EXTENSION_ID) && isValidCredential(process.env.CHROME_CLIENT_ID),
68
+ },
69
+ firefox: {
70
+ name: 'Firefox Add-ons',
71
+ submitUrl: 'https://addons.mozilla.org/en-US/developers/addon/submit/distribution',
72
+ apiUrl: 'https://addons.mozilla.org/developers/addon/api/key/',
73
+ enabled: () => isValidCredential(process.env.FIREFOX_API_KEY) && isValidCredential(process.env.FIREFOX_API_SECRET),
74
+ },
75
+ edge: {
76
+ name: 'Microsoft Edge Add-ons',
77
+ submitUrl: 'https://partner.microsoft.com/dashboard/microsoftedge/',
78
+ apiUrl: 'https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api',
79
+ enabled: () => isValidCredential(process.env.EDGE_PRODUCT_ID) && isValidCredential(process.env.EDGE_CLIENT_ID),
80
+ },
81
+ opera: {
82
+ name: 'Opera Add-ons',
83
+ submitUrl: 'https://addons.opera.com/developer/',
84
+ apiUrl: null,
85
+ enabled: () => false, // No API available
86
+ },
87
+ brave: {
88
+ name: 'Brave (via Chrome Web Store)',
89
+ submitUrl: 'https://chrome.google.com/webstore/devconsole',
90
+ apiUrl: null,
91
+ enabled: () => false, // Uses Chrome Web Store - no separate store
92
+ note: 'Brave uses Chrome Web Store directly. Publishing to Chrome makes extension available in Brave.',
93
+ },
94
+ };
95
+
96
+ // Main publish task
97
+ async function publish(complete) {
98
+ // Check if publish mode is enabled
99
+ if (!process.env.OMEGA_IS_PUBLISH) {
100
+ logger.log('Skipping publish (OMEGA_IS_PUBLISH not set)');
101
+ return complete();
102
+ }
103
+
104
+ // Check for local packages
105
+ const allDeps = JSON.stringify(project.dependencies || {}) + JSON.stringify(project.devDependencies || {});
106
+ if (allDeps.includes('file:')) {
107
+ throw new Error('Please remove local packages before publishing!');
108
+ }
109
+
110
+ // Log
111
+ logger.log('Starting publish...');
112
+
113
+ // Check if zips exist for each target
114
+ const missingZips = Object.entries(PATHS)
115
+ .filter(([, paths]) => !jetpack.exists(paths.zip))
116
+ .map(([target]) => target);
117
+
118
+ if (missingZips.length > 0) {
119
+ logger.error(`Extension zips not found for: ${missingZips.join(', ')}. Run build first.`);
120
+ return complete();
121
+ }
122
+
123
+ // Log version
124
+ logger.log(`Publishing version ${project.version}`);
125
+
126
+ // Get browser filter from --browser flag
127
+ const browserFilter = getBrowserFilter();
128
+
129
+ // Log filter if applied
130
+ if (browserFilter) {
131
+ logger.log(`Browser filter: ${browserFilter.join(', ') || 'none'}`);
132
+ }
133
+
134
+ // Get enabled stores (filtered by --browser flag if provided)
135
+ const enabledStores = Object.entries(STORES)
136
+ .filter(([key, store]) => {
137
+ // Check if store is enabled via credentials
138
+ if (!store.enabled()) {
139
+ return false;
140
+ }
141
+
142
+ // If no filter, include all enabled stores
143
+ if (!browserFilter) {
144
+ return true;
145
+ }
146
+
147
+ // Check if this store is in the filter
148
+ return browserFilter.includes(key);
149
+ })
150
+ .map(([key]) => key);
151
+
152
+ // If no stores to publish to
153
+ if (enabledStores.length === 0) {
154
+ // Check if it's because of filter or missing credentials
155
+ if (browserFilter && browserFilter.length > 0) {
156
+ logger.error(`No matching stores for --browser=${browserFilter.join(',')}. Available: chrome, firefox, edge`);
157
+ } else {
158
+ logger.error('No stores configured for publishing. Add credentials to .env file');
159
+ logger.log('');
160
+ logger.log('Store URLs and API documentation:');
161
+ Object.entries(STORES).forEach(([, store]) => {
162
+ logger.log(` ${store.name}:`);
163
+ logger.log(` Submit: ${store.submitUrl}`);
164
+ if (store.apiUrl) {
165
+ logger.log(` API: ${store.apiUrl}`);
166
+ } else if (store.note) {
167
+ logger.log(` Note: ${store.note}`);
168
+ } else {
169
+ logger.log(` API: N/A (manual submission only)`);
170
+ }
171
+ });
172
+ }
173
+ throw new Error('No stores configured for publishing');
174
+ }
175
+
176
+ logger.log(`Publishing to: ${enabledStores.join(', ')}`);
177
+
178
+ // Track results
179
+ const results = {
180
+ success: [],
181
+ failed: [],
182
+ };
183
+
184
+ // Run publish tasks in parallel
185
+ const publishTasks = enabledStores.map(async (store) => {
186
+ try {
187
+ switch (store) {
188
+ case 'chrome':
189
+ await publishToChrome();
190
+ break;
191
+ case 'firefox':
192
+ await publishToFirefox();
193
+ break;
194
+ case 'edge':
195
+ await publishToEdge();
196
+ break;
197
+ }
198
+ logger.log(`[${store}] Published successfully`);
199
+ results.success.push(store);
200
+ } catch (e) {
201
+ logger.error(`[${store}] Publish failed: ${e.message}`);
202
+ results.failed.push(store);
203
+ }
204
+ });
205
+
206
+ await Promise.all(publishTasks);
207
+
208
+ // Log completion and show all store URLs
209
+ logger.log('');
210
+ logger.log('Store URLs:');
211
+ Object.entries(STORES).forEach(([key, store]) => {
212
+ let status = '○ Manual';
213
+ if (results.success.includes(key)) {
214
+ status = '✓ Published';
215
+ } else if (results.failed.includes(key)) {
216
+ status = '✗ Failed';
217
+ } else if (store.note) {
218
+ status = '○ ' + store.note.split('.')[0]; // First sentence of note
219
+ }
220
+ logger.log(` ${store.name}: ${status}`);
221
+ logger.log(` Submit: ${store.submitUrl}`);
222
+ if (store.apiUrl) {
223
+ logger.log(` API: ${store.apiUrl}`);
224
+ }
225
+ });
226
+
227
+ // Throw error if any failed
228
+ if (results.failed.length > 0) {
229
+ throw new Error(`Publish failed for: ${results.failed.join(', ')}`);
230
+ }
231
+
232
+ // Log
233
+ logger.log('');
234
+ logger.log('Publish finished!');
235
+
236
+ // Complete
237
+ return complete();
238
+ }
239
+
240
+ // Publish to Chrome Web Store
241
+ async function publishToChrome() {
242
+ // Get credentials from env
243
+ const extensionId = process.env.CHROME_EXTENSION_ID;
244
+ const clientId = process.env.CHROME_CLIENT_ID;
245
+ const clientSecret = process.env.CHROME_CLIENT_SECRET;
246
+ const refreshToken = process.env.CHROME_REFRESH_TOKEN;
247
+
248
+ // Validate
249
+ if (!extensionId || !clientId || !clientSecret || !refreshToken) {
250
+ throw new Error('Missing Chrome credentials. Set CHROME_EXTENSION_ID, CHROME_CLIENT_ID, CHROME_CLIENT_SECRET, CHROME_REFRESH_TOKEN in .env');
251
+ }
252
+
253
+ chromeLogger.log('Uploading to Chrome Web Store...');
254
+
255
+ // Use chrome-webstore-upload-cli with chromium build
256
+ const command = [
257
+ 'npx chrome-webstore-upload-cli',
258
+ `--source "${PATHS.chromium.zip}"`,
259
+ `--extension-id "${extensionId}"`,
260
+ `--client-id "${clientId}"`,
261
+ `--client-secret "${clientSecret}"`,
262
+ `--refresh-token "${refreshToken}"`,
263
+ ].join(' ');
264
+
265
+ await execute(command);
266
+
267
+ chromeLogger.log('Upload complete');
268
+ }
269
+
270
+ // Publish to Firefox Add-ons
271
+ async function publishToFirefox() {
272
+ // Get credentials from env
273
+ const extensionId = process.env.FIREFOX_EXTENSION_ID;
274
+ const apiKey = process.env.FIREFOX_API_KEY;
275
+ const apiSecret = process.env.FIREFOX_API_SECRET;
276
+ const channel = process.env.FIREFOX_CHANNEL || 'listed';
277
+
278
+ // Validate
279
+ if (!apiKey || !apiSecret) {
280
+ throw new Error('Missing Firefox credentials. Set FIREFOX_API_KEY, FIREFOX_API_SECRET in .env');
281
+ }
282
+
283
+ // Log what we're doing
284
+ if (extensionId) {
285
+ firefoxLogger.log(`Updating existing add-on: ${extensionId}`);
286
+ } else {
287
+ firefoxLogger.log('Creating new add-on (no FIREFOX_EXTENSION_ID set)');
288
+ firefoxLogger.log('After publish, add FIREFOX_EXTENSION_ID to .env for future updates');
289
+ }
290
+
291
+ // Use web-ext sign with firefox build
292
+ // --approval-timeout=0 to skip waiting for approval (can take minutes to hours)
293
+ // --artifacts-dir to prevent leaving web-ext-artifacts folder in project root
294
+ const artifactsDir = path.join(process.cwd(), '.temp', 'web-ext-artifacts');
295
+ const command = [
296
+ 'npx web-ext sign',
297
+ `--source-dir "${PATHS.firefox.raw}"`,
298
+ `--artifacts-dir "${artifactsDir}"`,
299
+ `--api-key "${apiKey}"`,
300
+ `--api-secret "${apiSecret}"`,
301
+ `--channel "${channel}"`,
302
+ '--approval-timeout 0', // Don't wait for approval - it can take hours
303
+ extensionId ? `--id "${extensionId}"` : '',
304
+ ].filter(Boolean).join(' ');
305
+
306
+ await execute(command);
307
+
308
+ // Clean up artifacts dir
309
+ jetpack.remove(artifactsDir);
310
+
311
+ firefoxLogger.log('Upload complete (approval may take time)');
312
+ }
313
+
314
+ // Publish to Microsoft Edge Add-ons
315
+ async function publishToEdge() {
316
+ // Get credentials from env
317
+ const productId = process.env.EDGE_PRODUCT_ID;
318
+ const clientId = process.env.EDGE_CLIENT_ID;
319
+ const apiKey = process.env.EDGE_API_KEY;
320
+
321
+ // Validate
322
+ if (!productId || !clientId || !apiKey) {
323
+ throw new Error('Missing Edge credentials. Set EDGE_PRODUCT_ID, EDGE_CLIENT_ID, EDGE_API_KEY in .env');
324
+ }
325
+
326
+ // Helper for Edge API requests
327
+ const edgeHeaders = {
328
+ 'Authorization': `ApiKey ${apiKey}`,
329
+ 'X-ClientID': clientId,
330
+ };
331
+
332
+ // Helper to parse Edge API response (handles empty bodies)
333
+ async function parseEdgeResponse(response, label) {
334
+ const text = await response.text();
335
+ edgeLogger.log(`${label} - Status: ${response.status}, Body: ${text || '(empty)'}`);
336
+
337
+ if (!text) {
338
+ return { status: response.status, data: null };
339
+ }
340
+
341
+ try {
342
+ return { status: response.status, data: JSON.parse(text) };
343
+ } catch (e) {
344
+ return { status: response.status, data: text };
345
+ }
346
+ }
347
+
348
+ // Step 1: Upload the package first
349
+ edgeLogger.log('Uploading to Microsoft Edge Add-ons...');
350
+
351
+ const zipBuffer = jetpack.read(PATHS.chromium.zip, 'buffer');
352
+ const uploadUrl = `https://api.addons.microsoftedge.microsoft.com/v1/products/${productId}/submissions/draft/package`;
353
+
354
+ const uploadResponse = await fetch(uploadUrl, {
355
+ method: 'POST',
356
+ headers: {
357
+ ...edgeHeaders,
358
+ 'Content-Type': 'application/zip',
359
+ },
360
+ body: zipBuffer,
361
+ });
362
+
363
+ const upload = await parseEdgeResponse(uploadResponse, 'Upload response');
364
+
365
+ if (!uploadResponse.ok) {
366
+ throw new Error(`Edge upload error: ${upload.status} - ${JSON.stringify(upload.data)}`);
367
+ }
368
+
369
+ edgeLogger.log('Package uploaded, submitting for review...');
370
+
371
+ // Step 2: Submit for review - this is where we'll get InProgressSubmission if there's a pending review
372
+ const publishUrl = `https://api.addons.microsoftedge.microsoft.com/v1/products/${productId}/submissions`;
373
+ const publishResponse = await fetch(publishUrl, {
374
+ method: 'POST',
375
+ headers: {
376
+ ...edgeHeaders,
377
+ 'Content-Type': 'application/json',
378
+ },
379
+ body: JSON.stringify({
380
+ notes: `Automated publish of version ${project.version}`,
381
+ }),
382
+ });
383
+
384
+ const publish = await parseEdgeResponse(publishResponse, 'Publish response');
385
+
386
+ // Check for HTTP errors (4xx, 5xx)
387
+ if (!publishResponse.ok) {
388
+ // Check if it's a 409 Conflict or similar indicating in-progress submission
389
+ if (publish.status === 409) {
390
+ throw new Error('Extension already has a pending submission in review. Wait for it to complete before publishing again.');
391
+ }
392
+ throw new Error(`Edge publish error: ${publish.status} - ${JSON.stringify(publish.data)}`);
393
+ }
394
+
395
+ // Check for API-level failures (HTTP 200/202 but status: "Failed" in body)
396
+ if (publish.data && typeof publish.data === 'object') {
397
+ if (publish.data.status === 'Failed') {
398
+ if (publish.data.errorCode === 'InProgressSubmission') {
399
+ throw new Error('Extension already has a pending submission in review. Wait for it to complete before publishing again.');
400
+ }
401
+ if (publish.data.errorCode === 'UnpublishInProgress') {
402
+ throw new Error('Extension is being unpublished. Wait for unpublish to complete before publishing.');
403
+ }
404
+ throw new Error(`Edge publish failed: ${publish.data.message || publish.data.errorCode || 'Unknown error'}`);
405
+ }
406
+ }
407
+
408
+ // HTTP 202 Accepted means submission was queued successfully
409
+ if (publish.status === 202) {
410
+ edgeLogger.log('Submission accepted and queued for review');
411
+ }
412
+
413
+ edgeLogger.log('Upload complete');
414
+ }
415
+
416
+ // Export task
417
+ module.exports = series(publish);
@@ -0,0 +1,252 @@
1
+ // Libraries
2
+ const Manager = new (require('../../build.js'));
3
+ const logger = Manager.logger('sass');
4
+ const watcherLogger = Manager.logger('sass:watcher');
5
+ const { src, dest, watch, series } = require('gulp');
6
+ const glob = require('glob').globSync;
7
+ const path = require('path');
8
+ const jetpack = require('fs-jetpack');
9
+ const compiler = require('gulp-sass')(require('sass'));
10
+ const cleanCSS = require('gulp-clean-css');
11
+ const rename = require('gulp-rename');
12
+ const filter = require('gulp-filter').default;
13
+ const { resolveThemeId } = require('../../lib/theme.js');
14
+
15
+ // Load package
16
+ const package = Manager.getPackage('main');
17
+ const project = Manager.getPackage('project');
18
+ const config = Manager.getConfig('project');
19
+ const rootPathPackage = Manager.getRootPath('main');
20
+ const rootPathProject = Manager.getRootPath('project');
21
+
22
+ // Themes are per-framework (#261) — a shared theme.id naming a WEB theme falls
23
+ // back to the extension's default instead of dying on a raw sass import error.
24
+ const themesDir = path.resolve(rootPathPackage, 'dist/assets/themes');
25
+ const themeId = resolveThemeId(config.theme?.id, { themesDir, logger });
26
+
27
+ // Define bundle files separately for easier tracking
28
+ const bundleFiles = [
29
+ // Main bundles (if any exist in bundles/ directory)
30
+ `${rootPathPackage}/dist/assets/css/bundles/*.scss`,
31
+
32
+ // Project bundles
33
+ 'src/assets/css/bundles/*.scss',
34
+ ];
35
+
36
+ // Glob
37
+ const input = [
38
+ // Bundle files (if any exist)
39
+ ...bundleFiles,
40
+
41
+ // Project entry point (main.scss)
42
+ 'src/assets/css/main.scss',
43
+
44
+ // Component-specific CSS
45
+ `${rootPathPackage}/dist/assets/css/components/**/*.scss`,
46
+ 'src/assets/css/components/**/*.scss',
47
+ ];
48
+
49
+ // Additional files to watch (but not compile as entry points)
50
+ const watchInput = [
51
+ // Watch the paths we're compiling
52
+ ...input,
53
+
54
+ // Core CSS - watch for changes but don't compile as entry points
55
+ `${rootPathPackage}/dist/assets/css/**/*.scss`,
56
+
57
+ // Theme CSS - watch for changes but don't compile as entry points
58
+ `${rootPathPackage}/dist/assets/themes/**/*.scss`,
59
+ 'src/assets/themes/**/*.scss',
60
+ ];
61
+
62
+ const output = 'dist/assets/css';
63
+ const delay = 250;
64
+ const compiled = {};
65
+
66
+ // Configuration
67
+ const MAIN_BUNDLE_COMPONENT_PARTIALS = false; // Set to true to merge components into _component-specific.scss, false to compile separately
68
+
69
+ // SASS Compilation Task
70
+ function sass(complete) {
71
+ // Log
72
+ logger.log('Starting...');
73
+ Manager.logMemory(logger, 'Start');
74
+
75
+ // Generate component-specific scss
76
+ generateComponentScss();
77
+
78
+ // Compile
79
+ const stream = src(input, { sourcemaps: true })
80
+ // Skip files based on configuration
81
+ .pipe(filter(file => !shouldSkip(file.path), { restore: true }))
82
+ // Compile SASS
83
+ .pipe(compiler({
84
+ loadPaths: [
85
+ // So we can use "@use 'omega-extension' as *;"
86
+ path.resolve(rootPathPackage, 'dist/assets/css'),
87
+
88
+ // So we can use "@use 'theme' as *;" which resolves to the active theme
89
+ path.resolve(themesDir, themeId),
90
+
91
+ // So we can load _component-specific.scss from the project's dist
92
+ path.resolve(rootPathProject, 'dist/assets/css'),
93
+
94
+ // Allow importing from node_modules (e.g., @import '@fortawesome/fontawesome-free/css/all.min.css')
95
+ path.resolve(rootPathProject, 'node_modules'),
96
+ ],
97
+ // Suppress deprecation warnings
98
+ quietDeps: true,
99
+ // Only show warnings once
100
+ verbose: false
101
+ })
102
+ .on('error', (error) => Manager.reportBuildError(Object.assign(error, { plugin: 'SASS' }), complete)));
103
+
104
+ // Process
105
+ return stream
106
+ .pipe(cleanCSS({
107
+ format: Manager.actLikeProduction() ? 'compressed' : 'beautify',
108
+ }))
109
+ .pipe(rename((file) => {
110
+ // Get list of expected bundle names from the bundle files glob
111
+ // These are files that should be in the root CSS directory
112
+ let bundleFilesFound = [];
113
+ try {
114
+ bundleFilesFound = glob(bundleFiles);
115
+ } catch (e) {
116
+ // Directory doesn't exist, that's ok
117
+ }
118
+ const bundleNames = bundleFilesFound.map(f => path.basename(f, '.scss'));
119
+ bundleNames.push('main'); // main.scss is always a root bundle
120
+
121
+ // Check if this is a root-level bundle
122
+ const baseName = file.basename;
123
+ const isBundle = bundleNames.includes(baseName);
124
+
125
+ // Check
126
+ if (isBundle) {
127
+ // Root-level bundles (main, or any future bundle in bundles/ directory)
128
+ // Keep in root directory
129
+ file.dirname = '.';
130
+ } else {
131
+ // Component files: special handling for pages vs other components
132
+ //
133
+ // ⚠️ CRITICAL: The 'pages' directory is treated differently!
134
+ //
135
+ // Pages directory can have MULTIPLE files (index, pricing, login, etc.)
136
+ // - pages/index.scss → components/pages/index.bundle.css ✓
137
+ // - pages/pricing.scss → components/pages/pricing.bundle.css ✓
138
+ // - pages/login.scss → components/pages/login.bundle.css ✓
139
+ //
140
+ // Other components only have ONE file (index.html), so we strip /index:
141
+ // - popup/index.scss → components/popup.bundle.css ✓
142
+ // - options/index.scss → components/options.bundle.css ✓
143
+ // - sidepanel/index.scss → components/sidepanel.bundle.css ✓
144
+ //
145
+ // ❌ DO NOT GENERATE: components/pages.bundle.css
146
+ // ✓ DO GENERATE: components/pages/index.bundle.css, components/pages/pricing.bundle.css, etc.
147
+
148
+ const isInPages = file.dirname.includes(`${path.sep}pages${path.sep}`)
149
+ || file.dirname.endsWith(`${path.sep}pages`)
150
+ || file.dirname === 'pages';
151
+
152
+ if (file.basename === 'index' && !isInPages) {
153
+ // For non-pages components: strip /index
154
+ // components/popup/index.scss -> components/popup.bundle.css
155
+ const parts = file.dirname.split(path.sep);
156
+ const parentDir = parts[parts.length - 1];
157
+ file.basename = parentDir;
158
+ parts.pop();
159
+ file.dirname = parts.join(path.sep);
160
+ }
161
+ // For pages or non-index files: keep full path
162
+ // components/pages/index.scss -> components/pages/index.bundle.css
163
+ // components/pages/pricing.scss -> components/pages/pricing.bundle.css
164
+
165
+ // Add components/ prefix if not already there
166
+ if (!file.dirname.startsWith('components/') && !file.dirname.startsWith('components\\')) {
167
+ file.dirname = `components/${file.dirname}`;
168
+ }
169
+ }
170
+
171
+ // Add bundle to the name
172
+ file.basename += '.bundle';
173
+
174
+ // Track the full output path
175
+ const fullPath = path.resolve(output, file.dirname, `${file.basename}${file.extname}`);
176
+ compiled[fullPath] = true;
177
+ }))
178
+ .pipe(dest(output, { sourcemaps: '.' }))
179
+ .on('finish', () => {
180
+ // Log
181
+ logger.log('Finished!');
182
+
183
+ // Trigger rebuild
184
+ Manager.triggerRebuild(compiled);
185
+
186
+ // Complete
187
+ return complete();
188
+ });
189
+ }
190
+
191
+ // Watcher Task
192
+ function sassWatcher(complete) {
193
+ // Quit if in build mode
194
+ if (Manager.isBuildMode()) {
195
+ watcherLogger.log('Skipping watcher in build mode');
196
+ return complete();
197
+ }
198
+
199
+ // Log
200
+ watcherLogger.log('Watching for changes...');
201
+
202
+ // Watch for changes
203
+ watch(watchInput, { delay: delay, dot: true }, sass)
204
+ .on('change', (path) => {
205
+ watcherLogger.log(`File changed (${path})`);
206
+ });
207
+
208
+ // Complete
209
+ return complete();
210
+ }
211
+
212
+ function generateComponentScss() {
213
+ // Only generate _component-specific.scss if we're skipping component partials
214
+ if (!MAIN_BUNDLE_COMPONENT_PARTIALS) {
215
+ // When compiling components separately, create an empty file with a comment
216
+ const outputPath = path.resolve(rootPathProject, 'dist/assets/css/_component-specific.scss');
217
+ const content = `/*
218
+ AUTO-GENERATED COMPONENT-SPECIFIC SCSS
219
+ Components are now compiled separately when MAIN_BUNDLE_COMPONENT_PARTIALS = false
220
+ Find compiled component CSS in dist/assets/css/components/
221
+ */
222
+
223
+ `;
224
+
225
+ jetpack.write(outputPath, content);
226
+ Manager.triggerRebuild(outputPath);
227
+ return;
228
+ }
229
+
230
+ // TODO: Implement merged component partials if needed in the future
231
+ // This would be similar to UJ's page-specific merging
232
+ logger.log('Merged component partials not yet implemented');
233
+ }
234
+
235
+ function isComponentPartial(file) {
236
+ return file.includes('/assets/css/components/') && file.endsWith('index.scss');
237
+ }
238
+
239
+ function shouldSkip(file) {
240
+ // Skip component partials only if MAIN_BUNDLE_COMPONENT_PARTIALS is true
241
+ if (MAIN_BUNDLE_COMPONENT_PARTIALS && isComponentPartial(file)) {
242
+ return true;
243
+ }
244
+ return false;
245
+ }
246
+
247
+ // Default Task
248
+ // Export
249
+ module.exports = series(
250
+ sass,
251
+ sassWatcher
252
+ );