@furystack/shades 11.0.35 → 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.
- package/CHANGELOG.md +337 -0
- package/README.md +99 -13
- package/esm/compile-route.spec.d.ts +2 -0
- package/esm/compile-route.spec.d.ts.map +1 -0
- package/esm/compile-route.spec.js +34 -0
- package/esm/compile-route.spec.js.map +1 -0
- package/esm/component-factory.spec.js +13 -5
- package/esm/component-factory.spec.js.map +1 -1
- package/esm/components/index.d.ts +4 -1
- package/esm/components/index.d.ts.map +1 -1
- package/esm/components/index.js +4 -1
- package/esm/components/index.js.map +1 -1
- package/esm/components/lazy-load.d.ts +2 -4
- package/esm/components/lazy-load.d.ts.map +1 -1
- package/esm/components/lazy-load.js +40 -24
- package/esm/components/lazy-load.js.map +1 -1
- package/esm/components/lazy-load.spec.js +57 -50
- package/esm/components/lazy-load.spec.js.map +1 -1
- package/esm/components/link-to-route.d.ts +2 -0
- package/esm/components/link-to-route.d.ts.map +1 -1
- package/esm/components/link-to-route.js +3 -2
- package/esm/components/link-to-route.js.map +1 -1
- package/esm/components/link-to-route.spec.js +13 -9
- package/esm/components/link-to-route.spec.js.map +1 -1
- package/esm/components/nested-route-link.d.ts +62 -0
- package/esm/components/nested-route-link.d.ts.map +1 -0
- package/esm/components/nested-route-link.js +66 -0
- package/esm/components/nested-route-link.js.map +1 -0
- package/esm/components/nested-route-link.spec.d.ts +2 -0
- package/esm/components/nested-route-link.spec.d.ts.map +1 -0
- package/esm/components/nested-route-link.spec.js +179 -0
- package/esm/components/nested-route-link.spec.js.map +1 -0
- package/esm/components/nested-route-types.d.ts +37 -0
- package/esm/components/nested-route-types.d.ts.map +1 -0
- package/esm/components/nested-route-types.js +2 -0
- package/esm/components/nested-route-types.js.map +1 -0
- package/esm/components/nested-router.d.ts +103 -0
- package/esm/components/nested-router.d.ts.map +1 -0
- package/esm/components/nested-router.js +178 -0
- package/esm/components/nested-router.js.map +1 -0
- package/esm/components/nested-router.spec.d.ts +2 -0
- package/esm/components/nested-router.spec.d.ts.map +1 -0
- package/esm/components/nested-router.spec.js +659 -0
- package/esm/components/nested-router.spec.js.map +1 -0
- package/esm/components/route-link.d.ts +4 -0
- package/esm/components/route-link.d.ts.map +1 -1
- package/esm/components/route-link.js +9 -10
- package/esm/components/route-link.js.map +1 -1
- package/esm/components/route-link.spec.js +16 -12
- package/esm/components/route-link.spec.js.map +1 -1
- package/esm/components/router.d.ts +20 -2
- package/esm/components/router.d.ts.map +1 -1
- package/esm/components/router.js +3 -0
- package/esm/components/router.js.map +1 -1
- package/esm/components/router.spec.js +75 -74
- package/esm/components/router.spec.js.map +1 -1
- package/esm/css-generator.d.ts +50 -0
- package/esm/css-generator.d.ts.map +1 -0
- package/esm/css-generator.js +107 -0
- package/esm/css-generator.js.map +1 -0
- package/esm/css-generator.spec.d.ts +2 -0
- package/esm/css-generator.spec.d.ts.map +1 -0
- package/esm/css-generator.spec.js +162 -0
- package/esm/css-generator.spec.js.map +1 -0
- package/esm/index.d.ts +2 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -1
- package/esm/initialize.d.ts +11 -0
- package/esm/initialize.d.ts.map +1 -1
- package/esm/initialize.js +5 -0
- package/esm/initialize.js.map +1 -1
- package/esm/jsx.d.ts +83 -2
- package/esm/jsx.d.ts.map +1 -1
- package/esm/models/children-list.d.ts +5 -1
- package/esm/models/children-list.d.ts.map +1 -1
- package/esm/models/css-object.d.ts +33 -0
- package/esm/models/css-object.d.ts.map +1 -0
- package/esm/models/css-object.js +2 -0
- package/esm/models/css-object.js.map +1 -0
- package/esm/models/index.d.ts +1 -0
- package/esm/models/index.d.ts.map +1 -1
- package/esm/models/index.js +1 -0
- package/esm/models/index.js.map +1 -1
- package/esm/models/partial-element.d.ts +12 -2
- package/esm/models/partial-element.d.ts.map +1 -1
- package/esm/models/render-options.d.ts +89 -3
- package/esm/models/render-options.d.ts.map +1 -1
- package/esm/models/selection-state.d.ts +4 -0
- package/esm/models/selection-state.d.ts.map +1 -1
- package/esm/services/location-service.d.ts +11 -0
- package/esm/services/location-service.d.ts.map +1 -1
- package/esm/services/location-service.js +11 -0
- package/esm/services/location-service.js.map +1 -1
- package/esm/services/resource-manager.d.ts +24 -0
- package/esm/services/resource-manager.d.ts.map +1 -1
- package/esm/services/resource-manager.js +30 -0
- package/esm/services/resource-manager.js.map +1 -1
- package/esm/services/resource-manager.spec.js +93 -0
- package/esm/services/resource-manager.spec.js.map +1 -1
- package/esm/services/screen-service.d.ts +81 -4
- package/esm/services/screen-service.d.ts.map +1 -1
- package/esm/services/screen-service.js +75 -4
- package/esm/services/screen-service.js.map +1 -1
- package/esm/services/screen-service.spec.js +91 -7
- package/esm/services/screen-service.spec.js.map +1 -1
- package/esm/shade-component.d.ts +17 -4
- package/esm/shade-component.d.ts.map +1 -1
- package/esm/shade-component.js +67 -5
- package/esm/shade-component.js.map +1 -1
- package/esm/shade-host-props-ref.integration.spec.d.ts +2 -0
- package/esm/shade-host-props-ref.integration.spec.d.ts.map +1 -0
- package/esm/shade-host-props-ref.integration.spec.js +381 -0
- package/esm/shade-host-props-ref.integration.spec.js.map +1 -0
- package/esm/shade-resources.integration.spec.js +208 -39
- package/esm/shade-resources.integration.spec.js.map +1 -1
- package/esm/shade.d.ts +34 -15
- package/esm/shade.d.ts.map +1 -1
- package/esm/shade.js +180 -33
- package/esm/shade.js.map +1 -1
- package/esm/shade.spec.d.ts +2 -0
- package/esm/shade.spec.d.ts.map +1 -0
- package/esm/shade.spec.js +198 -0
- package/esm/shade.spec.js.map +1 -0
- package/esm/shades.integration.spec.js +135 -72
- package/esm/shades.integration.spec.js.map +1 -1
- package/esm/style-manager.d.ts +65 -0
- package/esm/style-manager.d.ts.map +1 -0
- package/esm/style-manager.js +95 -0
- package/esm/style-manager.js.map +1 -0
- package/esm/style-manager.spec.d.ts +2 -0
- package/esm/style-manager.spec.d.ts.map +1 -0
- package/esm/style-manager.spec.js +179 -0
- package/esm/style-manager.spec.js.map +1 -0
- package/esm/styled-element.spec.d.ts +2 -0
- package/esm/styled-element.spec.d.ts.map +1 -0
- package/esm/styled-element.spec.js +86 -0
- package/esm/styled-element.spec.js.map +1 -0
- package/esm/styled-shade.spec.d.ts +2 -0
- package/esm/styled-shade.spec.d.ts.map +1 -0
- package/esm/styled-shade.spec.js +66 -0
- package/esm/styled-shade.spec.js.map +1 -0
- package/esm/svg-types.d.ts +389 -0
- package/esm/svg-types.d.ts.map +1 -0
- package/esm/svg-types.js +9 -0
- package/esm/svg-types.js.map +1 -0
- package/esm/svg.d.ts +15 -0
- package/esm/svg.d.ts.map +1 -0
- package/esm/svg.js +76 -0
- package/esm/svg.js.map +1 -0
- package/esm/svg.spec.d.ts +2 -0
- package/esm/svg.spec.d.ts.map +1 -0
- package/esm/svg.spec.js +80 -0
- package/esm/svg.spec.js.map +1 -0
- package/esm/vnode.d.ts +103 -0
- package/esm/vnode.d.ts.map +1 -0
- package/esm/vnode.integration.spec.d.ts +2 -0
- package/esm/vnode.integration.spec.d.ts.map +1 -0
- package/esm/vnode.integration.spec.js +494 -0
- package/esm/vnode.integration.spec.js.map +1 -0
- package/esm/vnode.js +453 -0
- package/esm/vnode.js.map +1 -0
- package/esm/vnode.spec.d.ts +2 -0
- package/esm/vnode.spec.d.ts.map +1 -0
- package/esm/vnode.spec.js +473 -0
- package/esm/vnode.spec.js.map +1 -0
- package/package.json +3 -3
- package/src/compile-route.spec.ts +39 -0
- package/src/component-factory.spec.tsx +18 -5
- package/src/components/index.ts +4 -1
- package/src/components/lazy-load.spec.tsx +82 -75
- package/src/components/lazy-load.tsx +49 -27
- package/src/components/link-to-route.spec.tsx +25 -21
- package/src/components/link-to-route.tsx +4 -2
- package/src/components/nested-route-link.spec.tsx +303 -0
- package/src/components/nested-route-link.tsx +100 -0
- package/src/components/nested-route-types.ts +42 -0
- package/src/components/nested-router.spec.tsx +817 -0
- package/src/components/nested-router.tsx +256 -0
- package/src/components/route-link.spec.tsx +22 -18
- package/src/components/route-link.tsx +10 -10
- package/src/components/router.spec.tsx +109 -108
- package/src/components/router.tsx +15 -2
- package/src/css-generator.spec.ts +183 -0
- package/src/css-generator.ts +117 -0
- package/src/index.ts +2 -0
- package/src/initialize.ts +12 -0
- package/src/jsx.ts +129 -2
- package/src/models/children-list.ts +7 -1
- package/src/models/css-object.ts +34 -0
- package/src/models/index.ts +1 -0
- package/src/models/partial-element.ts +13 -2
- package/src/models/render-options.ts +90 -3
- package/src/models/selection-state.ts +4 -0
- package/src/services/location-service.tsx +11 -0
- package/src/services/resource-manager.spec.ts +116 -0
- package/src/services/resource-manager.ts +30 -0
- package/src/services/screen-service.spec.ts +109 -7
- package/src/services/screen-service.ts +81 -4
- package/src/shade-component.ts +72 -6
- package/src/shade-host-props-ref.integration.spec.tsx +460 -0
- package/src/shade-resources.integration.spec.tsx +276 -52
- package/src/shade.spec.tsx +239 -0
- package/src/shade.ts +211 -56
- package/src/shades.integration.spec.tsx +154 -80
- package/src/style-manager.spec.ts +229 -0
- package/src/style-manager.ts +104 -0
- package/src/styled-element.spec.tsx +117 -0
- package/src/styled-shade.spec.ts +86 -0
- package/src/svg-types.ts +437 -0
- package/src/svg.spec.ts +89 -0
- package/src/svg.ts +78 -0
- package/src/vnode.integration.spec.tsx +657 -0
- package/src/vnode.spec.ts +579 -0
- package/src/vnode.ts +508 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-options.d.ts","sourceRoot":"","sources":["../../src/models/render-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,MAAM,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,SAAS,WAAW,GAAG,WAAW,IAAI;IAClF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;IACrD,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,
|
|
1
|
+
{"version":3,"file":"render-options.d.ts","sourceRoot":"","sources":["../../src/models/render-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,OAAO,GAAG,WAAW,IAAI;IACvD,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,SAAS,WAAW,GAAG,WAAW,IAAI;IAClF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;IACrD,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAAK,IAAI,CAAA;IAE/F;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,EAAE,CAAC,CAAC,SAAS,OAAO,GAAG,WAAW,EAAE,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAA;IAEtE;;;;;OAKG;IACH,aAAa,EAAE,CAAC,CAAC,SAAS,UAAU,GAAG,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAE3F;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,aAAa,EAAE,CAAC,CAAC,EACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAA;KAAE,KACrE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAAA;IAEhD;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAAA;IAE1F;;;;;OAKG;IACH,cAAc,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAAA;IAEhG;;;;;;OAMG;IACH,cAAc,EAAE,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,EACf,WAAW,CAAC,EAAE,OAAO,KAClB,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAAA;CACjD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-state.d.ts","sourceRoot":"","sources":["../../src/models/selection-state.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,cAAc,CAAC,EAAE;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,kBAAkB,EAAE,MAAM,EAAE,CAAA;QAC5B,SAAS,EAAE,MAAM,CAAA;QACjB,gBAAgB,EAAE,MAAM,EAAE,CAAA;KAC3B,CAAA;CACF"}
|
|
1
|
+
{"version":3,"file":"selection-state.d.ts","sourceRoot":"","sources":["../../src/models/selection-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,cAAc,CAAC,EAAE;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,kBAAkB,EAAE,MAAM,EAAE,CAAA;QAC5B,SAAS,EAAE,MAAM,CAAA;QACjB,gBAAgB,EAAE,MAAM,EAAE,CAAA;KAC3B,CAAA;CACF"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type Injector } from '@furystack/inject';
|
|
2
2
|
import { deserializeQueryString as defaultDeserializeQueryString, serializeToQueryString as defaultSerializeToQueryString } from '@furystack/rest';
|
|
3
3
|
import { ObservableValue } from '@furystack/utils';
|
|
4
|
+
/**
|
|
5
|
+
* Singleton service that tracks browser location changes (pathname, search, hash)
|
|
6
|
+
* and exposes them as observable values for reactive routing and URL-driven state.
|
|
7
|
+
*/
|
|
4
8
|
export declare class LocationService implements Disposable {
|
|
5
9
|
private readonly serializeToQueryString;
|
|
6
10
|
readonly deserializeQueryString: (fullQueryString: string) => Record<string, unknown>;
|
|
@@ -34,5 +38,12 @@ export declare class LocationService implements Disposable {
|
|
|
34
38
|
private popStateListener;
|
|
35
39
|
private hashChangeListener;
|
|
36
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Configures custom serialization for URL search state.
|
|
43
|
+
* Must be called **before** `LocationService` is first instantiated by the injector.
|
|
44
|
+
* @param injector The root injector
|
|
45
|
+
* @param serialize Function to serialize state to a query string
|
|
46
|
+
* @param deserialize Function to deserialize a query string to state
|
|
47
|
+
*/
|
|
37
48
|
export declare const useCustomSearchStateSerializer: (injector: Injector, serialize: typeof defaultSerializeToQueryString, deserialize: typeof defaultDeserializeQueryString) => void;
|
|
38
49
|
//# sourceMappingURL=location-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location-service.d.ts","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACL,sBAAsB,IAAI,6BAA6B,EACvD,sBAAsB,IAAI,6BAA6B,EACxD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,qBACa,eAAgB,YAAW,UAAU;IAE9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;aAEvB,sBAAsB;gBAFrB,sBAAsB,+CAAgC,EAEvD,sBAAsB,uDAAgC;IAoBxE,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,oBAAoB,CAAoC;IAEzD,CAAC,MAAM,CAAC,OAAO,CAAC;IAYvB;;OAEG;IACI,qBAAqB,0BAAuD;IAEnF;;OAEG;IACI,qBAAqB,0BAAsD;IAElF;;OAEG;IACI,uBAAuB,0BAA+C;IAEtE,mCAAmC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAE7E,4BAA4B,mDAEjC;IAEK,WAAW,aAIL;IAEb,SAAgB,sBAAsB,oCAA0C;IAEhF;;;;;OAKG;IACI,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IA+BrD,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,kBAAkB,CAEb;CACd;AAED,eAAO,MAAM,8BAA8B,GACzC,UAAU,QAAQ,EAClB,WAAW,OAAO,6BAA6B,EAC/C,aAAa,OAAO,6BAA6B,SAQlD,CAAA"}
|
|
1
|
+
{"version":3,"file":"location-service.d.ts","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACL,sBAAsB,IAAI,6BAA6B,EACvD,sBAAsB,IAAI,6BAA6B,EACxD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD;;;GAGG;AACH,qBACa,eAAgB,YAAW,UAAU;IAE9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;aAEvB,sBAAsB;gBAFrB,sBAAsB,+CAAgC,EAEvD,sBAAsB,uDAAgC;IAoBxE,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,oBAAoB,CAAoC;IAEzD,CAAC,MAAM,CAAC,OAAO,CAAC;IAYvB;;OAEG;IACI,qBAAqB,0BAAuD;IAEnF;;OAEG;IACI,qBAAqB,0BAAsD;IAElF;;OAEG;IACI,uBAAuB,0BAA+C;IAEtE,mCAAmC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAE7E,4BAA4B,mDAEjC;IAEK,WAAW,aAIL;IAEb,SAAgB,sBAAsB,oCAA0C;IAEhF;;;;;OAKG;IACI,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IA+BrD,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,kBAAkB,CAEb;CACd;AAED;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,GACzC,UAAU,QAAQ,EAClB,WAAW,OAAO,6BAA6B,EAC/C,aAAa,OAAO,6BAA6B,SAQlD,CAAA"}
|
|
@@ -10,6 +10,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import { Injectable } from '@furystack/inject';
|
|
11
11
|
import { deserializeQueryString as defaultDeserializeQueryString, serializeToQueryString as defaultSerializeToQueryString, } from '@furystack/rest';
|
|
12
12
|
import { ObservableValue } from '@furystack/utils';
|
|
13
|
+
/**
|
|
14
|
+
* Singleton service that tracks browser location changes (pathname, search, hash)
|
|
15
|
+
* and exposes them as observable values for reactive routing and URL-driven state.
|
|
16
|
+
*/
|
|
13
17
|
let LocationService = class LocationService {
|
|
14
18
|
serializeToQueryString;
|
|
15
19
|
deserializeQueryString;
|
|
@@ -107,6 +111,13 @@ LocationService = __decorate([
|
|
|
107
111
|
__metadata("design:paramtypes", [Object, Object])
|
|
108
112
|
], LocationService);
|
|
109
113
|
export { LocationService };
|
|
114
|
+
/**
|
|
115
|
+
* Configures custom serialization for URL search state.
|
|
116
|
+
* Must be called **before** `LocationService` is first instantiated by the injector.
|
|
117
|
+
* @param injector The root injector
|
|
118
|
+
* @param serialize Function to serialize state to a query string
|
|
119
|
+
* @param deserialize Function to deserialize a query string to state
|
|
120
|
+
*/
|
|
110
121
|
export const useCustomSearchStateSerializer = (injector, serialize, deserialize) => {
|
|
111
122
|
if (injector.cachedSingletons.has(LocationService)) {
|
|
112
123
|
throw new Error('useCustomSearchStateSerializer must be called before the LocationService is instantiated');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location-service.js","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EACL,sBAAsB,IAAI,6BAA6B,EACvD,sBAAsB,IAAI,6BAA6B,GACxD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"location-service.js","sourceRoot":"","sources":["../../src/services/location-service.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,34 @@ import { ObservableValue } from '@furystack/utils';
|
|
|
5
5
|
*/
|
|
6
6
|
export declare class ResourceManager implements AsyncDisposable {
|
|
7
7
|
private readonly disposables;
|
|
8
|
+
/**
|
|
9
|
+
* Returns an existing disposable resource by key, or creates and caches a new one.
|
|
10
|
+
* Resources are automatically disposed when the component is removed from the DOM.
|
|
11
|
+
* @param key Unique key for caching this resource
|
|
12
|
+
* @param factory Factory function called once to create the resource
|
|
13
|
+
* @returns The cached or newly created resource
|
|
14
|
+
*/
|
|
8
15
|
useDisposable<T extends Disposable | AsyncDisposable>(key: string, factory: () => T): T;
|
|
9
16
|
readonly observers: Map<string, ValueObserver<any>>;
|
|
17
|
+
/**
|
|
18
|
+
* Subscribes to an observable value by key. If the observable changes between renders,
|
|
19
|
+
* the previous subscription is disposed and a new one is created.
|
|
20
|
+
* @param key Unique key for caching this subscription
|
|
21
|
+
* @param observable The observable to subscribe to
|
|
22
|
+
* @param onChange Callback invoked when the value changes
|
|
23
|
+
* @param options Additional observer options
|
|
24
|
+
* @returns Tuple of [currentValue, setValue]
|
|
25
|
+
*/
|
|
10
26
|
useObservable: <T>(key: string, observable: ObservableValue<T>, onChange: ValueChangeCallback<T>, options?: ValueObserverOptions<T>) => [value: T, setValue: (newValue: T) => void];
|
|
11
27
|
readonly stateObservers: Map<string, ObservableValue<any>>;
|
|
28
|
+
/**
|
|
29
|
+
* Creates or retrieves a local state observable by key.
|
|
30
|
+
* State is persisted across re-renders and disposed with the component.
|
|
31
|
+
* @param key Unique key for caching this state
|
|
32
|
+
* @param initialValue Initial value used on first call
|
|
33
|
+
* @param callback Callback invoked when the state changes
|
|
34
|
+
* @returns Tuple of [currentValue, setValue]
|
|
35
|
+
*/
|
|
12
36
|
useState: <T>(key: string, initialValue: T, callback: ValueChangeCallback<T>) => [value: T, setValue: (newValue: T) => void];
|
|
13
37
|
[Symbol.asyncDispose](): Promise<void>;
|
|
14
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../../src/services/resource-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAChG,OAAO,EAAE,eAAe,EAAmC,MAAM,kBAAkB,CAAA;AAEnF;;GAEG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;
|
|
1
|
+
{"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../../src/services/resource-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAChG,OAAO,EAAE,eAAe,EAAmC,MAAM,kBAAkB,CAAA;AAEnF;;GAEG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;IAE9E;;;;;;OAMG;IACI,aAAa,CAAC,CAAC,SAAS,UAAU,GAAG,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;IAU9F,SAAgB,SAAS,kCAAwC;IAEjE;;;;;;;;OAQG;IACI,aAAa,GAAI,CAAC,EACvB,KAAK,MAAM,EACX,YAAY,eAAe,CAAC,CAAC,CAAC,EAC9B,UAAU,mBAAmB,CAAC,CAAC,CAAC,EAChC,UAAU,oBAAoB,CAAC,CAAC,CAAC,KAChC,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAc7C;IAED,SAAgB,cAAc,oCAA0C;IAExE;;;;;;;OAOG;IACI,QAAQ,GAAI,CAAC,EAClB,KAAK,MAAM,EACX,cAAc,CAAC,EACf,UAAU,mBAAmB,CAAC,CAAC,CAAC,KAC/B,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,CAQ7C;IAEY,CAAC,MAAM,CAAC,YAAY,CAAC;CA4BnC"}
|
|
@@ -5,6 +5,13 @@ import { ObservableValue, isAsyncDisposable, isDisposable } from '@furystack/uti
|
|
|
5
5
|
*/
|
|
6
6
|
export class ResourceManager {
|
|
7
7
|
disposables = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Returns an existing disposable resource by key, or creates and caches a new one.
|
|
10
|
+
* Resources are automatically disposed when the component is removed from the DOM.
|
|
11
|
+
* @param key Unique key for caching this resource
|
|
12
|
+
* @param factory Factory function called once to create the resource
|
|
13
|
+
* @returns The cached or newly created resource
|
|
14
|
+
*/
|
|
8
15
|
useDisposable(key, factory) {
|
|
9
16
|
const existing = this.disposables.get(key);
|
|
10
17
|
if (!existing) {
|
|
@@ -15,9 +22,24 @@ export class ResourceManager {
|
|
|
15
22
|
return existing;
|
|
16
23
|
}
|
|
17
24
|
observers = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Subscribes to an observable value by key. If the observable changes between renders,
|
|
27
|
+
* the previous subscription is disposed and a new one is created.
|
|
28
|
+
* @param key Unique key for caching this subscription
|
|
29
|
+
* @param observable The observable to subscribe to
|
|
30
|
+
* @param onChange Callback invoked when the value changes
|
|
31
|
+
* @param options Additional observer options
|
|
32
|
+
* @returns Tuple of [currentValue, setValue]
|
|
33
|
+
*/
|
|
18
34
|
useObservable = (key, observable, onChange, options) => {
|
|
19
35
|
const alreadyUsed = this.observers.get(key);
|
|
20
36
|
if (alreadyUsed) {
|
|
37
|
+
if (alreadyUsed.observable !== observable) {
|
|
38
|
+
alreadyUsed[Symbol.dispose]();
|
|
39
|
+
const observer = observable.subscribe(onChange, options);
|
|
40
|
+
this.observers.set(key, observer);
|
|
41
|
+
return [observable.getValue(), observable.setValue.bind(observable)];
|
|
42
|
+
}
|
|
21
43
|
return [alreadyUsed.observable.getValue(), alreadyUsed.observable.setValue.bind(alreadyUsed.observable)];
|
|
22
44
|
}
|
|
23
45
|
const observer = observable.subscribe(onChange, options);
|
|
@@ -25,6 +47,14 @@ export class ResourceManager {
|
|
|
25
47
|
return [observable.getValue(), observable.setValue.bind(observable)];
|
|
26
48
|
};
|
|
27
49
|
stateObservers = new Map();
|
|
50
|
+
/**
|
|
51
|
+
* Creates or retrieves a local state observable by key.
|
|
52
|
+
* State is persisted across re-renders and disposed with the component.
|
|
53
|
+
* @param key Unique key for caching this state
|
|
54
|
+
* @param initialValue Initial value used on first call
|
|
55
|
+
* @param callback Callback invoked when the state changes
|
|
56
|
+
* @returns Tuple of [currentValue, setValue]
|
|
57
|
+
*/
|
|
28
58
|
useState = (key, initialValue, callback) => {
|
|
29
59
|
if (!this.stateObservers.has(key)) {
|
|
30
60
|
const newObservable = new ObservableValue(initialValue);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-manager.js","sourceRoot":"","sources":["../../src/services/resource-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEnF;;GAEG;AACH,MAAM,OAAO,eAAe;IACT,WAAW,GAAG,IAAI,GAAG,EAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"resource-manager.js","sourceRoot":"","sources":["../../src/services/resource-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,99 @@ describe('ResourceManager', () => {
|
|
|
15
15
|
expect(o.getObservers().length).toBe(1);
|
|
16
16
|
});
|
|
17
17
|
});
|
|
18
|
+
it('Should switch to a new observable when a different reference is passed for the same key', async () => {
|
|
19
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
20
|
+
const o1 = new ObservableValue(1);
|
|
21
|
+
const o2 = new ObservableValue(42);
|
|
22
|
+
const onChange = vi.fn();
|
|
23
|
+
const [value1] = rm.useObservable('test', o1, onChange);
|
|
24
|
+
expect(value1).toBe(1);
|
|
25
|
+
expect(o1.getObservers().length).toBe(1);
|
|
26
|
+
const [value2] = rm.useObservable('test', o2, onChange);
|
|
27
|
+
expect(value2).toBe(42);
|
|
28
|
+
expect(o1.getObservers().length).toBe(0);
|
|
29
|
+
expect(o2.getObservers().length).toBe(1);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
it('Should subscribe with the new onChange callback when switching observables', async () => {
|
|
33
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
34
|
+
const o1 = new ObservableValue('a');
|
|
35
|
+
const o2 = new ObservableValue('x');
|
|
36
|
+
const onChange1 = vi.fn();
|
|
37
|
+
const onChange2 = vi.fn();
|
|
38
|
+
rm.useObservable('test', o1, onChange1);
|
|
39
|
+
rm.useObservable('test', o2, onChange2);
|
|
40
|
+
o2.setValue('y');
|
|
41
|
+
expect(onChange2).toHaveBeenCalledWith('y');
|
|
42
|
+
expect(onChange1).not.toHaveBeenCalled();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
it('Should not re-subscribe when the same observable reference is passed', async () => {
|
|
46
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
47
|
+
const o = new ObservableValue(1);
|
|
48
|
+
const onChange = vi.fn();
|
|
49
|
+
rm.useObservable('test', o, onChange);
|
|
50
|
+
rm.useObservable('test', o, onChange);
|
|
51
|
+
rm.useObservable('test', o, onChange);
|
|
52
|
+
expect(o.getObservers().length).toBe(1);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
it('Should return a setValue bound to the new observable after switching', async () => {
|
|
56
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
57
|
+
const o1 = new ObservableValue(1);
|
|
58
|
+
const o2 = new ObservableValue(10);
|
|
59
|
+
const onChange = vi.fn();
|
|
60
|
+
const [, setValue1] = rm.useObservable('test', o1, onChange);
|
|
61
|
+
setValue1(5);
|
|
62
|
+
expect(o1.getValue()).toBe(5);
|
|
63
|
+
const [, setValue2] = rm.useObservable('test', o2, onChange);
|
|
64
|
+
setValue2(99);
|
|
65
|
+
expect(o2.getValue()).toBe(99);
|
|
66
|
+
expect(o1.getValue()).toBe(5);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
it('Should handle multiple sequential observable switches for the same key', async () => {
|
|
70
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
71
|
+
const o1 = new ObservableValue('a');
|
|
72
|
+
const o2 = new ObservableValue('b');
|
|
73
|
+
const o3 = new ObservableValue('c');
|
|
74
|
+
const onChange = vi.fn();
|
|
75
|
+
const [v1] = rm.useObservable('test', o1, onChange);
|
|
76
|
+
expect(v1).toBe('a');
|
|
77
|
+
const [v2] = rm.useObservable('test', o2, onChange);
|
|
78
|
+
expect(v2).toBe('b');
|
|
79
|
+
expect(o1.getObservers().length).toBe(0);
|
|
80
|
+
const [v3] = rm.useObservable('test', o3, onChange);
|
|
81
|
+
expect(v3).toBe('c');
|
|
82
|
+
expect(o2.getObservers().length).toBe(0);
|
|
83
|
+
expect(o3.getObservers().length).toBe(1);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
it('Should not trigger callbacks on the old observable after switching', async () => {
|
|
87
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
88
|
+
const o1 = new ObservableValue(1);
|
|
89
|
+
const o2 = new ObservableValue(2);
|
|
90
|
+
const onChange = vi.fn();
|
|
91
|
+
rm.useObservable('test', o1, onChange);
|
|
92
|
+
rm.useObservable('test', o2, onChange);
|
|
93
|
+
onChange.mockClear();
|
|
94
|
+
o1.setValue(999);
|
|
95
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
96
|
+
o2.setValue(100);
|
|
97
|
+
expect(onChange).toHaveBeenCalledWith(100);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
it('Should clean up switched observers on dispose', async () => {
|
|
101
|
+
const o1 = new ObservableValue(1);
|
|
102
|
+
const o2 = new ObservableValue(2);
|
|
103
|
+
const onChange = vi.fn();
|
|
104
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
105
|
+
rm.useObservable('test', o1, onChange);
|
|
106
|
+
rm.useObservable('test', o2, onChange);
|
|
107
|
+
expect(o2.getObservers().length).toBe(1);
|
|
108
|
+
});
|
|
109
|
+
expect(o2.getObservers().length).toBe(0);
|
|
110
|
+
});
|
|
18
111
|
it('Should return a disposable from cache', async () => {
|
|
19
112
|
await usingAsync(new ResourceManager(), async (rm) => {
|
|
20
113
|
const factory = vi.fn(() => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-manager.spec.js","sourceRoot":"","sources":["../../src/services/resource-manager.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource-manager.spec.js","sourceRoot":"","sources":["../../src/services/resource-manager.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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;
|
|
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"}
|