@nxds/core 0.7.2 → 0.9.1

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.
@@ -26,11 +26,12 @@ __export(src_exports, {
26
26
  CORNER_OPTIONS: () => CORNER_OPTIONS,
27
27
  DEFAULT_BRAND_COLOR: () => DEFAULT_BRAND_COLOR,
28
28
  DEFAULT_COOKIE_KEY: () => DEFAULT_COOKIE_KEY,
29
- DEFAULT_NEXUS_APPEARANCE: () => DEFAULT_NEXUS_APPEARANCE,
29
+ DEFAULT_NXDS_APPEARANCE: () => DEFAULT_NXDS_APPEARANCE,
30
30
  DEFAULT_STORAGE_KEY: () => DEFAULT_STORAGE_KEY,
31
31
  DENSITY_OPTIONS: () => DENSITY_OPTIONS,
32
32
  ELEVATION_OPTIONS: () => ELEVATION_OPTIONS,
33
- NEXUS_APPEARANCE_DATA_ATTRS: () => NEXUS_APPEARANCE_DATA_ATTRS,
33
+ NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS: () => NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS,
34
+ NXDS_APPEARANCE_DATA_ATTRS: () => NXDS_APPEARANCE_DATA_ATTRS,
34
35
  PALETTE_KEYS: () => PALETTE_KEYS,
35
36
  SEMANTIC_TOKEN_REGISTRY: () => SEMANTIC_TOKEN_REGISTRY,
36
37
  SNAPSHOT_VERSION: () => SNAPSHOT_VERSION,
@@ -39,25 +40,32 @@ __export(src_exports, {
39
40
  adjustContrast: () => adjustContrast,
40
41
  apcaLc: () => apcaLc,
41
42
  appearancePrefsToCss: () => appearancePrefsToCss,
42
- createDefaultNexusAppearanceSnapshot: () => createDefaultNexusAppearanceSnapshot,
43
- createNexusAppearanceBootstrapScript: () => createNexusAppearanceBootstrapScript,
44
- createNexusAppearanceSnapshot: () => createNexusAppearanceSnapshot,
45
- createNexusAppearanceSnapshotFromCookie: () => createNexusAppearanceSnapshotFromCookie,
46
- createNexusAppearanceSnapshotFromState: () => createNexusAppearanceSnapshotFromState,
47
- createNexusAppearanceStateCookie: () => createNexusAppearanceStateCookie,
48
- createNexusThemeContract: () => createNexusThemeContract,
43
+ applyNxdsAppearance: () => applyNxdsAppearance,
44
+ createDefaultNxdsAppearanceSnapshot: () => createDefaultNxdsAppearanceSnapshot,
45
+ createNxdsAppearanceBootstrapScript: () => createNxdsAppearanceBootstrapScript,
46
+ createNxdsAppearanceSnapshot: () => createNxdsAppearanceSnapshot,
47
+ createNxdsAppearanceSnapshotFromCookie: () => createNxdsAppearanceSnapshotFromCookie,
48
+ createNxdsAppearanceSnapshotFromState: () => createNxdsAppearanceSnapshotFromState,
49
+ createNxdsAppearanceStateCookie: () => createNxdsAppearanceStateCookie,
50
+ createNxdsThemeContract: () => createNxdsThemeContract,
49
51
  deriveTheme: () => deriveTheme,
50
52
  findBrandColorPreset: () => findBrandColorPreset,
51
53
  isColor: () => isColor,
52
54
  measureThemeContrast: () => measureThemeContrast,
53
55
  normalizeAppearanceModeIds: () => normalizeAppearanceModeIds,
54
- parseNexusAppearanceStateCookie: () => parseNexusAppearanceStateCookie,
56
+ parseNxdsAppearanceStateCookie: () => parseNxdsAppearanceStateCookie,
57
+ persistNxdsAppearance: () => persistNxdsAppearance,
58
+ prefersDarkColorScheme: () => prefersDarkColorScheme,
59
+ readStoredNxdsAppearance: () => readStoredNxdsAppearance,
60
+ removeNxdsAppearance: () => removeNxdsAppearance,
55
61
  resolveFirstPaint: () => resolveFirstPaint,
56
- sanitizeNexusAppearance: () => sanitizeNexusAppearance,
57
- sanitizeNexusAppearancePrefs: () => sanitizeNexusAppearancePrefs,
58
- sanitizeNexusAppearanceSnapshot: () => sanitizeNexusAppearanceSnapshot,
59
- serializeNexusAppearanceStateCookie: () => serializeNexusAppearanceStateCookie,
60
- themeToCss: () => themeToCss
62
+ resolveNxdsAppearanceMode: () => resolveNxdsAppearanceMode,
63
+ sanitizeNxdsAppearance: () => sanitizeNxdsAppearance,
64
+ sanitizeNxdsAppearancePrefs: () => sanitizeNxdsAppearancePrefs,
65
+ sanitizeNxdsAppearanceSnapshot: () => sanitizeNxdsAppearanceSnapshot,
66
+ serializeNxdsAppearanceStateCookie: () => serializeNxdsAppearanceStateCookie,
67
+ themeToCss: () => themeToCss,
68
+ watchColorScheme: () => watchColorScheme
61
69
  });
62
70
  module.exports = __toCommonJS(src_exports);
63
71
 
@@ -2625,7 +2633,7 @@ var STROKE_OPTIONS = [
2625
2633
  { value: "normal", label: "Normal" },
2626
2634
  { value: "strong", label: "Strong" }
2627
2635
  ];
2628
- var DEFAULT_NEXUS_APPEARANCE = {
2636
+ var DEFAULT_NXDS_APPEARANCE = {
2629
2637
  mode: "light",
2630
2638
  brandColor: DEFAULT_BRAND_COLOR,
2631
2639
  surfaceTone: "zinc",
@@ -2677,7 +2685,7 @@ function formatPx(value) {
2677
2685
  return `${Number(value.toFixed(4))}px`;
2678
2686
  }
2679
2687
  function typographyScaleVariables(uiPx) {
2680
- const scale = uiPx / DEFAULT_NEXUS_APPEARANCE.prefs.uiFontSize;
2688
+ const scale = uiPx / DEFAULT_NXDS_APPEARANCE.prefs.uiFontSize;
2681
2689
  const sizeVars = Object.entries(typography_default_default.size).map(
2682
2690
  ([name, token2]) => ` --nx-typography-size-${name}: ${formatPx(token2.$value.value * scale)};`
2683
2691
  );
@@ -2718,9 +2726,9 @@ function normalizeAppearanceModeIds(raw) {
2718
2726
  }
2719
2727
  return out;
2720
2728
  }
2721
- function sanitizeNexusAppearancePrefs(raw) {
2729
+ function sanitizeNxdsAppearancePrefs(raw) {
2722
2730
  const o = isRecord(raw) ? raw : {};
2723
- const d = DEFAULT_NEXUS_APPEARANCE.prefs;
2731
+ const d = DEFAULT_NXDS_APPEARANCE.prefs;
2724
2732
  return {
2725
2733
  uiFont: fontFamilyOr(o.uiFont, d.uiFont),
2726
2734
  codeFont: fontFamilyOr(o.codeFont, d.codeFont),
@@ -2731,10 +2739,10 @@ function sanitizeNexusAppearancePrefs(raw) {
2731
2739
  fontSmoothing: boolOr(o.fontSmoothing, d.fontSmoothing)
2732
2740
  };
2733
2741
  }
2734
- function sanitizeNexusAppearance(rawInput) {
2735
- if (!isRecord(rawInput)) return DEFAULT_NEXUS_APPEARANCE;
2742
+ function sanitizeNxdsAppearance(rawInput) {
2743
+ if (!isRecord(rawInput)) return DEFAULT_NXDS_APPEARANCE;
2736
2744
  const raw = normalizeAppearanceModeIds(rawInput);
2737
- const d = DEFAULT_NEXUS_APPEARANCE;
2745
+ const d = DEFAULT_NXDS_APPEARANCE;
2738
2746
  return {
2739
2747
  mode: enumOr(raw.mode, APPEARANCE_MODES, d.mode),
2740
2748
  brandColor: typeof raw.brandColor === "string" && isColor(raw.brandColor) ? raw.brandColor : d.brandColor,
@@ -2745,10 +2753,10 @@ function sanitizeNexusAppearance(rawInput) {
2745
2753
  corners: enumOr(raw.corners, CORNERS, d.corners),
2746
2754
  elevation: enumOr(raw.elevation, ELEVATIONS, d.elevation),
2747
2755
  stroke: enumOr(raw.stroke, STROKES, d.stroke),
2748
- prefs: sanitizeNexusAppearancePrefs(raw.prefs)
2756
+ prefs: sanitizeNxdsAppearancePrefs(raw.prefs)
2749
2757
  };
2750
2758
  }
2751
- function createNexusThemeContract(state) {
2759
+ function createNxdsThemeContract(state) {
2752
2760
  const tone = BASE_TONE_SEEDS[state.surfaceTone];
2753
2761
  return {
2754
2762
  surfaceTone: state.surfaceTone,
@@ -2760,11 +2768,11 @@ function createNexusThemeContract(state) {
2760
2768
  function appearancePrefsToCss(prefs) {
2761
2769
  const uiPx = clampFontSize(
2762
2770
  prefs.uiFontSize,
2763
- DEFAULT_NEXUS_APPEARANCE.prefs.uiFontSize
2771
+ DEFAULT_NXDS_APPEARANCE.prefs.uiFontSize
2764
2772
  );
2765
2773
  const codePx = clampFontSize(
2766
2774
  prefs.codeFontSize,
2767
- DEFAULT_NEXUS_APPEARANCE.prefs.codeFontSize
2775
+ DEFAULT_NXDS_APPEARANCE.prefs.codeFontSize
2768
2776
  );
2769
2777
  const blocks = [
2770
2778
  inRuntimeLayer(`:root {
@@ -4583,14 +4591,14 @@ ${block(":root.dark", derived.dark)}`
4583
4591
  var SNAPSHOT_VERSION = 9;
4584
4592
  var STATE_COOKIE_VERSION = 6;
4585
4593
  var SNAPSHOT_CACHE_LIMIT = 50;
4586
- var NEXUS_APPEARANCE_DATA_ATTRS = [
4594
+ var NXDS_APPEARANCE_DATA_ATTRS = [
4587
4595
  "data-density",
4588
4596
  "data-radius",
4589
4597
  "data-shadow",
4590
4598
  "data-borderwidth"
4591
4599
  ];
4592
- var DEFAULT_STORAGE_KEY = "nexus-appearance";
4593
- var DEFAULT_COOKIE_KEY = "nexus-appearance-state";
4600
+ var DEFAULT_STORAGE_KEY = "nxds-appearance";
4601
+ var DEFAULT_COOKIE_KEY = "nxds-appearance-state";
4594
4602
  var isRecord2 = (value) => typeof value === "object" && value !== null;
4595
4603
  var cachedSnapshots = /* @__PURE__ */ new Map();
4596
4604
  var cachedModes = /* @__PURE__ */ new Map();
@@ -4615,7 +4623,7 @@ function deriveModeCached(contract, mode) {
4615
4623
  return cachedModes.get(key) ?? remember(cachedModes, key, deriveThemeMode(contract, mode));
4616
4624
  }
4617
4625
  function deriveThemeCss(state) {
4618
- const contract = createNexusThemeContract(state);
4626
+ const contract = createNxdsThemeContract(state);
4619
4627
  return themeToCss({
4620
4628
  light: deriveModeCached(contract, "light"),
4621
4629
  dark: deriveModeCached(contract, "dark")
@@ -4624,7 +4632,7 @@ function deriveThemeCss(state) {
4624
4632
  function derivePrefsCss(state) {
4625
4633
  return appearancePrefsToCss(state.prefs);
4626
4634
  }
4627
- function createNexusAppearanceSnapshot(state, themeCss, prefsCss) {
4635
+ function createNxdsAppearanceSnapshot(state, themeCss, prefsCss) {
4628
4636
  return {
4629
4637
  version: SNAPSHOT_VERSION,
4630
4638
  state,
@@ -4632,33 +4640,33 @@ function createNexusAppearanceSnapshot(state, themeCss, prefsCss) {
4632
4640
  prefsCss
4633
4641
  };
4634
4642
  }
4635
- function createNexusAppearanceSnapshotFromState(state) {
4636
- const sanitizedState = sanitizeNexusAppearance(state);
4643
+ function createNxdsAppearanceSnapshotFromState(state) {
4644
+ const sanitizedState = sanitizeNxdsAppearance(state);
4637
4645
  const cacheKey = cacheKeyForState(sanitizedState);
4638
4646
  const cachedSnapshot = cachedSnapshots.get(cacheKey);
4639
4647
  if (cachedSnapshot) return cachedSnapshot;
4640
4648
  return remember(
4641
4649
  cachedSnapshots,
4642
4650
  cacheKey,
4643
- createNexusAppearanceSnapshot(
4651
+ createNxdsAppearanceSnapshot(
4644
4652
  sanitizedState,
4645
4653
  deriveThemeCss(sanitizedState),
4646
4654
  derivePrefsCss(sanitizedState)
4647
4655
  )
4648
4656
  );
4649
4657
  }
4650
- function createNexusAppearanceStateCookie(state) {
4658
+ function createNxdsAppearanceStateCookie(state) {
4651
4659
  return {
4652
4660
  version: STATE_COOKIE_VERSION,
4653
- state: sanitizeNexusAppearance(state)
4661
+ state: sanitizeNxdsAppearance(state)
4654
4662
  };
4655
4663
  }
4656
- function serializeNexusAppearanceStateCookie(state) {
4664
+ function serializeNxdsAppearanceStateCookie(state) {
4657
4665
  return encodeURIComponent(
4658
- JSON.stringify(createNexusAppearanceStateCookie(state))
4666
+ JSON.stringify(createNxdsAppearanceStateCookie(state))
4659
4667
  );
4660
4668
  }
4661
- function parseNexusAppearanceStateCookie(raw) {
4669
+ function parseNxdsAppearanceStateCookie(raw) {
4662
4670
  if (typeof raw !== "string" || raw.length === 0) return null;
4663
4671
  try {
4664
4672
  const decoded = decodeURIComponent(raw);
@@ -4666,31 +4674,31 @@ function parseNexusAppearanceStateCookie(raw) {
4666
4674
  if (!isRecord2(parsed) || parsed.version !== STATE_COOKIE_VERSION || !isRecord2(parsed.state)) {
4667
4675
  return null;
4668
4676
  }
4669
- return sanitizeNexusAppearance(parsed.state);
4677
+ return sanitizeNxdsAppearance(parsed.state);
4670
4678
  } catch {
4671
4679
  return null;
4672
4680
  }
4673
4681
  }
4674
- function createNexusAppearanceSnapshotFromCookie(raw, fallbackState = DEFAULT_NEXUS_APPEARANCE) {
4675
- return createNexusAppearanceSnapshotFromState(
4676
- parseNexusAppearanceStateCookie(raw) ?? sanitizeNexusAppearance(fallbackState)
4682
+ function createNxdsAppearanceSnapshotFromCookie(raw, fallbackState = DEFAULT_NXDS_APPEARANCE) {
4683
+ return createNxdsAppearanceSnapshotFromState(
4684
+ parseNxdsAppearanceStateCookie(raw) ?? sanitizeNxdsAppearance(fallbackState)
4677
4685
  );
4678
4686
  }
4679
4687
  var cachedDefaultSnapshot;
4680
- function createDefaultNexusAppearanceSnapshot() {
4681
- return cachedDefaultSnapshot ?? (cachedDefaultSnapshot = createNexusAppearanceSnapshotFromState(
4682
- DEFAULT_NEXUS_APPEARANCE
4688
+ function createDefaultNxdsAppearanceSnapshot() {
4689
+ return cachedDefaultSnapshot ?? (cachedDefaultSnapshot = createNxdsAppearanceSnapshotFromState(
4690
+ DEFAULT_NXDS_APPEARANCE
4683
4691
  ));
4684
4692
  }
4685
- function sanitizeNexusAppearanceSnapshot(raw) {
4693
+ function sanitizeNxdsAppearanceSnapshot(raw) {
4686
4694
  if (!isRecord2(raw) || !isRecord2(raw.state)) {
4687
- return createDefaultNexusAppearanceSnapshot();
4695
+ return createDefaultNxdsAppearanceSnapshot();
4688
4696
  }
4689
- const state = sanitizeNexusAppearance(raw.state);
4697
+ const state = sanitizeNxdsAppearance(raw.state);
4690
4698
  if (raw.version === SNAPSHOT_VERSION && typeof raw.themeCss === "string" && typeof raw.prefsCss === "string") {
4691
- return createNexusAppearanceSnapshot(state, raw.themeCss, raw.prefsCss);
4699
+ return createNxdsAppearanceSnapshot(state, raw.themeCss, raw.prefsCss);
4692
4700
  }
4693
- return createNexusAppearanceSnapshotFromState(state);
4701
+ return createNxdsAppearanceSnapshotFromState(state);
4694
4702
  }
4695
4703
  function resolveFirstPaint(snapshot, systemPrefersDark) {
4696
4704
  const { state } = snapshot;
@@ -4710,10 +4718,104 @@ function resolveFirstPaint(snapshot, systemPrefersDark) {
4710
4718
  function escapeInlineScriptJson(value) {
4711
4719
  return JSON.stringify(value).replace(/</g, "\\u003C").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
4712
4720
  }
4713
- function createNexusAppearanceBootstrapScript(options = {}) {
4721
+ function createNxdsAppearanceBootstrapScript(options = {}) {
4714
4722
  const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
4715
- const defaultSnapshot = options.defaultSnapshot ? sanitizeNexusAppearanceSnapshot(options.defaultSnapshot) : createDefaultNexusAppearanceSnapshot();
4716
- return `(function(){try{var k=${escapeInlineScriptJson(storageKey)};var f=${escapeInlineScriptJson(defaultSnapshot)};var s=f;try{if(k!==false){var r=window.localStorage&&window.localStorage.getItem(k);if(r){var p=JSON.parse(r);if(p&&p.version===f.version&&p.state&&typeof p.themeCss==="string"&&typeof p.prefsCss==="string"){s=p;}}}}catch(e){}var st=s.state||f.state;var m=st.mode==="dark"||st.mode==="light"||st.mode==="system"?st.mode:f.state.mode;var sys=false;try{sys=m==="system"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;}catch(e){}var dark=m==="dark"||sys===true;var root=document.documentElement;root.classList.toggle("dark",dark);root.setAttribute("data-density",typeof st.density==="string"?st.density:f.state.density);root.setAttribute("data-radius",typeof st.corners==="string"?st.corners:f.state.corners);root.setAttribute("data-shadow",typeof st.elevation==="string"?st.elevation:f.state.elevation);root.setAttribute("data-borderwidth",typeof st.stroke==="string"?st.stroke:f.state.stroke);function upsert(attr,css){var list=document.querySelectorAll("style["+attr+"]");var el=list[0]||document.createElement("style");for(var i=1;i<list.length;i++){list[i].remove();}el.setAttribute(attr,"");el.textContent=css||"";if(!el.parentNode){document.head.appendChild(el);}}upsert("data-nexus-appearance-theme",s.themeCss);upsert("data-nexus-appearance-prefs",s.prefsCss);}catch(e){}})();`;
4723
+ const defaultSnapshot = options.defaultSnapshot ? sanitizeNxdsAppearanceSnapshot(options.defaultSnapshot) : createDefaultNxdsAppearanceSnapshot();
4724
+ return `(function(){try{var k=${escapeInlineScriptJson(storageKey)};var f=${escapeInlineScriptJson(defaultSnapshot)};var s=f;try{if(k!==false){var r=window.localStorage&&window.localStorage.getItem(k);if(r){var p=JSON.parse(r);if(p&&p.version===f.version&&p.state&&typeof p.themeCss==="string"&&typeof p.prefsCss==="string"){s=p;}}}}catch(e){}var st=s.state||f.state;var m=st.mode==="dark"||st.mode==="light"||st.mode==="system"?st.mode:f.state.mode;var sys=false;try{sys=m==="system"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;}catch(e){}var dark=m==="dark"||sys===true;var root=document.documentElement;root.classList.toggle("dark",dark);root.setAttribute("data-density",typeof st.density==="string"?st.density:f.state.density);root.setAttribute("data-radius",typeof st.corners==="string"?st.corners:f.state.corners);root.setAttribute("data-shadow",typeof st.elevation==="string"?st.elevation:f.state.elevation);root.setAttribute("data-borderwidth",typeof st.stroke==="string"?st.stroke:f.state.stroke);function upsert(attr,css){var list=document.querySelectorAll("style["+attr+"]");var el=list[0]||document.createElement("style");for(var i=1;i<list.length;i++){list[i].remove();}el.setAttribute(attr,"");el.textContent=css||"";if(!el.parentNode){document.head.appendChild(el);}}upsert("data-nxds-appearance-theme",s.themeCss);upsert("data-nxds-appearance-prefs",s.prefsCss);}catch(e){}})();`;
4725
+ }
4726
+
4727
+ // src/lib/appearance-dom.ts
4728
+ var NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24 * 365;
4729
+ var COLOR_SCHEME_QUERY = "(prefers-color-scheme: dark)";
4730
+ var THEME_STYLE_ATTR = "data-nxds-appearance-theme";
4731
+ var PREFS_STYLE_ATTR = "data-nxds-appearance-prefs";
4732
+ function prefersDarkColorScheme() {
4733
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function")
4734
+ return false;
4735
+ return window.matchMedia(COLOR_SCHEME_QUERY).matches;
4736
+ }
4737
+ function watchColorScheme(onChange) {
4738
+ if (typeof window.matchMedia !== "function") return () => {
4739
+ };
4740
+ const query = window.matchMedia(COLOR_SCHEME_QUERY);
4741
+ query.addEventListener("change", onChange);
4742
+ return () => query.removeEventListener("change", onChange);
4743
+ }
4744
+ function resolveNxdsAppearanceMode(mode, systemPrefersDark) {
4745
+ if (mode === "system") return systemPrefersDark ? "dark" : "light";
4746
+ return mode;
4747
+ }
4748
+ function readStoredNxdsAppearance(storageKey, fallback) {
4749
+ if (storageKey === false || typeof window === "undefined") return fallback;
4750
+ try {
4751
+ const raw = window.localStorage.getItem(storageKey);
4752
+ return raw ? sanitizeNxdsAppearanceSnapshot(JSON.parse(raw)).state : fallback;
4753
+ } catch {
4754
+ return fallback;
4755
+ }
4756
+ }
4757
+ function upsertStyle(attribute, css) {
4758
+ const styles = Array.from(
4759
+ document.querySelectorAll(`style[${attribute}]`)
4760
+ );
4761
+ const style = styles[0] ?? document.createElement("style");
4762
+ for (const duplicate of styles.slice(1)) duplicate.remove();
4763
+ style.setAttribute(attribute, "");
4764
+ style.textContent = css;
4765
+ if (!style.parentNode) document.head.appendChild(style);
4766
+ }
4767
+ function applyNxdsAppearance(state, systemPrefersDark) {
4768
+ const firstPaint = resolveFirstPaint(
4769
+ createNxdsAppearanceSnapshotFromState(state),
4770
+ systemPrefersDark
4771
+ );
4772
+ const root = document.documentElement;
4773
+ root.classList.toggle("dark", firstPaint.className === "dark");
4774
+ for (const attr of NXDS_APPEARANCE_DATA_ATTRS) {
4775
+ root.setAttribute(attr, firstPaint.dataAttrs[attr]);
4776
+ }
4777
+ upsertStyle(THEME_STYLE_ATTR, firstPaint.themeCss);
4778
+ upsertStyle(PREFS_STYLE_ATTR, firstPaint.prefsCss);
4779
+ }
4780
+ function removeNxdsAppearance() {
4781
+ document.querySelectorAll(`style[${THEME_STYLE_ATTR}], style[${PREFS_STYLE_ATTR}]`).forEach((style) => style.remove());
4782
+ const root = document.documentElement;
4783
+ root.classList.remove("dark");
4784
+ for (const attr of NXDS_APPEARANCE_DATA_ATTRS) root.removeAttribute(attr);
4785
+ }
4786
+ function writeStateCookie(cookieWriteKey, state, options) {
4787
+ const secure = options.secure === true || options.secure !== false && window.location.protocol === "https:";
4788
+ const attrs = [
4789
+ `Path=${(options.path ?? "/").replace(/[;\r\n]/g, "")}`,
4790
+ `SameSite=${options.sameSite ?? "Lax"}`,
4791
+ `Max-Age=${options.maxAge ?? NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS}`,
4792
+ options.domain ? `Domain=${options.domain.replace(/[;\r\n]/g, "")}` : "",
4793
+ secure ? "Secure" : ""
4794
+ ].filter(Boolean);
4795
+ document.cookie = `${cookieWriteKey}=${serializeNxdsAppearanceStateCookie(
4796
+ state
4797
+ )}; ${attrs.join("; ")}`;
4798
+ }
4799
+ function persistNxdsAppearance(state, {
4800
+ storageKey,
4801
+ cookieWriteKey = false,
4802
+ cookieOptions = {}
4803
+ }) {
4804
+ if (storageKey !== false) {
4805
+ try {
4806
+ window.localStorage.setItem(
4807
+ storageKey,
4808
+ JSON.stringify(createNxdsAppearanceSnapshotFromState(state))
4809
+ );
4810
+ } catch {
4811
+ }
4812
+ }
4813
+ if (cookieWriteKey !== false) {
4814
+ try {
4815
+ writeStateCookie(cookieWriteKey, state, cookieOptions);
4816
+ } catch {
4817
+ }
4818
+ }
4717
4819
  }
4718
4820
 
4719
4821
  // src/lib/brand-presets.ts
@@ -4910,11 +5012,12 @@ var SEMANTIC_TOKEN_REGISTRY = [
4910
5012
  CORNER_OPTIONS,
4911
5013
  DEFAULT_BRAND_COLOR,
4912
5014
  DEFAULT_COOKIE_KEY,
4913
- DEFAULT_NEXUS_APPEARANCE,
5015
+ DEFAULT_NXDS_APPEARANCE,
4914
5016
  DEFAULT_STORAGE_KEY,
4915
5017
  DENSITY_OPTIONS,
4916
5018
  ELEVATION_OPTIONS,
4917
- NEXUS_APPEARANCE_DATA_ATTRS,
5019
+ NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS,
5020
+ NXDS_APPEARANCE_DATA_ATTRS,
4918
5021
  PALETTE_KEYS,
4919
5022
  SEMANTIC_TOKEN_REGISTRY,
4920
5023
  SNAPSHOT_VERSION,
@@ -4923,24 +5026,31 @@ var SEMANTIC_TOKEN_REGISTRY = [
4923
5026
  adjustContrast,
4924
5027
  apcaLc,
4925
5028
  appearancePrefsToCss,
4926
- createDefaultNexusAppearanceSnapshot,
4927
- createNexusAppearanceBootstrapScript,
4928
- createNexusAppearanceSnapshot,
4929
- createNexusAppearanceSnapshotFromCookie,
4930
- createNexusAppearanceSnapshotFromState,
4931
- createNexusAppearanceStateCookie,
4932
- createNexusThemeContract,
5029
+ applyNxdsAppearance,
5030
+ createDefaultNxdsAppearanceSnapshot,
5031
+ createNxdsAppearanceBootstrapScript,
5032
+ createNxdsAppearanceSnapshot,
5033
+ createNxdsAppearanceSnapshotFromCookie,
5034
+ createNxdsAppearanceSnapshotFromState,
5035
+ createNxdsAppearanceStateCookie,
5036
+ createNxdsThemeContract,
4933
5037
  deriveTheme,
4934
5038
  findBrandColorPreset,
4935
5039
  isColor,
4936
5040
  measureThemeContrast,
4937
5041
  normalizeAppearanceModeIds,
4938
- parseNexusAppearanceStateCookie,
5042
+ parseNxdsAppearanceStateCookie,
5043
+ persistNxdsAppearance,
5044
+ prefersDarkColorScheme,
5045
+ readStoredNxdsAppearance,
5046
+ removeNxdsAppearance,
4939
5047
  resolveFirstPaint,
4940
- sanitizeNexusAppearance,
4941
- sanitizeNexusAppearancePrefs,
4942
- sanitizeNexusAppearanceSnapshot,
4943
- serializeNexusAppearanceStateCookie,
4944
- themeToCss
5048
+ resolveNxdsAppearanceMode,
5049
+ sanitizeNxdsAppearance,
5050
+ sanitizeNxdsAppearancePrefs,
5051
+ sanitizeNxdsAppearanceSnapshot,
5052
+ serializeNxdsAppearanceStateCookie,
5053
+ themeToCss,
5054
+ watchColorScheme
4945
5055
  });
4946
5056
  //# sourceMappingURL=index.cjs.map