@amboss/design-system 4.9.4-canary.2 → 4.9.4-canary.3

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.
@@ -8,7 +8,7 @@ export type LayoutVarHandle = {
8
8
  };
9
9
  /**
10
10
  * Register one layout CSS var; returns a stable imperative handle. The var is
11
- * removed on unmount, so it only exists while its producer is mounted. Call
11
+ * removed on unmount only if this producer still owns the latest write. Call
12
12
  * `.set()` from wherever the value is known — an effect (state-driven vars like
13
13
  * the subnav offset) or a ResizeObserver (measured vars) — so updates publish
14
14
  * straight to the single `<LayoutCssVars>` sink and never re-render the producer.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get LayoutCssVarStoreProvider(){return LayoutCssVarStoreProvider},get LayoutCssVars(){return LayoutCssVars},get useLayoutVar(){return useLayoutVar}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _react=/*#__PURE__*/require("@swc/helpers/_/_interop_require_wildcard")._(require("react")),_react1=require("@emotion/react"),LayoutCssVarStoreContext=(0,_react.createContext)(null),LayoutCssVarStoreProvider=LayoutCssVarStoreContext.Provider,EMPTY_VARS={},NOOP_SUBSCRIBE=()=>()=>{},useLayoutVar=name=>{let store=(0,_react.useContext)(LayoutCssVarStoreContext);return(0,_react.useEffect)(()=>()=>store?.remove(name),[store,name]),(0,_react.useMemo)(()=>({set:value=>""===value?store?.remove(name):store?.set(name,value),remove:()=>store?.remove(name)}),[store,name])};function LayoutCssVars(){let store=(0,_react.useContext)(LayoutCssVarStoreContext),vars=(0,_react.useSyncExternalStore)(store?.subscribe??NOOP_SUBSCRIBE,store?store.getSnapshot:()=>EMPTY_VARS,()=>EMPTY_VARS);return _react.default.createElement(_react1.Global,{styles:[{":root":vars}]})}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get LayoutCssVarStoreProvider(){return LayoutCssVarStoreProvider},get LayoutCssVars(){return LayoutCssVars},get useLayoutVar(){return useLayoutVar}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _react=/*#__PURE__*/require("@swc/helpers/_/_interop_require_wildcard")._(require("react")),_react1=require("@emotion/react"),LayoutCssVarStoreContext=(0,_react.createContext)(null),LayoutCssVarStoreProvider=LayoutCssVarStoreContext.Provider,EMPTY_VARS={},NOOP_SUBSCRIBE=()=>()=>{},useLayoutVar=name=>{let store=(0,_react.useContext)(LayoutCssVarStoreContext),handle=(0,_react.useMemo)(()=>{let owner=Symbol(name);return{set:value=>""===value?store?.remove(name,owner):store?.set({name,value,owner}),remove:()=>store?.remove(name,owner)}},[store,name]);return(0,_react.useEffect)(()=>handle.remove,[handle]),handle};function LayoutCssVars(){let store=(0,_react.useContext)(LayoutCssVarStoreContext),vars=(0,_react.useSyncExternalStore)(store?.subscribe??NOOP_SUBSCRIBE,store?store.getSnapshot:()=>EMPTY_VARS,()=>EMPTY_VARS);return _react.default.createElement(_react1.Global,{styles:[{":root":vars}]})}
@@ -1,3 +1,8 @@
1
+ type LayoutCssVarWrite = {
2
+ name: string;
3
+ value: string;
4
+ owner: symbol;
5
+ };
1
6
  /**
2
7
  * Tiny pub/sub registry for the layout's CSS custom properties. Producers
3
8
  * publish a value by name (the component that owns the *why* — e.g. the NavBar
@@ -6,12 +11,14 @@
6
11
  * via the same `useSyncExternalStore` pattern.
7
12
  *
8
13
  * One name = one producer. The registry is keyed by name, so a second writer to
9
- * the same name last-wins; don't share a name across unrelated producers.
14
+ * the same name last-wins. Only that writer may remove it, so an old instance's
15
+ * delayed unmount cleanup cannot erase a replacement's value.
10
16
  */
11
17
  export type LayoutCssVarStore = {
12
18
  getSnapshot: () => Record<string, string>;
13
- set: (name: string, value: string) => void;
14
- remove: (name: string) => void;
19
+ set: (entry: LayoutCssVarWrite) => void;
20
+ remove: (name: string, owner: symbol) => void;
15
21
  subscribe: (listener: () => void) => () => void;
16
22
  };
17
23
  export declare function createLayoutCssVarStore(): LayoutCssVarStore;
24
+ export {};
@@ -1 +1 @@
1
- "use strict";function createLayoutCssVarStore(){let vars={},listeners=new Set,notify=()=>listeners.forEach(listener=>listener());return{getSnapshot:()=>vars,set:(name,value)=>{vars[name]!==value&&(vars={...vars,[name]:value},notify())},remove:name=>{if(!(name in vars))return;let next={...vars};delete next[name],vars=next,notify()},subscribe:listener=>(listeners.add(listener),()=>{listeners.delete(listener)})}}Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"createLayoutCssVarStore",{enumerable:!0,get:function(){return createLayoutCssVarStore}});
1
+ "use strict";function createLayoutCssVarStore(){let vars={},owners=new Map,listeners=new Set,notify=()=>listeners.forEach(listener=>listener());return{getSnapshot:()=>vars,set:({name,value,owner})=>{owners.set(name,owner),vars[name]!==value&&(vars={...vars,[name]:value},notify())},remove:(name,owner)=>{if(owners.get(name)!==owner)return;owners.delete(name);let next={...vars};delete next[name],vars=next,notify()},subscribe:listener=>(listeners.add(listener),()=>{listeners.delete(listener)})}}Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"createLayoutCssVarStore",{enumerable:!0,get:function(){return createLayoutCssVarStore}});
@@ -8,7 +8,7 @@ export type LayoutVarHandle = {
8
8
  };
