@nordcraft/runtime 1.0.77 → 1.0.78

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 (236) hide show
  1. package/dist/custom-element.main.esm.js +40 -49
  2. package/dist/custom-element.main.esm.js.map +4 -4
  3. package/dist/happydom.js +3 -0
  4. package/dist/happydom.js.map +1 -0
  5. package/dist/page.main.esm.js +3 -3
  6. package/dist/page.main.esm.js.map +4 -4
  7. package/dist/src/api/apiUtils.js.map +1 -0
  8. package/dist/src/api/createAPI.js.map +1 -0
  9. package/dist/src/api/createAPIv2.js.map +1 -0
  10. package/dist/{components → src/components}/createComponent.js +11 -0
  11. package/dist/src/components/createComponent.js.map +1 -0
  12. package/dist/src/components/createElement.js.map +1 -0
  13. package/dist/src/components/createNode.js.map +1 -0
  14. package/dist/src/components/createSlot.js.map +1 -0
  15. package/dist/src/components/createText.js.map +1 -0
  16. package/dist/src/components/createText.test.js.map +1 -0
  17. package/dist/{components → src/components}/renderComponent.d.ts +4 -1
  18. package/dist/{components → src/components}/renderComponent.js +2 -1
  19. package/dist/src/components/renderComponent.js.map +1 -0
  20. package/dist/src/context/isContextProvider.js.map +1 -0
  21. package/dist/src/context/subscribeToContext.js.map +1 -0
  22. package/dist/src/custom-components/components.js.map +1 -0
  23. package/dist/src/custom-components/toddle-portal.js.map +1 -0
  24. package/dist/{custom-element → src/custom-element}/ToddleComponent.js +5 -0
  25. package/dist/src/custom-element/ToddleComponent.js.map +1 -0
  26. package/dist/src/custom-element/defineComponents.js.map +1 -0
  27. package/dist/src/custom-element.main.js.map +1 -0
  28. package/dist/src/debug/logState.js.map +1 -0
  29. package/dist/src/debug/panicScreen.js.map +1 -0
  30. package/dist/src/debug/sendEditorToast.js.map +1 -0
  31. package/dist/src/editor/drag-drop/dragEnded.js.map +1 -0
  32. package/dist/src/editor/drag-drop/dragMove.js.map +1 -0
  33. package/dist/src/editor/drag-drop/dragReorder.js.map +1 -0
  34. package/dist/src/editor/drag-drop/dragStarted.js.map +1 -0
  35. package/dist/src/editor/drag-drop/dropHighlight.js.map +1 -0
  36. package/dist/src/editor/drag-drop/getInsertAreas.js.map +1 -0
  37. package/dist/src/editor/graphql.js.map +1 -0
  38. package/dist/src/editor/input.js.map +1 -0
  39. package/dist/src/editor/links.js.map +1 -0
  40. package/dist/src/editor/overlay.js.map +1 -0
  41. package/dist/src/editor/types.js.map +1 -0
  42. package/dist/{editor-preview.main.js → src/editor-preview.main.js} +52 -7
  43. package/dist/src/editor-preview.main.js.map +1 -0
  44. package/dist/src/events/handleAction.js.map +1 -0
  45. package/dist/{page.main.js → src/page.main.js} +13 -0
  46. package/dist/src/page.main.js.map +1 -0
  47. package/dist/src/signal/signal.js.map +1 -0
  48. package/dist/src/styles/CustomPropertyStyleSheet.js.map +1 -0
  49. package/dist/src/styles/CustomPropertyStyleSheet.test.d.ts +1 -0
  50. package/dist/{styles → src/styles}/CustomPropertyStyleSheet.test.js +37 -0
  51. package/dist/src/styles/CustomPropertyStyleSheet.test.js.map +1 -0
  52. package/dist/{styles → src/styles}/style.js +2 -1
  53. package/dist/src/styles/style.js.map +1 -0
  54. package/dist/src/styles/style.test.js +179 -0
  55. package/dist/src/styles/style.test.js.map +1 -0
  56. package/dist/src/utils/BatchQueue.js.map +1 -0
  57. package/dist/src/utils/createFormulaCache.js.map +1 -0
  58. package/dist/src/utils/findNearestLine.js.map +1 -0
  59. package/dist/src/utils/findNearestLine.test.d.ts +1 -0
  60. package/dist/src/utils/findNearestLine.test.js.map +1 -0
  61. package/dist/src/utils/getDragData.js.map +1 -0
  62. package/dist/src/utils/getElementTagName.js.map +1 -0
  63. package/dist/src/utils/getThemeSignal.d.ts +4 -0
  64. package/dist/src/utils/getThemeSignal.js +51 -0
  65. package/dist/src/utils/getThemeSignal.js.map +1 -0
  66. package/dist/src/utils/isElementInViewport.js.map +1 -0
  67. package/dist/src/utils/nodes.js.map +1 -0
  68. package/dist/src/utils/omitStyle.js.map +1 -0
  69. package/dist/src/utils/rectHasPoint.js.map +1 -0
  70. package/dist/src/utils/setAttribute.js.map +1 -0
  71. package/dist/src/utils/storeScrollState.js.map +1 -0
  72. package/dist/src/utils/subscribeCustomProperty.js.map +1 -0
  73. package/dist/src/utils/tryStartViewTransition.js.map +1 -0
  74. package/dist/src/utils/url.js.map +1 -0
  75. package/package.json +8 -6
  76. package/src/components/createComponent.ts +12 -0
  77. package/src/components/renderComponent.ts +5 -0
  78. package/src/custom-element/ToddleComponent.ts +5 -0
  79. package/src/editor-preview.main.ts +73 -7
  80. package/src/page.main.ts +13 -0
  81. package/src/styles/CustomPropertyStyleSheet.test.ts +46 -0
  82. package/src/styles/style.test.ts +214 -0
  83. package/src/styles/style.ts +2 -1
  84. package/src/types.d.ts +3 -0
  85. package/src/utils/getThemeSignal.ts +66 -0
  86. package/dist/api/apiUtils.js.map +0 -1
  87. package/dist/api/createAPI.js.map +0 -1
  88. package/dist/api/createAPIv2.js.map +0 -1
  89. package/dist/components/createComponent.js.map +0 -1
  90. package/dist/components/createElement.js.map +0 -1
  91. package/dist/components/createNode.js.map +0 -1
  92. package/dist/components/createSlot.js.map +0 -1
  93. package/dist/components/createText.js.map +0 -1
  94. package/dist/components/createText.test.js.map +0 -1
  95. package/dist/components/renderComponent.js.map +0 -1
  96. package/dist/context/isContextProvider.js.map +0 -1
  97. package/dist/context/subscribeToContext.js.map +0 -1
  98. package/dist/custom-components/components.js.map +0 -1
  99. package/dist/custom-components/toddle-portal.js.map +0 -1
  100. package/dist/custom-element/ToddleComponent.js.map +0 -1
  101. package/dist/custom-element/defineComponents.js.map +0 -1
  102. package/dist/custom-element.main.js.map +0 -1
  103. package/dist/debug/logState.js.map +0 -1
  104. package/dist/debug/panicScreen.js.map +0 -1
  105. package/dist/debug/sendEditorToast.js.map +0 -1
  106. package/dist/editor/drag-drop/dragEnded.js.map +0 -1
  107. package/dist/editor/drag-drop/dragMove.js.map +0 -1
  108. package/dist/editor/drag-drop/dragReorder.js.map +0 -1
  109. package/dist/editor/drag-drop/dragStarted.js.map +0 -1
  110. package/dist/editor/drag-drop/dropHighlight.js.map +0 -1
  111. package/dist/editor/drag-drop/getInsertAreas.js.map +0 -1
  112. package/dist/editor/graphql.js.map +0 -1
  113. package/dist/editor/input.js.map +0 -1
  114. package/dist/editor/links.js.map +0 -1
  115. package/dist/editor/overlay.js.map +0 -1
  116. package/dist/editor/types.js.map +0 -1
  117. package/dist/editor-preview.main.js.map +0 -1
  118. package/dist/events/handleAction.js.map +0 -1
  119. package/dist/page.main.js.map +0 -1
  120. package/dist/signal/signal.js.map +0 -1
  121. package/dist/styles/CustomPropertyStyleSheet.js.map +0 -1
  122. package/dist/styles/CustomPropertyStyleSheet.test.js.map +0 -1
  123. package/dist/styles/style.js.map +0 -1
  124. package/dist/utils/BatchQueue.js.map +0 -1
  125. package/dist/utils/createFormulaCache.js.map +0 -1
  126. package/dist/utils/findNearestLine.js.map +0 -1
  127. package/dist/utils/findNearestLine.test.js.map +0 -1
  128. package/dist/utils/getDragData.js.map +0 -1
  129. package/dist/utils/getElementTagName.js.map +0 -1
  130. package/dist/utils/isElementInViewport.js.map +0 -1
  131. package/dist/utils/nodes.js.map +0 -1
  132. package/dist/utils/omitStyle.js.map +0 -1
  133. package/dist/utils/rectHasPoint.js.map +0 -1
  134. package/dist/utils/setAttribute.js.map +0 -1
  135. package/dist/utils/storeScrollState.js.map +0 -1
  136. package/dist/utils/subscribeCustomProperty.js.map +0 -1
  137. package/dist/utils/tryStartViewTransition.js.map +0 -1
  138. package/dist/utils/url.js.map +0 -1
  139. /package/dist/{components/createText.test.d.ts → happydom.d.ts} +0 -0
  140. /package/dist/{api → src/api}/apiUtils.d.ts +0 -0
  141. /package/dist/{api → src/api}/apiUtils.js +0 -0
  142. /package/dist/{api → src/api}/createAPI.d.ts +0 -0
  143. /package/dist/{api → src/api}/createAPI.js +0 -0
  144. /package/dist/{api → src/api}/createAPIv2.d.ts +0 -0
  145. /package/dist/{api → src/api}/createAPIv2.js +0 -0
  146. /package/dist/{components → src/components}/createComponent.d.ts +0 -0
  147. /package/dist/{components → src/components}/createElement.d.ts +0 -0
  148. /package/dist/{components → src/components}/createElement.js +0 -0
  149. /package/dist/{components → src/components}/createNode.d.ts +0 -0
  150. /package/dist/{components → src/components}/createNode.js +0 -0
  151. /package/dist/{components → src/components}/createSlot.d.ts +0 -0
  152. /package/dist/{components → src/components}/createSlot.js +0 -0
  153. /package/dist/{components → src/components}/createText.d.ts +0 -0
  154. /package/dist/{components → src/components}/createText.js +0 -0
  155. /package/dist/{styles/CustomPropertyStyleSheet.test.d.ts → src/components/createText.test.d.ts} +0 -0
  156. /package/dist/{components → src/components}/createText.test.js +0 -0
  157. /package/dist/{context → src/context}/isContextProvider.d.ts +0 -0
  158. /package/dist/{context → src/context}/isContextProvider.js +0 -0
  159. /package/dist/{context → src/context}/subscribeToContext.d.ts +0 -0
  160. /package/dist/{context → src/context}/subscribeToContext.js +0 -0
  161. /package/dist/{custom-components → src/custom-components}/components.d.ts +0 -0
  162. /package/dist/{custom-components → src/custom-components}/components.js +0 -0
  163. /package/dist/{custom-components → src/custom-components}/toddle-portal.d.ts +0 -0
  164. /package/dist/{custom-components → src/custom-components}/toddle-portal.js +0 -0
  165. /package/dist/{custom-element → src/custom-element}/ToddleComponent.d.ts +0 -0
  166. /package/dist/{custom-element → src/custom-element}/defineComponents.d.ts +0 -0
  167. /package/dist/{custom-element → src/custom-element}/defineComponents.js +0 -0
  168. /package/dist/{custom-element.main.d.ts → src/custom-element.main.d.ts} +0 -0
  169. /package/dist/{custom-element.main.js → src/custom-element.main.js} +0 -0
  170. /package/dist/{debug → src/debug}/logState.d.ts +0 -0
  171. /package/dist/{debug → src/debug}/logState.js +0 -0
  172. /package/dist/{debug → src/debug}/panicScreen.d.ts +0 -0
  173. /package/dist/{debug → src/debug}/panicScreen.js +0 -0
  174. /package/dist/{debug → src/debug}/sendEditorToast.d.ts +0 -0
  175. /package/dist/{debug → src/debug}/sendEditorToast.js +0 -0
  176. /package/dist/{editor → src/editor}/drag-drop/dragEnded.d.ts +0 -0
  177. /package/dist/{editor → src/editor}/drag-drop/dragEnded.js +0 -0
  178. /package/dist/{editor → src/editor}/drag-drop/dragMove.d.ts +0 -0
  179. /package/dist/{editor → src/editor}/drag-drop/dragMove.js +0 -0
  180. /package/dist/{editor → src/editor}/drag-drop/dragReorder.d.ts +0 -0
  181. /package/dist/{editor → src/editor}/drag-drop/dragReorder.js +0 -0
  182. /package/dist/{editor → src/editor}/drag-drop/dragStarted.d.ts +0 -0
  183. /package/dist/{editor → src/editor}/drag-drop/dragStarted.js +0 -0
  184. /package/dist/{editor → src/editor}/drag-drop/dropHighlight.d.ts +0 -0
  185. /package/dist/{editor → src/editor}/drag-drop/dropHighlight.js +0 -0
  186. /package/dist/{editor → src/editor}/drag-drop/getInsertAreas.d.ts +0 -0
  187. /package/dist/{editor → src/editor}/drag-drop/getInsertAreas.js +0 -0
  188. /package/dist/{editor → src/editor}/graphql.d.ts +0 -0
  189. /package/dist/{editor → src/editor}/graphql.js +0 -0
  190. /package/dist/{editor → src/editor}/input.d.ts +0 -0
  191. /package/dist/{editor → src/editor}/input.js +0 -0
  192. /package/dist/{editor → src/editor}/links.d.ts +0 -0
  193. /package/dist/{editor → src/editor}/links.js +0 -0
  194. /package/dist/{editor → src/editor}/overlay.d.ts +0 -0
  195. /package/dist/{editor → src/editor}/overlay.js +0 -0
  196. /package/dist/{editor → src/editor}/types.d.ts +0 -0
  197. /package/dist/{editor → src/editor}/types.js +0 -0
  198. /package/dist/{editor-preview.main.d.ts → src/editor-preview.main.d.ts} +0 -0
  199. /package/dist/{events → src/events}/handleAction.d.ts +0 -0
  200. /package/dist/{events → src/events}/handleAction.js +0 -0
  201. /package/dist/{page.main.d.ts → src/page.main.d.ts} +0 -0
  202. /package/dist/{signal → src/signal}/signal.d.ts +0 -0
  203. /package/dist/{signal → src/signal}/signal.js +0 -0
  204. /package/dist/{styles → src/styles}/CustomPropertyStyleSheet.d.ts +0 -0
  205. /package/dist/{styles → src/styles}/CustomPropertyStyleSheet.js +0 -0
  206. /package/dist/{styles → src/styles}/style.d.ts +0 -0
  207. /package/dist/{utils/findNearestLine.test.d.ts → src/styles/style.test.d.ts} +0 -0
  208. /package/dist/{utils → src/utils}/BatchQueue.d.ts +0 -0
  209. /package/dist/{utils → src/utils}/BatchQueue.js +0 -0
  210. /package/dist/{utils → src/utils}/createFormulaCache.d.ts +0 -0
  211. /package/dist/{utils → src/utils}/createFormulaCache.js +0 -0
  212. /package/dist/{utils → src/utils}/findNearestLine.d.ts +0 -0
  213. /package/dist/{utils → src/utils}/findNearestLine.js +0 -0
  214. /package/dist/{utils → src/utils}/findNearestLine.test.js +0 -0
  215. /package/dist/{utils → src/utils}/getDragData.d.ts +0 -0
  216. /package/dist/{utils → src/utils}/getDragData.js +0 -0
  217. /package/dist/{utils → src/utils}/getElementTagName.d.ts +0 -0
  218. /package/dist/{utils → src/utils}/getElementTagName.js +0 -0
  219. /package/dist/{utils → src/utils}/isElementInViewport.d.ts +0 -0
  220. /package/dist/{utils → src/utils}/isElementInViewport.js +0 -0
  221. /package/dist/{utils → src/utils}/nodes.d.ts +0 -0
  222. /package/dist/{utils → src/utils}/nodes.js +0 -0
  223. /package/dist/{utils → src/utils}/omitStyle.d.ts +0 -0
  224. /package/dist/{utils → src/utils}/omitStyle.js +0 -0
  225. /package/dist/{utils → src/utils}/rectHasPoint.d.ts +0 -0
  226. /package/dist/{utils → src/utils}/rectHasPoint.js +0 -0
  227. /package/dist/{utils → src/utils}/setAttribute.d.ts +0 -0
  228. /package/dist/{utils → src/utils}/setAttribute.js +0 -0
  229. /package/dist/{utils → src/utils}/storeScrollState.d.ts +0 -0
  230. /package/dist/{utils → src/utils}/storeScrollState.js +0 -0
  231. /package/dist/{utils → src/utils}/subscribeCustomProperty.d.ts +0 -0
  232. /package/dist/{utils → src/utils}/subscribeCustomProperty.js +0 -0
  233. /package/dist/{utils → src/utils}/tryStartViewTransition.d.ts +0 -0
  234. /package/dist/{utils → src/utils}/tryStartViewTransition.js +0 -0
  235. /package/dist/{utils → src/utils}/url.d.ts +0 -0
  236. /package/dist/{utils → src/utils}/url.js +0 -0
