@furystack/shades 11.1.0 → 12.0.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 (166) hide show
  1. package/CHANGELOG.md +291 -0
  2. package/README.md +13 -13
  3. package/esm/component-factory.spec.js +13 -5
  4. package/esm/component-factory.spec.js.map +1 -1
  5. package/esm/components/index.d.ts +4 -1
  6. package/esm/components/index.d.ts.map +1 -1
  7. package/esm/components/index.js +4 -1
  8. package/esm/components/index.js.map +1 -1
  9. package/esm/components/lazy-load.d.ts +2 -4
  10. package/esm/components/lazy-load.d.ts.map +1 -1
  11. package/esm/components/lazy-load.js +40 -24
  12. package/esm/components/lazy-load.js.map +1 -1
  13. package/esm/components/lazy-load.spec.js +57 -50
  14. package/esm/components/lazy-load.spec.js.map +1 -1
  15. package/esm/components/link-to-route.d.ts +2 -0
  16. package/esm/components/link-to-route.d.ts.map +1 -1
  17. package/esm/components/link-to-route.js +3 -2
  18. package/esm/components/link-to-route.js.map +1 -1
  19. package/esm/components/link-to-route.spec.js +13 -9
  20. package/esm/components/link-to-route.spec.js.map +1 -1
  21. package/esm/components/nested-route-link.d.ts +62 -0
  22. package/esm/components/nested-route-link.d.ts.map +1 -0
  23. package/esm/components/nested-route-link.js +66 -0
  24. package/esm/components/nested-route-link.js.map +1 -0
  25. package/esm/components/nested-route-link.spec.d.ts +2 -0
  26. package/esm/components/nested-route-link.spec.d.ts.map +1 -0
  27. package/esm/components/nested-route-link.spec.js +179 -0
  28. package/esm/components/nested-route-link.spec.js.map +1 -0
  29. package/esm/components/nested-route-types.d.ts +37 -0
  30. package/esm/components/nested-route-types.d.ts.map +1 -0
  31. package/esm/components/nested-route-types.js +2 -0
  32. package/esm/components/nested-route-types.js.map +1 -0
  33. package/esm/components/nested-router.d.ts +103 -0
  34. package/esm/components/nested-router.d.ts.map +1 -0
  35. package/esm/components/nested-router.js +178 -0
  36. package/esm/components/nested-router.js.map +1 -0
  37. package/esm/components/nested-router.spec.d.ts +2 -0
  38. package/esm/components/nested-router.spec.d.ts.map +1 -0
  39. package/esm/components/nested-router.spec.js +659 -0
  40. package/esm/components/nested-router.spec.js.map +1 -0
  41. package/esm/components/route-link.d.ts +4 -0
  42. package/esm/components/route-link.d.ts.map +1 -1
  43. package/esm/components/route-link.js +5 -5
  44. package/esm/components/route-link.js.map +1 -1
  45. package/esm/components/route-link.spec.js +16 -12
  46. package/esm/components/route-link.spec.js.map +1 -1
  47. package/esm/components/router.d.ts +20 -2
  48. package/esm/components/router.d.ts.map +1 -1
  49. package/esm/components/router.js +3 -0
  50. package/esm/components/router.js.map +1 -1
  51. package/esm/components/router.spec.js +75 -74
  52. package/esm/components/router.spec.js.map +1 -1
  53. package/esm/initialize.d.ts +11 -0
  54. package/esm/initialize.d.ts.map +1 -1
  55. package/esm/initialize.js +5 -0
  56. package/esm/initialize.js.map +1 -1
  57. package/esm/jsx.d.ts +83 -2
  58. package/esm/jsx.d.ts.map +1 -1
  59. package/esm/models/children-list.d.ts +5 -1
  60. package/esm/models/children-list.d.ts.map +1 -1
  61. package/esm/models/partial-element.d.ts +12 -2
  62. package/esm/models/partial-element.d.ts.map +1 -1
  63. package/esm/models/render-options.d.ts +89 -3
  64. package/esm/models/render-options.d.ts.map +1 -1
  65. package/esm/models/selection-state.d.ts +4 -0
  66. package/esm/models/selection-state.d.ts.map +1 -1
  67. package/esm/services/location-service.d.ts +11 -0
  68. package/esm/services/location-service.d.ts.map +1 -1
  69. package/esm/services/location-service.js +11 -0
  70. package/esm/services/location-service.js.map +1 -1
  71. package/esm/services/resource-manager.d.ts +24 -0
  72. package/esm/services/resource-manager.d.ts.map +1 -1
  73. package/esm/services/resource-manager.js +30 -0
  74. package/esm/services/resource-manager.js.map +1 -1
  75. package/esm/services/resource-manager.spec.js +93 -0
  76. package/esm/services/resource-manager.spec.js.map +1 -1
  77. package/esm/services/screen-service.d.ts +81 -4
  78. package/esm/services/screen-service.d.ts.map +1 -1
  79. package/esm/services/screen-service.js +75 -4
  80. package/esm/services/screen-service.js.map +1 -1
  81. package/esm/services/screen-service.spec.js +91 -7
  82. package/esm/services/screen-service.spec.js.map +1 -1
  83. package/esm/shade-component.d.ts +17 -4
  84. package/esm/shade-component.d.ts.map +1 -1
  85. package/esm/shade-component.js +67 -5
  86. package/esm/shade-component.js.map +1 -1
  87. package/esm/shade-host-props-ref.integration.spec.d.ts +2 -0
  88. package/esm/shade-host-props-ref.integration.spec.d.ts.map +1 -0
  89. package/esm/shade-host-props-ref.integration.spec.js +381 -0
  90. package/esm/shade-host-props-ref.integration.spec.js.map +1 -0
  91. package/esm/shade-resources.integration.spec.js +208 -39
  92. package/esm/shade-resources.integration.spec.js.map +1 -1
  93. package/esm/shade.d.ts +20 -17
  94. package/esm/shade.d.ts.map +1 -1
  95. package/esm/shade.js +172 -33
  96. package/esm/shade.js.map +1 -1
  97. package/esm/shade.spec.js +31 -30
  98. package/esm/shade.spec.js.map +1 -1
  99. package/esm/shades.integration.spec.js +135 -72
  100. package/esm/shades.integration.spec.js.map +1 -1
  101. package/esm/style-manager.d.ts +2 -2
  102. package/esm/style-manager.js +2 -2
  103. package/esm/svg-types.d.ts +389 -0
  104. package/esm/svg-types.d.ts.map +1 -0
  105. package/esm/svg-types.js +9 -0
  106. package/esm/svg-types.js.map +1 -0
  107. package/esm/svg.d.ts +15 -0
  108. package/esm/svg.d.ts.map +1 -0
  109. package/esm/svg.js +76 -0
  110. package/esm/svg.js.map +1 -0
  111. package/esm/svg.spec.d.ts +2 -0
  112. package/esm/svg.spec.d.ts.map +1 -0
  113. package/esm/svg.spec.js +80 -0
  114. package/esm/svg.spec.js.map +1 -0
  115. package/esm/vnode.d.ts +103 -0
  116. package/esm/vnode.d.ts.map +1 -0
  117. package/esm/vnode.integration.spec.d.ts +2 -0
  118. package/esm/vnode.integration.spec.d.ts.map +1 -0
  119. package/esm/vnode.integration.spec.js +494 -0
  120. package/esm/vnode.integration.spec.js.map +1 -0
  121. package/esm/vnode.js +453 -0
  122. package/esm/vnode.js.map +1 -0
  123. package/esm/vnode.spec.d.ts +2 -0
  124. package/esm/vnode.spec.d.ts.map +1 -0
  125. package/esm/vnode.spec.js +473 -0
  126. package/esm/vnode.spec.js.map +1 -0
  127. package/package.json +3 -3
  128. package/src/component-factory.spec.tsx +18 -5
  129. package/src/components/index.ts +4 -1
  130. package/src/components/lazy-load.spec.tsx +82 -75
  131. package/src/components/lazy-load.tsx +49 -27
  132. package/src/components/link-to-route.spec.tsx +25 -21
  133. package/src/components/link-to-route.tsx +4 -2
  134. package/src/components/nested-route-link.spec.tsx +303 -0
  135. package/src/components/nested-route-link.tsx +100 -0
  136. package/src/components/nested-route-types.ts +42 -0
  137. package/src/components/nested-router.spec.tsx +817 -0
  138. package/src/components/nested-router.tsx +256 -0
  139. package/src/components/route-link.spec.tsx +22 -18
  140. package/src/components/route-link.tsx +6 -5
  141. package/src/components/router.spec.tsx +109 -108
  142. package/src/components/router.tsx +15 -2
  143. package/src/initialize.ts +12 -0
  144. package/src/jsx.ts +129 -2
  145. package/src/models/children-list.ts +7 -1
  146. package/src/models/partial-element.ts +13 -2
  147. package/src/models/render-options.ts +90 -3
  148. package/src/models/selection-state.ts +4 -0
  149. package/src/services/location-service.tsx +11 -0
  150. package/src/services/resource-manager.spec.ts +116 -0
  151. package/src/services/resource-manager.ts +30 -0
  152. package/src/services/screen-service.spec.ts +109 -7
  153. package/src/services/screen-service.ts +81 -4
  154. package/src/shade-component.ts +72 -6
  155. package/src/shade-host-props-ref.integration.spec.tsx +460 -0
  156. package/src/shade-resources.integration.spec.tsx +276 -52
  157. package/src/shade.spec.tsx +40 -39
  158. package/src/shade.ts +186 -58
  159. package/src/shades.integration.spec.tsx +154 -80
  160. package/src/style-manager.ts +2 -2
  161. package/src/svg-types.ts +437 -0
  162. package/src/svg.spec.ts +89 -0
  163. package/src/svg.ts +78 -0
  164. package/src/vnode.integration.spec.tsx +657 -0
  165. package/src/vnode.spec.ts +579 -0
  166. package/src/vnode.ts +508 -0