9
9
  /**
10
10
  * Register one layout CSS var; returns a stable imperative handle. The var is
11
- * removed on unmount, so it only exists while its producer is mounted. Call
11
+ * removed on unmount only if this producer still owns the latest write. Call
12
12
  * `.set()` from wherever the value is known — an effect (state-driven vars like
13
13
  * the subnav offset) or a ResizeObserver (measured vars) — so updates publish
14
14
  * straight to the single `<LayoutCssVars>` sink and never re-render the producer.
@@ -1 +1 @@
1
- import React,{createContext,useContext,useEffect,useMemo,useSyncExternalStore}from"react";import{Global}from"@emotion/react";let LayoutCssVarStoreContext=createContext(null);export const LayoutCssVarStoreProvider=LayoutCssVarStoreContext.Provider;let EMPTY_VARS={},NOOP_SUBSCRIBE=()=>()=>{};export const useLayoutVar=name=>{let store=useContext(LayoutCssVarStoreContext);return useEffect(()=>()=>store?.remove(name),[store,name]),useMemo(()=>({set:value=>""===value?store?.remove(name):store?.set(name,value),remove:()=>store?.remove(name)}),[store,name])};export function LayoutCssVars(){let store=useContext(LayoutCssVarStoreContext),vars=useSyncExternalStore(store?.subscribe??NOOP_SUBSCRIBE,store?store.getSnapshot:()=>EMPTY_VARS,()=>EMPTY_VARS);return React.createElement(Global,{styles:[{":root":vars}]})}
1
+ import React,{createContext,useContext,useEffect,useMemo,useSyncExternalStore}from"react";import{Global}from"@emotion/react";let LayoutCssVarStoreContext=createContext(null);export const LayoutCssVarStoreProvider=LayoutCssVarStoreContext.Provider;let EMPTY_VARS={},NOOP_SUBSCRIBE=()=>()=>{};export const useLayoutVar=name=>{let store=useContext(LayoutCssVarStoreContext),handle=useMemo(()=>{let owner=Symbol(name);return{set:value=>""===value?store?.remove(name,owner):store?.set({name,value,owner}),remove:()=>store?.remove(name,owner)}},[store,name]);return useEffect(()=>handle.remove,[handle]),handle};export function LayoutCssVars(){let store=useContext(LayoutCssVarStoreContext),vars=useSyncExternalStore(store?.subscribe??NOOP_SUBSCRIBE,store?store.getSnapshot:()=>EMPTY_VARS,()=>EMPTY_VARS);return React.createElement(Global,{styles:[{":root":vars}]})}
@@ -1,3 +1,8 @@
1
+ type LayoutCssVarWrite = {
2
+ name: string;
3
+ value: string;
4
+ owner: symbol;
5
+ };
1
6
  /**
2
7
  * Tiny pub/sub registry for the layout's CSS custom properties. Producers
3
8
  * publish a value by name (the component that owns the *why* — e.g. the NavBar
@@ -6,12 +11,14 @@
6
11
  * via the same `useSyncExternalStore` pattern.
7
12
  *
8
13
  * One name = one producer. The registry is keyed by name, so a second writer to
9
- * the same name last-wins; don't share a name across unrelated producers.
14
+ * the same name last-wins. Only that writer may remove it, so an old instance's
15
+ * delayed unmount cleanup cannot erase a replacement's value.
10
16
  */
11
17
  export type LayoutCssVarStore = {
12
18
  getSnapshot: () => Record<string, string>;
13
- set: (name: string, value: string) => void;
14
- remove: (name: string) => void;
19
+ set: (entry: LayoutCssVarWrite) => void;
20
+ remove: (name: string, owner: symbol) => void;
15
21
  subscribe: (listener: () => void) => () => void;
16
22
  };
17
23
  export declare function createLayoutCssVarStore(): LayoutCssVarStore;
24
+ export {};
@@ -1 +1 @@
1
- export function createLayoutCssVarStore(){let vars={},listeners=new Set,notify=()=>listeners.forEach(listener=>listener());return{getSnapshot:()=>vars,set:(name,value)=>{vars[name]!==value&&(vars={...vars,[name]:value},notify())},remove:name=>{if(!(name in vars))return;let next={...vars};delete next[name],vars=next,notify()},subscribe:listener=>(listeners.add(listener),()=>{listeners.delete(listener)})}}
1
+ export function createLayoutCssVarStore(){let vars={},owners=new Map,listeners=new Set,notify=()=>listeners.forEach(listener=>listener());return{getSnapshot:()=>vars,set:({name,value,owner})=>{owners.set(name,owner),vars[name]!==value&&(vars={...vars,[name]:value},notify())},remove:(name,owner)=>{if(owners.get(name)!==owner)return;owners.delete(name);let next={...vars};delete next[name],vars=next,notify()},subscribe:listener=>(listeners.add(listener),()=>{listeners.delete(listener)})}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amboss/design-system",
3
- "version": "4.9.4-canary.2",
3
+ "version": "4.9.4-canary.3",
4
4
  "description": "the design system for AMBOSS products",
5
5
  "author": "AMBOSS",
6
6
  "license": "ISC",