@slabui/theme-core 0.5.0 → 0.5.2

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @slabui/theme-core
2
2
 
3
+ ## 0.5.2
4
+
5
+ ## 0.5.1
6
+
7
+ ### Patch Changes
8
+
9
+ - [#114](https://github.com/slabui/ui/pull/114) [`42ef07c`](https://github.com/slabui/ui/commit/42ef07c593d27e151cf5760fbe63f1aa85c92839) Thanks [@andrefelipeschulle](https://github.com/andrefelipeschulle)! - The header comment of a new theme file is in English.
10
+
3
11
  ## 0.5.0
4
12
 
5
13
  ## 0.4.0
package/dist/files.mjs CHANGED
@@ -1 +1 @@
1
- import"./attribute.mjs";export{t as addImport,n as addThemeImport,r as localImports,i as removeThemeImport,a as removeTokens,o as renameThemeImport,s as renameThemeSelectors,c as themeFileHeader}from"./theme-files-a8APQNco.mjs";
1
+ import"./attribute.mjs";export{t as addImport,n as addThemeImport,r as localImports,i as removeThemeImport,a as removeTokens,o as renameThemeImport,s as renameThemeSelectors,c as themeFileHeader}from"./theme-files-w0weV1Ic.mjs";
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{THEME_ATTRIBUTE as e,THEME_ENV as t,isThemeName as n,themeAttribute as r,themeSelector as i}from"./attribute.mjs";import{d as a,l as o,r as s,t as c,u as l}from"./theme-files-a8APQNco.mjs";import u from"postcss";const d={theme:{"font-sans":`var(--font-sans)`,"font-heading":`var(--font-heading)`,"font-mono":`var(--font-mono)`,"radius-sm":`calc(var(--radius) * 0.6)`,"radius-md":`calc(var(--radius) * 0.8)`,"radius-lg":`var(--radius)`,"radius-xl":`calc(var(--radius) * 1.4)`,"radius-2xl":`calc(var(--radius) * 1.8)`,"radius-3xl":`calc(var(--radius) * 2.2)`,"radius-4xl":`calc(var(--radius) * 2.6)`,"breakpoint-3xl":`1600px`,"breakpoint-4xl":`2000px`,"text-xxs":`calc(var(--font-size) * 0.625)`,"text-2xxs":`calc(var(--font-size) * 0.688)`,"text-xs":`calc(var(--font-size) * 0.75)`,"text-xs--line-height":`calc(1 / 0.75)`,"text-2xs":`calc(var(--font-size) * 0.813)`,"text-2xs--line-height":`calc(1.125 / 0.813)`,"text-sm":`calc(var(--font-size) * 0.875)`,"text-sm--line-height":`calc(1.25 / 0.875)`,"text-2sm":`calc(var(--font-size) * 0.938)`,"text-2sm--line-height":`calc(1.625 / 0.938)`,"text-base":`var(--font-size)`,"text-base--line-height":`calc(1.5 / 1)`,"text-lg":`calc(var(--font-size) * 1.125)`,"text-lg--line-height":`calc(1.75 / 1.125)`,"text-xl":`calc(var(--font-size) * 1.25)`,"text-xl--line-height":`calc(1.75 / 1.25)`,"text-2xl":`calc(var(--font-size) * 1.5)`,"text-2xl--line-height":`calc(2 / 1.5)`,"text-3xl":`calc(var(--font-size) * 1.875)`,"text-3xl--line-height":`calc(2.25 / 1.875)`,"text-4xl":`calc(var(--font-size) * 2.25)`,"text-4xl--line-height":`calc(2.5 / 2.25)`,"text-5xl":`calc(var(--font-size) * 3)`,"text-5xl--line-height":`1`,"text-6xl":`calc(var(--font-size) * 3.75)`,"text-6xl--line-height":`1`,"text-7xl":`calc(var(--font-size) * 4.5)`,"text-7xl--line-height":`1`,"text-8xl":`calc(var(--font-size) * 6)`,"text-8xl--line-height":`1`,"text-9xl":`calc(var(--font-size) * 8)`,"text-9xl--line-height":`1`,spacing:`var(--spacing)`,"focus-size":`calc(var(--focus-size))`,"focus-offset":`var(--focus-offset)`,"container-page-sm":`var(--page-sm)`,"container-page":`var(--page)`,"container-page-lg":`var(--page-lg)`,"color-destructive":`var(--danger)`},light:{spacing:`0.25rem`,radius:`0.65rem`,"font-size":`1rem`,"page-sm":`768px`,page:`1200px`,"page-lg":`1440px`,background:`oklch(1 0 0)`,"scrollbar-thumb":`oklch(0.922 0 0)`,foreground:`oklch(0.145 0 0)`,card:`oklch(1 0 0)`,"card-foreground":`oklch(0.145 0 0)`,popover:`oklch(1 0 0)`,"popover-foreground":`oklch(0.145 0 0)`,muted:`oklch(0.97 0 0)`,"muted-foreground":`oklch(0.556 0 0)`,accent:`oklch(0.97 0 0)`,"accent-foreground":`oklch(0.205 0 0)`,border:`oklch(0.922 0 0)`,input:`oklch(0.922 0 0)`,ring:`oklch(0.708 0 0)`,"chart-1":`oklch(0.646 0.222 41.116)`,"chart-2":`oklch(0.6 0.118 184.704)`,"chart-3":`oklch(0.398 0.07 227.392)`,"chart-4":`oklch(0.828 0.189 84.429)`,"chart-5":`oklch(0.769 0.188 70.08)`,sidebar:`oklch(0.985 0 0)`,"sidebar-foreground":`oklch(0.145 0 0)`,"sidebar-primary":`oklch(0.205 0 0)`,"sidebar-primary-foreground":`oklch(0.985 0 0)`,"sidebar-accent":`oklch(0.97 0 0)`,"sidebar-accent-foreground":`oklch(0.205 0 0)`,"sidebar-border":`oklch(0.922 0 0)`,"sidebar-ring":`oklch(0.708 0 0)`,brand:`oklch(70% 0.1435 227.76)`,"brand-foreground":`oklch(0.985 0 0)`,primary:`oklch(70% 0.1435 227.76)`,"primary-foreground":`oklch(0.985 0 0)`,secondary:`oklch(0.97 0 0)`,"secondary-foreground":`oklch(0.205 0 0)`,danger:`oklch(0.577 0.245 27.325)`,"danger-foreground":`oklch(0.985 0 0)`,success:`oklch(0.728 0.125 139.6)`,"success-foreground":`oklch(0.985 0 0)`,warning:`oklch(0.784 0.181 44.7)`,"warning-foreground":`oklch(0.985 0 0)`,inverted:`oklch(0.205 0 0)`,"inverted-foreground":`oklch(0.97 0 0)`,focus:`oklch(0.7 0.181 44.7)`,"focus-size":`2.5px`,"focus-offset":`2px`,table:`oklch(0.94 0 0 / 65%)`,"table-content":`oklch(1 0 0)`,"table-hover":`oklch(0.98 0 0 / 10%)`},dark:{background:`oklch(0.145 0 0)`,"scrollbar-thumb":`oklch(0.269 0 0)`,foreground:`oklch(0.985 0 0)`,card:`oklch(0.205 0 0)`,"card-foreground":`oklch(0.985 0 0)`,popover:`oklch(0.205 0 0)`,"popover-foreground":`oklch(0.985 0 0)`,secondary:`oklch(0.269 0 0)`,"secondary-foreground":`oklch(0.985 0 0)`,muted:`oklch(0.269 0 0)`,"muted-foreground":`oklch(0.708 0 0)`,accent:`oklch(0.269 0 0)`,"accent-foreground":`oklch(0.985 0 0)`,border:`oklch(1 0 0 / 10%)`,input:`oklch(1 0 0 / 15%)`,ring:`oklch(0.556 0 0)`,"chart-1":`oklch(0.488 0.243 264.376)`,"chart-2":`oklch(0.696 0.17 162.48)`,"chart-3":`oklch(0.769 0.188 70.08)`,"chart-4":`oklch(0.627 0.265 303.9)`,"chart-5":`oklch(0.645 0.246 16.439)`,sidebar:`oklch(0.205 0 0)`,"sidebar-foreground":`oklch(0.985 0 0)`,"sidebar-primary":`oklch(0.488 0.243 264.376)`,"sidebar-primary-foreground":`oklch(0.985 0 0)`,"sidebar-accent":`oklch(0.269 0 0)`,"sidebar-accent-foreground":`oklch(0.985 0 0)`,"sidebar-border":`oklch(1 0 0 / 10%)`,"sidebar-ring":`oklch(0.556 0 0)`,brand:`oklch(66% 0.1435 227.76)`,"brand-foreground":`oklch(0.985 0 0)`,primary:`oklch(66% 0.1435 227.76)`,"primary-foreground":`oklch(0.985 0 0)`,danger:`oklch(0.704 0.191 22.216)`,"danger-foreground":`oklch(0.985 0 0)`,success:`oklch(0.728 0.125 139.6)`,"success-foreground":`oklch(0.985 0 0)`,warning:`oklch(0.784 0.181 44.7)`,"warning-foreground":`oklch(0.985 0 0)`,inverted:`oklch(0.922 0 0)`,"inverted-foreground":`oklch(0.205 0 0)`,focus:`oklch(0.7 0.181 44.7)`,table:`oklch(0.265 0 0)`,"table-content":`oklch(0.205 0 0)`,"table-hover":`oklch(0.22 0 0)`}};function f(e){return/^(?:font|text)-/.test(e)}const p={utility:`utility`,variant:`custom-variant`};function m(e){return e.params.trim().split(/[\s({]/)[0]??``}function h(e){let t=u.parse(e),n={},r={};return t.each(e=>{if(e.type!==`atrule`)return;let t=m(e);e.name===p.utility?n[t]=S(e):e.name===p.variant&&t!==`dark`&&(r[t]=S(e))}),{utilities:n,variants:r}}async function g(e,t,n={}){let r=u.parse(e),i=[],a=[];for(let e of[`variant`,`utility`]){let o=e===`utility`?`utilities`:`variants`,s=t[o]??{},c=n.base?.[o]??{},l=/* @__PURE__ */ new Set([...Object.keys(s),...Object.keys(c)]);for(let t of l){let l=s[t],u=c[t],d=y(r,e,t),f=`${o===`utilities`?`@utility`:`@custom-variant`} ${t}`,p=await v({local:d&&S(d),remote:l,base:u,options:n,kind:e,name:t,label:f,warnings:a,add:t=>b(r,e,t),replace:e=>{let t=x(e);t.raws.before=d?.raws.before??``,d?.replaceWith(t)},remove:()=>d?.remove()});p&&i.push({kind:e,name:t,action:p})}}return{css:r.toString(),changes:i,warnings:a}}async function _(e,t={},n={}){let r=u.parse(e),i=[],a=[],o=n.base?.base??{},s=/* @__PURE__ */ new Set([...Object.keys(t),...Object.keys(o)]);for(let e of s){let s=t[e]??{},c=o[e]??{},l=/* @__PURE__ */ new Set([...Object.keys(s),...Object.keys(c)]);for(let t of l){let o=C(r),l=o&&w(o,e),d=l?.nodes.find(e=>e.type===`decl`&&e.prop===t),f=`${e} { ${t} }`,p=await v({local:d?.value,remote:s[t],base:c[t],options:n,kind:`base`,name:f,label:`${t} in ${e}`,warnings:a,add:n=>{l??=T(r,e),l.append(u.decl({prop:t,value:n,raws:{before:`
1
+ import{THEME_ATTRIBUTE as e,THEME_ENV as t,isThemeName as n,themeAttribute as r,themeSelector as i}from"./attribute.mjs";import{d as a,l as o,r as s,t as c,u as l}from"./theme-files-w0weV1Ic.mjs";import u from"postcss";const d={theme:{"font-sans":`var(--font-sans)`,"font-heading":`var(--font-heading)`,"font-mono":`var(--font-mono)`,"radius-sm":`calc(var(--radius) * 0.6)`,"radius-md":`calc(var(--radius) * 0.8)`,"radius-lg":`var(--radius)`,"radius-xl":`calc(var(--radius) * 1.4)`,"radius-2xl":`calc(var(--radius) * 1.8)`,"radius-3xl":`calc(var(--radius) * 2.2)`,"radius-4xl":`calc(var(--radius) * 2.6)`,"breakpoint-3xl":`1600px`,"breakpoint-4xl":`2000px`,"text-xxs":`calc(var(--font-size) * 0.625)`,"text-2xxs":`calc(var(--font-size) * 0.688)`,"text-xs":`calc(var(--font-size) * 0.75)`,"text-xs--line-height":`calc(1 / 0.75)`,"text-2xs":`calc(var(--font-size) * 0.813)`,"text-2xs--line-height":`calc(1.125 / 0.813)`,"text-sm":`calc(var(--font-size) * 0.875)`,"text-sm--line-height":`calc(1.25 / 0.875)`,"text-2sm":`calc(var(--font-size) * 0.938)`,"text-2sm--line-height":`calc(1.625 / 0.938)`,"text-base":`var(--font-size)`,"text-base--line-height":`calc(1.5 / 1)`,"text-lg":`calc(var(--font-size) * 1.125)`,"text-lg--line-height":`calc(1.75 / 1.125)`,"text-xl":`calc(var(--font-size) * 1.25)`,"text-xl--line-height":`calc(1.75 / 1.25)`,"text-2xl":`calc(var(--font-size) * 1.5)`,"text-2xl--line-height":`calc(2 / 1.5)`,"text-3xl":`calc(var(--font-size) * 1.875)`,"text-3xl--line-height":`calc(2.25 / 1.875)`,"text-4xl":`calc(var(--font-size) * 2.25)`,"text-4xl--line-height":`calc(2.5 / 2.25)`,"text-5xl":`calc(var(--font-size) * 3)`,"text-5xl--line-height":`1`,"text-6xl":`calc(var(--font-size) * 3.75)`,"text-6xl--line-height":`1`,"text-7xl":`calc(var(--font-size) * 4.5)`,"text-7xl--line-height":`1`,"text-8xl":`calc(var(--font-size) * 6)`,"text-8xl--line-height":`1`,"text-9xl":`calc(var(--font-size) * 8)`,"text-9xl--line-height":`1`,spacing:`var(--spacing)`,"focus-size":`calc(var(--focus-size))`,"focus-offset":`var(--focus-offset)`,"container-page-sm":`var(--page-sm)`,"container-page":`var(--page)`,"container-page-lg":`var(--page-lg)`,"color-destructive":`var(--danger)`},light:{spacing:`0.25rem`,radius:`0.65rem`,"font-size":`1rem`,"page-sm":`768px`,page:`1200px`,"page-lg":`1440px`,background:`oklch(1 0 0)`,"scrollbar-thumb":`oklch(0.922 0 0)`,foreground:`oklch(0.145 0 0)`,card:`oklch(1 0 0)`,"card-foreground":`oklch(0.145 0 0)`,popover:`oklch(1 0 0)`,"popover-foreground":`oklch(0.145 0 0)`,muted:`oklch(0.97 0 0)`,"muted-foreground":`oklch(0.556 0 0)`,accent:`oklch(0.97 0 0)`,"accent-foreground":`oklch(0.205 0 0)`,border:`oklch(0.922 0 0)`,input:`oklch(0.922 0 0)`,ring:`oklch(0.708 0 0)`,"chart-1":`oklch(0.646 0.222 41.116)`,"chart-2":`oklch(0.6 0.118 184.704)`,"chart-3":`oklch(0.398 0.07 227.392)`,"chart-4":`oklch(0.828 0.189 84.429)`,"chart-5":`oklch(0.769 0.188 70.08)`,sidebar:`oklch(0.985 0 0)`,"sidebar-foreground":`oklch(0.145 0 0)`,"sidebar-primary":`oklch(0.205 0 0)`,"sidebar-primary-foreground":`oklch(0.985 0 0)`,"sidebar-accent":`oklch(0.97 0 0)`,"sidebar-accent-foreground":`oklch(0.205 0 0)`,"sidebar-border":`oklch(0.922 0 0)`,"sidebar-ring":`oklch(0.708 0 0)`,brand:`oklch(70% 0.1435 227.76)`,"brand-foreground":`oklch(0.985 0 0)`,primary:`oklch(70% 0.1435 227.76)`,"primary-foreground":`oklch(0.985 0 0)`,secondary:`oklch(0.97 0 0)`,"secondary-foreground":`oklch(0.205 0 0)`,danger:`oklch(0.577 0.245 27.325)`,"danger-foreground":`oklch(0.985 0 0)`,success:`oklch(0.728 0.125 139.6)`,"success-foreground":`oklch(0.985 0 0)`,warning:`oklch(0.784 0.181 44.7)`,"warning-foreground":`oklch(0.985 0 0)`,inverted:`oklch(0.205 0 0)`,"inverted-foreground":`oklch(0.97 0 0)`,focus:`oklch(0.7 0.181 44.7)`,"focus-size":`2.5px`,"focus-offset":`2px`,table:`oklch(0.94 0 0 / 65%)`,"table-content":`oklch(1 0 0)`,"table-hover":`oklch(0.98 0 0 / 10%)`},dark:{background:`oklch(0.145 0 0)`,"scrollbar-thumb":`oklch(0.269 0 0)`,foreground:`oklch(0.985 0 0)`,card:`oklch(0.205 0 0)`,"card-foreground":`oklch(0.985 0 0)`,popover:`oklch(0.205 0 0)`,"popover-foreground":`oklch(0.985 0 0)`,secondary:`oklch(0.269 0 0)`,"secondary-foreground":`oklch(0.985 0 0)`,muted:`oklch(0.269 0 0)`,"muted-foreground":`oklch(0.708 0 0)`,accent:`oklch(0.269 0 0)`,"accent-foreground":`oklch(0.985 0 0)`,border:`oklch(1 0 0 / 10%)`,input:`oklch(1 0 0 / 15%)`,ring:`oklch(0.556 0 0)`,"chart-1":`oklch(0.488 0.243 264.376)`,"chart-2":`oklch(0.696 0.17 162.48)`,"chart-3":`oklch(0.769 0.188 70.08)`,"chart-4":`oklch(0.627 0.265 303.9)`,"chart-5":`oklch(0.645 0.246 16.439)`,sidebar:`oklch(0.205 0 0)`,"sidebar-foreground":`oklch(0.985 0 0)`,"sidebar-primary":`oklch(0.488 0.243 264.376)`,"sidebar-primary-foreground":`oklch(0.985 0 0)`,"sidebar-accent":`oklch(0.269 0 0)`,"sidebar-accent-foreground":`oklch(0.985 0 0)`,"sidebar-border":`oklch(1 0 0 / 10%)`,"sidebar-ring":`oklch(0.556 0 0)`,brand:`oklch(66% 0.1435 227.76)`,"brand-foreground":`oklch(0.985 0 0)`,primary:`oklch(66% 0.1435 227.76)`,"primary-foreground":`oklch(0.985 0 0)`,danger:`oklch(0.704 0.191 22.216)`,"danger-foreground":`oklch(0.985 0 0)`,success:`oklch(0.728 0.125 139.6)`,"success-foreground":`oklch(0.985 0 0)`,warning:`oklch(0.784 0.181 44.7)`,"warning-foreground":`oklch(0.985 0 0)`,inverted:`oklch(0.922 0 0)`,"inverted-foreground":`oklch(0.205 0 0)`,focus:`oklch(0.7 0.181 44.7)`,table:`oklch(0.265 0 0)`,"table-content":`oklch(0.205 0 0)`,"table-hover":`oklch(0.22 0 0)`}};function f(e){return/^(?:font|text)-/.test(e)}const p={utility:`utility`,variant:`custom-variant`};function m(e){return e.params.trim().split(/[\s({]/)[0]??``}function h(e){let t=u.parse(e),n={},r={};return t.each(e=>{if(e.type!==`atrule`)return;let t=m(e);e.name===p.utility?n[t]=S(e):e.name===p.variant&&t!==`dark`&&(r[t]=S(e))}),{utilities:n,variants:r}}async function g(e,t,n={}){let r=u.parse(e),i=[],a=[];for(let e of[`variant`,`utility`]){let o=e===`utility`?`utilities`:`variants`,s=t[o]??{},c=n.base?.[o]??{},l=/* @__PURE__ */ new Set([...Object.keys(s),...Object.keys(c)]);for(let t of l){let l=s[t],u=c[t],d=y(r,e,t),f=`${o===`utilities`?`@utility`:`@custom-variant`} ${t}`,p=await v({local:d&&S(d),remote:l,base:u,options:n,kind:e,name:t,label:f,warnings:a,add:t=>b(r,e,t),replace:e=>{let t=x(e);t.raws.before=d?.raws.before??``,d?.replaceWith(t)},remove:()=>d?.remove()});p&&i.push({kind:e,name:t,action:p})}}return{css:r.toString(),changes:i,warnings:a}}async function _(e,t={},n={}){let r=u.parse(e),i=[],a=[],o=n.base?.base??{},s=/* @__PURE__ */ new Set([...Object.keys(t),...Object.keys(o)]);for(let e of s){let s=t[e]??{},c=o[e]??{},l=/* @__PURE__ */ new Set([...Object.keys(s),...Object.keys(c)]);for(let t of l){let o=C(r),l=o&&w(o,e),d=l?.nodes.find(e=>e.type===`decl`&&e.prop===t),f=`${e} { ${t} }`,p=await v({local:d?.value,remote:s[t],base:c[t],options:n,kind:`base`,name:f,label:`${t} in ${e}`,warnings:a,add:n=>{l??=T(r,e),l.append(u.decl({prop:t,value:n,raws:{before:`
2
2
  `}}))},replace:e=>{d&&(d.value=e)},remove:()=>{d?.remove(),l?.nodes.length===0&&l.remove()}});p&&i.push({kind:`base`,name:f,action:p})}}return{css:r.toString(),changes:i,warnings:a}}async function v({local:e,remote:t,base:n,options:r,kind:i,name:a,label:o,warnings:s,add:c,replace:l,remove:u}){return t===void 0?e===void 0?void 0:r.shouldRemove&&await r.shouldRemove(i,a)?(u(),`removed`):(s.push(`${o} was removed in the new version; kept in the CSS.`),`kept`):e===void 0?n===void 0?(c(t),`added`):`kept`:D(e,t)?`unchanged`:r.overwrite||n!==void 0&&D(e,n)?(l(t),`updated`):(s.push(`${o} was changed in the CSS; kept instead of the new one.`),`kept`)}function y(e,t,n){return e.nodes.find(e=>e.type===`atrule`&&e.name===p[t]&&m(e)===n)}function b(e,t,n){let r=x(n),i=e.nodes.findLast(e=>e.type===`atrule`&&e.name===p.variant);if(t===`variant`){let t=e.nodes.find(e=>e.type===`atrule`&&e.name===p.utility);if(i){r.raws.before=`
3
3
  `,i.after(r);return}if(t){r.raws.before=t.raws.before??``,t.raws.before=`
4
4
 
@@ -5,8 +5,8 @@ import{THEME_ATTRIBUTE as e,isThemeName as t,themeSelector as n}from"./attribute
5
5
  `:``,between:` `,after:`
6
6
  `,semicolon:!0},e.append(i),i}function d(e){if(e.nodes.some(e=>e.type===`atrule`&&e.name===`custom-variant`&&e.params.trim().startsWith(`dark`)))return;let t=r.atRule({name:`custom-variant`,params:`dark (&:is(.dark *))`}),n=e.nodes.filter(e=>e.type===`atrule`&&e.name===`import`).at(-1);n?(t.raws={before:`
7
7
 
8
- `},n.after(t)):(t.raws={before:``},e.prepend(t))}function f(e,t){return e.replace(/\s+/g,` `).trim()===t.replace(/\s+/g,` `).trim()}const p=/^[\w-]+$/;function m(e,t,{theme:n}={}){let i=r.parse(e);for(let e of[`light`,`dark`]){let r=new Set((t[e]??[]).filter(e=>p.test(e)));r.size!==0&&l(i,e,n)?.each(e=>{e.type===`decl`&&r.has(e.prop.slice(2))&&e.remove()})}return i.toString()}function h(t){return`/* Tema "${t}": só o que muda em relação ao CSS global. Aplicado com
9
- <html ${e}="${t}"> ou SLABUI_THEME=${t}. */
8
+ `},n.after(t)):(t.raws={before:``},e.prepend(t))}function f(e,t){return e.replace(/\s+/g,` `).trim()===t.replace(/\s+/g,` `).trim()}const p=/^[\w-]+$/;function m(e,t,{theme:n}={}){let i=r.parse(e);for(let e of[`light`,`dark`]){let r=new Set((t[e]??[]).filter(e=>p.test(e)));r.size!==0&&l(i,e,n)?.each(e=>{e.type===`decl`&&r.has(e.prop.slice(2))&&e.remove()})}return i.toString()}function h(t){return`/* Theme "${t}": only what differs from the global CSS. Applied with
9
+ <html ${e}="${t}"> or SLABUI_THEME=${t}. */
10
10
  `}function g(n,i,a){if(!t(i)||!t(a))throw Error(`Invalid theme name: "${i}" → "${a}"`);let o=RegExp(`\\[${e}\\s*=\\s*(["']?)${i}\\1\\s*\\]`,`g`),s=r.parse(n);return s.walkRules(t=>{t.selector=t.selector.replace(o,`[${e}="${a}"]`)}),s.walkComments(e=>{e.text=e.text.replaceAll(`"${i}"`,`"${a}"`).replaceAll(`SLABUI_THEME=${i}`,`SLABUI_THEME=${a}`)}),s.toString()}function _(e){return e.params.trim().replace(/^url\((.*)\)/,`$1`).split(/\s/)[0]?.replace(/^["']|["']$/g,``)}const v=(e,t)=>e!==void 0&&e.replace(/^\.\//,``)===t.replace(/^\.\//,``);function y(e){return e.nodes.filter(e=>e.type===`atrule`&&e.name===`import`)}function b(e){return y(r.parse(e)).map(_).filter(e=>e?.startsWith(`./`)===!0||e?.startsWith(`../`)===!0)}function x(e,t){return S(e,t)}function S(e,t){let n=r.parse(e),i=y(n);if(i.some(e=>v(_(e),t)))return e;let a=r.atRule({name:`import`,params:`"${t}"`}),o=i.at(-1);return o?(a.raws={before:`
11
11
  `},o.after(a)):(a.raws={before:``},n.prepend(a)),n.toString()}function C(e,t){let n=r.parse(e);for(let e of y(n))v(_(e),t)&&e.remove();return n.toString()}function w(e,t,n){let i=r.parse(e);for(let e of y(i))v(_(e),t)&&(e.params=`"${n}"`);return i.toString()}export{m as a,h as c,o as d,C as i,a as l,x as n,w as o,b as r,g as s,S as t,l as u};
12
- //# sourceMappingURL=theme-files-a8APQNco.mjs.map
12
+ //# sourceMappingURL=theme-files-w0weV1Ic.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-files-a8APQNco.mjs","names":["postcss","COLOR","applyCssVars","root","css","changes","warnings","mappings","theme","vars","withColorMappings","wanted","remote","previous","base","group","remoteVars","baseVars","names","block","findBlock","name","remoteValue","baseValue","declaration","node","local","record","shouldRemove","createBlock","same","overwrite","ensureDarkVariant","value","blockSelector","themeSelector","normalize","selector","variant","last","a","b","VAR_NAME","removeTokens","unset","themeFileHeader","THEME_ATTRIBUTE","renameThemeSelectors","isThemeName","from","to","pattern","rule","comment","importPath","sameImport","imports","localImports","target","addThemeImport","addImport","path","existing","removeThemeImport","renameThemeImport"],"sources":["../src/css.ts","../src/theme-files.ts"],"sourcesContent":["import postcss, {\n type AtRule,\n type Container,\n type Root,\n type Rule,\n} from \"postcss\"\n\nimport type { ThemeGroup, ThemeTokens } from \"./types\"\n\nimport { themeSelector } from \"./attribute\"\n\nexport type CssVarChange = {\n group: ThemeGroup\n name: string\n action: \"added\" | \"updated\" | \"kept\" | \"removed\" | \"unchanged\"\n}\n\nexport type CssVarsResult = {\n css: string\n changes: CssVarChange[]\n warnings: string[]\n}\n\nexport type ApplyCssVarsOptions = {\n // Variáveis da versão instalada (no update); ausente no add.\n base?: ThemeTokens\n overwrite?: boolean\n // Variável removida na versão nova: remover? Ausente = manter.\n shouldRemove?: (group: ThemeGroup, name: string) => Promise<boolean>\n // Arquivo de um tema (`styles/themes/<nome>.css`): os blocos são\n // `:root[data-slabui-theme=\"<nome>\"]` (e `.dark`) no lugar de `:root`/`.dark`.\n theme?: string\n}\n\nconst COLOR =\n /^\\s*(oklch|oklab|lch|lab|hsla?|rgba?|hwb|color)\\(|^\\s*#[0-9a-f]{3,8}\\s*$/i\n\n// Aplica as variáveis de um item no CSS global, com merge por variável.\nexport async function applyCssVars(\n css: string,\n remote: ThemeTokens,\n { base, overwrite = false, shouldRemove, theme }: ApplyCssVarsOptions = {},\n): Promise<CssVarsResult> {\n const root = postcss.parse(css)\n const changes: CssVarChange[] = []\n const warnings: string[] = []\n // Num arquivo de tema, os `--color-*` já estão no `@theme inline` do CSS\n // global; uma cor nova do tema declara o dela no próprio arquivo.\n const mappings = (vars: ThemeTokens) =>\n theme ? vars : withColorMappings(vars)\n const wanted = mappings(remote)\n const previous = base ? mappings(base) : undefined\n\n for (const group of [\"theme\", \"light\", \"dark\"] as const) {\n const remoteVars = wanted[group] ?? {}\n const baseVars = previous?.[group] ?? {}\n const names = new Set([\n ...Object.keys(remoteVars),\n ...Object.keys(baseVars),\n ])\n if (names.size === 0) {\n continue\n }\n let block = findBlock(root, group, theme)\n\n for (const name of names) {\n const remoteValue = remoteVars[name]\n const baseValue = baseVars[name]\n const declaration = block?.nodes?.find(\n (node) => node.type === \"decl\" && node.prop === `--${name}`,\n ) as postcss.Declaration | undefined\n const local = declaration?.value\n const record = (action: CssVarChange[\"action\"]) =>\n changes.push({ group, name, action })\n\n if (remoteValue === undefined) {\n // Removida na versão nova.\n if (local === undefined) {\n continue\n }\n if (shouldRemove && (await shouldRemove(group, name))) {\n declaration?.remove()\n record(\"removed\")\n } else {\n warnings.push(\n `--${name} (${group}) was removed in the new version; kept in the CSS.`,\n )\n record(\"kept\")\n }\n continue\n }\n\n if (local === undefined) {\n if (baseValue !== undefined) {\n // Apagada do CSS pelo usuário: não recria.\n record(\"kept\")\n continue\n }\n block ??= createBlock(root, group, theme)\n block.raws.semicolon = true\n block.raws.after = \"\\n\"\n block.append(\n postcss.decl({\n prop: `--${name}`,\n value: remoteValue,\n raws: { before: \"\\n \" },\n }),\n )\n record(\"added\")\n continue\n }\n\n if (same(local, remoteValue)) {\n record(\"unchanged\")\n } else if (\n overwrite ||\n (baseValue !== undefined && same(local, baseValue))\n ) {\n ;(declaration as postcss.Declaration).value = remoteValue\n record(\"updated\")\n } else {\n warnings.push(\n `--${name} (${group}) has a custom value in the CSS (${local}); kept instead of ${remoteValue}.`,\n )\n record(\"kept\")\n }\n }\n }\n\n // O arquivo de um tema é importado pelo CSS global, que já tem a variante.\n if (!theme && Object.keys(wanted.dark ?? {}).length > 0) {\n ensureDarkVariant(root)\n }\n\n return { css: root.toString(), changes, warnings }\n}\n\n// Cada cor de light/dark ganha `--color-<nome>: var(--<nome>)` no `theme`,\n// para o Tailwind 4 gerar as utilidades (`bg-<nome>`) e aceitar o `@apply`.\nexport function withColorMappings(vars: ThemeTokens): ThemeTokens {\n const theme = { ...vars.theme }\n for (const group of [vars.light, vars.dark]) {\n for (const [name, value] of Object.entries(group ?? {})) {\n if (COLOR.test(value) && theme[`color-${name}`] === undefined) {\n theme[`color-${name}`] = `var(--${name})`\n }\n }\n }\n return {\n ...vars,\n ...(Object.keys(theme).length > 0 && { theme }),\n }\n}\n\n// Seletor do bloco de cada grupo: `:root`/`.dark` no CSS global, ou os do\n// tema no arquivo de um tema.\nfunction blockSelector(group: \"light\" | \"dark\", theme?: string) {\n if (theme) {\n return themeSelector(theme, group === \"dark\")\n }\n return group === \"light\" ? \":root\" : \".dark\"\n}\n\n// Compara seletores sem espaços nem aspas (`[a=\"x\"]` = `[a='x']` = `[a=x]`).\nconst normalize = (selector: string) => selector.replace(/[\"'\\s]/g, \"\")\n\nexport function findBlock(\n root: Root,\n group: ThemeGroup,\n theme?: string,\n): Container | undefined {\n return root.nodes.find((node) =>\n group === \"theme\"\n ? node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params.trim() === \"inline\"\n : node.type === \"rule\" &&\n normalize(node.selector) === normalize(blockSelector(group, theme)),\n ) as Container | undefined\n}\n\nfunction createBlock(\n root: Root,\n group: ThemeGroup,\n theme?: string,\n): AtRule | Rule {\n const block =\n group === \"theme\"\n ? postcss.atRule({ name: \"theme\", params: \"inline\" })\n : postcss.rule({ selector: blockSelector(group, theme) })\n block.raws = {\n before: root.nodes.length > 0 ? \"\\n\\n\" : \"\",\n between: \" \",\n after: \"\\n\",\n semicolon: true,\n }\n root.append(block)\n return block\n}\n\n// `@custom-variant dark` depois dos `@import`, se o CSS não declara a variante.\nfunction ensureDarkVariant(root: Root) {\n const declared = root.nodes.some(\n (node) =>\n node.type === \"atrule\" &&\n node.name === \"custom-variant\" &&\n node.params.trim().startsWith(\"dark\"),\n )\n if (declared) {\n return\n }\n const variant = postcss.atRule({\n name: \"custom-variant\",\n params: \"dark (&:is(.dark *))\",\n })\n const imports = root.nodes.filter(\n (node) => node.type === \"atrule\" && node.name === \"import\",\n )\n const last = imports.at(-1)\n if (last) {\n variant.raws = { before: \"\\n\\n\" }\n last.after(variant)\n } else {\n variant.raws = { before: \"\" }\n root.prepend(variant)\n }\n}\n\nfunction same(a: string, b: string) {\n return a.replace(/\\s+/g, \" \").trim() === b.replace(/\\s+/g, \" \").trim()\n}\n","import postcss, { type AtRule, type Root } from \"postcss\"\n\nimport { isThemeName, THEME_ATTRIBUTE } from \"./attribute\"\nimport { findBlock } from \"./css\"\n\nexport type UnsetTokens = Partial<Record<\"light\" | \"dark\", string[]>>\n\nconst VAR_NAME = /^[\\w-]+$/\n\n// Tira variáveis dos blocos (`:root`/`.dark` ou os de um tema): num tema, a\n// variável volta a vir do CSS global.\nexport function removeTokens(\n css: string,\n unset: UnsetTokens,\n { theme }: { theme?: string } = {},\n): string {\n const root = postcss.parse(css)\n for (const group of [\"light\", \"dark\"] as const) {\n const names = new Set(\n (unset[group] ?? []).filter((name) => VAR_NAME.test(name)),\n )\n if (names.size === 0) {\n continue\n }\n findBlock(root, group, theme)?.each((node) => {\n if (node.type === \"decl\" && names.has(node.prop.slice(2))) {\n node.remove()\n }\n })\n }\n return root.toString()\n}\n\n// Conteúdo inicial do arquivo de um tema novo.\nexport function themeFileHeader(name: string): string {\n return `/* Tema \"${name}\": só o que muda em relação ao CSS global. Aplicado com\n <html ${THEME_ATTRIBUTE}=\"${name}\"> ou SLABUI_THEME=${name}. */\n`\n}\n\n// Troca o nome do tema nos seletores do arquivo\n// (`[data-slabui-theme=\"a\"]` → `[data-slabui-theme=\"b\"]`).\nexport function renameThemeSelectors(\n css: string,\n from: string,\n to: string,\n): string {\n if (!isThemeName(from) || !isThemeName(to)) {\n throw new Error(`Invalid theme name: \"${from}\" → \"${to}\"`)\n }\n const pattern = new RegExp(\n `\\\\[${THEME_ATTRIBUTE}\\\\s*=\\\\s*([\"']?)${from}\\\\1\\\\s*\\\\]`,\n \"g\",\n )\n const root = postcss.parse(css)\n root.walkRules((rule) => {\n rule.selector = rule.selector.replace(\n pattern,\n `[${THEME_ATTRIBUTE}=\"${to}\"]`,\n )\n })\n root.walkComments((comment) => {\n comment.text = comment.text\n .replaceAll(`\"${from}\"`, `\"${to}\"`)\n .replaceAll(`SLABUI_THEME=${from}`, `SLABUI_THEME=${to}`)\n })\n return root.toString()\n}\n\n// Caminho de um `@import \"x\"` ou `@import url(\"x\")`.\nfunction importPath(rule: AtRule) {\n return rule.params\n .trim()\n .replace(/^url\\((.*)\\)/, \"$1\")\n .split(/\\s/)[0]\n ?.replace(/^[\"']|[\"']$/g, \"\")\n}\n\nconst sameImport = (a: string | undefined, b: string) =>\n a !== undefined && a.replace(/^\\.\\//, \"\") === b.replace(/^\\.\\//, \"\")\n\nfunction imports(root: Root) {\n return root.nodes.filter(\n (node): node is AtRule => node.type === \"atrule\" && node.name === \"import\",\n )\n}\n\n// Caminhos dos `@import` locais (`./x.css`, `../x.css`) de um CSS.\nexport function localImports(css: string): string[] {\n return imports(postcss.parse(css))\n .map(importPath)\n .filter(\n (target): target is string =>\n target?.startsWith(\"./\") === true || target?.startsWith(\"../\") === true,\n )\n}\n\n// `@import` do tema no CSS global, depois dos outros imports.\nexport function addThemeImport(css: string, path: string): string {\n return addImport(css, path)\n}\n\n// `@import \"<path>\"` no CSS, depois dos outros imports, se ainda não houver\n// (`./base.css` e `base.css` são o mesmo).\nexport function addImport(css: string, path: string): string {\n const root = postcss.parse(css)\n const existing = imports(root)\n if (existing.some((rule) => sameImport(importPath(rule), path))) {\n return css\n }\n const rule = postcss.atRule({ name: \"import\", params: `\"${path}\"` })\n const last = existing.at(-1)\n if (last) {\n rule.raws = { before: \"\\n\" }\n last.after(rule)\n } else {\n rule.raws = { before: \"\" }\n root.prepend(rule)\n }\n return root.toString()\n}\n\nexport function removeThemeImport(css: string, path: string): string {\n const root = postcss.parse(css)\n for (const rule of imports(root)) {\n if (sameImport(importPath(rule), path)) {\n rule.remove()\n }\n }\n return root.toString()\n}\n\nexport function renameThemeImport(css: string, from: string, to: string) {\n const root = postcss.parse(css)\n for (const rule of imports(root)) {\n if (sameImport(importPath(rule), from)) {\n rule.params = `\"${to}\"`\n }\n }\n return root.toString()\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"theme-files-w0weV1Ic.mjs","names":["postcss","COLOR","applyCssVars","root","css","changes","warnings","mappings","theme","vars","withColorMappings","wanted","remote","previous","base","group","remoteVars","baseVars","names","block","findBlock","name","remoteValue","baseValue","declaration","node","local","record","shouldRemove","createBlock","same","overwrite","ensureDarkVariant","value","blockSelector","themeSelector","normalize","selector","variant","last","a","b","VAR_NAME","removeTokens","unset","themeFileHeader","THEME_ATTRIBUTE","renameThemeSelectors","isThemeName","from","to","pattern","rule","comment","importPath","sameImport","imports","localImports","target","addThemeImport","addImport","path","existing","removeThemeImport","renameThemeImport"],"sources":["../src/css.ts","../src/theme-files.ts"],"sourcesContent":["import postcss, {\n type AtRule,\n type Container,\n type Root,\n type Rule,\n} from \"postcss\"\n\nimport type { ThemeGroup, ThemeTokens } from \"./types\"\n\nimport { themeSelector } from \"./attribute\"\n\nexport type CssVarChange = {\n group: ThemeGroup\n name: string\n action: \"added\" | \"updated\" | \"kept\" | \"removed\" | \"unchanged\"\n}\n\nexport type CssVarsResult = {\n css: string\n changes: CssVarChange[]\n warnings: string[]\n}\n\nexport type ApplyCssVarsOptions = {\n // Variáveis da versão instalada (no update); ausente no add.\n base?: ThemeTokens\n overwrite?: boolean\n // Variável removida na versão nova: remover? Ausente = manter.\n shouldRemove?: (group: ThemeGroup, name: string) => Promise<boolean>\n // Arquivo de um tema (`styles/themes/<nome>.css`): os blocos são\n // `:root[data-slabui-theme=\"<nome>\"]` (e `.dark`) no lugar de `:root`/`.dark`.\n theme?: string\n}\n\nconst COLOR =\n /^\\s*(oklch|oklab|lch|lab|hsla?|rgba?|hwb|color)\\(|^\\s*#[0-9a-f]{3,8}\\s*$/i\n\n// Aplica as variáveis de um item no CSS global, com merge por variável.\nexport async function applyCssVars(\n css: string,\n remote: ThemeTokens,\n { base, overwrite = false, shouldRemove, theme }: ApplyCssVarsOptions = {},\n): Promise<CssVarsResult> {\n const root = postcss.parse(css)\n const changes: CssVarChange[] = []\n const warnings: string[] = []\n // Num arquivo de tema, os `--color-*` já estão no `@theme inline` do CSS\n // global; uma cor nova do tema declara o dela no próprio arquivo.\n const mappings = (vars: ThemeTokens) =>\n theme ? vars : withColorMappings(vars)\n const wanted = mappings(remote)\n const previous = base ? mappings(base) : undefined\n\n for (const group of [\"theme\", \"light\", \"dark\"] as const) {\n const remoteVars = wanted[group] ?? {}\n const baseVars = previous?.[group] ?? {}\n const names = new Set([\n ...Object.keys(remoteVars),\n ...Object.keys(baseVars),\n ])\n if (names.size === 0) {\n continue\n }\n let block = findBlock(root, group, theme)\n\n for (const name of names) {\n const remoteValue = remoteVars[name]\n const baseValue = baseVars[name]\n const declaration = block?.nodes?.find(\n (node) => node.type === \"decl\" && node.prop === `--${name}`,\n ) as postcss.Declaration | undefined\n const local = declaration?.value\n const record = (action: CssVarChange[\"action\"]) =>\n changes.push({ group, name, action })\n\n if (remoteValue === undefined) {\n // Removida na versão nova.\n if (local === undefined) {\n continue\n }\n if (shouldRemove && (await shouldRemove(group, name))) {\n declaration?.remove()\n record(\"removed\")\n } else {\n warnings.push(\n `--${name} (${group}) was removed in the new version; kept in the CSS.`,\n )\n record(\"kept\")\n }\n continue\n }\n\n if (local === undefined) {\n if (baseValue !== undefined) {\n // Apagada do CSS pelo usuário: não recria.\n record(\"kept\")\n continue\n }\n block ??= createBlock(root, group, theme)\n block.raws.semicolon = true\n block.raws.after = \"\\n\"\n block.append(\n postcss.decl({\n prop: `--${name}`,\n value: remoteValue,\n raws: { before: \"\\n \" },\n }),\n )\n record(\"added\")\n continue\n }\n\n if (same(local, remoteValue)) {\n record(\"unchanged\")\n } else if (\n overwrite ||\n (baseValue !== undefined && same(local, baseValue))\n ) {\n ;(declaration as postcss.Declaration).value = remoteValue\n record(\"updated\")\n } else {\n warnings.push(\n `--${name} (${group}) has a custom value in the CSS (${local}); kept instead of ${remoteValue}.`,\n )\n record(\"kept\")\n }\n }\n }\n\n // O arquivo de um tema é importado pelo CSS global, que já tem a variante.\n if (!theme && Object.keys(wanted.dark ?? {}).length > 0) {\n ensureDarkVariant(root)\n }\n\n return { css: root.toString(), changes, warnings }\n}\n\n// Cada cor de light/dark ganha `--color-<nome>: var(--<nome>)` no `theme`,\n// para o Tailwind 4 gerar as utilidades (`bg-<nome>`) e aceitar o `@apply`.\nexport function withColorMappings(vars: ThemeTokens): ThemeTokens {\n const theme = { ...vars.theme }\n for (const group of [vars.light, vars.dark]) {\n for (const [name, value] of Object.entries(group ?? {})) {\n if (COLOR.test(value) && theme[`color-${name}`] === undefined) {\n theme[`color-${name}`] = `var(--${name})`\n }\n }\n }\n return {\n ...vars,\n ...(Object.keys(theme).length > 0 && { theme }),\n }\n}\n\n// Seletor do bloco de cada grupo: `:root`/`.dark` no CSS global, ou os do\n// tema no arquivo de um tema.\nfunction blockSelector(group: \"light\" | \"dark\", theme?: string) {\n if (theme) {\n return themeSelector(theme, group === \"dark\")\n }\n return group === \"light\" ? \":root\" : \".dark\"\n}\n\n// Compara seletores sem espaços nem aspas (`[a=\"x\"]` = `[a='x']` = `[a=x]`).\nconst normalize = (selector: string) => selector.replace(/[\"'\\s]/g, \"\")\n\nexport function findBlock(\n root: Root,\n group: ThemeGroup,\n theme?: string,\n): Container | undefined {\n return root.nodes.find((node) =>\n group === \"theme\"\n ? node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params.trim() === \"inline\"\n : node.type === \"rule\" &&\n normalize(node.selector) === normalize(blockSelector(group, theme)),\n ) as Container | undefined\n}\n\nfunction createBlock(\n root: Root,\n group: ThemeGroup,\n theme?: string,\n): AtRule | Rule {\n const block =\n group === \"theme\"\n ? postcss.atRule({ name: \"theme\", params: \"inline\" })\n : postcss.rule({ selector: blockSelector(group, theme) })\n block.raws = {\n before: root.nodes.length > 0 ? \"\\n\\n\" : \"\",\n between: \" \",\n after: \"\\n\",\n semicolon: true,\n }\n root.append(block)\n return block\n}\n\n// `@custom-variant dark` depois dos `@import`, se o CSS não declara a variante.\nfunction ensureDarkVariant(root: Root) {\n const declared = root.nodes.some(\n (node) =>\n node.type === \"atrule\" &&\n node.name === \"custom-variant\" &&\n node.params.trim().startsWith(\"dark\"),\n )\n if (declared) {\n return\n }\n const variant = postcss.atRule({\n name: \"custom-variant\",\n params: \"dark (&:is(.dark *))\",\n })\n const imports = root.nodes.filter(\n (node) => node.type === \"atrule\" && node.name === \"import\",\n )\n const last = imports.at(-1)\n if (last) {\n variant.raws = { before: \"\\n\\n\" }\n last.after(variant)\n } else {\n variant.raws = { before: \"\" }\n root.prepend(variant)\n }\n}\n\nfunction same(a: string, b: string) {\n return a.replace(/\\s+/g, \" \").trim() === b.replace(/\\s+/g, \" \").trim()\n}\n","import postcss, { type AtRule, type Root } from \"postcss\"\n\nimport { isThemeName, THEME_ATTRIBUTE } from \"./attribute\"\nimport { findBlock } from \"./css\"\n\nexport type UnsetTokens = Partial<Record<\"light\" | \"dark\", string[]>>\n\nconst VAR_NAME = /^[\\w-]+$/\n\n// Tira variáveis dos blocos (`:root`/`.dark` ou os de um tema): num tema, a\n// variável volta a vir do CSS global.\nexport function removeTokens(\n css: string,\n unset: UnsetTokens,\n { theme }: { theme?: string } = {},\n): string {\n const root = postcss.parse(css)\n for (const group of [\"light\", \"dark\"] as const) {\n const names = new Set(\n (unset[group] ?? []).filter((name) => VAR_NAME.test(name)),\n )\n if (names.size === 0) {\n continue\n }\n findBlock(root, group, theme)?.each((node) => {\n if (node.type === \"decl\" && names.has(node.prop.slice(2))) {\n node.remove()\n }\n })\n }\n return root.toString()\n}\n\n// Conteúdo inicial do arquivo de um tema novo.\nexport function themeFileHeader(name: string): string {\n return `/* Theme \"${name}\": only what differs from the global CSS. Applied with\n <html ${THEME_ATTRIBUTE}=\"${name}\"> or SLABUI_THEME=${name}. */\n`\n}\n\n// Troca o nome do tema nos seletores do arquivo\n// (`[data-slabui-theme=\"a\"]` → `[data-slabui-theme=\"b\"]`).\nexport function renameThemeSelectors(\n css: string,\n from: string,\n to: string,\n): string {\n if (!isThemeName(from) || !isThemeName(to)) {\n throw new Error(`Invalid theme name: \"${from}\" → \"${to}\"`)\n }\n const pattern = new RegExp(\n `\\\\[${THEME_ATTRIBUTE}\\\\s*=\\\\s*([\"']?)${from}\\\\1\\\\s*\\\\]`,\n \"g\",\n )\n const root = postcss.parse(css)\n root.walkRules((rule) => {\n rule.selector = rule.selector.replace(\n pattern,\n `[${THEME_ATTRIBUTE}=\"${to}\"]`,\n )\n })\n root.walkComments((comment) => {\n comment.text = comment.text\n .replaceAll(`\"${from}\"`, `\"${to}\"`)\n .replaceAll(`SLABUI_THEME=${from}`, `SLABUI_THEME=${to}`)\n })\n return root.toString()\n}\n\n// Caminho de um `@import \"x\"` ou `@import url(\"x\")`.\nfunction importPath(rule: AtRule) {\n return rule.params\n .trim()\n .replace(/^url\\((.*)\\)/, \"$1\")\n .split(/\\s/)[0]\n ?.replace(/^[\"']|[\"']$/g, \"\")\n}\n\nconst sameImport = (a: string | undefined, b: string) =>\n a !== undefined && a.replace(/^\\.\\//, \"\") === b.replace(/^\\.\\//, \"\")\n\nfunction imports(root: Root) {\n return root.nodes.filter(\n (node): node is AtRule => node.type === \"atrule\" && node.name === \"import\",\n )\n}\n\n// Caminhos dos `@import` locais (`./x.css`, `../x.css`) de um CSS.\nexport function localImports(css: string): string[] {\n return imports(postcss.parse(css))\n .map(importPath)\n .filter(\n (target): target is string =>\n target?.startsWith(\"./\") === true || target?.startsWith(\"../\") === true,\n )\n}\n\n// `@import` do tema no CSS global, depois dos outros imports.\nexport function addThemeImport(css: string, path: string): string {\n return addImport(css, path)\n}\n\n// `@import \"<path>\"` no CSS, depois dos outros imports, se ainda não houver\n// (`./base.css` e `base.css` são o mesmo).\nexport function addImport(css: string, path: string): string {\n const root = postcss.parse(css)\n const existing = imports(root)\n if (existing.some((rule) => sameImport(importPath(rule), path))) {\n return css\n }\n const rule = postcss.atRule({ name: \"import\", params: `\"${path}\"` })\n const last = existing.at(-1)\n if (last) {\n rule.raws = { before: \"\\n\" }\n last.after(rule)\n } else {\n rule.raws = { before: \"\" }\n root.prepend(rule)\n }\n return root.toString()\n}\n\nexport function removeThemeImport(css: string, path: string): string {\n const root = postcss.parse(css)\n for (const rule of imports(root)) {\n if (sameImport(importPath(rule), path)) {\n rule.remove()\n }\n }\n return root.toString()\n}\n\nexport function renameThemeImport(css: string, from: string, to: string) {\n const root = postcss.parse(css)\n for (const rule of imports(root)) {\n if (sameImport(importPath(rule), from)) {\n rule.params = `\"${to}\"`\n }\n }\n return root.toString()\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slabui/theme-core",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "SlabUI theme as CSS variables: read, write, validate and multi-theme helpers",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "André Felipe Schulle <andrefelipeschulle@icloud.com>",