@@ -1,27 +1,94 @@
1
1
  import { ObservableValue } from '@furystack/utils';
2
+ /**
3
+ * Available screen size breakpoint identifiers, ordered from smallest to largest.
4
+ */
2
5
  export declare const ScreenSizes: readonly ["xs", "sm", "md", "lg", "xl"];
6
+ /**
7
+ * A screen size breakpoint identifier.
8
+ */
3
9
  export type ScreenSize = (typeof ScreenSizes)[number];
10
+ /**
11
+ * Breakpoint definition with name and size constraints.
12
+ */
4
13
  export type Breakpoint = {
5
14
  name: ScreenSize;
6
15
  minSize: number;
7
16
  maxSize?: number;
8
17
  };
9
18
  /**
10
- * Service for handling screen size changes
19
+ * Service for detecting and subscribing to screen size and orientation changes.
20
+ *
21
+ * This service provides reactive observables for responsive design decisions.
22
+ * Use `screenSize.atLeast[size]` to check if the viewport is at least a certain size.
23
+ *
24
+ * **Breakpoint Thresholds:**
25
+ * - `xs`: 0px+ (all sizes)
26
+ * - `sm`: 600px+ (small tablets and up)
27
+ * - `md`: 960px+ (tablets and up)
28
+ * - `lg`: 1280px+ (desktops and up)
29
+ * - `xl`: 1920px+ (large desktops)
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const screenService = injector.getInstance(ScreenService);
34
+ *
35
+ * // Check if screen is at least medium size
36
+ * if (screenService.screenSize.atLeast.md.getValue()) {
37
+ * // Show desktop layout
38
+ * }
39
+ *
40
+ * // Subscribe to size changes for responsive behavior
41
+ * screenService.screenSize.atLeast.md.subscribe((isAtLeastMd) => {
42
+ * if (isAtLeastMd) {
43
+ * console.log('Desktop or tablet view');
44
+ * } else {
45
+ * console.log('Mobile view');
46
+ * }
47
+ * });
48
+ *
49
+ * // Get current breakpoint by checking from largest to smallest
50
+ * const getCurrentBreakpoint = (): ScreenSize => {
51
+ * if (screenService.screenSize.atLeast.xl.getValue()) return 'xl';
52
+ * if (screenService.screenSize.atLeast.lg.getValue()) return 'lg';
53
+ * if (screenService.screenSize.atLeast.md.getValue()) return 'md';
54
+ * if (screenService.screenSize.atLeast.sm.getValue()) return 'sm';
55
+ * return 'xs';
56
+ * };
57
+ *
58
+ * // Subscribe to orientation changes
59
+ * screenService.orientation.subscribe((orientation) => {
60
+ * console.log(`Screen is now in ${orientation} mode`);
61
+ * });
62
+ * ```
11
63
  */
