@noirmd/previewer 2.0.0 → 2.0.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.
@@ -3,6 +3,24 @@
3
3
 
4
4
  Override-friendly design tokens. Host themes can win by
5
5
  defining --color-* variables; fallbacks are used otherwise.
6
+
7
+ Fallback chain per token:
8
+ 1. daisyUI v5 / Tailwind v4 theme var (--color-primary, ...)
9
+ 2. App-specific --color-* var (--color-accent-primary, ...)
10
+ 3. daisyUI v4 theme var (--p, --b1, --bc, ... — raw
11
+ components wrapped in oklch(); v4 normalizes every input
12
+ format to oklch, so this is safe)
13
+ 4. NoirMD default
14
+
15
+ Tokens are defined on BOTH :root and .nr-prose:
16
+ - :root makes them resolve everywhere, including elements
17
+ teleported to <body> (modals/card dialogs render outside
18
+ .nr-prose), on any host page regardless of how the host
19
+ scopes .nr-prose.
20
+ - .nr-prose re-declares them redundantly so tokens always
21
+ resolve inside prose even if the host overrides :root.
22
+ The module never defines --color-* itself, so host themes
23
+ always win.
6
24
  ============================================================ */
7
25
 
8
26
  /* ── Material Icons Round (self-hosted) ────────────────────
@@ -35,18 +53,37 @@
35
53
  -webkit-font-smoothing: antialiased;
36
54
  }
37
55
 
56
+ /* ── Design tokens ───────────────────────────────────────── */
57
+
58
+ :root {
59
+ --nr-bg: var(--color-base-100, var(--color-background-primary, oklch(var(--b1, 15% 0.01 260) / 1)));
60
+ --nr-bg-secondary: var(--color-base-200, var(--color-background-secondary-solid, oklch(var(--b2, 20% 0.02 260) / 1)));
61
+ --nr-text: var(--color-base-content, var(--color-text-primary, oklch(var(--bc, 92% 0.02 260) / 1)));
62
+ --nr-text-secondary: color-mix(in oklab, var(--color-base-content, var(--color-text-secondary, oklch(var(--bc, 92% 0.02 260) / 1))) 72%, transparent);
63
+ --nr-border: var(--color-base-300, var(--color-border, oklch(var(--b3, 25% 0.03 260) / 1)));
64
+ --nr-accent: var(--color-primary, var(--color-accent, var(--color-accent-primary, oklch(var(--p, 55% 0.3 240) / 1))));
65
+ --nr-accent-hover: color-mix(in oklab, var(--nr-accent) 85%, white);
66
+ --nr-info: var(--color-info, oklch(var(--in, 70% 0.2 220) / 1));
67
+ --nr-warning: var(--color-warning, oklch(var(--wa, 80% 0.25 80) / 1));
68
+ --nr-danger: var(--color-error, oklch(var(--er, 65% 0.3 30) / 1));
69
+ --nr-success: var(--color-success, oklch(var(--su, 65% 0.25 140) / 1));
70
+ --nr-radius: 1rem;
71
+ --nr-radius-sm: 0.5rem;
72
+ --nr-radius-lg: 1.5rem;
73
+ }
74
+
38
75
  .nr-prose {
39
- --nr-bg: var(--color-background-primary, #0f172a);
40
- --nr-bg-secondary: var(--color-background-secondary-solid, #1e293b);
41
- --nr-text: var(--color-text-primary, #e2e8f0);
42
- --nr-text-secondary: var(--color-text-secondary, #94a3b8);
43
- --nr-border: var(--color-border, #334155);
44
- --nr-accent: var(--color-accent-primary, #0ea5e9);
45
- --nr-accent-hover: var(--color-accent-hover, #38bdf8);
46
- --nr-info: #3b82f6;
47
- --nr-warning: #f59e0b;
48
- --nr-danger: #ef4444;
49
- --nr-success: #22c55e;
76
+ --nr-bg: var(--color-base-100, var(--color-background-primary, oklch(var(--b1, 15% 0.01 260) / 1)));
77
+ --nr-bg-secondary: var(--color-base-200, var(--color-background-secondary-solid, oklch(var(--b2, 20% 0.02 260) / 1)));
78
+ --nr-text: var(--color-base-content, var(--color-text-primary, oklch(var(--bc, 92% 0.02 260) / 1)));
79
+ --nr-text-secondary: color-mix(in oklab, var(--color-base-content, var(--color-text-secondary, oklch(var(--bc, 92% 0.02 260) / 1))) 72%, transparent);
80
+ --nr-border: var(--color-base-300, var(--color-border, oklch(var(--b3, 25% 0.03 260) / 1)));
81
+ --nr-accent: var(--color-primary, var(--color-accent, var(--color-accent-primary, oklch(var(--p, 55% 0.3 240) / 1))));
82
+ --nr-accent-hover: color-mix(in oklab, var(--nr-accent) 85%, white);
83
+ --nr-info: var(--color-info, oklch(var(--in, 70% 0.2 220) / 1));
84
+ --nr-warning: var(--color-warning, oklch(var(--wa, 80% 0.25 80) / 1));
85
+ --nr-danger: var(--color-error, oklch(var(--er, 65% 0.3 30) / 1));
86
+ --nr-success: var(--color-success, oklch(var(--su, 65% 0.25 140) / 1));
50
87
  --nr-radius: 1rem;
51
88
  --nr-radius-sm: 0.5rem;
52
89
  --nr-radius-lg: 1.5rem;
package/dist/vue.cjs CHANGED
@@ -11335,7 +11335,10 @@ var modalDirective = ({ props, renderSlot }) => {
11335
11335
  const dialog = createModal(modalTitle);
11336
11336
  const body = dialog.querySelector(".nr-modal__body");
11337
11337
  if (body) {
11338
- body.appendChild(renderSlot("default"));
11338
+ const prose = document.createElement("div");
11339
+ prose.className = "nr-prose";
11340
+ prose.appendChild(renderSlot("default"));
11341
+ body.appendChild(prose);
11339
11342
  }
11340
11343
  btn.addEventListener("click", () => {
11341
11344
  if (!dialog.open) {
@@ -11489,8 +11492,10 @@ var cardDirective = ({
11489
11492
  const dialog = createModal(title || "Detalles");
11490
11493
  const modalBody = dialog.querySelector(".nr-modal__body");
11491
11494
  if (modalBody) {
11492
- const contentSlot = renderSlot("content") || renderSlot("default");
11493
- modalBody.appendChild(contentSlot);
11495
+ const prose = document.createElement("div");
11496
+ prose.className = "nr-prose";
11497
+ prose.appendChild(renderSlot("content") || renderSlot("default"));
11498
+ modalBody.appendChild(prose);
11494
11499
  }
11495
11500
  card.addEventListener("click", () => {
11496
11501
  if (!dialog.open) {
@@ -11847,6 +11852,75 @@ function renderDirective(element, ctx, allElements) {
11847
11852
 
11848
11853
  // vue/useTailwindCDN.ts
11849
11854
  var import_vue = require("vue");
11855
+
11856
+ // vanilla/tailwindTheme.ts
11857
+ var THEME_STYLE_ID = "nr-tailwind-theme";
11858
+ var NR_THEME_CSS = `
11859
+ @theme {
11860
+ --color-primary: var(--color-accent-primary, oklch(var(--p, 55% 0.3 240) / 1));
11861
+ --color-primary-content: #ffffff;
11862
+ --color-secondary: oklch(var(--s, 55% 0.25 200) / 1);
11863
+ --color-secondary-content: #ffffff;
11864
+ --color-accent: var(--color-accent-primary, oklch(var(--a, 65% 0.25 160) / 1));
11865
+ --color-accent-content: #ffffff;
11866
+ --color-neutral: oklch(var(--n, 50% 0.05 240) / 1);
11867
+ --color-neutral-content: var(--color-text-primary, oklch(var(--nc, 92% 0.02 240) / 1));
11868
+ --color-base-100: var(--color-background-primary, oklch(var(--b1, 15% 0.01 260) / 1));
11869
+ --color-base-200: var(--color-background-secondary-solid, oklch(var(--b2, 20% 0.02 260) / 1));
11870
+ --color-base-300: var(--color-border, oklch(var(--b3, 25% 0.03 260) / 1));
11871
+ --color-base-content: var(--color-text-primary, oklch(var(--bc, 92% 0.02 260) / 1));
11872
+ --color-info: oklch(var(--in, 70% 0.2 220) / 1);
11873
+ --color-info-content: #ffffff;
11874
+ --color-success: oklch(var(--su, 65% 0.25 140) / 1);
11875
+ --color-success-content: #ffffff;
11876
+ --color-warning: oklch(var(--wa, 80% 0.25 80) / 1);
11877
+ --color-warning-content: #1f2937;
11878
+ --color-error: oklch(var(--er, 65% 0.3 30) / 1);
11879
+ --color-error-content: #ffffff;
11880
+ }
11881
+ `;
11882
+ function getVar(root, name) {
11883
+ return getComputedStyle(root).getPropertyValue(name).trim();
11884
+ }
11885
+ function stylesheetHasTheme() {
11886
+ for (const sheet of Array.from(document.styleSheets)) {
11887
+ let rules = null;
11888
+ try {
11889
+ rules = sheet.cssRules;
11890
+ } catch {
11891
+ continue;
11892
+ }
11893
+ if (!rules) continue;
11894
+ for (const rule of Array.from(rules)) {
11895
+ const css2 = rule.cssText || "";
11896
+ if (css2.includes("@theme") || css2.includes('@plugin "daisyui"')) return true;
11897
+ }
11898
+ }
11899
+ return false;
11900
+ }
11901
+ function hasHostTheme() {
11902
+ if (typeof window === "undefined" || typeof document === "undefined") return true;
11903
+ if (getVar(document.documentElement, "--color-primary")) return true;
11904
+ if (getVar(document.documentElement, "--color-base-100")) return true;
11905
+ if (document.body && (getVar(document.body, "--color-primary") || getVar(document.body, "--color-base-100"))) return true;
11906
+ return stylesheetHasTheme();
11907
+ }
11908
+ function injectNRTailwindTheme() {
11909
+ if (typeof document === "undefined") return;
11910
+ if (document.getElementById(THEME_STYLE_ID)) return;
11911
+ if (hasHostTheme()) return;
11912
+ const style = document.createElement("style");
11913
+ style.id = THEME_STYLE_ID;
11914
+ style.setAttribute("type", "text/tailwindcss");
11915
+ style.textContent = NR_THEME_CSS;
11916
+ document.head.appendChild(style);
11917
+ }
11918
+ function removeNRTailwindTheme() {
11919
+ if (typeof document === "undefined") return;
11920
+ document.getElementById(THEME_STYLE_ID)?.remove();
11921
+ }
11922
+
11923
+ // vue/useTailwindCDN.ts
11850
11924
  var CDN_URL = "https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4";
11851
11925
  var SCRIPT_ID = "tailwind-cdn-v4-runtime";
11852
11926
  var CONFIG_ID = "tailwind-cdn-v4-config";
@@ -11869,6 +11943,7 @@ function useLazyTailwindCDN(enabled) {
11869
11943
  configScript.textContent = TAILWIND_CDN_CONFIG;
11870
11944
  document.head.appendChild(configScript);
11871
11945
  }
11946
+ injectNRTailwindTheme();
11872
11947
  if (!document.getElementById(SCRIPT_ID)) {
11873
11948
  const script = document.createElement("script");
11874
11949
  script.id = SCRIPT_ID;
@@ -11882,6 +11957,7 @@ function useLazyTailwindCDN(enabled) {
11882
11957
  if ((window.__twCDNRefs ?? 0) <= 0) {
11883
11958
  document.getElementById(SCRIPT_ID)?.remove();
11884
11959
  document.getElementById(CONFIG_ID)?.remove();
11960
+ removeNRTailwindTheme();
11885
11961
  window.__twCDNRefs = 0;
11886
11962
  }
11887
11963
  };
@@ -11918,6 +11994,7 @@ function preloadTailwindCDN() {
11918
11994
  configScript.textContent = TAILWIND_CDN_CONFIG;
11919
11995
  document.head.appendChild(configScript);
11920
11996
  }
11997
+ injectNRTailwindTheme();
11921
11998
  const script = document.createElement("script");
11922
11999
  script.id = SCRIPT_ID;
11923
12000
  script.src = CDN_URL;