@@ -0,0 +1,51 @@
1
+ import { applyFormula, } from '@nordcraft/core/dist/formula/formula';
2
+ import { THEME_COOKIE_NAME } from '@nordcraft/core/dist/styling/theme.const';
3
+ import { isDefined } from '@nordcraft/core/dist/utils/util';
4
+ import { signal } from '../signal/signal';
5
+ export const getThemeSignal = (component, dataSignal, env) => {
6
+ const theme = component.route?.info?.theme;
7
+ const themeFormula = theme?.formula;
8
+ const dynamicTheme = themeFormula && themeFormula.type !== 'value';
9
+ if (dynamicTheme) {
10
+ const sig = dataSignal.map(() => applyFormula(themeFormula, {
11
+ data: dataSignal.get(),
12
+ component,
13
+ root: document,
14
+ package: undefined,
15
+ toddle: window.toddle,
16
+ env,
17
+ }));
18
+ return sig;
19
+ }
20
+ else if (isDefined(themeFormula)) {
21
+ // Set static theme value
22
+ return signal(themeFormula.value);
23
+ }
24
+ else {
25
+ // This is the standard theme resolution logic, if not overridden:
26
+ // 1. Check for 'nc-theme' cookie
27
+ // 2. Default to null
28
+ // 2.1 No theme set explicitly will default to system preference
29
+ // 2.2 Default theme (or initial value) is handled in CSS
30
+ const initialThemeValue = document.cookie
31
+ .split('; ')
32
+ .find((row) => row.startsWith(`${THEME_COOKIE_NAME}=`))
33
+ ?.split('=')[1] ?? null;
34
+ const sig = signal(initialThemeValue);
35
+ // Listen to cookie store API changes for 'nc-theme'
36
+ cookieStore.addEventListener('change', (event) => {
37
+ for (const change of event.changed) {
38
+ if (change.name === THEME_COOKIE_NAME) {
39
+ sig.set(change.value ?? null);
40
+ }
41
+ }
42
+ for (const removal of event.deleted) {
43
+ if (removal.name === THEME_COOKIE_NAME) {
44
+ sig.set(null);
45
+ }
46
+ }
47
+ });
48
+ return sig;
49
+ }
50
+ };
51
+ //# sourceMappingURL=getThemeSignal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getThemeSignal.js","sourceRoot":"","sources":["../../../src/utils/getThemeSignal.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,GAEb,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAe,MAAM,kBAAkB,CAAA;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAoB,EACpB,UAAiC,EACjC,GAAc,EACd,EAAE,CAAC;IACH,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAA;IAC1C,MAAM,YAAY,GAAG,KAAK,EAAE,OAAO,CAAA;IACnC,MAAM,YAAY,GAAG,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO,CAAA;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAgB,GAAG,EAAE,CAC7C,YAAY,CAAC,YAAY,EAAE;YACzB,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE;YACtB,SAAS;YACT,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG;SACJ,CAAC,CACH,CAAA;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;SAAM,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,yBAAyB;QACzB,OAAO,MAAM,CAAgB,YAAY,CAAC,KAAsB,CAAC,CAAA;IACnE,CAAC;SAAM,CAAC;QACN,kEAAkE;QAClE,iCAAiC;QACjC,qBAAqB;QACrB,mEAAmE;QACnE,4DAA4D;QAC5D,MAAM,iBAAiB,GACrB,QAAQ,CAAC,MAAM;aACZ,KAAK,CAAC,IAAI,CAAC;aACX,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;YACvD,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;QAE3B,MAAM,GAAG,GAAG,MAAM,CAAgB,iBAAkC,CAAC,CAAA;QACrE,oDAAoD;QACpD,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;YAChD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACtC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACvC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACf,CAAC;YACH,CAAC;QAAA,CACF,CAAC,CAAA;QAEF,OAAO,GAAG,CAAA;IACZ,CAAC;AAAA,CACF,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isElementInViewport.js","sourceRoot":"","sources":["../../../src/utils/isElementInViewport.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CACjC,OAAoB,EACpB,WAAW,GAAG,CAAC,EACN;IACT,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAA;IAC5C,MAAM,cAAc,GAClB,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAA;IAC7D,MAAM,aAAa,GACjB,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAA;IAE3D,OAAO,CACL,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,WAAW;QAC3B,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,WAAW;QAC5B,IAAI,CAAC,MAAM,IAAI,cAAc,GAAG,WAAW;QAC3C,IAAI,CAAC,KAAK,IAAI,aAAa,GAAG,WAAW,CAC1C,CAAA;AAAA,CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/utils/nodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omitStyle.js","sourceRoot":"","sources":["../../../src/utils/omitStyle.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,4BAA4B,CAC1C,SAAY,EACT;IACH,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;IACxC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7D,IACE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;YACtD,MAAM,KAAK,MAAM,EACjB,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAA;YACjB,OAAO,IAAI,CAAC,UAAU,CAAA;YACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAChC,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CACvB,CAAC;gBACC,gBAAgB;aACjB,CAAiB,CACrB,CAAA;QACH,CAAC;IAAA,CACF,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AAAA,CACb"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rectHasPoint.js","sourceRoot":"","sources":["../../../src/utils/rectHasPoint.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,EAAE,CAAC,EAAE,CAAC,EAAS,EAAE;IAC3D,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAA;AAAA,CAC9E"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setAttribute.js","sourceRoot":"","sources":["../../../src/utils/setAttribute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAEtE;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,IAA8C,EAC9C,IAAY,EACZ,KAAU,EACV;IACA,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,KAAK;YACR,IAAI,IAAI,YAAY,gBAAgB,EAAE,CAAC;gBACrC,CAAC;gBAAC,IAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;YAC9B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACxC,CAAC;YACD,MAAK;QACP,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,EAAE,CAAC;YACZ,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;gBAC/B,0EAA0E;gBAC1E,sEAAsE;gBACtE,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,GAAG,KAAK,CAAA;gBACf,IAAI,IAAI,YAAY,mBAAmB,EAAE,CAAC;oBACxC,uGAAuG;oBACvG,yFAAyF;oBACzF,8FAA8F;oBAC9F,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBACzD,GAAG,GAAG,CAAC,CAAA;oBACT,CAAC;gBACH,CAAC;gBACD,CAAC;gBAAC,IAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACjE,CAAC;YACD,MAAK;QACP,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,UAAU;YACb,IAAI,IAAI,YAAY,gBAAgB,EAAE,CAAC;gBACrC,CAAC;gBAAC,IAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;YACzC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACxC,CAAC;YACD,MAAK;QACP;YACE,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBACtC;gBACE,8CAA8C;gBAC9C,IAAI,KAAK,WAAW;oBACpB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,QAAQ,EACpD,CAAC;oBACD,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAA;gBACrC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YAC5B,CAAC;IACL,CAAC;AAAA,CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storeScrollState.js","sourceRoot":"","sources":["../../../src/utils/storeScrollState.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,GAAG,GAAW,EAAE,EAChB,aAAa,GAAG,WAAW,EAC3B,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAC5D,EAAE,CAAC;IACH,MAAM,eAAe,GAAoB,EAAE,CAAA;IAC3C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAc,aAAa,CAAC,CAAC,CAAC,OAAO,CACvE,CAAC,IAAI,EAAE,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClD,eAAe,CAAC,MAAM,CAAC,GAAG;gBACxB,CAAC,EAAE,IAAI,CAAC,SAAS;gBACjB,CAAC,EAAE,IAAI,CAAC,UAAU;aACnB,CAAA;QACH,CAAC;IAAA,CACF,CACF,CAAA;IAED,8CAA8C;IAC9C,eAAe,CAAC,UAAU,CAAC,GAAG;QAC5B,CAAC,EAAE,MAAM,CAAC,OAAO;QACjB,CAAC,EAAE,MAAM,CAAC,OAAO;KAClB,CAAA;IAED,cAAc,CAAC,OAAO,CACpB,mBAAmB,GAAG,GAAG,EACzB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAChC,CAAA;IAED,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAA;AAAA,CACnC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GACjC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,UAA8C,EAAE,EAAE,CAAC;IACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CACtC,cAAc,CAAC,OAAO,CAAC,mBAAmB,GAAG,GAAG,CAAC,IAAI,IAAI,CACvC,CAAA;IACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAM;IACR,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAM;QACR,CAAC;QAED,IAAI,cAAc,EAAE,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,GAAG,cAAc,CAAC,CAAC,CAAA;QACtC,CAAC;QACD,IAAI,cAAc,EAAE,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,CAAA;QACvC,CAAC;IAAA,CACF,CAAC,CAAA;IAEF,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;AAAA,CACxC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribeCustomProperty.js","sourceRoot":"","sources":["../../../src/utils/subscribeCustomProperty.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAA;AAG1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,IAAI,0BAAgE,CAAA;AAEpE,MAAM,UAAU,uBAAuB,CAAC,EACtC,QAAQ,EACR,kBAAkB,EAClB,MAAM,EACN,OAAO,EACP,IAAI,EACJ,OAAO,GAQR,EAAE;IACD,0BAA0B,KAAK,IAAI,wBAAwB,CACzD,IAAI,EAEF,IAAI,CAAC,cAAc,CAAC,+BAA+B,CAGpD,EAAE,KAAK,CACT,CAAA;IAED,MAAM,CAAC,SAAS,CACd,0BAA0B,CAAC,gBAAgB,CACzC,QAAQ,EACR,kBAAkB,EAClB,OAAO,CACR,EACD;QACE,OAAO,EAAE,GAAG,EAAE,CAAC;YACb,0BAA0B,EAAE,kBAAkB,CAC5C,QAAQ,EACR,kBAAkB,EAClB;gBACE,SAAS,EAAE,OAAO,KAAK,SAAS;gBAChC,UAAU,EAAE,OAAO,EAAE,UAAU;gBAC/B,aAAa,EAAE,OAAO,EAAE,aAAa;aACtC,CACF,CAAA;QAAA,CACF;KACF,CACF,CAAA;AAAA,CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tryStartViewTransition.js","sourceRoot":"","sources":["../../../src/utils/tryStartViewTransition.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,sBAAsB,CACpC,cAA0B,EAC1B,OAEC,EAGD;IACA,MAAM,mBAAmB,GAAI,QAAuC;SACjE,mBAAmB,CAAA;IAEtB,IACE,CAAC,mBAAmB;QACpB,CAAC,OAAO,EAAE,6BAA6B,KAAK,IAAI;YAC9C,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC,EAChE,CAAC;QACD,cAAc,EAAE,CAAA;QAChB,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE;SAC5B,CAAA;IACH,CAAC;IAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;AAAA,CAC1D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAGxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,IAAI,GACK,EAAE,EAAE,CAAC;IACd,IAAI,IAAY,CAAA;IAChB,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,YAAY,GAAa,EAAE,CAAA;QACjC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACzC,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC5B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBACjC,CAAC;qBAAM,CAAC;oBACN,6DAA6D;oBAC7D,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,GAAG,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,OAAO,CAAC,IAAc,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IACxE,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAA;IACtE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACrB,OAAO,GAAG,kBAAkB,CAC1B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,GAAG,CAC/B,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;IAAA,CACzC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAA;IAEZ,OAAO,GAAG,IAAI,GAAG,UAAU,GACzB,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAC/C,EAAE,CAAA;AAAA,CACH,CAAA"}
package/package.json CHANGED
@@ -3,15 +3,17 @@
3
3
  "license": "Apache-2.0",
