@pstdio/ui 0.40.0 → 0.42.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 (108) hide show
  1. package/dist/{MermaidComponent-81jr28u4.js → MermaidComponent-D7vhkpka.js} +3 -3
  2. package/dist/{MermaidComponent-81jr28u4.js.map → MermaidComponent-D7vhkpka.js.map} +1 -1
  3. package/dist/alert-MQ47wy7f.js +388 -0
  4. package/dist/alert-MQ47wy7f.js.map +1 -0
  5. package/dist/chat-ui.d.ts +129 -23
  6. package/dist/chat-ui.js +2596 -1591
  7. package/dist/chat-ui.js.map +1 -1
  8. package/dist/{types-DWA3enV6.d.ts → collection-view-fields-D3cysHNT.d.ts} +87 -37
  9. package/dist/collection-view-grouping-D4nZk8-3.js +90 -0
  10. package/dist/collection-view-grouping-D4nZk8-3.js.map +1 -0
  11. package/dist/collection-view-search-CpjJy76w.js +1973 -0
  12. package/dist/collection-view-search-CpjJy76w.js.map +1 -0
  13. package/dist/collection-view.d.ts +4 -0
  14. package/dist/collection-view.js +2 -0
  15. package/dist/{data-table-stats-row-CpRe_xK2.js → data-table-stats-row-64magT2g.js} +2 -2
  16. package/dist/{data-table-stats-row-CpRe_xK2.js.map → data-table-stats-row-64magT2g.js.map} +1 -1
  17. package/dist/data-table.d.ts +29 -7
  18. package/dist/data-table.js +1043 -878
  19. package/dist/data-table.js.map +1 -1
  20. package/dist/diff-bubble-DewUd_2w.js +61 -0
  21. package/dist/diff-bubble-DewUd_2w.js.map +1 -0
  22. package/dist/{diff-drawer-45rpk3aq.js → diff-drawer-IYpQ-QQK.js} +264 -242
  23. package/dist/diff-drawer-IYpQ-QQK.js.map +1 -0
  24. package/dist/diff-viewer-C-0VAt9P.js +574 -0
  25. package/dist/diff-viewer-C-0VAt9P.js.map +1 -0
  26. package/dist/diff.d.ts +11 -0
  27. package/dist/diff.js +107 -98
  28. package/dist/diff.js.map +1 -1
  29. package/dist/display-sort-control-f3rbILsV.js +588 -0
  30. package/dist/display-sort-control-f3rbILsV.js.map +1 -0
  31. package/dist/drop-indicator-HjlBSIeV.js +27 -0
  32. package/dist/drop-indicator-HjlBSIeV.js.map +1 -0
  33. package/dist/edit-mode-data-table-DnMB2jiy.js +1449 -0
  34. package/dist/edit-mode-data-table-DnMB2jiy.js.map +1 -0
  35. package/dist/host-storage-BIo5azql.js +31 -0
  36. package/dist/host-storage-BIo5azql.js.map +1 -0
  37. package/dist/host-storage-J0089Hyk.d.ts +17 -0
  38. package/dist/{slider-hwHYe98I.js → icon-options-Tt6Wzhtv.js} +86 -201
  39. package/dist/icon-options-Tt6Wzhtv.js.map +1 -0
  40. package/dist/{index-Bfddrlz8.d.ts → index-B79hwNcB.d.ts} +66 -14
  41. package/dist/index-CKsd23jv.d.ts +80 -0
  42. package/dist/{index-CbtbcvKm.d.ts → index-DlmvvQ6x.d.ts} +1 -1
  43. package/dist/index-ICoad2I_.d.ts +282 -0
  44. package/dist/index.d.ts +63 -22
  45. package/dist/index.js +1149 -1054
  46. package/dist/index.js.map +1 -1
  47. package/dist/kanban-renderer.d.ts +3 -326
  48. package/dist/kanban-renderer.js +980 -596
  49. package/dist/kanban-renderer.js.map +1 -1
  50. package/dist/list-row-Z4SHkseA.js +1195 -0
  51. package/dist/list-row-Z4SHkseA.js.map +1 -0
  52. package/dist/markdown-editor-Dd4mor7l.js +3236 -0
  53. package/dist/markdown-editor-Dd4mor7l.js.map +1 -0
  54. package/dist/{mermaid-renderer-DImi0fDp.js → mermaid-renderer-0PmNkOXI.js} +29 -29
  55. package/dist/mermaid-renderer-0PmNkOXI.js.map +1 -0
  56. package/dist/mermaid.js +1 -1
  57. package/dist/number-input-7K66wnSC.js +63 -0
  58. package/dist/number-input-7K66wnSC.js.map +1 -0
  59. package/dist/{param-editor-BQd4AOUP.js → param-editor-Dnix-fJo.js} +2 -2
  60. package/dist/{param-editor-BQd4AOUP.js.map → param-editor-Dnix-fJo.js.map} +1 -1
  61. package/dist/{param-editor-field-BJ_rLUnV.js → param-editor-field-B3vLST-B.js} +1436 -1427
  62. package/dist/param-editor-field-B3vLST-B.js.map +1 -0
  63. package/dist/param-editor.js +4 -3
  64. package/dist/prism-OG4H7Hu4.js +334 -0
  65. package/dist/prism-OG4H7Hu4.js.map +1 -0
  66. package/dist/queued-follow-up-Bj_vtMgd.js +208 -0
  67. package/dist/queued-follow-up-Bj_vtMgd.js.map +1 -0
  68. package/dist/{resource-badge-95WPVlZf.d.ts → resource-badge-nOWPqxFU.d.ts} +1 -0
  69. package/dist/rich-text-BgEnAHr2.js +1160 -0
  70. package/dist/rich-text-BgEnAHr2.js.map +1 -0
  71. package/dist/rich-text.d.ts +2 -2
  72. package/dist/rich-text.js +4 -2
  73. package/dist/style.css +1 -1
  74. package/dist/terminal.d.ts +5 -63
  75. package/dist/terminal.js +102 -122
  76. package/dist/terminal.js.map +1 -1
  77. package/dist/{theme-CbmSEbRF.js → theme-CMJdH59Z.js} +589 -265
  78. package/dist/theme-CMJdH59Z.js.map +1 -0
  79. package/dist/theme-kKuLN2jb.js +80 -0
  80. package/dist/theme-kKuLN2jb.js.map +1 -0
  81. package/dist/theme-preference-BV4cbJNB.js +115 -0
  82. package/dist/theme-preference-BV4cbJNB.js.map +1 -0
  83. package/dist/theme.js +3 -2
  84. package/dist/tree-list-jarhD31R.js +1652 -0
  85. package/dist/tree-list-jarhD31R.js.map +1 -0
  86. package/dist/use-virtualizer-uj43XjBp.js +10 -0
  87. package/dist/use-virtualizer-uj43XjBp.js.map +1 -0
  88. package/dist/{workspace-badge-Brm3Xr3m.d.ts → workspace-badge-BKtB805G.d.ts} +5 -1
  89. package/package.json +8 -4
  90. package/dist/diff-bubble-DZsarmSG.js +0 -61
  91. package/dist/diff-bubble-DZsarmSG.js.map +0 -1
  92. package/dist/diff-drawer-45rpk3aq.js.map +0 -1
  93. package/dist/diff-viewer-BP_mI6Wx.js +0 -558
  94. package/dist/diff-viewer-BP_mI6Wx.js.map +0 -1
  95. package/dist/list-row-uqD-q4gv.js +0 -1018
  96. package/dist/list-row-uqD-q4gv.js.map +0 -1
  97. package/dist/mermaid-renderer-DImi0fDp.js.map +0 -1
  98. package/dist/param-editor-field-BJ_rLUnV.js.map +0 -1
  99. package/dist/prism-BStPsJSB.js +0 -658
  100. package/dist/prism-BStPsJSB.js.map +0 -1
  101. package/dist/rich-text-VYAmEigU.js +0 -6979
  102. package/dist/rich-text-VYAmEigU.js.map +0 -1
  103. package/dist/slider-hwHYe98I.js.map +0 -1
  104. package/dist/theme-CbmSEbRF.js.map +0 -1
  105. package/dist/theme-preference-pzfuK5cH.js +0 -101
  106. package/dist/theme-preference-pzfuK5cH.js.map +0 -1
  107. package/dist/tree-list-BNZwjQZA.js +0 -1616
  108. package/dist/tree-list-BNZwjQZA.js.map +0 -1