12
64
  export declare class ScreenService implements Disposable {
13
65
  private getOrientation;
14
66
  /**
15
- * The definitions of the breakpoints
67
+ * The definitions of the breakpoint thresholds in pixels.
68
+ * Each breakpoint represents the minimum width for that size category.
16
69
  */
17
70
  readonly breakpoints: {
18
71
  [K in ScreenSize]: {
19
72
  minSize: number;
20
73
  };
21
74
  };
75
+ /**
76
+ * Cleans up event listeners when the service is disposed.
77
+ */
22
78
  [Symbol.dispose](): void;
23
79
  /**
24
- * Observers for the current screen size. Will refresh on resize
80
+ * Observable values for checking if the screen is at least a certain size.
81
+ *
82
+ * Each observable emits `true` when the viewport width is >= the breakpoint threshold,
83
+ * and `false` otherwise. Values update automatically on window resize.
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * // Hide sidebar on small screens
88
+ * screenService.screenSize.atLeast.md.subscribe((isAtLeastMd) => {
89
+ * sidebarVisible.setValue(isAtLeastMd);
90
+ * });
91
+ * ```
25
92
  */
26
93
  readonly screenSize: {
27
94
  atLeast: {
@@ -30,7 +97,17 @@ export declare class ScreenService implements Disposable {
30
97
  };
31
98
  private screenSizeAtLeast;
32
99
  /**
33
- * Observable value for tracking the screen orientation
100
+ * Observable value for tracking the screen orientation.
101
+ * Emits 'landscape' or 'portrait' based on the current viewport dimensions.
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * screenService.orientation.subscribe((orientation) => {
106
+ * if (orientation === 'landscape') {
107
+ * // Adjust layout for landscape mode
108
+ * }
109
+ * });
110
+ * ```
34
111
  */
35
112
  orientation: ObservableValue<"landscape" | "portrait">;
36
113
  private onResizeListener;
@@ -1 +1 @@
1
- {"version":3,"file":"screen-service.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,eAAO,MAAM,WAAW,yCAA0C,CAAA;AAElE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF;;GAEG;AACH,qBACa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,cAAc,CAA2F;IAEjH;;OAEG;IACH,SAAgB,WAAW,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE;KAAE,CAMtE;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;IAIvB;;OAEG;IACH,SAAgB,UAAU,EAAE;QAC1B,OAAO,EAAE;aAAG,CAAC,IAAI,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC;SAAE,CAAA;KACzD,CAQA;IAED,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,4CAAuE;IAEzF,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,aAAa;;CAWtB"}
1
+ {"version":3,"file":"screen-service.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,WAAW,yCAA0C,CAAA;AAElE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBACa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,cAAc,CAA2F;IAEjH;;;OAGG;IACH,SAAgB,WAAW,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE;KAAE,CAMtE;IAED;;OAEG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC;IAIvB;;;;;;;;;;;;;OAaG;IACH,SAAgB,UAAU,EAAE;QAC1B,OAAO,EAAE;aAAG,CAAC,IAAI,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC;SAAE,CAAA;KACzD,CAQA;IAED,OAAO,CAAC,iBAAiB;IAIzB;;;;;;;;;;;;OAYG;IACI,WAAW,4CAAuE;IAEzF,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,aAAa;;CAWtB"}
@@ -9,14 +9,61 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import { Injectable } from '@furystack/inject';
11
11
  import { ObservableValue } from '@furystack/utils';
12
+ /**
13
+ * Available screen size breakpoint identifiers, ordered from smallest to largest.
14
+ */
12
15
  export const ScreenSizes = ['xs', 'sm', 'md', 'lg', 'xl'];
13
16
  /**
14
- * Service for handling screen size changes
17
+ * Service for detecting and subscribing to screen size and orientation changes.
18
+ *
19
+ * This service provides reactive observables for responsive design decisions.
20
+ * Use `screenSize.atLeast[size]` to check if the viewport is at least a certain size.
21
+ *
22
+ * **Breakpoint Thresholds:**
23
+ * - `xs`: 0px+ (all sizes)
24
+ * - `sm`: 600px+ (small tablets and up)
25
+ * - `md`: 960px+ (tablets and up)
26
+ * - `lg`: 1280px+ (desktops and up)
27
+ * - `xl`: 1920px+ (large desktops)
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const screenService = injector.getInstance(ScreenService);
32
+ *
33
+ * // Check if screen is at least medium size
34
+ * if (screenService.screenSize.atLeast.md.getValue()) {
35
+ * // Show desktop layout
36
+ * }
37
+ *
38
+ * // Subscribe to size changes for responsive behavior
39
+ * screenService.screenSize.atLeast.md.subscribe((isAtLeastMd) => {
40
+ * if (isAtLeastMd) {
41
+ * console.log('Desktop or tablet view');
42
+ * } else {
43
+ * console.log('Mobile view');
44
+ * }
45
+ * });
46
+ *
47
+ * // Get current breakpoint by checking from largest to smallest
48
+ * const getCurrentBreakpoint = (): ScreenSize => {
49
+ * if (screenService.screenSize.atLeast.xl.getValue()) return 'xl';
50
+ * if (screenService.screenSize.atLeast.lg.getValue()) return 'lg';
51
+ * if (screenService.screenSize.atLeast.md.getValue()) return 'md';
52
+ * if (screenService.screenSize.atLeast.sm.getValue()) return 'sm';
53
+ * return 'xs';
54
+ * };
55
+ *
56
+ * // Subscribe to orientation changes
57
+ * screenService.orientation.subscribe((orientation) => {
58
+ * console.log(`Screen is now in ${orientation} mode`);
59
+ * });
60
+ * ```
15
61
  */
16
62
  let ScreenService = class ScreenService {
17
63
  getOrientation = () => (window.matchMedia?.('(orientation:landscape').matches ? 'landscape' : 'portrait');
18
64
  /**
19
- * The definitions of the breakpoints
65
+ * The definitions of the breakpoint thresholds in pixels.
66
+ * Each breakpoint represents the minimum width for that size category.
20
67
  */
21
68
  breakpoints = {
22
69
  xl: { minSize: 1920 },
@@ -25,11 +72,25 @@ let ScreenService = class ScreenService {
25
72
  sm: { minSize: 600 },
26
73
  xs: { minSize: 0 },
27
74
  };
75
+ /**
76
+ * Cleans up event listeners when the service is disposed.
77
+ */
28
78
  [Symbol.dispose]() {
29
79
  window.removeEventListener('resize', this.onResizeListener);
30
80
  }
31
81
  /**
32
- * Observers for the current screen size. Will refresh on resize
82
+ * Observable values for checking if the screen is at least a certain size.
83
+ *
84
+ * Each observable emits `true` when the viewport width is >= the breakpoint threshold,
85
+ * and `false` otherwise. Values update automatically on window resize.
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * // Hide sidebar on small screens
90
+ * screenService.screenSize.atLeast.md.subscribe((isAtLeastMd) => {
91
+ * sidebarVisible.setValue(isAtLeastMd);
92
+ * });
93
+ * ```
33
94
  */
34
95
  screenSize = {
35
96
  atLeast: {
@@ -44,7 +105,17 @@ let ScreenService = class ScreenService {
44
105
  return window.innerWidth >= this.breakpoints[size].minSize;
45
106
  }
46
107
  /**
47
- * Observable value for tracking the screen orientation
108
+ * Observable value for tracking the screen orientation.
109
+ * Emits 'landscape' or 'portrait' based on the current viewport dimensions.
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * screenService.orientation.subscribe((orientation) => {
114
+ * if (orientation === 'landscape') {
115
+ * // Adjust layout for landscape mode
116
+ * }
117
+ * });
118
+ * ```
48
119
  */
49
120
  orientation = new ObservableValue(this.getOrientation());
50
121
  onResizeListener = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"screen-service.js","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAMlE;;GAEG;AAEI,IAAM,aAAa,GAAnB,MAAM,aAAa;IAChB,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAEjH;;OAEG;IACa,WAAW,GAA+C;QACxE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACrB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACrB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACpB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACpB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;KACnB,CAAA;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC7D,CAAC;IAED;;OAEG;IACa,UAAU,GAEtB;QACF,OAAO,EAAE;YACP,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAC/D;KACF,CAAA;IAEO,iBAAiB,CAAC,IAAgB;QACxC,OAAO,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IAC5D,CAAC;IAED;;OAEG;IACI,WAAW,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;IAEjF,gBAAgB,GAAG,GAAG,EAAE;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAA;IAEO,aAAa;QACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAChD,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;QACE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;CACF,CAAA;AAzDY,aAAa;IADzB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;GACzB,aAAa,CAyDzB"}
1
+ {"version":3,"file":"screen-service.js","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAYlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEI,IAAM,aAAa,GAAnB,MAAM,aAAa;IAChB,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAEjH;;;OAGG;IACa,WAAW,GAA+C;QACxE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACrB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACrB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACpB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACpB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;KACnB,CAAA;IAED;;OAEG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC7D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACa,UAAU,GAEtB;QACF,OAAO,EAAE;YACP,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAC/D;KACF,CAAA;IAEO,iBAAiB,CAAC,IAAgB;QACxC,OAAO,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IAC5D,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,WAAW,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;IAEjF,gBAAgB,GAAG,GAAG,EAAE;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAA;IAEO,aAAa;QACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAChD,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;QACE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;CACF,CAAA;AAlFY,aAAa;IADzB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;GACzB,aAAa,CAkFzB"}
@@ -1,24 +1,108 @@
1
1
  import { Injector } from '@furystack/inject';
2
2
  import { usingAsync } from '@furystack/utils';
3
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
- import { ScreenService } from './screen-service.js';
3
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
4
+ import { ScreenService, ScreenSizes } from './screen-service.js';
5
5
  describe('ScreenService', () => {
6
6
  beforeEach(() => {
7
7
  document.body.innerHTML = '<div id="root"></div>';
8
8
  });
9
9
  afterEach(() => {
10
10
  document.body.innerHTML = '';
11
+ vi.restoreAllMocks();
11
12
  });
12
- it('Shuld be constructed', async () => {
13
+ it('Should be constructed', async () => {
13
14
  await usingAsync(new Injector(), async (i) => {
14
15
  const s = i.getInstance(ScreenService);
15
16
  expect(s).toBeInstanceOf(ScreenService);
16
17
  });
17
18
  });
18
- it('Shuld update state on events', async () => {
19
- await usingAsync(new Injector(), async (i) => {
20
- i.getInstance(ScreenService);
21
- /** TODO */
19
+ describe('breakpoints', () => {
20
+ it('Should have correct breakpoint definitions', async () => {
21
+ await usingAsync(new Injector(), async (i) => {
22
+ const s = i.getInstance(ScreenService);
23
+ expect(s.breakpoints.xs.minSize).toBe(0);
24
+ expect(s.breakpoints.sm.minSize).toBe(600);
25
+ expect(s.breakpoints.md.minSize).toBe(960);
26
+ expect(s.breakpoints.lg.minSize).toBe(1280);
27
+ expect(s.breakpoints.xl.minSize).toBe(1920);
28
+ });
29
+ });
30
+ });
31
+ describe('screenSize.atLeast', () => {
32
+ it('Should have observable for each screen size', async () => {
33
+ await usingAsync(new Injector(), async (i) => {
34
+ const s = i.getInstance(ScreenService);
35
+ for (const size of ScreenSizes) {
36
+ expect(s.screenSize.atLeast[size]).toBeDefined();
37
+ expect(typeof s.screenSize.atLeast[size].getValue()).toBe('boolean');
38
+ }
39
+ });
40
+ });
41
+ it('Should return true for xs on any screen size', async () => {
42
+ await usingAsync(new Injector(), async (i) => {
43
+ const s = i.getInstance(ScreenService);
44
+ // xs has minSize 0, so it should always be true
45
+ expect(s.screenSize.atLeast.xs.getValue()).toBe(true);
46
+ });
47
+ });
48
+ it('Should update screenSize observables on window resize', async () => {
49
+ await usingAsync(new Injector(), async (i) => {
50
+ const s = i.getInstance(ScreenService);
51
+ // Mock window.innerWidth to simulate a large screen
52
+ vi.spyOn(window, 'innerWidth', 'get').mockReturnValue(1920);
53
+ // Trigger resize event
54
+ window.dispatchEvent(new Event('resize'));
55
+ // All breakpoints should be true for 1920px width
56
+ expect(s.screenSize.atLeast.xs.getValue()).toBe(true);
57
+ expect(s.screenSize.atLeast.sm.getValue()).toBe(true);
58
+ expect(s.screenSize.atLeast.md.getValue()).toBe(true);
59
+ expect(s.screenSize.atLeast.lg.getValue()).toBe(true);
60
+ expect(s.screenSize.atLeast.xl.getValue()).toBe(true);
61
+ // Mock a small screen
62
+ vi.spyOn(window, 'innerWidth', 'get').mockReturnValue(500);
63
+ window.dispatchEvent(new Event('resize'));
64
+ // Only xs should be true for 500px width
65
+ expect(s.screenSize.atLeast.xs.getValue()).toBe(true);
66
+ expect(s.screenSize.atLeast.sm.getValue()).toBe(false);
67
+ expect(s.screenSize.atLeast.md.getValue()).toBe(false);
68
+ expect(s.screenSize.atLeast.lg.getValue()).toBe(false);
69
+ expect(s.screenSize.atLeast.xl.getValue()).toBe(false);
70
+ });
71
+ });
72
+ });
73
+ describe('orientation', () => {
74
+ it('Should have an orientation observable', async () => {
75
+ await usingAsync(new Injector(), async (i) => {
76
+ const s = i.getInstance(ScreenService);
77
+ const orientation = s.orientation.getValue();
78
+ expect(['landscape', 'portrait']).toContain(orientation);
79
+ });
80
+ });
81
+ it('Should update orientation on resize', async () => {
82
+ // Mock matchMedia before creating the service
83
+ const matchMediaMock = vi.fn();
84
+ window.matchMedia = matchMediaMock;
85
+ await usingAsync(new Injector(), async (i) => {
86
+ // Set initial orientation to landscape
87
+ matchMediaMock.mockReturnValue({ matches: true });
88
+ const s = i.getInstance(ScreenService);
89
+ // Verify initial landscape
90
+ window.dispatchEvent(new Event('resize'));
91
+ expect(s.orientation.getValue()).toBe('landscape');
92
+ // Change to portrait
93
+ matchMediaMock.mockReturnValue({ matches: false });
94
+ window.dispatchEvent(new Event('resize'));
95
+ expect(s.orientation.getValue()).toBe('portrait');
96
+ });
97
+ });
98
+ });
99
+ describe('disposal', () => {
100
+ it('Should remove resize event listener on dispose', async () => {
101
+ const removeEventListenerSpy = vi.spyOn(window, 'removeEventListener');
102
+ await usingAsync(new Injector(), async (i) => {
103
+ i.getInstance(ScreenService);
104
+ });
105
+ expect(removeEventListenerSpy).toHaveBeenCalledWith('resize', expect.any(Function));
22
106
  });
23
107
  });
24
108
  });
@@ -1 +1 @@
1
- {"version":3,"file":"screen-service.spec.js","sourceRoot":"","sources":["../../src/services/screen-service.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAA;IACnD,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;YACtC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;YAC5B,WAAW;QACb,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"screen-service.spec.js","sourceRoot":"","sources":["../../src/services/screen-service.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEhE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAA;IACnD,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QAC5B,EAAE,CAAC,eAAe,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;YACtC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBAEtC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC1C,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC1C,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC3C,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBAEtC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;oBAChD,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBACtE,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBACtC,gDAAgD;gBAChD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBAEtC,oDAAoD;gBACpD,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;gBAE3D,uBAAuB;gBACvB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAEzC,kDAAkD;gBAClD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAErD,sBAAsB;gBACtB,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;gBAC1D,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAEzC,yCAAyC;gBACzC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACxD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBACtC,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA;gBAC5C,MAAM,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,8CAA8C;YAC9C,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;YAC9B,MAAM,CAAC,UAAU,GAAG,cAAc,CAAA;YAElC,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,uCAAuC;gBACvC,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAoB,CAAC,CAAA;gBACnE,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBAEtC,2BAA2B;gBAC3B,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACzC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAElD,qBAAqB;gBACrB,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAoB,CAAC,CAAA;gBACpE,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACzC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACnD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,sBAAsB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;YAEtE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;YAC9B,CAAC,CAAC,CAAA;YAEF,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,10 +1,15 @@
1
1
  import type { ChildrenList, ShadeComponent } from './models/index.js';
2
2
  /**
3
- * Appends a list of items to a HTML element
3
+ * When true, the JSX factory produces VNode descriptors instead of real DOM elements.
4
+ * Set to true by `_performUpdate` before calling `render()`, then back to false after.
5
+ */
6
+ export declare const setRenderMode: (mode: boolean) => void;
7
+ /**
8
+ * Appends a list of items to an element
4
9
  * @param el the root element
5
10
  * @param children array of items to append
6
11
  */
7
- export declare const appendChild: (el: HTMLElement | DocumentFragment, children: ChildrenList) => void;
12
+ export declare const appendChild: (el: Element | DocumentFragment, children: ChildrenList) => void;
8
13
  export declare const hasStyle: (props: unknown) => props is {
9
14
  style: Partial<CSSStyleDeclaration>;
10
15
  };
@@ -20,6 +25,14 @@ export declare const attachDataAttributes: <TProps extends object>(el: HTMLEleme
20
25
  * @param props The Props to attach
21
26
  */
22
27
  export declare const attachProps: <TProps extends object>(el: HTMLElement, props: TProps) => void;
28
+ /**
29
+ * Attaches properties to an SVG element via setAttribute.
30
+ * SVG attributes are XML-based and must be set via setAttribute,
31
+ * not via property assignment like HTML elements.
32
+ * @param el The target SVG element
33
+ * @param props The props to attach
34
+ */
35
+ export declare const attachSvgProps: <TProps extends object>(el: Element, props: TProps) => void;
23
36
  type CreateComponentArgs<TProps> = [
24
37
  elementType: string | ShadeComponent<TProps>,
25
38
  props: TProps,
@@ -29,9 +42,9 @@ type CreateComponentArgs<TProps> = [
29
42
  * Factory method that creates a component. This should be configured as a default JSX Factory in tsconfig.
30
43
  * @returns the created JSX element
31
44
  */
32
- export declare const createComponentInner: <TProps extends object>(...[elementType, props, ...children]: CreateComponentArgs<TProps>) => HTMLElement | undefined;
45
+ export declare const createComponentInner: <TProps extends object>(...[elementType, props, ...children]: CreateComponentArgs<TProps>) => HTMLElement | SVGElement | undefined;
33
46
  type CreateFragmentArgs = [props: null, ...children: ChildrenList];
34
47
  export declare const createFragmentInner: (...[_props, ...children]: CreateFragmentArgs) => DocumentFragment;
35
- export declare const createComponent: <TProps extends object>(...args: CreateComponentArgs<TProps> | CreateFragmentArgs) => HTMLElement | DocumentFragment | undefined;
48
+ export declare const createComponent: <TProps extends object>(...args: CreateComponentArgs<TProps> | CreateFragmentArgs) => HTMLElement | SVGElement | DocumentFragment | undefined;
36
49
  export {};
37
50
  //# sourceMappingURL=shade-component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shade-component.d.ts","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGrE;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,IAAI,WAAW,GAAG,gBAAgB,EAAE,UAAU,YAAY,SAYrF,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAIvF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,IAAI,WAAW,EAAE,OAAO,OAAO,SAS3D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,MAAM,EAAE,IAAI,WAAW,EAAE,OAAO,MAAM,SAMzF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,SAAS,MAAM,EAAE,IAAI,WAAW,EAAE,OAAO,MAAM,SAahF,CAAA;AAED,KAAK,mBAAmB,CAAC,MAAM,IAAI;IACjC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,MAAM;IACb,GAAG,QAAQ,EAAE,YAAY;CAC1B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,MAAM,EACxD,GAAG,mCAAmC,mBAAmB,CAAC,MAAM,CAAC,4BAiBlE,CAAA;AAED,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAA;AAElE,eAAO,MAAM,mBAAmB,GAAI,GAAG,uBAAuB,kBAAkB,qBAI/E,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,GAAG,kBAAkB,+CAK/G,CAAA"}
1
+ {"version":3,"file":"shade-component.d.ts","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAWrE;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,OAAO,KAAG,IAE7C,CAAA;AAMD;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,IAAI,OAAO,GAAG,gBAAgB,EAAE,UAAU,YAAY,SAYjF,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAIvF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,IAAI,WAAW,EAAE,OAAO,OAAO,SAS3D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,MAAM,EAAE,IAAI,WAAW,EAAE,OAAO,MAAM,SAMzF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,SAAS,MAAM,EAAE,IAAI,WAAW,EAAE,OAAO,MAAM,SAahF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,MAAM,EAAE,IAAI,OAAO,EAAE,OAAO,MAAM,SAiB/E,CAAA;AAED,KAAK,mBAAmB,CAAC,MAAM,IAAI;IACjC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,MAAM;IACb,GAAG,QAAQ,EAAE,YAAY;CAC1B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,MAAM,EACxD,GAAG,mCAAmC,mBAAmB,CAAC,MAAM,CAAC,yCAsBlE,CAAA;AAED,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAA;AAElE,eAAO,MAAM,mBAAmB,GAAI,GAAG,uBAAuB,kBAAkB,qBAI/E,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,GAAG,kBAAkB,4DAoB/G,CAAA"}
@@ -1,6 +1,22 @@
1
1
  import { isShadeComponent } from './models/shade-component.js';
2
+ import { SVG_NS, isSvgTag } from './svg.js';
3
+ import { createVNode } from './vnode.js';
4
+ // ---------------------------------------------------------------------------
5
+ // Render-mode toggle
6
+ // ---------------------------------------------------------------------------
7
+ let renderMode = false;
2
8
  /**
3
- * Appends a list of items to a HTML element
9
+ * When true, the JSX factory produces VNode descriptors instead of real DOM elements.
10
+ * Set to true by `_performUpdate` before calling `render()`, then back to false after.
11
+ */
12
+ export const setRenderMode = (mode) => {
13
+ renderMode = mode;
14
+ };
15
+ // ---------------------------------------------------------------------------
16
+ // Real-DOM helpers (used outside render mode)
17
+ // ---------------------------------------------------------------------------
18
+ /**
19
+ * Appends a list of items to an element
4
20
  * @param el the root element
5
21
  * @param children array of items to append
6
22
  */
@@ -10,7 +26,7 @@ export const appendChild = (el, children) => {
10
26
  el.appendChild(document.createTextNode(child));
11
27
  }
12
28
  else {
13
- if (child instanceof HTMLElement || child instanceof DocumentFragment) {
29
+ if (child instanceof Element || child instanceof DocumentFragment) {
14
30
  el.appendChild(child);
15
31
  }
16
32
  else if (child instanceof Array) {
@@ -39,7 +55,7 @@ export const attachStyles = (el, props) => {
39
55
  export const attachDataAttributes = (el, props) => {
40
56
  if (props) {
41
57
  Object.entries(props)
42
- .filter(([key]) => key.startsWith('data-'))
58
+ .filter(([key]) => key.startsWith('data-') || key.startsWith('aria-'))
43
59
  .forEach(([key, value]) => el.setAttribute(key, value || ''));
44
60
  }
45
61
  };
@@ -62,14 +78,50 @@ export const attachProps = (el, props) => {
62
78
  }
63
79
  attachDataAttributes(el, props);
64
80
  };
81
+ /**
82
+ * Attaches properties to an SVG element via setAttribute.
83
+ * SVG attributes are XML-based and must be set via setAttribute,
84
+ * not via property assignment like HTML elements.
85
+ * @param el The target SVG element
86
+ * @param props The props to attach
87
+ */
88
+ export const attachSvgProps = (el, props) => {
89
+ if (!props) {
90
+ return;
91
+ }
92
+ for (const [key, value] of Object.entries(props)) {
93
+ if (key === 'style' && typeof value === 'object' && value !== null) {
94
+ for (const [sk, sv] of Object.entries(value)) {
95
+ ;
96
+ el.style[sk] = sv;
97
+ }
98
+ }
99
+ else if (key === 'className') {
100
+ el.setAttribute('class', String(value));
101
+ }
102
+ else if (key.startsWith('on') && typeof value === 'function') {
103
+ ;
104
+ el[key] = value;
105
+ }
106
+ else if (value !== null && value !== undefined && value !== false) {
107
+ el.setAttribute(key, String(value));
108
+ }
109
+ }
110
+ };
65
111
  /**
66
112
  * Factory method that creates a component. This should be configured as a default JSX Factory in tsconfig.
67
113
  * @returns the created JSX element
68
114
  */
69
115
  export const createComponentInner = (...[elementType, props, ...children]) => {
70
116
  if (typeof elementType === 'string') {
71
- const el = document.createElement(elementType);
72
- attachProps(el, props);
117
+ const isSvg = isSvgTag(elementType);
118
+ const el = isSvg ? document.createElementNS(SVG_NS, elementType) : document.createElement(elementType);
119
+ if (isSvg) {
120
+ attachSvgProps(el, props);
121
+ }
122
+ else {
123
+ attachProps(el, props);
124
+ }
73
125
  if (children) {
74
126
  appendChild(el, children);
75
127
  }
@@ -88,6 +140,16 @@ export const createFragmentInner = (...[_props, ...children]) => {
88
140
  return fragment;
89
141
  };
90
142
  export const createComponent = (...args) => {
143
+ // In render mode, produce VNode descriptors instead of real DOM elements
144
+ if (renderMode) {
145
+ const [type, props, ...children] = args;
146
+ // When jsxFragmentFactory === jsxFactory (both "createComponent"), the compiler
147
+ // passes createComponent itself as the first arg for fragments: createComponent(createComponent, null, ...)
148
+ if (type === null || type === createComponent) {
149
+ return createVNode(null, null, ...children);
150
+ }
151
+ return createVNode(type, props, ...children);
152
+ }
91
153
  if (args[0] === null) {
92
154
  return createFragmentInner(...args);
93
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shade-component.js","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shade-component.js","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shade-host-props-ref.integration.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shade-host-props-ref.integration.spec.d.ts","sourceRoot":"","sources":["../src/shade-host-props-ref.integration.spec.tsx"],"names":[],"mappings":""}