4
4
  "type": "module",
5
5
  "homepage": "https://github.com/nordcraftengine/nordcraft",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/nordcraftengine/nordcraft.git",
9
+ "directory": "packages/runtime"
10
+ },
6
11
  "dependencies": {
7
- "@nordcraft/core": "1.0.77",
8
- "@nordcraft/std-lib": "1.0.77",
12
+ "@nordcraft/core": "1.0.78",
13
+ "@nordcraft/std-lib": "1.0.78",
9
14
  "fast-deep-equal": "3.1.3",
10
15
  "path-to-regexp": "6.3.0"
11
16
  },
12
- "devDependencies": {
13
- "@happy-dom/global-registrator": "20.0.11"
14
- },
15
17
  "scripts": {
16
18
  "build": "tsgo && bun scripts/build.js",
17
19
  "npm-publish": "bun run build && bun publish --access public",
@@ -21,5 +23,5 @@
21
23
  "files": ["dist", "src"],
22
24
  "main": "dist/page.main.js",
23
25
  "types": "dist/page.main.d.ts",
24
- "version": "1.0.77"
26
+ "version": "1.0.78"
25
27
  }
@@ -310,6 +310,17 @@ export function createComponent({
310
310
  })
311
311
  }
312
312
 
313
+ // Subscribe to global stores (currently only theme)
314
+ ctx.stores.theme.subscribe((value) => {
315
+ componentDataSignal.update((data) => ({
316
+ ...data,
317
+ Page: {
318
+ ...data.Page,
319
+ Theme: value,
320
+ },
321
+ }))
322
+ })
323
+
313
324
  attributesSignal.subscribe(
314
325
  (Attributes) =>
315
326
  componentDataSignal.update((data) => ({
@@ -329,6 +340,7 @@ export function createComponent({
329
340
  children,
330
341
  formulaCache,
331
342
  providers,
343
+ stores: ctx.stores,
332
344
  apis,
333
345
  abortSignal: abortController.signal,
334
346
  package: node.package ?? ctx.package,
@@ -39,6 +39,9 @@ interface RenderComponentProps {
39
39
  ctx: ComponentContext
40
40
  }
41
41
  >
42
+ stores: {
43
+ theme: Signal<string | null>
44
+ }
42
45
  package: string | undefined
43
46
  parentElement: Element | ShadowRoot
44
47
  instance: Record<string, string>
@@ -63,6 +66,7 @@ export function renderComponent({
63
66
  root,
64
67
  providers,
65
68
  package: packageName,
69
+ stores,
66
70
  parentElement,
67
71
  instance,
68
72
  toddle,
@@ -81,6 +85,7 @@ export function renderComponent({
81
85
  abortSignal,
82
86
  root,
83
87
  providers,
88
+ stores,
84
89
  package: packageName,
85
90
  toddle,
86
91
  env,
@@ -86,6 +86,11 @@ export class ToddleComponent extends HTMLElement {
86
86
  abortSignal: abortController.signal,
87
87
  children: {},
88
88
  providers: {},
89
+ stores: {
90
+ // Note: Theme store is a page-level store, and cannot be used in custom-elements in a meaningful way at the moment.
91
+ // Users can implement theming by setting data-nc-theme attribute themselves.
92
+ theme: signal<string | null>(null),
93
+ },
89
94
  package: undefined,
90
95
  toddle,
91
96
  env,
@@ -31,6 +31,7 @@ import {
31
31
  getThemeEntries,
32
32
  renderThemeValues,
33
33
  } from '@nordcraft/core/dist/styling/theme'
34
+ import { THEME_DATA_ATTRIBUTE } from '@nordcraft/core/dist/styling/theme.const'
34
35
  import type { StyleVariant } from '@nordcraft/core/dist/styling/variantSelector'
35
36
  import type {
36
37
  ActionHandler,
@@ -79,6 +80,7 @@ import type {
79
80
  PreviewShowSignal,
80
81
  } from './types'
81
82
  import { createFormulaCache } from './utils/createFormulaCache'
83
+ import { getThemeSignal } from './utils/getThemeSignal'
82
84
  import { getNodeAndAncestors, isNodeOrAncestorConditional } from './utils/nodes'
83
85
  import { rectHasPoint } from './utils/rectHasPoint'
84
86
  import {
@@ -217,6 +219,7 @@ export const createRoot = (
217
219
  displayedNodes: [],
218
220
  testMode: false,
219
221
  })
222
+ const themeSignal = signal<string | null>(null)
220
223
  window.toddle._preview = { showSignal }
221
224
  document.body.setAttribute('data-mode', 'design')
222
225
  let components: Component[] | null = null
@@ -1002,7 +1005,7 @@ export const createRoot = (
1002
1005
  }
1003
1006
  cssBlocks.push(
1004
1007
  renderThemeValues(
1005
- `[data-theme~="${theme.key}"]`,
1008
+ `[${THEME_DATA_ATTRIBUTE}~="${theme.key}"]`,
1006
1009
  getThemeEntries(theme.value, theme.key),
1007
1010
  ),
1008
1011
  )
@@ -1052,9 +1055,9 @@ export const createRoot = (
1052
1055
  case 'preview_theme': {
1053
1056
  const { theme } = message.data
1054
1057
  if (theme) {
1055
- document.body.setAttribute('data-theme', theme)
1058
+ document.body.setAttribute(THEME_DATA_ATTRIBUTE, theme)
1056
1059
  } else {
1057
- document.body.removeAttribute('data-theme')
1060
+ document.body.removeAttribute(THEME_DATA_ATTRIBUTE)
1058
1061
  }
1059
1062
  }
1060
1063
  }
@@ -1248,7 +1251,8 @@ export const createRoot = (
1248
1251
  fastDeepEqual(
1249
1252
  ctx?.component.route?.info?.meta,
1250
1253
  _component.route?.info?.meta,
1251
- ) === false
1254
+ ) === false ||
1255
+ !ctx
1252
1256
  ) {
1253
1257
  insertHeadTags(_component.route?.info?.meta ?? {}, {
1254
1258
  component: _component,
@@ -1390,6 +1394,21 @@ export const createRoot = (
1390
1394
  component: _component,
1391
1395
  }
1392
1396
 
1397
+ if (
1398
+ fastDeepEqual(
1399
+ newCtx.component.route?.info?.theme,
1400
+ ctx?.component.route?.info?.theme,
1401
+ ) === false
1402
+ ) {
1403
+ setupThemeSubscription(
1404
+ newCtx.component,
1405
+ newCtx.dataSignal,
1406
+ env,
1407
+ ).subscribe((theme) => {
1408
+ newCtx.stores.theme.set(theme)
1409
+ })
1410
+ }
1411
+
1393
1412
  for (const api in newCtx.component.apis) {
1394
1413
  // check if the api has changed (ignoring onCompleted and onFailed).
1395
1414
  const apiInstance = newCtx.component.apis[api]
@@ -1554,11 +1573,20 @@ export const createRoot = (
1554
1573
  abortSignal: new AbortController().signal,
1555
1574
  formulaCache: createFormulaCache(component),
1556
1575
  providers: {},
1576
+ stores: {
1577
+ theme: themeSignal,
1578
+ },
1557
1579
  package: undefined,
1558
1580
  toddle: window.toddle,
1559
1581
  env,
1560
1582
  }
1561
1583
 
1584
+ setupThemeSubscription(ctx.component, ctx.dataSignal, env).subscribe(
1585
+ (theme) => {
1586
+ ctx.stores.theme.set(theme)
1587
+ },
1588
+ )
1589
+
1562
1590
  if (isContextProvider(component)) {
1563
1591
  // Subscribe to exposed formulas and update the component's data signal
1564
1592
  const formulaDataSignals = Object.fromEntries(
@@ -1672,7 +1700,7 @@ const insertHeadTags = (
1672
1700
  .filter((elem) => !entries[elem.getAttribute('data-meta-id')!])
1673
1701
  .forEach((elem) => elem.remove())
1674
1702
 
1675
- // Skip anything that is not <link> or <script> tags, as they don't have any influence on the preview
1703
+ // Skip anything that is not <link>, <style> or <script> tags, as they don't have any influence on the preview
1676
1704
  Object.entries(entries).forEach(([id, entry]) => {
1677
1705
  switch (entry.tag) {
1678
1706
  case HeadTagTypes.Link:
@@ -1699,9 +1727,22 @@ const insertHeadTags = (
1699
1727
  ></script>
1700
1728
  `),
1701
1729
  )
1730
+ case HeadTagTypes.Style:
1731
+ return insertOrReplaceHeadNode(
1732
+ id,
1733
+ document.createRange().createContextualFragment(`
1734
+ <style
1735
+ data-meta-id="${id}"
1736
+ ${Object.entries(entry.attrs)
1737
+ .map(([key, value]) => `${key}="${applyFormula(value, context)}"`)
1738
+ .join(' ')}
1739
+ >
1740
+ ${applyFormula(entry.content ?? '', context)}
1741
+ </style>
1742
+ `),
1743
+ )
1702
1744
  default:
1703
- // TODO: handle style meta tags?
1704
- break
1745
+ return
1705
1746
  }
1706
1747
  })
1707
1748
  }
@@ -1874,3 +1915,28 @@ const registerFormulas = (
1874
1915
  const postMessageToEditor = (message: EditorPostMessageType) => {
1875
1916
  window.parent?.postMessage(message, '*')
1876
1917
  }
1918
+
1919
+ let _themeRootSignal = null as Signal<string | null> | null
1920
+ function setupThemeSubscription(
1921
+ component: Component,
1922
+ dataSignal: Signal<ComponentData>,
1923
+ env: ToddleEnv,
1924
+ ) {
1925
+ _themeRootSignal?.destroy()
1926
+ _themeRootSignal = getThemeSignal(component, dataSignal, env)
1927
+ _themeRootSignal.subscribe((theme) => {
1928
+ if (isDefined(theme)) {
1929
+ document.documentElement.setAttribute(THEME_DATA_ATTRIBUTE, theme)
1930
+ } else {
1931
+ document.documentElement.removeAttribute(THEME_DATA_ATTRIBUTE)
1932
+ }
1933
+ dataSignal.update((data) => ({
1934
+ ...data,
1935
+ Page: {
1936
+ Theme: theme ?? null,
1937
+ },
1938
+ }))
1939
+ })
1940
+
1941
+ return _themeRootSignal
1942
+ }
package/src/page.main.ts CHANGED
@@ -6,6 +6,7 @@ import type {
6
6
  import type { ToddleEnv } from '@nordcraft/core/dist/formula/formula'
7
7
  import { applyFormula } from '@nordcraft/core/dist/formula/formula'
8
8
  import type { PluginFormula } from '@nordcraft/core/dist/formula/formulaTypes'
9
+ import { THEME_DATA_ATTRIBUTE } from '@nordcraft/core/dist/styling/theme.const'
9
10
  import type {
10
11
  ActionHandler,
11
12
  ArgumentInputDataFunction,
@@ -29,6 +30,7 @@ import { initLogState, registerComponentToLogState } from './debug/logState'
29
30
  import type { Signal } from './signal/signal'
30
31
  import { signal } from './signal/signal'
31
32
  import type { ComponentContext, LocationSignal } from './types'
33
+ import { getThemeSignal } from './utils/getThemeSignal'
32
34
 
33
35
  initLogState()
34
36
 
@@ -203,6 +205,9 @@ export const createRoot = (domNode: HTMLElement) => {
203
205
  children: {},
204
206
  formulaCache: {},
205
207
  providers: {},
208
+ stores: {
209
+ theme: getThemeSignal(component, dataSignal, env),
210
+ },
206
211
  apis: {},
207
212
  toddle: window.toddle,
208
213
  triggerEvent: (event: string, data: unknown) =>
@@ -265,6 +270,14 @@ export const createRoot = (domNode: HTMLElement) => {
265
270
  }
266
271
  }
267
272
 
273
+ ctx.stores.theme.subscribe((newTheme) => {
274
+ if (isDefined(newTheme)) {
275
+ document.documentElement.setAttribute(THEME_DATA_ATTRIBUTE, newTheme)
276
+ } else {
277
+ document.documentElement.removeAttribute(THEME_DATA_ATTRIBUTE)
278
+ }
279
+ })
280
+
268
281
  // We can only setup meta updates after the dataSignal has been initiated with API data etc.
269
282
  setupMetaUpdates(component, dataSignal)
270
283
 
@@ -1,4 +1,5 @@
1
1
  import { describe, expect, test } from 'bun:test'
2
+ import '../../happydom'
2
3
  import { CustomPropertyStyleSheet } from './CustomPropertyStyleSheet'
3
4
 
4
5
  describe('CustomPropertyStyleSheet', () => {
@@ -57,6 +58,51 @@ describe('CustomPropertyStyleSheet', () => {
57
58
  )
58
59
  })
59
60
 
61
+ test('it works with prefers-reduced-motion: reduce', () => {
62
+ const instance = new CustomPropertyStyleSheet(document)
63
+ instance.registerProperty('.my-class', '--my-property', {
64
+ mediaQuery: { 'prefers-reduced-motion': 'reduce' },
65
+ })('256px')
66
+ expect(instance.getStyleSheet().cssRules.length).toBe(1)
67
+ expect(instance.getStyleSheet().cssRules[0].cssText).toBe(
68
+ `\
69
+ @media (prefers-reduced-motion: reduce) {
70
+ .my-class { --my-property: 256px; }
71
+ }`,
72
+ )
73
+ })
74
+
75
+ test('it works with prefers-reduced-motion: no-preference', () => {
76
+ const instance = new CustomPropertyStyleSheet(document)
77
+ instance.registerProperty('.my-class', '--my-property', {
78
+ mediaQuery: { 'prefers-reduced-motion': 'no-preference' },
79
+ })('256px')
80
+ expect(instance.getStyleSheet().cssRules.length).toBe(1)
81
+ expect(instance.getStyleSheet().cssRules[0].cssText).toBe(
82
+ `\
83
+ @media (prefers-reduced-motion: no-preference) {
84
+ .my-class { --my-property: 256px; }
85
+ }`,
86
+ )
87
+ })
88
+
89
+ test('it combines prefers-reduced-motion with other media queries', () => {
90
+ const instance = new CustomPropertyStyleSheet(document)
91
+ instance.registerProperty('.my-class', '--my-property', {
92
+ mediaQuery: {
93
+ 'prefers-reduced-motion': 'reduce',
94
+ 'max-width': '768px',
95
+ },
96
+ })('256px')
97
+ expect(instance.getStyleSheet().cssRules.length).toBe(1)
98
+ expect(instance.getStyleSheet().cssRules[0].cssText).toBe(
99
+ `\
100
+ @media (prefers-reduced-motion: reduce) and (max-width: 768px) {
101
+ .my-class { --my-property: 256px; }
102
+ }`,
103
+ )
104
+ })
105
+
60
106
  test('it unregisters a property', () => {
61
107
  const instance = new CustomPropertyStyleSheet(document)
62
108
  const setter = instance.registerProperty('.my-class', '--my-property')
@@ -0,0 +1,214 @@
1
+ import type { Component } from '@nordcraft/core/dist/component/component.types'
2
+ import { describe, expect, test } from 'bun:test'
3
+ import { insertStyles } from './style'
4
+
5
+ describe('insertStyles() - prefers-reduced-motion', () => {
6
+ test('it inserts styles with prefers-reduced-motion: reduce media query', () => {
7
+ const component: Component = {
8
+ name: 'TestComponent',
9
+ nodes: {
10
+ '0': {
11
+ type: 'element',
12
+ tag: 'div',
13
+ style: {
14
+ color: 'red',
15
+ },
16
+ variants: [
17
+ {
18
+ style: {
19
+ transition: 'none',
20
+ animation: 'none',
21
+ },
22
+ mediaQuery: {
23
+ 'prefers-reduced-motion': 'reduce',
24
+ },
25
+ },
26
+ ],
27
+ children: [],
28
+ attrs: {},
29
+ events: {},
30
+ },
31
+ },
32
+ }
33
+
34
+ const parent = document.createElement('div')
35
+ insertStyles(parent, component, [])
36
+
37
+ const styleElement = parent.querySelector('[data-hash]')
38
+ expect(styleElement).toBeTruthy()
39
+
40
+ const styleText = styleElement?.textContent ?? ''
41
+
42
+ // Check that the media query for prefers-reduced-motion: reduce is present
43
+ expect(styleText).toContain('@media (prefers-reduced-motion: reduce)')
44
+
45
+ // Check that the variant styles are present
46
+ expect(styleText).toContain('transition:none')
47
+ expect(styleText).toContain('animation:none')
48
+ })
49
+
50
+ test('it inserts styles with prefers-reduced-motion: no-preference media query', () => {
51
+ const component: Component = {
52
+ name: 'TestComponent',
53
+ nodes: {
54
+ '0': {
55
+ type: 'element',
56
+ tag: 'div',
57
+ style: {},
58
+ variants: [
59
+ {
60
+ style: {
61
+ animation: 'fadeIn 1s',
62
+ },
63
+ mediaQuery: {
64
+ 'prefers-reduced-motion': 'no-preference',
65
+ },
66
+ },
67
+ ],
68
+ children: [],
69
+ attrs: {},
70
+ events: {},
71
+ },
72
+ },
73
+ }
74
+
75
+ const parent = document.createElement('div')
76
+ insertStyles(parent, component, [])
77
+
78
+ const styleElement = parent.querySelector('[data-hash]')
79
+ expect(styleElement).toBeTruthy()
80
+
81
+ const styleText = styleElement?.textContent ?? ''
82
+
83
+ // Check that the media query for prefers-reduced-motion: no-preference is present
84
+ expect(styleText).toContain(
85
+ '@media (prefers-reduced-motion: no-preference)',
86
+ )
87
+
88
+ // Check that the animation property is present
89
+ expect(styleText).toContain('animation:fadeIn 1s')
90
+ })
91
+
92
+ test('it combines prefers-reduced-motion with other media queries', () => {
93
+ const component: Component = {
94
+ name: 'TestComponent',
95
+ nodes: {
96
+ '0': {
97
+ type: 'element',
98
+ tag: 'div',
99
+ style: {},
100
+ variants: [
101
+ {
102
+ style: {
103
+ fontSize: '14px',
104
+ },
105
+ mediaQuery: {
106
+ 'prefers-reduced-motion': 'reduce',
107
+ 'max-width': '768px',
108
+ },
109
+ },
110
+ ],
111
+ children: [],
112
+ attrs: {},
113
+ events: {},
114
+ },
115
+ },
116
+ }
117
+
118
+ const parent = document.createElement('div')
119
+ insertStyles(parent, component, [])
120
+
121
+ const styleElement = parent.querySelector('[data-hash]')
122
+ expect(styleElement).toBeTruthy()
123
+
124
+ const styleText = styleElement?.textContent ?? ''
125
+
126
+ // Should combine media queries with 'and'
127
+ expect(styleText).toMatch(
128
+ /@media \(prefers-reduced-motion: reduce\) and \(max-width: 768px\)/,
129
+ )
130
+ })
131
+
132
+ test('it handles multiple variants with different motion preferences', () => {
133
+ const component: Component = {
134
+ name: 'TestComponent',
135
+ nodes: {
136
+ '0': {
137
+ type: 'element',
138
+ tag: 'div',
139
+ style: {},
140
+ variants: [
141
+ {
142
+ style: { animation: 'none' },
143
+ mediaQuery: { 'prefers-reduced-motion': 'reduce' },
144
+ },
145
+ {
146
+ style: { animation: 'fadeIn 1s' },
147
+ mediaQuery: { 'prefers-reduced-motion': 'no-preference' },
148
+ },
149
+ ],
150
+ children: [],
151
+ attrs: {},
152
+ events: {},
153
+ },
154
+ },
155
+ }
156
+
157
+ const parent = document.createElement('div')
158
+ insertStyles(parent, component, [])
159
+
160
+ const styleElement = parent.querySelector('[data-hash]')
161
+ expect(styleElement).toBeTruthy()
162
+
163
+ const styleText = styleElement?.textContent ?? ''
164
+
165
+ // Check that both media queries are present
166
+ expect(styleText).toContain('@media (prefers-reduced-motion: reduce)')
167
+ expect(styleText).toContain(
168
+ '@media (prefers-reduced-motion: no-preference)',
169
+ )
170
+
171
+ // Check that both animation values are present
172
+ expect(styleText).toContain('animation:none')
173
+ expect(styleText).toContain('animation:fadeIn 1s')
174
+ })
175
+
176
+ test('it filters out null prefers-reduced-motion values', () => {
177
+ const component: Component = {
178
+ name: 'TestComponent',
179
+ nodes: {
180
+ '0': {
181
+ type: 'element',
182
+ tag: 'div',
183
+ style: {},
184
+ variants: [
185
+ {
186
+ style: { color: 'red' },
187
+ mediaQuery: {
188
+ 'prefers-reduced-motion': null,
189
+ 'max-width': '768px',
190
+ },
191
+ },
192
+ ],
193
+ children: [],
194
+ attrs: {},
195
+ events: {},
196
+ },
197
+ },
198
+ }
199
+
200
+ const parent = document.createElement('div')
201
+ insertStyles(parent, component, [])
202
+
203
+ const styleElement = parent.querySelector('[data-hash]')
204
+ expect(styleElement).toBeTruthy()
205
+
206
+ const styleText = styleElement?.textContent ?? ''
207
+
208
+ // null values should be filtered out
209
+ expect(styleText).not.toContain('prefers-reduced-motion: null')
210
+
211
+ // max-width should still be present
212
+ expect(styleText).toContain('max-width: 768px')
213
+ })
214
+ })