@@ -0,0 +1,115 @@
1
+ import { t as e } from "./browser-storage-C_ipoNwP.js";
2
+ import { c as t } from "react/compiler-runtime";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ import { createContext as r, useContext as i, useEffect as a, useState as o } from "react";
5
+ //#region src/utils/apply-theme-preference.ts
6
+ var s = [{
7
+ id: "pstdio-light",
8
+ mode: "light"
9
+ }, {
10
+ id: "pstdio-dark",
11
+ mode: "dark"
12
+ }], c = (e, t = s) => typeof e == "string" && t.some((t) => t.id === e), l = (e, t = s) => t.find((t) => t.id === e)?.mode ?? "light", u = (e) => `theme-${e}`, d = (e, t = l(e)) => [t, u(e)], f = "data-pstdio-theme-token-paths", p = (e) => `--chakra-${e.replaceAll(".", "-")}`, m = `color-mix(in srgb, var(${p("colors.fg")}) 12%, var(${p("colors.bg")}))`, h = (e) => e["colors.bg"] ? {
13
+ "colors.bg.active": m,
14
+ ...e
15
+ } : e, g = (e, t) => {
16
+ if (t?.tokens) for (let n of Object.keys(t.tokens)) e.style.removeProperty(p(n));
17
+ }, _ = (e) => {
18
+ let t = e.getAttribute(f)?.split("\n").filter(Boolean) ?? [];
19
+ for (let n of t) e.style.removeProperty(p(n));
20
+ e.setAttribute(f, "");
21
+ }, v = (e, t) => {
22
+ if (!t.tokens) {
23
+ e.setAttribute(f, "");
24
+ return;
25
+ }
26
+ let n = h(t.tokens);
27
+ for (let [t, r] of Object.entries(n)) e.style.setProperty(p(t), r);
28
+ e.setAttribute(f, Object.keys(n).join("\n"));
29
+ }, y = (e, t = s) => {
30
+ if (typeof document > "u") return;
31
+ let n = document.documentElement, r = document.body, i = t.find((t) => t.id === e) ?? {
32
+ id: e,
33
+ mode: "light"
34
+ }, a = l(e, t);
35
+ for (let o of [n, r]) {
36
+ if (!o) continue;
37
+ let n = o.getAttribute("data-theme"), r = t.find((e) => e.id === n);
38
+ o.classList.remove("light", "dark"), n && o.classList.remove(u(n)), _(o), g(o, r), v(o, i), o.classList.add(...d(e, a)), o.setAttribute("data-theme", e), o.setAttribute("data-color-mode", a), o.style.colorScheme = a;
39
+ }
40
+ }, b = "theme-preference", x = {
41
+ getItem: (t) => e().getItem(t),
42
+ setItem: (t, n) => e().setItem(t, n)
43
+ }, S = r(null), C = (e, t) => e.find((e) => e.mode === t)?.id ?? e[0]?.id ?? s[0].id, w = (e, t) => typeof window > "u" ? null : e.getItem(t), T = (e, t, n) => {
44
+ typeof window < "u" && e.setItem(t, n);
45
+ }, E = (e) => typeof e == "string" && e.includes("."), D = (e = s, t = x) => typeof window > "u" ? C(e, "light") : w(t, b) || C(e, typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"), O = (e) => {
46
+ let r = t(42), { children: i, storage: u, themePreferences: d } = e, f = u === void 0 ? x : u, p = d === void 0 ? s : d, m = e.preferenceScope ? `${b}:${e.preferenceScope}` : b, h = e.initialPreference === void 0 ? w(f, m) : null, g = e.initialPreference ?? h ?? e.defaultPreference ?? D(p, f), [_, v] = o({
47
+ storageKey: m,
48
+ preference: g
49
+ }), [O, k] = o(null), A = _.storageKey === m ? _.preference : g, j = c(A, p) ? A : C(p, l(A, p)), M;
50
+ r[0] !== O || r[1] !== p ? (M = O && c(O, p) ? O : null, r[0] = O, r[1] = p, r[2] = M) : M = r[2];
51
+ let N = M, P = [A, h].find((e) => E(e) && !c(e, p)) ?? null, F;
52
+ r[3] !== e.defaultPreference || r[4] !== j || r[5] !== v || r[6] !== N || r[7] !== f || r[8] !== m || r[9] !== h || r[10] !== A || r[11] !== p ? (F = () => {
53
+ if (h && h !== A && c(h, p)) {
54
+ v({
55
+ storageKey: m,
56
+ preference: h
57
+ });
58
+ return;
59
+ }
60
+ if (!c(A, p)) {
61
+ e.defaultPreference || v({
62
+ storageKey: m,
63
+ preference: j
64
+ });
65
+ return;
66
+ }
67
+ y(N ?? A, p), !(h && h !== A && E(h) && !c(h, p)) && !e.defaultPreference && T(f, m, A);
68
+ }, r[3] = e.defaultPreference, r[4] = j, r[5] = v, r[6] = N, r[7] = f, r[8] = m, r[9] = h, r[10] = A, r[11] = p, r[12] = F) : F = r[12];
69
+ let I;
70
+ r[13] !== e.defaultPreference || r[14] !== j || r[15] !== N || r[16] !== f || r[17] !== m || r[18] !== h || r[19] !== A || r[20] !== p ? (I = [
71
+ j,
72
+ N,
73
+ f,
74
+ h,
75
+ A,
76
+ p,
77
+ m,
78
+ e.defaultPreference
79
+ ], r[13] = e.defaultPreference, r[14] = j, r[15] = N, r[16] = f, r[17] = m, r[18] = h, r[19] = A, r[20] = p, r[21] = I) : I = r[21], a(F, I);
80
+ let L;
81
+ r[22] !== k || r[23] !== v || r[24] !== f || r[25] !== m ? (L = (e) => {
82
+ T(f, m, e), v({
83
+ storageKey: m,
84
+ preference: e
85
+ }), k(null);
86
+ }, r[22] = k, r[23] = v, r[24] = f, r[25] = m, r[26] = L) : L = r[26];
87
+ let R = L, z;
88
+ r[27] !== j || r[28] !== R || r[29] !== p ? (z = () => {
89
+ let e = l(j, p) === "dark" ? "light" : "dark";
90
+ R(C(p, e));
91
+ }, r[27] = j, r[28] = R, r[29] = p, r[30] = z) : z = r[30];
92
+ let B = z, V = N ?? j, H;
93
+ r[31] !== P || r[32] !== j || r[33] !== k || r[34] !== R || r[35] !== V || r[36] !== p || r[37] !== B ? (H = {
94
+ themePreference: V,
95
+ chosenThemePreference: j,
96
+ pendingThemePreference: P,
97
+ themePreferences: p,
98
+ setThemePreference: R,
99
+ previewThemePreference: k,
100
+ toggleThemePreference: B
101
+ }, r[31] = P, r[32] = j, r[33] = k, r[34] = R, r[35] = V, r[36] = p, r[37] = B, r[38] = H) : H = r[38];
102
+ let U;
103
+ return r[39] !== i || r[40] !== H ? (U = /* @__PURE__ */ n(S, {
104
+ value: H,
105
+ children: i
106
+ }), r[39] = i, r[40] = H, r[41] = U) : U = r[41], U;
107
+ }, k = () => {
108
+ let e = i(S);
109
+ if (!e) throw Error("useThemePreference must be used within a ThemePreferenceProvider");
110
+ return e;
111
+ };
112
+ //#endregion
113
+ export { s as a, l as c, y as i, c as l, D as n, u as o, k as r, d as s, O as t };
114
+
115
+ //# sourceMappingURL=theme-preference-BV4cbJNB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-preference-BV4cbJNB.js","names":["ThemePreference","ThemePreferenceMode","ThemePreferenceTokens","Record","ThemePreferenceOption","id","title","mode","tokens","monacoTheme","defaultThemePreferences","isThemePreference","value","themePreferences","some","theme","getThemePreferenceMode","find","preference","getThemePreferenceClassName","getThemePreferenceClassNames","THEME_TOKEN_PATHS_ATTRIBUTE","getThemePreferenceCssVariableName","tokenPath","replaceAll","surfaceActiveColor","resolveThemeTokens","removeThemeTokens","el","HTMLElement","Object","keys","style","removeProperty","removeTrackedThemeTokens","tokenPaths","getAttribute","split","filter","Boolean","setAttribute","applyThemeTokens","entries","setProperty","join","applyThemePreference","document","root","documentElement","body","option","previousTheme","previousPreference","classList","remove","add","colorScheme","createContext","ReactNode","useContext","useEffect","useState","applyThemePreference","defaultThemePreferences","getThemePreferenceMode","isThemePreference","ThemePreference","ThemePreferenceMode","ThemePreferenceOption","createBrowserStorage","themePreferenceStorageKey","ThemePreferenceStorage","getItem","key","setItem","value","browserStorage","ThemePreferenceContext","ThemePreferenceContextValue","themePreference","chosenThemePreference","pendingThemePreference","themePreferences","setThemePreference","preference","previewThemePreference","toggleThemePreference","ThemePreferenceProviderProps","children","initialPreference","defaultPreference","preferenceScope","storage","getDefaultThemePreference","mode","find","id","getStoredThemePreference","storageKey","window","storeThemePreference","looksLikeContributedThemePreference","includes","getInitialThemePreference","stored","prefersDark","matchMedia","matches","ThemePreferenceProvider","props","$","_c","t0","t1","undefined","storedPreference","selection","setSelection","preview","setPreview","resolvedThemePreference","t2","shownPreview","t3","hasPendingStoredTheme","t4","t5","preference_0","t6","nextMode","t7","t8","t9","useThemePreference","context","Error","_c","createBrowserStorage","defaultThemePreferences","isThemePreference","value","themePreferences","theme","getThemePreferenceMode","preference","getThemePreferenceClassName","getThemePreferenceClassNames","mode","THEME_TOKEN_PATHS_ATTRIBUTE","getThemePreferenceCssVariableName","tokenPath","surfaceActiveColor","resolveThemeTokens","tokens","removeThemeTokens","removeTrackedThemeTokens","tokenPaths","el","applyThemeTokens","applyThemePreference","root","body","option","previousTheme","previousPreference","themePreferenceStorageKey","browserStorage","key","ThemePreferenceContext","createContext","getDefaultThemePreference","getStoredThemePreference","storage","storageKey","storeThemePreference","looksLikeContributedThemePreference","getInitialThemePreference","ThemePreferenceProvider","$","c","t0","t1","props","storedPreference","initialPreference","selection","setSelection","useState","preview","setPreview","themePreference","resolvedThemePreference","t2","shownPreview","pendingThemePreference","t3","t4","useEffect","t5","preference_0","setThemePreference","t6","nextMode","toggleThemePreference","t7","t8","t9","children","useThemePreference","context","useContext"],"sources":["../src/utils/apply-theme-preference.ts","../src/utils/theme-preference.tsx"],"sourcesContent":["export type ThemePreference = string;\nexport type ThemePreferenceMode = \"light\" | \"dark\";\nexport type ThemePreferenceTokens = Record<string, string>;\n\nexport interface ThemePreferenceOption {\n id: ThemePreference;\n title?: string;\n mode: ThemePreferenceMode;\n tokens?: ThemePreferenceTokens;\n monacoTheme?: unknown;\n}\n\nexport const defaultThemePreferences = [\n { id: \"pstdio-light\", mode: \"light\" },\n { id: \"pstdio-dark\", mode: \"dark\" },\n] satisfies ThemePreferenceOption[];\n\nexport const isThemePreference = (\n value: string | null,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n): value is ThemePreference => typeof value === \"string\" && themePreferences.some((theme) => theme.id === value);\n\nexport const getThemePreferenceMode = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => themePreferences.find((preference) => preference.id === theme)?.mode ?? \"light\";\n\nexport const getThemePreferenceClassName = (theme: ThemePreference) => `theme-${theme}`;\n\nexport const getThemePreferenceClassNames = (\n theme: ThemePreference,\n mode: ThemePreferenceMode = getThemePreferenceMode(theme),\n) => [mode, getThemePreferenceClassName(theme)];\n\nconst THEME_TOKEN_PATHS_ATTRIBUTE = \"data-pstdio-theme-token-paths\";\n\nconst getThemePreferenceCssVariableName = (tokenPath: string) => `--chakra-${tokenPath.replaceAll(\".\", \"-\")}`;\n\n// Pressed and selected controls use `bg.active`. Its default is tuned for the default surface, so a\n// theme that replaces the surface without its own pressed color can make pressed controls look\n// unpressed. Mix the text color into the surface instead, at about the contrast the default themes\n// use. Hover keeps its default: it must stay visible on every panel surface, not only this one.\nconst surfaceActiveColor = `color-mix(in srgb, var(${getThemePreferenceCssVariableName(\"colors.fg\")}) 12%, var(${getThemePreferenceCssVariableName(\"colors.bg\")}))`;\n\nconst resolveThemeTokens = (tokens: ThemePreferenceTokens) =>\n tokens[\"colors.bg\"] ? { \"colors.bg.active\": surfaceActiveColor, ...tokens } : tokens;\n\nconst removeThemeTokens = (el: HTMLElement, theme?: ThemePreferenceOption) => {\n if (!theme?.tokens) return;\n\n for (const tokenPath of Object.keys(theme.tokens)) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n};\n\nconst removeTrackedThemeTokens = (el: HTMLElement) => {\n const tokenPaths = el.getAttribute(THEME_TOKEN_PATHS_ATTRIBUTE)?.split(\"\\n\").filter(Boolean) ?? [];\n\n for (const tokenPath of tokenPaths) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n};\n\nconst applyThemeTokens = (el: HTMLElement, theme: ThemePreferenceOption) => {\n if (!theme.tokens) {\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n return;\n }\n\n const tokens = resolveThemeTokens(theme.tokens);\n for (const [tokenPath, value] of Object.entries(tokens)) {\n el.style.setProperty(getThemePreferenceCssVariableName(tokenPath), value);\n }\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, Object.keys(tokens).join(\"\\n\"));\n};\n\nexport const applyThemePreference = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof document === \"undefined\") return;\n\n const root = document.documentElement;\n const body = document.body;\n const preference = themePreferences.find((option) => option.id === theme) ?? { id: theme, mode: \"light\" };\n const mode = getThemePreferenceMode(theme, themePreferences);\n\n for (const el of [root, body]) {\n if (!el) continue;\n const previousTheme = el.getAttribute(\"data-theme\");\n const previousPreference = themePreferences.find((option) => option.id === previousTheme);\n\n el.classList.remove(\"light\", \"dark\");\n if (previousTheme) {\n el.classList.remove(getThemePreferenceClassName(previousTheme));\n }\n removeTrackedThemeTokens(el);\n removeThemeTokens(el, previousPreference);\n applyThemeTokens(el, preference);\n el.classList.add(...getThemePreferenceClassNames(theme, mode));\n el.setAttribute(\"data-theme\", theme);\n el.setAttribute(\"data-color-mode\", mode);\n el.style.colorScheme = mode;\n }\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from \"react\";\n\nimport {\n applyThemePreference,\n defaultThemePreferences,\n getThemePreferenceMode,\n isThemePreference,\n type ThemePreference,\n type ThemePreferenceMode,\n type ThemePreferenceOption,\n} from \"./apply-theme-preference\";\nimport { createBrowserStorage } from \"./browser-storage\";\n\n/** The key, or key prefix for scoped choices, under which the provider saves the chosen theme. */\nconst themePreferenceStorageKey = \"theme-preference\";\n\n/** Where the provider reads and saves the chosen theme. Defaults to browser storage. */\nexport interface ThemePreferenceStorage {\n getItem: (key: string) => string | null;\n setItem: (key: string, value: string) => void;\n}\n\n// A stable default keeps the provider effect from running on every render. It reads\n// `localStorage` on each access because storage can be missing when this module loads.\nconst browserStorage: ThemePreferenceStorage = {\n getItem: (key) => createBrowserStorage().getItem(key),\n setItem: (key, value) => createBrowserStorage().setItem(key, value),\n};\n\nconst ThemePreferenceContext = createContext<ThemePreferenceContextValue | null>(null);\n\ninterface ThemePreferenceContextValue {\n /** The theme on screen: a preview while one is shown, otherwise the chosen theme. */\n themePreference: ThemePreference;\n /** The saved choice. It differs from `themePreference` only while a preview is shown. */\n chosenThemePreference: ThemePreference;\n /** The chosen theme while it waits for its contribution to register; `themePreference` shows a fallback until then. */\n pendingThemePreference: ThemePreference | null;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (preference: ThemePreference) => void;\n /** Shows a theme without saving it. Pass `null` to return to the chosen theme. */\n previewThemePreference: (preference: ThemePreference | null) => void;\n toggleThemePreference: () => void;\n}\n\ninterface ThemePreferenceProviderProps {\n children: ReactNode;\n initialPreference?: ThemePreference;\n /** A default used only when the user has not chosen a theme in this scope. */\n defaultPreference?: ThemePreference;\n preferenceScope?: string;\n storage?: ThemePreferenceStorage;\n themePreferences?: readonly ThemePreferenceOption[];\n}\n\nconst getDefaultThemePreference = (themePreferences: readonly ThemePreferenceOption[], mode: ThemePreferenceMode) =>\n themePreferences.find((preference) => preference.mode === mode)?.id ??\n themePreferences[0]?.id ??\n defaultThemePreferences[0].id;\n\nconst getStoredThemePreference = (storage: ThemePreferenceStorage, storageKey: string) => {\n if (typeof window === \"undefined\") return null;\n\n return storage.getItem(storageKey);\n};\n\nconst storeThemePreference = (storage: ThemePreferenceStorage, storageKey: string, preference: ThemePreference) => {\n if (typeof window === \"undefined\") return;\n\n storage.setItem(storageKey, preference);\n};\n\n// Contributed themes register asynchronously. Keep their stored preference until\n// it registers or the user chooses another theme.\nconst looksLikeContributedThemePreference = (value: string | null) => typeof value === \"string\" && value.includes(\".\");\n\nexport const getInitialThemePreference = (\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n storage: ThemePreferenceStorage = browserStorage,\n) => {\n if (typeof window === \"undefined\") return getDefaultThemePreference(themePreferences, \"light\");\n\n const stored = getStoredThemePreference(storage, themePreferenceStorageKey);\n if (stored) return stored;\n\n const prefersDark =\n typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n return getDefaultThemePreference(themePreferences, prefersDark ? \"dark\" : \"light\");\n};\n\nexport const ThemePreferenceProvider = (props: ThemePreferenceProviderProps) => {\n const { children, storage = browserStorage, themePreferences = defaultThemePreferences } = props;\n const storageKey = props.preferenceScope\n ? `${themePreferenceStorageKey}:${props.preferenceScope}`\n : themePreferenceStorageKey;\n const storedPreference = props.initialPreference === undefined ? getStoredThemePreference(storage, storageKey) : null;\n const initialPreference =\n props.initialPreference ??\n storedPreference ??\n props.defaultPreference ??\n getInitialThemePreference(themePreferences, storage);\n const [selection, setSelection] = useState({ storageKey, preference: initialPreference });\n const [preview, setPreview] = useState<ThemePreference | null>(null);\n const themePreference = selection.storageKey === storageKey ? selection.preference : initialPreference;\n const resolvedThemePreference = isThemePreference(themePreference, themePreferences)\n ? themePreference\n : getDefaultThemePreference(themePreferences, getThemePreferenceMode(themePreference, themePreferences));\n const shownPreview = preview && isThemePreference(preview, themePreferences) ? preview : null;\n // The provider shows a fallback while a chosen extension theme registers. The choice\n // stays in the selection on the first render and in storage after the fallback applies.\n const pendingThemePreference =\n [themePreference, storedPreference].find(\n (preference) =>\n looksLikeContributedThemePreference(preference) && !isThemePreference(preference, themePreferences),\n ) ?? null;\n\n useEffect(() => {\n if (\n storedPreference &&\n storedPreference !== themePreference &&\n isThemePreference(storedPreference, themePreferences)\n ) {\n setSelection({ storageKey, preference: storedPreference });\n return;\n }\n\n if (!isThemePreference(themePreference, themePreferences)) {\n if (!props.defaultPreference) setSelection({ storageKey, preference: resolvedThemePreference });\n return;\n }\n\n applyThemePreference(shownPreview ?? themePreference, themePreferences);\n const hasPendingStoredTheme =\n storedPreference &&\n storedPreference !== themePreference &&\n looksLikeContributedThemePreference(storedPreference) &&\n !isThemePreference(storedPreference, themePreferences);\n if (!hasPendingStoredTheme && !props.defaultPreference) storeThemePreference(storage, storageKey, themePreference);\n }, [\n resolvedThemePreference,\n shownPreview,\n storage,\n storedPreference,\n themePreference,\n themePreferences,\n storageKey,\n props.defaultPreference,\n ]);\n\n const setThemePreference = (preference: ThemePreference) => {\n storeThemePreference(storage, storageKey, preference);\n setSelection({ storageKey, preference });\n setPreview(null);\n };\n\n const toggleThemePreference = () => {\n const nextMode = getThemePreferenceMode(resolvedThemePreference, themePreferences) === \"dark\" ? \"light\" : \"dark\";\n\n setThemePreference(getDefaultThemePreference(themePreferences, nextMode));\n };\n\n return (\n <ThemePreferenceContext\n value={{\n themePreference: shownPreview ?? resolvedThemePreference,\n chosenThemePreference: resolvedThemePreference,\n pendingThemePreference,\n themePreferences,\n setThemePreference,\n previewThemePreference: setPreview,\n toggleThemePreference,\n }}\n >\n {children}\n </ThemePreferenceContext>\n );\n};\n\nexport const useThemePreference = () => {\n const context = useContext(ThemePreferenceContext);\n\n if (!context) {\n throw new Error(\"useThemePreference must be used within a ThemePreferenceProvider\");\n }\n\n return context;\n};\n"],"mappings":"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"}
package/dist/theme.js CHANGED
@@ -1,2 +1,3 @@
1
- import { n as e, r as t, t as n } from "./theme-CbmSEbRF.js";
2
- export { e as createMonacoThemeFromVsCodeTheme, t as createThemePreferenceFromVsCodeTheme, n as psTheme };
1
+ import { t as e } from "./theme-CMJdH59Z.js";
2
+ import { n as t, t as n } from "./theme-kKuLN2jb.js";
3
+ export { n as createMonacoThemeFromVsCodeTheme, t as createThemePreferenceFromVsCodeTheme, e as psTheme };