@domphy/theme 0.1.11 → 0.1.12

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/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var y=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var A=(e,t)=>{for(var n in t)y(e,n,{get:t[n],enumerable:!0})},C=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of v(t))!z.call(e,s)&&s!==n&&y(e,s,{get:()=>t[s],enumerable:!(r=L(t,s))||r.enumerable});return e};var D=e=>C(y({},"__esModule",{value:!0}),e);var U={};A(U,{getTheme:()=>l,setTheme:()=>O,themeApply:()=>P,themeCSS:()=>E,themeColor:()=>K,themeColorToken:()=>Q,themeDensity:()=>F,themeName:()=>u,themeSize:()=>H,themeSpacing:()=>B,themeTokens:()=>g,themeVars:()=>h});module.exports=D(U);var M={direction:"darken",colors:{primary:["#ffffff","#e3ecff","#c6daff","#aac8ff","#8fb6ff","#76a3ff","#5f91fc","#4a7ff4","#386ee7","#2a5ed7","#1e4ec2","#1440aa","#0c3290","#072674","#041a57","#020f38","#010419","#000000"],secondary:["#ffffff","#fce6ea","#faced6","#f7b5c2","#f29db0","#ec859e","#e36e8d","#d8597d","#ca456e","#b93460","#a42351","#8e1643","#770b36","#5f0529","#46031d","#2d0210","#130104","#000000"],info:["#ffffff","#dcf0f9","#b7e1f6","#90d2f1","#6ac3eb","#42b4e2","#16a4d5","#0094c4","#0084b2","#00739e","#00638a","#005476","#004461","#00354d","#002638","#001623","#00070d","#000000"],success:["#ffffff","#e3f3dc","#c6e8b8","#a9dd94","#8ed171","#75c450","#61b635","#51a51f","#429304","#358100","#2a7000","#215f00","#194d00","#123c00","#0b2b00","#051a00","#010900","#000000"],warning:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],attention:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],error:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],danger:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],highlight:["#ffffff","#f9f5cd","#f4eb95","#efe05a","#e6d427","#d3c100","#bfad00","#ab9b00","#988900","#857700","#736600","#615600","#4f4600","#3e3600","#2c2700","#1b1700","#090700","#000000"],neutral:["#ffffff","#ededed","#dbdbdb","#cacaca","#bababa","#ababab","#9b9b9b","#8d8d8d","#7e7e7e","#707070","#636363","#565656","#484848","#383838","#282828","#181818","#080808","#000000"]},baseTones:{highlight:5,warning:6,error:8,danger:8,secondary:8,primary:9,info:8,success:8,neutral:8},fontSizes:["0.75rem","0.875rem","1rem","1.25rem","1.5625rem","1.9375rem","2.4375rem","3.0625rem"],densities:[.75,1,1.5,2,2.5],toneBias:1,custom:{}},d=M;var c={light:JSON.parse(JSON.stringify(d)),dark:W(d)};function T(e){let t=Object.keys(e.colors)[0];return t?e.colors[t].length:0}function R(e){for(let t in e)if(!Object.keys(d).includes(t))throw new Error(`Invalid key: ${t}`);if(e.fontSizes&&!Array.isArray(e.fontSizes))throw new Error("fontSize must be array of string");if(e.densities&&(!Array.isArray(e.densities)||e.densities.some(t=>typeof t!="number")))throw new Error("densities must be array of number");if("custom"in e){let t=e.custom;if(typeof t!="object"||t===null)throw new Error("Invalid custom property: must be an object")}}function x(e,t){var n;for(let r in t)t[r]&&typeof t[r]=="object"&&!Array.isArray(t[r])?((n=e[r])!=null||(e[r]={}),x(e[r],t[r])):e[r]=t[r]}function V(e,t){let n={},r=T(t);for(let o in t){let f=t[o];if(o==="colors")for(let i in t.colors)[...Array(r).keys()].forEach(a=>n[`--${i}-${a}`]=t.colors[i][a]);else if(o==="fontSizes")[...Array(8).keys()].forEach(i=>n[`--fontSize-${i}`]=t.fontSizes[i]);else{if(o==="densities")continue;if(typeof f=="object"&&f!==null)for(let i in f)n[`--${o}-${i.replace("/","_")}`]=f[i]}}let s="";for(let o in n)s+=` ${o}: ${n[o]};
1
+ "use strict";var y=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var A=(e,t)=>{for(var r in t)y(e,r,{get:t[r],enumerable:!0})},C=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of v(t))!z.call(e,s)&&s!==r&&y(e,s,{get:()=>t[s],enumerable:!(n=L(t,s))||n.enumerable});return e};var D=e=>C(y({},"__esModule",{value:!0}),e);var U={};A(U,{getTheme:()=>l,setTheme:()=>O,themeApply:()=>P,themeCSS:()=>E,themeColor:()=>K,themeColorToken:()=>Q,themeDensity:()=>F,themeName:()=>u,themeSize:()=>H,themeSpacing:()=>B,themeTokens:()=>g,themeVars:()=>h});module.exports=D(U);var M={direction:"darken",colors:{primary:["#ffffff","#e3ecff","#c6daff","#aac8ff","#8fb6ff","#76a3ff","#5f91fc","#4a7ff4","#386ee7","#2a5ed7","#1e4ec2","#1440aa","#0c3290","#072674","#041a57","#020f38","#010419","#000000"],secondary:["#ffffff","#fce6ea","#faced6","#f7b5c2","#f29db0","#ec859e","#e36e8d","#d8597d","#ca456e","#b93460","#a42351","#8e1643","#770b36","#5f0529","#46031d","#2d0210","#130104","#000000"],info:["#ffffff","#dcf0f9","#b7e1f6","#90d2f1","#6ac3eb","#42b4e2","#16a4d5","#0094c4","#0084b2","#00739e","#00638a","#005476","#004461","#00354d","#002638","#001623","#00070d","#000000"],success:["#ffffff","#e3f3dc","#c6e8b8","#a9dd94","#8ed171","#75c450","#61b635","#51a51f","#429304","#358100","#2a7000","#215f00","#194d00","#123c00","#0b2b00","#051a00","#010900","#000000"],warning:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],attention:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],error:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],danger:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],highlight:["#ffffff","#f9f5cd","#f4eb95","#efe05a","#e6d427","#d3c100","#bfad00","#ab9b00","#988900","#857700","#736600","#615600","#4f4600","#3e3600","#2c2700","#1b1700","#090700","#000000"],neutral:["#ffffff","#ededed","#dbdbdb","#cacaca","#bababa","#ababab","#9b9b9b","#8d8d8d","#7e7e7e","#707070","#636363","#565656","#484848","#383838","#282828","#181818","#080808","#000000"]},baseTones:{highlight:5,warning:6,error:8,danger:8,secondary:8,primary:9,info:8,success:8,neutral:8},fontSizes:["0.75rem","0.875rem","1rem","1.25rem","1.5625rem","1.9375rem","2.4375rem","3.0625rem"],densities:[.75,1,1.5,2,2.5],darkBias:1,custom:{}},d=M;var c={light:JSON.parse(JSON.stringify(d)),dark:W(d)};function T(e){let t=Object.keys(e.colors)[0];return t?e.colors[t].length:0}function R(e){for(let t in e)if(!Object.keys(d).includes(t))throw new Error(`Invalid key: ${t}`);if(e.fontSizes&&!Array.isArray(e.fontSizes))throw new Error("fontSize must be array of string");if(e.densities&&(!Array.isArray(e.densities)||e.densities.some(t=>typeof t!="number")))throw new Error("densities must be array of number");if("custom"in e){let t=e.custom;if(typeof t!="object"||t===null)throw new Error("Invalid custom property: must be an object")}}function k(e,t){var r;for(let n in t)t[n]&&typeof t[n]=="object"&&!Array.isArray(t[n])?((r=e[n])!=null||(e[n]={}),k(e[n],t[n])):e[n]=t[n]}function V(e,t){let r={},n=T(t);for(let o in t){let f=t[o];if(o==="colors")for(let i in t.colors)[...Array(n).keys()].forEach(a=>r[`--${i}-${a}`]=t.colors[i][a]);else if(o==="fontSizes")[...Array(8).keys()].forEach(i=>r[`--fontSize-${i}`]=t.fontSizes[i]);else{if(o==="densities")continue;if(typeof f=="object"&&f!==null)for(let i in f)r[`--${o}-${i.replace("/","_")}`]=f[i]}}let s="";for(let o in r)s+=` ${o}: ${r[o]};
2
2
  `;return`[data-theme="${e}"] {
3
- ${s}}`}function l(e){if(!c[e])throw Error(`Theme "${e}" not found`);return c[e]}function O(e,t){R(t),c[e]||(c[e]=structuredClone(d)),x(c[e],t)}function W(e){let t=structuredClone(e);t.direction="lighten";for(let n in t.colors)t.colors[n].reverse(),t.baseTones[n]=t.colors[n].length-1-t.baseTones[n];return t}function g(e){let t=l(e),n=T(t),r={};for(let s in t){let o=t[s];if(s==="colors")for(let f in t.colors){let i={};[...Array(n).keys()].forEach(a=>i[a]=t.colors[f][a]),r[f]=i}else if(s==="fontSizes")r.fontSizes=t.fontSizes;else if(s==="densities")r.densities=t.densities;else if(r[s]={},typeof o=="object"&&o!==null)for(let f in o)r[s][f]=o[f]}return r}function h(){let e=l("light"),t=T(e),n={};for(let r in e){let s=r,o=e[r];if(r==="colors")for(let f in e.colors){let i={};[...Array(t).keys()].forEach(a=>i[a]=`var(--${f}-${a})`),n[f]=i}else if(r==="fontSizes")n.fontSizes=[...Array(8).keys()].map(f=>`var(--fontSize-${f})`);else{if(r==="densities")continue;if(n[s]={},typeof o=="object"&&o!==null)for(let f in o)n[s][f]=`var(--${s}-${f.replace("/","_")})`}}return n}function E(){return Object.entries(c).map(([e,t])=>V(e,t)).join(`
4
- `)}function P(e){var t;if(typeof document!="undefined")if(e){e.textContent=E();return}else e=(t=document.getElementById("domphy-themes"))!=null?t:Object.assign(document.createElement("style"),{id:"domphy-themes"}),e.textContent=E(),document.head.appendChild(e)}function B(e){return e/4+"em"}function u(e){let n=typeof e=="function"?e.elementNode:e;for(;n&&(!n.attributes||!n.attributes.get("dataTheme"));)n=n.parent;let r="light";return n&&n.attributes&&n.attributes.has("dataTheme")&&(r=n.attributes.get("dataTheme"),typeof e=="function"&&n.attributes.addListener("dataTheme",e)),r}var N=["inherit"];[...Array(8).keys()].forEach(e=>{N.push(`decrease-${e}`),N.push(`increase-${e}`)});function k(e,t="inherit"){if(!N.includes(t))throw Error(`size name "${t}" invalid`);let n;if(t=="inherit")n=e;else if(t!=null&&t.startsWith("increase-")){let r=parseInt(t.replace("increase-",""),10);n=e+r}else if(t!=null&&t.startsWith("decrease-")){let r=parseInt(t.replace("decrease-",""),10);n=e-r}else n=e;return Math.max(0,Math.min(8,n))}function _(e){if(!e)return 2;let n=typeof e=="function"?e.elementNode:e;for(;n&&(!n.attributes||!n.attributes.get("dataSize"));)n=n.parent;let r=2;return n&&n.attributes&&n.attributes.has("dataSize")&&(r=k(r,n.attributes.get("dataSize")),typeof e=="function"&&n.attributes.addListener("dataSize",e)),r}function H(e,t="inherit"){let n=k(_(e),t);return h().fontSizes[n]}var S=["inherit"];[...Array(5).keys()].forEach(e=>{S.push(`decrease-${e}`),S.push(`increase-${e}`)});function J(e,t="inherit"){if(!S.includes(t))throw Error(`density name "${t}" invalid`);let n;if(t=="inherit")n=e;else if(t!=null&&t.startsWith("increase-")){let r=parseInt(t.replace("increase-",""),10);n=e+r}else if(t!=null&&t.startsWith("decrease-")){let r=parseInt(t.replace("decrease-",""),10);n=e-r}else n=e;return Math.max(0,Math.min(4,n))}function q(e){if(!e)return 2;let n=typeof e=="function"?e.elementNode:e;for(;n&&(!n.attributes||!n.attributes.get("dataDensity"));)n=n.parent;let r=2;return n&&n.attributes&&n.attributes.has("dataDensity")&&(r=J(r,n.attributes.get("dataDensity")),typeof e=="function"&&n.attributes.addListener("dataDensity",e)),r}function F(e){let t=q(e);return l(e?u(e):"light").densities[t]}var m=d.colors.neutral.length,b=["inherit","base"];[...Array(m).keys()].forEach(e=>{b.push(`decrease-${e}`),b.push(`increase-${e}`),b.push(`shift-${e}`)});function I(e,t){if(e<0||e>m-1)return e;let n=e+t;return n=Math.max(0,Math.min(m-1,n)),n}function G(e,t){if(e<0||e>m-1)return e;let n=Math.floor((m-1)/2),r=e<=n?e+t:e-t;return r=r<0||r>m-1?-r:r,r=Math.max(0,Math.min(m-1,r)),r}function p(e,t="inherit"){if(typeof t=="number")return t;if(t=="inherit")return e;if(!b.includes(t))throw Error(`tone name "${t}" invalid`);if(t.startsWith("increase-")){let n=parseInt(t.replace("increase-",""),10);return I(e,n)}else if(t.startsWith("decrease-")){let n=parseInt(t.replace("decrease-",""),10);return I(e,-n)}else if(t.startsWith("shift-")){let n=parseInt(t.replace("shift-",""),10);return G(e,n)}else return e}function $(e){if(!e)return 0;let n=typeof e=="function"?e.elementNode:e;for(;n&&(!n.attributes||!n.attributes.get("dataTone"));)n=n.parent;let r=0;return n&&n.attributes&&n.attributes.has("dataTone")&&(r=p(r,n.attributes.get("dataTone")),typeof e=="function"&&n.attributes.addListener("dataTone",e)),r}function w(e,t,n){return n<=0?e:t==="lighten"&&e===0?n:t==="darken"&&e===m-1?m-1-n:e}function K(e,t="inherit",n="inherit"){let r=n=="inherit"?"neutral":n;if(!e)return h()[r][p(0,t)];let s;if(t=="base")s=l(u(e)).baseTones[r];else{let i=l(u(e)),a=w($(e),i.direction,i.toneBias);s=p(a,t)}let o=h()[r];if(!o)throw Error(`color "${r}" not found on theme "${u(e)}`);return o[s]}function Q(e,t="inherit",n="inherit"){let r=n=="inherit"?"neutral":n,s=e?u(e):"light",o=g(s);if(!e)return o[r][p(0,t)];let f;if(t=="base")f=l(s).baseTones[r];else{let i=l(s),a=w($(e),i.direction,i.toneBias);f=p(a,t)}return o[r][f]}0&&(module.exports={getTheme,setTheme,themeApply,themeCSS,themeColor,themeColorToken,themeDensity,themeName,themeSize,themeSpacing,themeTokens,themeVars});
3
+ ${s}}`}function l(e){if(!c[e])throw Error(`Theme "${e}" not found`);return c[e]}function O(e,t){R(t),c[e]||(c[e]=structuredClone(d)),k(c[e],t)}function W(e){let t=structuredClone(e);t.direction="lighten";for(let r in t.colors)t.colors[r].reverse(),t.baseTones[r]=t.colors[r].length-1-t.baseTones[r];return t}function g(e){let t=l(e),r=T(t),n={};for(let s in t){let o=t[s];if(s==="colors")for(let f in t.colors){let i={};[...Array(r).keys()].forEach(a=>i[a]=t.colors[f][a]),n[f]=i}else if(s==="fontSizes")n.fontSizes=t.fontSizes;else if(s==="densities")n.densities=t.densities;else if(n[s]={},typeof o=="object"&&o!==null)for(let f in o)n[s][f]=o[f]}return n}function h(){let e=l("light"),t=T(e),r={};for(let n in e){let s=n,o=e[n];if(n==="colors")for(let f in e.colors){let i={};[...Array(t).keys()].forEach(a=>i[a]=`var(--${f}-${a})`),r[f]=i}else if(n==="fontSizes")r.fontSizes=[...Array(8).keys()].map(f=>`var(--fontSize-${f})`);else{if(n==="densities")continue;if(r[s]={},typeof o=="object"&&o!==null)for(let f in o)r[s][f]=`var(--${s}-${f.replace("/","_")})`}}return r}function E(){return Object.entries(c).map(([e,t])=>V(e,t)).join(`
4
+ `)}function P(e){var t;if(typeof document!="undefined")if(e){e.textContent=E();return}else e=(t=document.getElementById("domphy-themes"))!=null?t:Object.assign(document.createElement("style"),{id:"domphy-themes"}),e.textContent=E(),document.head.appendChild(e)}function B(e){return e/4+"em"}function u(e){let r=typeof e=="function"?e.elementNode:e;for(;r&&(!r.attributes||!r.attributes.get("dataTheme"));)r=r.parent;let n="light";return r&&r.attributes&&r.attributes.has("dataTheme")&&(n=r.attributes.get("dataTheme"),typeof e=="function"&&r.attributes.addListener("dataTheme",e)),n}var N=["inherit"];[...Array(8).keys()].forEach(e=>{N.push(`decrease-${e}`),N.push(`increase-${e}`)});function x(e,t="inherit"){if(!N.includes(t))throw Error(`size name "${t}" invalid`);let r;if(t=="inherit")r=e;else if(t!=null&&t.startsWith("increase-")){let n=parseInt(t.replace("increase-",""),10);r=e+n}else if(t!=null&&t.startsWith("decrease-")){let n=parseInt(t.replace("decrease-",""),10);r=e-n}else r=e;return Math.max(0,Math.min(8,r))}function _(e){if(!e)return 2;let r=typeof e=="function"?e.elementNode:e;for(;r&&(!r.attributes||!r.attributes.get("dataSize"));)r=r.parent;let n=2;return r&&r.attributes&&r.attributes.has("dataSize")&&(n=x(n,r.attributes.get("dataSize")),typeof e=="function"&&r.attributes.addListener("dataSize",e)),n}function H(e,t="inherit"){let r=x(_(e),t);return h().fontSizes[r]}var S=["inherit"];[...Array(5).keys()].forEach(e=>{S.push(`decrease-${e}`),S.push(`increase-${e}`)});function J(e,t="inherit"){if(!S.includes(t))throw Error(`density name "${t}" invalid`);let r;if(t=="inherit")r=e;else if(t!=null&&t.startsWith("increase-")){let n=parseInt(t.replace("increase-",""),10);r=e+n}else if(t!=null&&t.startsWith("decrease-")){let n=parseInt(t.replace("decrease-",""),10);r=e-n}else r=e;return Math.max(0,Math.min(4,r))}function q(e){if(!e)return 2;let r=typeof e=="function"?e.elementNode:e;for(;r&&(!r.attributes||!r.attributes.get("dataDensity"));)r=r.parent;let n=2;return r&&r.attributes&&r.attributes.has("dataDensity")&&(n=J(n,r.attributes.get("dataDensity")),typeof e=="function"&&r.attributes.addListener("dataDensity",e)),n}function F(e){let t=q(e);return l(e?u(e):"light").densities[t]}var m=d.colors.neutral.length,b=["inherit","base"];[...Array(m).keys()].forEach(e=>{b.push(`decrease-${e}`),b.push(`increase-${e}`),b.push(`shift-${e}`)});function I(e,t){if(e<0||e>m-1)return e;let r=e+t;return r=Math.max(0,Math.min(m-1,r)),r}function G(e,t){if(e<0||e>m-1)return e;let r=Math.floor((m-1)/2),n=e<=r?e+t:e-t;return n=n<0||n>m-1?-n:n,n=Math.max(0,Math.min(m-1,n)),n}function p(e,t="inherit"){if(typeof t=="number")return t;if(t=="inherit")return e;if(!b.includes(t))throw Error(`tone name "${t}" invalid`);if(t.startsWith("increase-")){let r=parseInt(t.replace("increase-",""),10);return I(e,r)}else if(t.startsWith("decrease-")){let r=parseInt(t.replace("decrease-",""),10);return I(e,-r)}else if(t.startsWith("shift-")){let r=parseInt(t.replace("shift-",""),10);return G(e,r)}else return e}function $(e){if(!e)return 0;let r=typeof e=="function"?e.elementNode:e;for(;r&&(!r.attributes||!r.attributes.get("dataTone"));)r=r.parent;let n=0;return r&&r.attributes&&r.attributes.has("dataTone")&&(n=p(n,r.attributes.get("dataTone")),typeof e=="function"&&r.attributes.addListener("dataTone",e)),n}function w(e,t,r){return r<=0?e:t==="lighten"&&e===0?r:t==="darken"&&e===m-1?m-1-r:e}function K(e,t="inherit",r="inherit"){let n=r=="inherit"?"neutral":r;if(!e)return h()[n][p(0,t)];let s;if(t=="base")s=l(u(e)).baseTones[n];else{let i=l(u(e)),a=w($(e),i.direction,i.darkBias);s=p(a,t)}let o=h()[n];if(!o)throw Error(`color "${n}" not found on theme "${u(e)}`);return o[s]}function Q(e,t="inherit",r="inherit"){let n=r=="inherit"?"neutral":r,s=e?u(e):"light",o=g(s);if(!e)return o[n][p(0,t)];let f;if(t=="base")f=l(s).baseTones[n];else{let i=l(s),a=w($(e),i.direction,i.darkBias);f=p(a,t)}return o[n][f]}0&&(module.exports={getTheme,setTheme,themeApply,themeCSS,themeColor,themeColorToken,themeDensity,themeName,themeSize,themeSpacing,themeTokens,themeVars});
5
5
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/light.ts","../src/theme.ts","../src/size.ts","../src/density.ts","../src/tone.ts"],"sourcesContent":["export * from \"./size.js\"\nexport * from \"./density.js\"\nexport * from \"./tone.js\"\nexport * from \"./theme.js\"\n","import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n \"primary\": [\r\n \"#ffffff\",\r\n \"#e3ecff\",\r\n \"#c6daff\",\r\n \"#aac8ff\",\r\n \"#8fb6ff\",\r\n \"#76a3ff\",\r\n \"#5f91fc\",\r\n \"#4a7ff4\",\r\n \"#386ee7\",\r\n \"#2a5ed7\",\r\n \"#1e4ec2\",\r\n \"#1440aa\",\r\n \"#0c3290\",\r\n \"#072674\",\r\n \"#041a57\",\r\n \"#020f38\",\r\n \"#010419\",\r\n \"#000000\"\r\n ],\r\n \"secondary\": [\r\n \"#ffffff\",\r\n \"#fce6ea\",\r\n \"#faced6\",\r\n \"#f7b5c2\",\r\n \"#f29db0\",\r\n \"#ec859e\",\r\n \"#e36e8d\",\r\n \"#d8597d\",\r\n \"#ca456e\",\r\n \"#b93460\",\r\n \"#a42351\",\r\n \"#8e1643\",\r\n \"#770b36\",\r\n \"#5f0529\",\r\n \"#46031d\",\r\n \"#2d0210\",\r\n \"#130104\",\r\n \"#000000\"\r\n ],\r\n \"info\": [\r\n \"#ffffff\",\r\n \"#dcf0f9\",\r\n \"#b7e1f6\",\r\n \"#90d2f1\",\r\n \"#6ac3eb\",\r\n \"#42b4e2\",\r\n \"#16a4d5\",\r\n \"#0094c4\",\r\n \"#0084b2\",\r\n \"#00739e\",\r\n \"#00638a\",\r\n \"#005476\",\r\n \"#004461\",\r\n \"#00354d\",\r\n \"#002638\",\r\n \"#001623\",\r\n \"#00070d\",\r\n \"#000000\"\r\n ],\r\n \"success\": [\r\n \"#ffffff\",\r\n \"#e3f3dc\",\r\n \"#c6e8b8\",\r\n \"#a9dd94\",\r\n \"#8ed171\",\r\n \"#75c450\",\r\n \"#61b635\",\r\n \"#51a51f\",\r\n \"#429304\",\r\n \"#358100\",\r\n \"#2a7000\",\r\n \"#215f00\",\r\n \"#194d00\",\r\n \"#123c00\",\r\n \"#0b2b00\",\r\n \"#051a00\",\r\n \"#010900\",\r\n \"#000000\"\r\n ],\r\n \"warning\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"attention\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"error\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"danger\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"highlight\": [\r\n \"#ffffff\",\r\n \"#f9f5cd\",\r\n \"#f4eb95\",\r\n \"#efe05a\",\r\n \"#e6d427\",\r\n \"#d3c100\",\r\n \"#bfad00\",\r\n \"#ab9b00\",\r\n \"#988900\",\r\n \"#857700\",\r\n \"#736600\",\r\n \"#615600\",\r\n \"#4f4600\",\r\n \"#3e3600\",\r\n \"#2c2700\",\r\n \"#1b1700\",\r\n \"#090700\",\r\n \"#000000\"\r\n ],\r\n \"neutral\": [\r\n \"#ffffff\",\r\n \"#ededed\",\r\n \"#dbdbdb\",\r\n \"#cacaca\",\r\n \"#bababa\",\r\n \"#ababab\",\r\n \"#9b9b9b\",\r\n \"#8d8d8d\",\r\n \"#7e7e7e\",\r\n \"#707070\",\r\n \"#636363\",\r\n \"#565656\",\r\n \"#484848\",\r\n \"#383838\",\r\n \"#282828\",\r\n \"#181818\",\r\n \"#080808\",\r\n \"#000000\"\r\n ]\r\n },\r\n baseTones: {\r\n highlight: 5,\r\n warning: 6,\r\n error: 8,\r\n danger: 8,\r\n secondary: 8,\r\n primary: 9,\r\n info: 8,\r\n success: 8,\r\n neutral: 8,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n densities: [0.75, 1, 1.5, 2, 2.5],\r\n toneBias: 1,\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\r\nimport { ThemeInput, ThemeVars } from \"./types.js\";\r\nimport light from \"./light.js\";\r\n\r\nconst themes: Record<string, ThemeInput> = {\r\n light: JSON.parse(JSON.stringify(light)),\r\n dark: createDark(light),\r\n};\r\n\r\nfunction colorSteps(input: ThemeInput): number {\r\n const firstColor = Object.keys(input.colors)[0];\r\n return firstColor ? input.colors[firstColor].length : 0;\r\n}\r\n\r\n// --- Validation ---\r\n\r\nfunction validateTheme(partial: Partial<ThemeInput>): void {\r\n for (let key in partial) {\r\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\r\n throw new Error(`Invalid key: ${key}`);\r\n }\r\n }\r\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\r\n throw new Error(`fontSize must be array of string`);\r\n }\r\n if (partial.densities) {\r\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\r\n throw new Error(`densities must be array of number`);\r\n }\r\n }\r\n if (\"custom\" in partial) {\r\n const custom = partial.custom!;\r\n if (typeof custom !== \"object\" || custom === null) {\r\n throw new Error(`Invalid custom property: must be an object`);\r\n }\r\n }\r\n}\r\n\r\n// --- Deep Merge ---\r\n\r\nfunction deepMerge(target: any, source: any): void {\r\n for (const key in source) {\r\n if (\r\n source[key] &&\r\n typeof source[key] === \"object\" &&\r\n !Array.isArray(source[key])\r\n ) {\r\n target[key] ??= {};\r\n deepMerge(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n}\r\n\r\n// --- Builders (pure functions) ---\r\n\r\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\r\n const styles: Record<string, string | number> = {};\r\n const toneSteps = colorSteps(input);\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const colorName in input.colors) {\r\n [...Array(toneSteps).keys()].forEach(i =>\r\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\r\n );\r\n }\r\n } else if (key === \"fontSizes\") {\r\n [...Array(8).keys()].forEach(i =>\r\n styles[`--fontSize-${i}`] = input.fontSizes[i]\r\n );\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n styles[`--${key}-${k.replace(\"/\", \"_\")}`] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n let text = \"\";\r\n for (const prop in styles) {\r\n text += ` ${prop}: ${styles[prop]};\\n`;\r\n }\r\n return `[data-theme=\"${name}\"] {\\n${text}}`;\r\n}\r\n\r\n// --- Public API ---\r\n\r\nexport function getTheme(name: string): ThemeInput {\r\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\r\n return themes[name];\r\n}\r\n\r\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\r\n validateTheme(input);\r\n if (!themes[name]) themes[name] = structuredClone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = structuredClone(source)\r\n dark.direction = \"lighten\"\r\n for (let name in dark.colors) {\r\n dark.colors[name].reverse()\r\n dark.baseTones[name] = dark.colors[name].length - 1 - dark.baseTones[name]\r\n }\r\n return dark\r\n}\r\n\r\nexport function themeTokens(name: string): Record<string, any> {\r\n let input = getTheme(name)\r\n const toneSteps = colorSteps(input);\r\n let tokens: Record<string, any> = {};\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\r\n tokens[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n tokens.fontSizes = input.fontSizes;\r\n } else if (key === \"densities\") {\r\n tokens.densities = input.densities;\r\n } else {\r\n tokens[key] = {} as any;\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n tokens[key][k] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\r\n let input = getTheme(\"light\")\r\n const toneSteps = colorSteps(input);\r\n let theme = {} as ThemeVars;\r\n\r\n for (const key in input) {\r\n const section = key as keyof ThemeVars;\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\r\n theme[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n theme[section] = {} as ThemeVars[typeof section];\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n (theme[section] as Record<string, string>)[k] = `var(--${section as string}-${k.replace(\"/\", \"_\")})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\r\n","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { themeVars } from \"./theme.js\";\n\nconst ElementSizes = [\"inherit\"];\n\n[...Array(8).keys()].forEach(i =>{\n ElementSizes.push(`decrease-${i}`)\n ElementSizes.push(`increase-${i}`)\n})\n\nexport type ElementSize = typeof ElementSizes[number];\n\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\n\n if (!ElementSizes.includes(size!)) {\n throw Error(`size name \"${size}\" invalid`)\n }\n let resultSize: number\n if (size == \"inherit\") {\n resultSize = origin as number\n } else if (size?.startsWith(\"increase-\")) {\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\n resultSize = origin + offset;\n } else if (size?.startsWith(\"decrease-\")) {\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\n resultSize = origin - offset;\n } else {\n resultSize = origin\n }\n return Math.max(0, Math.min(8, resultSize))\n}\n\nfunction contextSize(object: ElementNode | Listener | null): number {\n\n if (!object) return 2\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataSize\"))) {\n node = node.parent as ElementNode\n }\n\n let size = 2\n\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\n typeof object == \"function\" && node.attributes.addListener(\"dataSize\", object)\n }\n return size\n}\n\n\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\n let index = offsetSize(contextSize(object), size)\n return themeVars().fontSizes[index]\n}","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.addListener(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, themeTokens, getTheme, themeName } from \"./theme.js\"\r\nimport light from \"./light.js\";\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\r\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\r\n let newIndex = tone <= midpoint ? tone + level : tone - level\r\n newIndex = newIndex < 0 || newIndex > TONE_STEPS - 1 ? - newIndex : newIndex\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction offsetTone(originTone: number, tone: ElementTone = \"inherit\"): number {\r\n\r\n if (typeof tone == \"number\") return tone\r\n\r\n if (tone == \"inherit\") return originTone\r\n\r\n if (!ElementTones.includes(tone!)) {\r\n throw Error(`tone name \"${tone}\" invalid`)\r\n }\r\n\r\n if (tone.startsWith(\"increase-\")) {\r\n let offset = parseInt(tone.replace(\"increase-\", \"\"), 10)\r\n return adjustTone(originTone, offset);\r\n\r\n } else if (tone.startsWith(\"decrease-\")) {\r\n let offset = parseInt(tone.replace(\"decrease-\", \"\"), 10)\r\n return adjustTone(originTone, - offset);\r\n\r\n } else if (tone.startsWith(\"shift-\")) {\r\n let offset = parseInt(tone.replace(\"shift-\", \"\"), 10)\r\n return shiftTone(originTone, offset);\r\n\r\n } else {\r\n return originTone\r\n }\r\n}\r\n\r\nfunction contextTone(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 0\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTone\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let tone = 0\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTone\")) {\r\n tone = offsetTone(tone, node.attributes.get(\"dataTone\"))\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTone\", object)\r\n }\r\n return tone\r\n}\r\n\r\nfunction themeTone(object: ElementNode | Listener, tone: ElementTone = \"inherit\"): number {\r\n\r\n return offsetTone(contextTone(object), tone)\r\n}\r\n\r\nfunction biasContext(context: number, direction: string, bias: number): number {\r\n if (bias <= 0) return context\r\n if (direction === \"lighten\" && context === 0) return bias\r\n if (direction === \"darken\" && context === TONE_STEPS - 1) return TONE_STEPS - 1 - bias\r\n return context\r\n}\r\n\r\nexport function themeColor(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let themeColor = color == \"inherit\" ? \"neutral\" : color;\r\n\r\n if (!object) {\r\n return themeVars()[themeColor][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(themeName(object)).baseTones[themeColor]\r\n } else {\r\n let theme = getTheme(themeName(object))\r\n let context = biasContext(contextTone(object), theme.direction, theme.toneBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n let colors = themeVars()[themeColor]\r\n if (!colors){\r\n throw Error(`color \"${themeColor}\" not found on theme \"${themeName(object)}`)\r\n }\r\n let resultColor = colors[resultTone]\r\n\r\n return resultColor\r\n}\r\n\r\nexport function themeColorToken(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let colorName = color == \"inherit\" ? \"neutral\" : color;\r\n let name = object ? themeName(object as ElementNode | Listener) : \"light\";\r\n let tokens = themeTokens(name);\r\n\r\n if (!object) {\r\n return tokens[colorName][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[colorName]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.toneBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n\r\n return tokens[colorName][resultTone]\r\n}\r\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,aAAAC,EAAA,eAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,oBAAAC,EAAA,iBAAAC,EAAA,cAAAC,EAAA,cAAAC,EAAA,iBAAAC,EAAA,gBAAAC,EAAA,cAAAC,IAAA,eAAAC,EAAAd,GCEA,IAAIe,EAAoB,CACtB,UAAW,SACX,OAAQ,CACN,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,KAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,MAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAU,CACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,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","names":["index_exports","__export","getTheme","setTheme","themeApply","themeCSS","themeColor","themeColorToken","themeDensity","themeName","themeSize","themeSpacing","themeTokens","themeVars","__toCommonJS","light","light_default","themes","light_default","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","section","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","i","offsetSize","origin","size","resultSize","offset","contextSize","object","node","themeSize","index","themeVars","ElementDensities","i","offsetDensity","origin","density","resultDensity","offset","contextDensity","object","node","themeDensity","index","getTheme","themeName","TONE_STEPS","light_default","ElementTones","i","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","offset","contextTone","object","node","biasContext","context","direction","bias","TONE_STEPS","themeColor","object","tone","color","themeVars","offsetTone","resultTone","getTheme","themeName","theme","contextTone","colors","themeColorToken","colorName","name","tokens","themeTokens"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/light.ts","../src/theme.ts","../src/size.ts","../src/density.ts","../src/tone.ts"],"sourcesContent":["export * from \"./size.js\"\nexport * from \"./density.js\"\nexport * from \"./tone.js\"\nexport * from \"./theme.js\"\n","import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n \"primary\": [\r\n \"#ffffff\",\r\n \"#e3ecff\",\r\n \"#c6daff\",\r\n \"#aac8ff\",\r\n \"#8fb6ff\",\r\n \"#76a3ff\",\r\n \"#5f91fc\",\r\n \"#4a7ff4\",\r\n \"#386ee7\",\r\n \"#2a5ed7\",\r\n \"#1e4ec2\",\r\n \"#1440aa\",\r\n \"#0c3290\",\r\n \"#072674\",\r\n \"#041a57\",\r\n \"#020f38\",\r\n \"#010419\",\r\n \"#000000\"\r\n ],\r\n \"secondary\": [\r\n \"#ffffff\",\r\n \"#fce6ea\",\r\n \"#faced6\",\r\n \"#f7b5c2\",\r\n \"#f29db0\",\r\n \"#ec859e\",\r\n \"#e36e8d\",\r\n \"#d8597d\",\r\n \"#ca456e\",\r\n \"#b93460\",\r\n \"#a42351\",\r\n \"#8e1643\",\r\n \"#770b36\",\r\n \"#5f0529\",\r\n \"#46031d\",\r\n \"#2d0210\",\r\n \"#130104\",\r\n \"#000000\"\r\n ],\r\n \"info\": [\r\n \"#ffffff\",\r\n \"#dcf0f9\",\r\n \"#b7e1f6\",\r\n \"#90d2f1\",\r\n \"#6ac3eb\",\r\n \"#42b4e2\",\r\n \"#16a4d5\",\r\n \"#0094c4\",\r\n \"#0084b2\",\r\n \"#00739e\",\r\n \"#00638a\",\r\n \"#005476\",\r\n \"#004461\",\r\n \"#00354d\",\r\n \"#002638\",\r\n \"#001623\",\r\n \"#00070d\",\r\n \"#000000\"\r\n ],\r\n \"success\": [\r\n \"#ffffff\",\r\n \"#e3f3dc\",\r\n \"#c6e8b8\",\r\n \"#a9dd94\",\r\n \"#8ed171\",\r\n \"#75c450\",\r\n \"#61b635\",\r\n \"#51a51f\",\r\n \"#429304\",\r\n \"#358100\",\r\n \"#2a7000\",\r\n \"#215f00\",\r\n \"#194d00\",\r\n \"#123c00\",\r\n \"#0b2b00\",\r\n \"#051a00\",\r\n \"#010900\",\r\n \"#000000\"\r\n ],\r\n \"warning\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"attention\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"error\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"danger\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"highlight\": [\r\n \"#ffffff\",\r\n \"#f9f5cd\",\r\n \"#f4eb95\",\r\n \"#efe05a\",\r\n \"#e6d427\",\r\n \"#d3c100\",\r\n \"#bfad00\",\r\n \"#ab9b00\",\r\n \"#988900\",\r\n \"#857700\",\r\n \"#736600\",\r\n \"#615600\",\r\n \"#4f4600\",\r\n \"#3e3600\",\r\n \"#2c2700\",\r\n \"#1b1700\",\r\n \"#090700\",\r\n \"#000000\"\r\n ],\r\n \"neutral\": [\r\n \"#ffffff\",\r\n \"#ededed\",\r\n \"#dbdbdb\",\r\n \"#cacaca\",\r\n \"#bababa\",\r\n \"#ababab\",\r\n \"#9b9b9b\",\r\n \"#8d8d8d\",\r\n \"#7e7e7e\",\r\n \"#707070\",\r\n \"#636363\",\r\n \"#565656\",\r\n \"#484848\",\r\n \"#383838\",\r\n \"#282828\",\r\n \"#181818\",\r\n \"#080808\",\r\n \"#000000\"\r\n ]\r\n },\r\n baseTones: {\r\n highlight: 5,\r\n warning: 6,\r\n error: 8,\r\n danger: 8,\r\n secondary: 8,\r\n primary: 9,\r\n info: 8,\r\n success: 8,\r\n neutral: 8,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n densities: [0.75, 1, 1.5, 2, 2.5],\r\n darkBias: 1,\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\r\nimport { ThemeInput, ThemeVars } from \"./types.js\";\r\nimport light from \"./light.js\";\r\n\r\nconst themes: Record<string, ThemeInput> = {\r\n light: JSON.parse(JSON.stringify(light)),\r\n dark: createDark(light),\r\n};\r\n\r\nfunction colorSteps(input: ThemeInput): number {\r\n const firstColor = Object.keys(input.colors)[0];\r\n return firstColor ? input.colors[firstColor].length : 0;\r\n}\r\n\r\n// --- Validation ---\r\n\r\nfunction validateTheme(partial: Partial<ThemeInput>): void {\r\n for (let key in partial) {\r\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\r\n throw new Error(`Invalid key: ${key}`);\r\n }\r\n }\r\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\r\n throw new Error(`fontSize must be array of string`);\r\n }\r\n if (partial.densities) {\r\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\r\n throw new Error(`densities must be array of number`);\r\n }\r\n }\r\n if (\"custom\" in partial) {\r\n const custom = partial.custom!;\r\n if (typeof custom !== \"object\" || custom === null) {\r\n throw new Error(`Invalid custom property: must be an object`);\r\n }\r\n }\r\n}\r\n\r\n// --- Deep Merge ---\r\n\r\nfunction deepMerge(target: any, source: any): void {\r\n for (const key in source) {\r\n if (\r\n source[key] &&\r\n typeof source[key] === \"object\" &&\r\n !Array.isArray(source[key])\r\n ) {\r\n target[key] ??= {};\r\n deepMerge(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n}\r\n\r\n// --- Builders (pure functions) ---\r\n\r\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\r\n const styles: Record<string, string | number> = {};\r\n const toneSteps = colorSteps(input);\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const colorName in input.colors) {\r\n [...Array(toneSteps).keys()].forEach(i =>\r\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\r\n );\r\n }\r\n } else if (key === \"fontSizes\") {\r\n [...Array(8).keys()].forEach(i =>\r\n styles[`--fontSize-${i}`] = input.fontSizes[i]\r\n );\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n styles[`--${key}-${k.replace(\"/\", \"_\")}`] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n let text = \"\";\r\n for (const prop in styles) {\r\n text += ` ${prop}: ${styles[prop]};\\n`;\r\n }\r\n return `[data-theme=\"${name}\"] {\\n${text}}`;\r\n}\r\n\r\n// --- Public API ---\r\n\r\nexport function getTheme(name: string): ThemeInput {\r\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\r\n return themes[name];\r\n}\r\n\r\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\r\n validateTheme(input);\r\n if (!themes[name]) themes[name] = structuredClone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = structuredClone(source)\r\n dark.direction = \"lighten\"\r\n for (let name in dark.colors) {\r\n dark.colors[name].reverse()\r\n dark.baseTones[name] = dark.colors[name].length - 1 - dark.baseTones[name]\r\n }\r\n return dark\r\n}\r\n\r\nexport function themeTokens(name: string): Record<string, any> {\r\n let input = getTheme(name)\r\n const toneSteps = colorSteps(input);\r\n let tokens: Record<string, any> = {};\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\r\n tokens[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n tokens.fontSizes = input.fontSizes;\r\n } else if (key === \"densities\") {\r\n tokens.densities = input.densities;\r\n } else {\r\n tokens[key] = {} as any;\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n tokens[key][k] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\r\n let input = getTheme(\"light\")\r\n const toneSteps = colorSteps(input);\r\n let theme = {} as ThemeVars;\r\n\r\n for (const key in input) {\r\n const section = key as keyof ThemeVars;\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\r\n theme[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n theme[section] = {} as ThemeVars[typeof section];\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n (theme[section] as Record<string, string>)[k] = `var(--${section as string}-${k.replace(\"/\", \"_\")})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\r\n","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { themeVars } from \"./theme.js\";\n\nconst ElementSizes = [\"inherit\"];\n\n[...Array(8).keys()].forEach(i =>{\n ElementSizes.push(`decrease-${i}`)\n ElementSizes.push(`increase-${i}`)\n})\n\nexport type ElementSize = typeof ElementSizes[number];\n\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\n\n if (!ElementSizes.includes(size!)) {\n throw Error(`size name \"${size}\" invalid`)\n }\n let resultSize: number\n if (size == \"inherit\") {\n resultSize = origin as number\n } else if (size?.startsWith(\"increase-\")) {\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\n resultSize = origin + offset;\n } else if (size?.startsWith(\"decrease-\")) {\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\n resultSize = origin - offset;\n } else {\n resultSize = origin\n }\n return Math.max(0, Math.min(8, resultSize))\n}\n\nfunction contextSize(object: ElementNode | Listener | null): number {\n\n if (!object) return 2\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataSize\"))) {\n node = node.parent as ElementNode\n }\n\n let size = 2\n\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\n typeof object == \"function\" && node.attributes.addListener(\"dataSize\", object)\n }\n return size\n}\n\n\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\n let index = offsetSize(contextSize(object), size)\n return themeVars().fontSizes[index]\n}","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.addListener(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, themeTokens, getTheme, themeName } from \"./theme.js\"\r\nimport light from \"./light.js\";\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\r\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\r\n let newIndex = tone <= midpoint ? tone + level : tone - level\r\n newIndex = newIndex < 0 || newIndex > TONE_STEPS - 1 ? - newIndex : newIndex\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction offsetTone(originTone: number, tone: ElementTone = \"inherit\"): number {\r\n\r\n if (typeof tone == \"number\") return tone\r\n\r\n if (tone == \"inherit\") return originTone\r\n\r\n if (!ElementTones.includes(tone!)) {\r\n throw Error(`tone name \"${tone}\" invalid`)\r\n }\r\n\r\n if (tone.startsWith(\"increase-\")) {\r\n let offset = parseInt(tone.replace(\"increase-\", \"\"), 10)\r\n return adjustTone(originTone, offset);\r\n\r\n } else if (tone.startsWith(\"decrease-\")) {\r\n let offset = parseInt(tone.replace(\"decrease-\", \"\"), 10)\r\n return adjustTone(originTone, - offset);\r\n\r\n } else if (tone.startsWith(\"shift-\")) {\r\n let offset = parseInt(tone.replace(\"shift-\", \"\"), 10)\r\n return shiftTone(originTone, offset);\r\n\r\n } else {\r\n return originTone\r\n }\r\n}\r\n\r\nfunction contextTone(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 0\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTone\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let tone = 0\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTone\")) {\r\n tone = offsetTone(tone, node.attributes.get(\"dataTone\"))\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTone\", object)\r\n }\r\n return tone\r\n}\r\n\r\nfunction themeTone(object: ElementNode | Listener, tone: ElementTone = \"inherit\"): number {\r\n\r\n return offsetTone(contextTone(object), tone)\r\n}\r\n\r\nfunction biasContext(context: number, direction: string, bias: number): number {\r\n if (bias <= 0) return context\r\n if (direction === \"lighten\" && context === 0) return bias\r\n if (direction === \"darken\" && context === TONE_STEPS - 1) return TONE_STEPS - 1 - bias\r\n return context\r\n}\r\n\r\nexport function themeColor(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let themeColor = color == \"inherit\" ? \"neutral\" : color;\r\n\r\n if (!object) {\r\n return themeVars()[themeColor][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(themeName(object)).baseTones[themeColor]\r\n } else {\r\n let theme = getTheme(themeName(object))\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n let colors = themeVars()[themeColor]\r\n if (!colors){\r\n throw Error(`color \"${themeColor}\" not found on theme \"${themeName(object)}`)\r\n }\r\n let resultColor = colors[resultTone]\r\n\r\n return resultColor\r\n}\r\n\r\nexport function themeColorToken(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let colorName = color == \"inherit\" ? \"neutral\" : color;\r\n let name = object ? themeName(object as ElementNode | Listener) : \"light\";\r\n let tokens = themeTokens(name);\r\n\r\n if (!object) {\r\n return tokens[colorName][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[colorName]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n\r\n return tokens[colorName][resultTone]\r\n}\r\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,aAAAC,EAAA,eAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,oBAAAC,EAAA,iBAAAC,EAAA,cAAAC,EAAA,cAAAC,EAAA,iBAAAC,EAAA,gBAAAC,EAAA,cAAAC,IAAA,eAAAC,EAAAd,GCEA,IAAIe,EAAoB,CACtB,UAAW,SACX,OAAQ,CACN,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,KAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,MAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAU,CACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,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","names":["index_exports","__export","getTheme","setTheme","themeApply","themeCSS","themeColor","themeColorToken","themeDensity","themeName","themeSize","themeSpacing","themeTokens","themeVars","__toCommonJS","light","light_default","themes","light_default","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","section","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","i","offsetSize","origin","size","resultSize","offset","contextSize","object","node","themeSize","index","themeVars","ElementDensities","i","offsetDensity","origin","density","resultDensity","offset","contextDensity","object","node","themeDensity","index","getTheme","themeName","TONE_STEPS","light_default","ElementTones","i","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","offset","contextTone","object","node","biasContext","context","direction","bias","TONE_STEPS","themeColor","object","tone","color","themeVars","offsetTone","resultTone","getTheme","themeName","theme","contextTone","colors","themeColorToken","colorName","name","tokens","themeTokens"]}
package/dist/index.d.cts CHANGED
@@ -19,7 +19,7 @@ type ThemeInput = {
19
19
  baseTones: Record<string, number>;
20
20
  fontSizes: string[];
21
21
  densities: number[];
22
- toneBias: number;
22
+ darkBias: number;
23
23
  custom: Record<string, string | number>;
24
24
  };
25
25
  type ThemeVars = {
package/dist/index.d.ts CHANGED
@@ -19,7 +19,7 @@ type ThemeInput = {
19
19
  baseTones: Record<string, number>;
20
20
  fontSizes: string[];
21
21
  densities: number[];
22
- toneBias: number;
22
+ darkBias: number;
23
23
  custom: Record<string, string | number>;
24
24
  };
25
25
  type ThemeVars = {
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- var w={direction:"darken",colors:{primary:["#ffffff","#e3ecff","#c6daff","#aac8ff","#8fb6ff","#76a3ff","#5f91fc","#4a7ff4","#386ee7","#2a5ed7","#1e4ec2","#1440aa","#0c3290","#072674","#041a57","#020f38","#010419","#000000"],secondary:["#ffffff","#fce6ea","#faced6","#f7b5c2","#f29db0","#ec859e","#e36e8d","#d8597d","#ca456e","#b93460","#a42351","#8e1643","#770b36","#5f0529","#46031d","#2d0210","#130104","#000000"],info:["#ffffff","#dcf0f9","#b7e1f6","#90d2f1","#6ac3eb","#42b4e2","#16a4d5","#0094c4","#0084b2","#00739e","#00638a","#005476","#004461","#00354d","#002638","#001623","#00070d","#000000"],success:["#ffffff","#e3f3dc","#c6e8b8","#a9dd94","#8ed171","#75c450","#61b635","#51a51f","#429304","#358100","#2a7000","#215f00","#194d00","#123c00","#0b2b00","#051a00","#010900","#000000"],warning:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],attention:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],error:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],danger:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],highlight:["#ffffff","#f9f5cd","#f4eb95","#efe05a","#e6d427","#d3c100","#bfad00","#ab9b00","#988900","#857700","#736600","#615600","#4f4600","#3e3600","#2c2700","#1b1700","#090700","#000000"],neutral:["#ffffff","#ededed","#dbdbdb","#cacaca","#bababa","#ababab","#9b9b9b","#8d8d8d","#7e7e7e","#707070","#636363","#565656","#484848","#383838","#282828","#181818","#080808","#000000"]},baseTones:{highlight:5,warning:6,error:8,danger:8,secondary:8,primary:9,info:8,success:8,neutral:8},fontSizes:["0.75rem","0.875rem","1rem","1.25rem","1.5625rem","1.9375rem","2.4375rem","3.0625rem"],densities:[.75,1,1.5,2,2.5],toneBias:1,custom:{}},u=w;var c={light:JSON.parse(JSON.stringify(u)),dark:z(u)};function y(e){let t=Object.keys(e.colors)[0];return t?e.colors[t].length:0}function L(e){for(let t in e)if(!Object.keys(u).includes(t))throw new Error(`Invalid key: ${t}`);if(e.fontSizes&&!Array.isArray(e.fontSizes))throw new Error("fontSize must be array of string");if(e.densities&&(!Array.isArray(e.densities)||e.densities.some(t=>typeof t!="number")))throw new Error("densities must be array of number");if("custom"in e){let t=e.custom;if(typeof t!="object"||t===null)throw new Error("Invalid custom property: must be an object")}}function N(e,t){var n;for(let r in t)t[r]&&typeof t[r]=="object"&&!Array.isArray(t[r])?((n=e[r])!=null||(e[r]={}),N(e[r],t[r])):e[r]=t[r]}function v(e,t){let n={},r=y(t);for(let s in t){let o=t[s];if(s==="colors")for(let i in t.colors)[...Array(r).keys()].forEach(a=>n[`--${i}-${a}`]=t.colors[i][a]);else if(s==="fontSizes")[...Array(8).keys()].forEach(i=>n[`--fontSize-${i}`]=t.fontSizes[i]);else{if(s==="densities")continue;if(typeof o=="object"&&o!==null)for(let i in o)n[`--${s}-${i.replace("/","_")}`]=o[i]}}let f="";for(let s in n)f+=` ${s}: ${n[s]};
1
+ var w={direction:"darken",colors:{primary:["#ffffff","#e3ecff","#c6daff","#aac8ff","#8fb6ff","#76a3ff","#5f91fc","#4a7ff4","#386ee7","#2a5ed7","#1e4ec2","#1440aa","#0c3290","#072674","#041a57","#020f38","#010419","#000000"],secondary:["#ffffff","#fce6ea","#faced6","#f7b5c2","#f29db0","#ec859e","#e36e8d","#d8597d","#ca456e","#b93460","#a42351","#8e1643","#770b36","#5f0529","#46031d","#2d0210","#130104","#000000"],info:["#ffffff","#dcf0f9","#b7e1f6","#90d2f1","#6ac3eb","#42b4e2","#16a4d5","#0094c4","#0084b2","#00739e","#00638a","#005476","#004461","#00354d","#002638","#001623","#00070d","#000000"],success:["#ffffff","#e3f3dc","#c6e8b8","#a9dd94","#8ed171","#75c450","#61b635","#51a51f","#429304","#358100","#2a7000","#215f00","#194d00","#123c00","#0b2b00","#051a00","#010900","#000000"],warning:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],attention:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],error:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],danger:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],highlight:["#ffffff","#f9f5cd","#f4eb95","#efe05a","#e6d427","#d3c100","#bfad00","#ab9b00","#988900","#857700","#736600","#615600","#4f4600","#3e3600","#2c2700","#1b1700","#090700","#000000"],neutral:["#ffffff","#ededed","#dbdbdb","#cacaca","#bababa","#ababab","#9b9b9b","#8d8d8d","#7e7e7e","#707070","#636363","#565656","#484848","#383838","#282828","#181818","#080808","#000000"]},baseTones:{highlight:5,warning:6,error:8,danger:8,secondary:8,primary:9,info:8,success:8,neutral:8},fontSizes:["0.75rem","0.875rem","1rem","1.25rem","1.5625rem","1.9375rem","2.4375rem","3.0625rem"],densities:[.75,1,1.5,2,2.5],darkBias:1,custom:{}},u=w;var c={light:JSON.parse(JSON.stringify(u)),dark:z(u)};function y(e){let t=Object.keys(e.colors)[0];return t?e.colors[t].length:0}function L(e){for(let t in e)if(!Object.keys(u).includes(t))throw new Error(`Invalid key: ${t}`);if(e.fontSizes&&!Array.isArray(e.fontSizes))throw new Error("fontSize must be array of string");if(e.densities&&(!Array.isArray(e.densities)||e.densities.some(t=>typeof t!="number")))throw new Error("densities must be array of number");if("custom"in e){let t=e.custom;if(typeof t!="object"||t===null)throw new Error("Invalid custom property: must be an object")}}function N(e,t){var r;for(let n in t)t[n]&&typeof t[n]=="object"&&!Array.isArray(t[n])?((r=e[n])!=null||(e[n]={}),N(e[n],t[n])):e[n]=t[n]}function v(e,t){let r={},n=y(t);for(let s in t){let o=t[s];if(s==="colors")for(let i in t.colors)[...Array(n).keys()].forEach(a=>r[`--${i}-${a}`]=t.colors[i][a]);else if(s==="fontSizes")[...Array(8).keys()].forEach(i=>r[`--fontSize-${i}`]=t.fontSizes[i]);else{if(s==="densities")continue;if(typeof o=="object"&&o!==null)for(let i in o)r[`--${s}-${i.replace("/","_")}`]=o[i]}}let f="";for(let s in r)f+=` ${s}: ${r[s]};
2
2
  `;return`[data-theme="${e}"] {
3
- ${f}}`}function l(e){if(!c[e])throw Error(`Theme "${e}" not found`);return c[e]}function O(e,t){L(t),c[e]||(c[e]=structuredClone(u)),N(c[e],t)}function z(e){let t=structuredClone(e);t.direction="lighten";for(let n in t.colors)t.colors[n].reverse(),t.baseTones[n]=t.colors[n].length-1-t.baseTones[n];return t}function S(e){let t=l(e),n=y(t),r={};for(let f in t){let s=t[f];if(f==="colors")for(let o in t.colors){let i={};[...Array(n).keys()].forEach(a=>i[a]=t.colors[o][a]),r[o]=i}else if(f==="fontSizes")r.fontSizes=t.fontSizes;else if(f==="densities")r.densities=t.densities;else if(r[f]={},typeof s=="object"&&s!==null)for(let o in s)r[f][o]=s[o]}return r}function h(){let e=l("light"),t=y(e),n={};for(let r in e){let f=r,s=e[r];if(r==="colors")for(let o in e.colors){let i={};[...Array(t).keys()].forEach(a=>i[a]=`var(--${o}-${a})`),n[o]=i}else if(r==="fontSizes")n.fontSizes=[...Array(8).keys()].map(o=>`var(--fontSize-${o})`);else{if(r==="densities")continue;if(n[f]={},typeof s=="object"&&s!==null)for(let o in s)n[f][o]=`var(--${f}-${o.replace("/","_")})`}}return n}function g(){return Object.entries(c).map(([e,t])=>v(e,t)).join(`
4
- `)}function W(e){var t;if(typeof document!="undefined")if(e){e.textContent=g();return}else e=(t=document.getElementById("domphy-themes"))!=null?t:Object.assign(document.createElement("style"),{id:"domphy-themes"}),e.textContent=g(),document.head.appendChild(e)}function P(e){return e/4+"em"}function d(e){let n=typeof e=="function"?e.elementNode:e;for(;n&&(!n.attributes||!n.attributes.get("dataTheme"));)n=n.parent;let r="light";return n&&n.attributes&&n.attributes.has("dataTheme")&&(r=n.attributes.get("dataTheme"),typeof e=="function"&&n.attributes.addListener("dataTheme",e)),r}var E=["inherit"];[...Array(8).keys()].forEach(e=>{E.push(`decrease-${e}`),E.push(`increase-${e}`)});function x(e,t="inherit"){if(!E.includes(t))throw Error(`size name "${t}" invalid`);let n;if(t=="inherit")n=e;else if(t!=null&&t.startsWith("increase-")){let r=parseInt(t.replace("increase-",""),10);n=e+r}else if(t!=null&&t.startsWith("decrease-")){let r=parseInt(t.replace("decrease-",""),10);n=e-r}else n=e;return Math.max(0,Math.min(8,n))}function A(e){if(!e)return 2;let n=typeof e=="function"?e.elementNode:e;for(;n&&(!n.attributes||!n.attributes.get("dataSize"));)n=n.parent;let r=2;return n&&n.attributes&&n.attributes.has("dataSize")&&(r=x(r,n.attributes.get("dataSize")),typeof e=="function"&&n.attributes.addListener("dataSize",e)),r}function H(e,t="inherit"){let n=x(A(e),t);return h().fontSizes[n]}var T=["inherit"];[...Array(5).keys()].forEach(e=>{T.push(`decrease-${e}`),T.push(`increase-${e}`)});function C(e,t="inherit"){if(!T.includes(t))throw Error(`density name "${t}" invalid`);let n;if(t=="inherit")n=e;else if(t!=null&&t.startsWith("increase-")){let r=parseInt(t.replace("increase-",""),10);n=e+r}else if(t!=null&&t.startsWith("decrease-")){let r=parseInt(t.replace("decrease-",""),10);n=e-r}else n=e;return Math.max(0,Math.min(4,n))}function D(e){if(!e)return 2;let n=typeof e=="function"?e.elementNode:e;for(;n&&(!n.attributes||!n.attributes.get("dataDensity"));)n=n.parent;let r=2;return n&&n.attributes&&n.attributes.has("dataDensity")&&(r=C(r,n.attributes.get("dataDensity")),typeof e=="function"&&n.attributes.addListener("dataDensity",e)),r}function F(e){let t=D(e);return l(e?d(e):"light").densities[t]}var m=u.colors.neutral.length,b=["inherit","base"];[...Array(m).keys()].forEach(e=>{b.push(`decrease-${e}`),b.push(`increase-${e}`),b.push(`shift-${e}`)});function k(e,t){if(e<0||e>m-1)return e;let n=e+t;return n=Math.max(0,Math.min(m-1,n)),n}function M(e,t){if(e<0||e>m-1)return e;let n=Math.floor((m-1)/2),r=e<=n?e+t:e-t;return r=r<0||r>m-1?-r:r,r=Math.max(0,Math.min(m-1,r)),r}function p(e,t="inherit"){if(typeof t=="number")return t;if(t=="inherit")return e;if(!b.includes(t))throw Error(`tone name "${t}" invalid`);if(t.startsWith("increase-")){let n=parseInt(t.replace("increase-",""),10);return k(e,n)}else if(t.startsWith("decrease-")){let n=parseInt(t.replace("decrease-",""),10);return k(e,-n)}else if(t.startsWith("shift-")){let n=parseInt(t.replace("shift-",""),10);return M(e,n)}else return e}function I(e){if(!e)return 0;let n=typeof e=="function"?e.elementNode:e;for(;n&&(!n.attributes||!n.attributes.get("dataTone"));)n=n.parent;let r=0;return n&&n.attributes&&n.attributes.has("dataTone")&&(r=p(r,n.attributes.get("dataTone")),typeof e=="function"&&n.attributes.addListener("dataTone",e)),r}function $(e,t,n){return n<=0?e:t==="lighten"&&e===0?n:t==="darken"&&e===m-1?m-1-n:e}function U(e,t="inherit",n="inherit"){let r=n=="inherit"?"neutral":n;if(!e)return h()[r][p(0,t)];let f;if(t=="base")f=l(d(e)).baseTones[r];else{let i=l(d(e)),a=$(I(e),i.direction,i.toneBias);f=p(a,t)}let s=h()[r];if(!s)throw Error(`color "${r}" not found on theme "${d(e)}`);return s[f]}function X(e,t="inherit",n="inherit"){let r=n=="inherit"?"neutral":n,f=e?d(e):"light",s=S(f);if(!e)return s[r][p(0,t)];let o;if(t=="base")o=l(f).baseTones[r];else{let i=l(f),a=$(I(e),i.direction,i.toneBias);o=p(a,t)}return s[r][o]}export{l as getTheme,O as setTheme,W as themeApply,g as themeCSS,U as themeColor,X as themeColorToken,F as themeDensity,d as themeName,H as themeSize,P as themeSpacing,S as themeTokens,h as themeVars};
3
+ ${f}}`}function l(e){if(!c[e])throw Error(`Theme "${e}" not found`);return c[e]}function O(e,t){L(t),c[e]||(c[e]=structuredClone(u)),N(c[e],t)}function z(e){let t=structuredClone(e);t.direction="lighten";for(let r in t.colors)t.colors[r].reverse(),t.baseTones[r]=t.colors[r].length-1-t.baseTones[r];return t}function S(e){let t=l(e),r=y(t),n={};for(let f in t){let s=t[f];if(f==="colors")for(let o in t.colors){let i={};[...Array(r).keys()].forEach(a=>i[a]=t.colors[o][a]),n[o]=i}else if(f==="fontSizes")n.fontSizes=t.fontSizes;else if(f==="densities")n.densities=t.densities;else if(n[f]={},typeof s=="object"&&s!==null)for(let o in s)n[f][o]=s[o]}return n}function h(){let e=l("light"),t=y(e),r={};for(let n in e){let f=n,s=e[n];if(n==="colors")for(let o in e.colors){let i={};[...Array(t).keys()].forEach(a=>i[a]=`var(--${o}-${a})`),r[o]=i}else if(n==="fontSizes")r.fontSizes=[...Array(8).keys()].map(o=>`var(--fontSize-${o})`);else{if(n==="densities")continue;if(r[f]={},typeof s=="object"&&s!==null)for(let o in s)r[f][o]=`var(--${f}-${o.replace("/","_")})`}}return r}function g(){return Object.entries(c).map(([e,t])=>v(e,t)).join(`
4
+ `)}function W(e){var t;if(typeof document!="undefined")if(e){e.textContent=g();return}else e=(t=document.getElementById("domphy-themes"))!=null?t:Object.assign(document.createElement("style"),{id:"domphy-themes"}),e.textContent=g(),document.head.appendChild(e)}function P(e){return e/4+"em"}function d(e){let r=typeof e=="function"?e.elementNode:e;for(;r&&(!r.attributes||!r.attributes.get("dataTheme"));)r=r.parent;let n="light";return r&&r.attributes&&r.attributes.has("dataTheme")&&(n=r.attributes.get("dataTheme"),typeof e=="function"&&r.attributes.addListener("dataTheme",e)),n}var E=["inherit"];[...Array(8).keys()].forEach(e=>{E.push(`decrease-${e}`),E.push(`increase-${e}`)});function k(e,t="inherit"){if(!E.includes(t))throw Error(`size name "${t}" invalid`);let r;if(t=="inherit")r=e;else if(t!=null&&t.startsWith("increase-")){let n=parseInt(t.replace("increase-",""),10);r=e+n}else if(t!=null&&t.startsWith("decrease-")){let n=parseInt(t.replace("decrease-",""),10);r=e-n}else r=e;return Math.max(0,Math.min(8,r))}function A(e){if(!e)return 2;let r=typeof e=="function"?e.elementNode:e;for(;r&&(!r.attributes||!r.attributes.get("dataSize"));)r=r.parent;let n=2;return r&&r.attributes&&r.attributes.has("dataSize")&&(n=k(n,r.attributes.get("dataSize")),typeof e=="function"&&r.attributes.addListener("dataSize",e)),n}function H(e,t="inherit"){let r=k(A(e),t);return h().fontSizes[r]}var T=["inherit"];[...Array(5).keys()].forEach(e=>{T.push(`decrease-${e}`),T.push(`increase-${e}`)});function C(e,t="inherit"){if(!T.includes(t))throw Error(`density name "${t}" invalid`);let r;if(t=="inherit")r=e;else if(t!=null&&t.startsWith("increase-")){let n=parseInt(t.replace("increase-",""),10);r=e+n}else if(t!=null&&t.startsWith("decrease-")){let n=parseInt(t.replace("decrease-",""),10);r=e-n}else r=e;return Math.max(0,Math.min(4,r))}function D(e){if(!e)return 2;let r=typeof e=="function"?e.elementNode:e;for(;r&&(!r.attributes||!r.attributes.get("dataDensity"));)r=r.parent;let n=2;return r&&r.attributes&&r.attributes.has("dataDensity")&&(n=C(n,r.attributes.get("dataDensity")),typeof e=="function"&&r.attributes.addListener("dataDensity",e)),n}function F(e){let t=D(e);return l(e?d(e):"light").densities[t]}var m=u.colors.neutral.length,b=["inherit","base"];[...Array(m).keys()].forEach(e=>{b.push(`decrease-${e}`),b.push(`increase-${e}`),b.push(`shift-${e}`)});function x(e,t){if(e<0||e>m-1)return e;let r=e+t;return r=Math.max(0,Math.min(m-1,r)),r}function M(e,t){if(e<0||e>m-1)return e;let r=Math.floor((m-1)/2),n=e<=r?e+t:e-t;return n=n<0||n>m-1?-n:n,n=Math.max(0,Math.min(m-1,n)),n}function p(e,t="inherit"){if(typeof t=="number")return t;if(t=="inherit")return e;if(!b.includes(t))throw Error(`tone name "${t}" invalid`);if(t.startsWith("increase-")){let r=parseInt(t.replace("increase-",""),10);return x(e,r)}else if(t.startsWith("decrease-")){let r=parseInt(t.replace("decrease-",""),10);return x(e,-r)}else if(t.startsWith("shift-")){let r=parseInt(t.replace("shift-",""),10);return M(e,r)}else return e}function I(e){if(!e)return 0;let r=typeof e=="function"?e.elementNode:e;for(;r&&(!r.attributes||!r.attributes.get("dataTone"));)r=r.parent;let n=0;return r&&r.attributes&&r.attributes.has("dataTone")&&(n=p(n,r.attributes.get("dataTone")),typeof e=="function"&&r.attributes.addListener("dataTone",e)),n}function $(e,t,r){return r<=0?e:t==="lighten"&&e===0?r:t==="darken"&&e===m-1?m-1-r:e}function U(e,t="inherit",r="inherit"){let n=r=="inherit"?"neutral":r;if(!e)return h()[n][p(0,t)];let f;if(t=="base")f=l(d(e)).baseTones[n];else{let i=l(d(e)),a=$(I(e),i.direction,i.darkBias);f=p(a,t)}let s=h()[n];if(!s)throw Error(`color "${n}" not found on theme "${d(e)}`);return s[f]}function X(e,t="inherit",r="inherit"){let n=r=="inherit"?"neutral":r,f=e?d(e):"light",s=S(f);if(!e)return s[n][p(0,t)];let o;if(t=="base")o=l(f).baseTones[n];else{let i=l(f),a=$(I(e),i.direction,i.darkBias);o=p(a,t)}return s[n][o]}export{l as getTheme,O as setTheme,W as themeApply,g as themeCSS,U as themeColor,X as themeColorToken,F as themeDensity,d as themeName,H as themeSize,P as themeSpacing,S as themeTokens,h as themeVars};
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/light.ts","../src/theme.ts","../src/size.ts","../src/density.ts","../src/tone.ts"],"sourcesContent":["import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n \"primary\": [\r\n \"#ffffff\",\r\n \"#e3ecff\",\r\n \"#c6daff\",\r\n \"#aac8ff\",\r\n \"#8fb6ff\",\r\n \"#76a3ff\",\r\n \"#5f91fc\",\r\n \"#4a7ff4\",\r\n \"#386ee7\",\r\n \"#2a5ed7\",\r\n \"#1e4ec2\",\r\n \"#1440aa\",\r\n \"#0c3290\",\r\n \"#072674\",\r\n \"#041a57\",\r\n \"#020f38\",\r\n \"#010419\",\r\n \"#000000\"\r\n ],\r\n \"secondary\": [\r\n \"#ffffff\",\r\n \"#fce6ea\",\r\n \"#faced6\",\r\n \"#f7b5c2\",\r\n \"#f29db0\",\r\n \"#ec859e\",\r\n \"#e36e8d\",\r\n \"#d8597d\",\r\n \"#ca456e\",\r\n \"#b93460\",\r\n \"#a42351\",\r\n \"#8e1643\",\r\n \"#770b36\",\r\n \"#5f0529\",\r\n \"#46031d\",\r\n \"#2d0210\",\r\n \"#130104\",\r\n \"#000000\"\r\n ],\r\n \"info\": [\r\n \"#ffffff\",\r\n \"#dcf0f9\",\r\n \"#b7e1f6\",\r\n \"#90d2f1\",\r\n \"#6ac3eb\",\r\n \"#42b4e2\",\r\n \"#16a4d5\",\r\n \"#0094c4\",\r\n \"#0084b2\",\r\n \"#00739e\",\r\n \"#00638a\",\r\n \"#005476\",\r\n \"#004461\",\r\n \"#00354d\",\r\n \"#002638\",\r\n \"#001623\",\r\n \"#00070d\",\r\n \"#000000\"\r\n ],\r\n \"success\": [\r\n \"#ffffff\",\r\n \"#e3f3dc\",\r\n \"#c6e8b8\",\r\n \"#a9dd94\",\r\n \"#8ed171\",\r\n \"#75c450\",\r\n \"#61b635\",\r\n \"#51a51f\",\r\n \"#429304\",\r\n \"#358100\",\r\n \"#2a7000\",\r\n \"#215f00\",\r\n \"#194d00\",\r\n \"#123c00\",\r\n \"#0b2b00\",\r\n \"#051a00\",\r\n \"#010900\",\r\n \"#000000\"\r\n ],\r\n \"warning\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"attention\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"error\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"danger\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"highlight\": [\r\n \"#ffffff\",\r\n \"#f9f5cd\",\r\n \"#f4eb95\",\r\n \"#efe05a\",\r\n \"#e6d427\",\r\n \"#d3c100\",\r\n \"#bfad00\",\r\n \"#ab9b00\",\r\n \"#988900\",\r\n \"#857700\",\r\n \"#736600\",\r\n \"#615600\",\r\n \"#4f4600\",\r\n \"#3e3600\",\r\n \"#2c2700\",\r\n \"#1b1700\",\r\n \"#090700\",\r\n \"#000000\"\r\n ],\r\n \"neutral\": [\r\n \"#ffffff\",\r\n \"#ededed\",\r\n \"#dbdbdb\",\r\n \"#cacaca\",\r\n \"#bababa\",\r\n \"#ababab\",\r\n \"#9b9b9b\",\r\n \"#8d8d8d\",\r\n \"#7e7e7e\",\r\n \"#707070\",\r\n \"#636363\",\r\n \"#565656\",\r\n \"#484848\",\r\n \"#383838\",\r\n \"#282828\",\r\n \"#181818\",\r\n \"#080808\",\r\n \"#000000\"\r\n ]\r\n },\r\n baseTones: {\r\n highlight: 5,\r\n warning: 6,\r\n error: 8,\r\n danger: 8,\r\n secondary: 8,\r\n primary: 9,\r\n info: 8,\r\n success: 8,\r\n neutral: 8,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n densities: [0.75, 1, 1.5, 2, 2.5],\r\n toneBias: 1,\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\r\nimport { ThemeInput, ThemeVars } from \"./types.js\";\r\nimport light from \"./light.js\";\r\n\r\nconst themes: Record<string, ThemeInput> = {\r\n light: JSON.parse(JSON.stringify(light)),\r\n dark: createDark(light),\r\n};\r\n\r\nfunction colorSteps(input: ThemeInput): number {\r\n const firstColor = Object.keys(input.colors)[0];\r\n return firstColor ? input.colors[firstColor].length : 0;\r\n}\r\n\r\n// --- Validation ---\r\n\r\nfunction validateTheme(partial: Partial<ThemeInput>): void {\r\n for (let key in partial) {\r\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\r\n throw new Error(`Invalid key: ${key}`);\r\n }\r\n }\r\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\r\n throw new Error(`fontSize must be array of string`);\r\n }\r\n if (partial.densities) {\r\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\r\n throw new Error(`densities must be array of number`);\r\n }\r\n }\r\n if (\"custom\" in partial) {\r\n const custom = partial.custom!;\r\n if (typeof custom !== \"object\" || custom === null) {\r\n throw new Error(`Invalid custom property: must be an object`);\r\n }\r\n }\r\n}\r\n\r\n// --- Deep Merge ---\r\n\r\nfunction deepMerge(target: any, source: any): void {\r\n for (const key in source) {\r\n if (\r\n source[key] &&\r\n typeof source[key] === \"object\" &&\r\n !Array.isArray(source[key])\r\n ) {\r\n target[key] ??= {};\r\n deepMerge(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n}\r\n\r\n// --- Builders (pure functions) ---\r\n\r\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\r\n const styles: Record<string, string | number> = {};\r\n const toneSteps = colorSteps(input);\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const colorName in input.colors) {\r\n [...Array(toneSteps).keys()].forEach(i =>\r\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\r\n );\r\n }\r\n } else if (key === \"fontSizes\") {\r\n [...Array(8).keys()].forEach(i =>\r\n styles[`--fontSize-${i}`] = input.fontSizes[i]\r\n );\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n styles[`--${key}-${k.replace(\"/\", \"_\")}`] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n let text = \"\";\r\n for (const prop in styles) {\r\n text += ` ${prop}: ${styles[prop]};\\n`;\r\n }\r\n return `[data-theme=\"${name}\"] {\\n${text}}`;\r\n}\r\n\r\n// --- Public API ---\r\n\r\nexport function getTheme(name: string): ThemeInput {\r\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\r\n return themes[name];\r\n}\r\n\r\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\r\n validateTheme(input);\r\n if (!themes[name]) themes[name] = structuredClone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = structuredClone(source)\r\n dark.direction = \"lighten\"\r\n for (let name in dark.colors) {\r\n dark.colors[name].reverse()\r\n dark.baseTones[name] = dark.colors[name].length - 1 - dark.baseTones[name]\r\n }\r\n return dark\r\n}\r\n\r\nexport function themeTokens(name: string): Record<string, any> {\r\n let input = getTheme(name)\r\n const toneSteps = colorSteps(input);\r\n let tokens: Record<string, any> = {};\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\r\n tokens[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n tokens.fontSizes = input.fontSizes;\r\n } else if (key === \"densities\") {\r\n tokens.densities = input.densities;\r\n } else {\r\n tokens[key] = {} as any;\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n tokens[key][k] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\r\n let input = getTheme(\"light\")\r\n const toneSteps = colorSteps(input);\r\n let theme = {} as ThemeVars;\r\n\r\n for (const key in input) {\r\n const section = key as keyof ThemeVars;\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\r\n theme[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n theme[section] = {} as ThemeVars[typeof section];\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n (theme[section] as Record<string, string>)[k] = `var(--${section as string}-${k.replace(\"/\", \"_\")})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\r\n","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { themeVars } from \"./theme.js\";\n\nconst ElementSizes = [\"inherit\"];\n\n[...Array(8).keys()].forEach(i =>{\n ElementSizes.push(`decrease-${i}`)\n ElementSizes.push(`increase-${i}`)\n})\n\nexport type ElementSize = typeof ElementSizes[number];\n\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\n\n if (!ElementSizes.includes(size!)) {\n throw Error(`size name \"${size}\" invalid`)\n }\n let resultSize: number\n if (size == \"inherit\") {\n resultSize = origin as number\n } else if (size?.startsWith(\"increase-\")) {\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\n resultSize = origin + offset;\n } else if (size?.startsWith(\"decrease-\")) {\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\n resultSize = origin - offset;\n } else {\n resultSize = origin\n }\n return Math.max(0, Math.min(8, resultSize))\n}\n\nfunction contextSize(object: ElementNode | Listener | null): number {\n\n if (!object) return 2\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataSize\"))) {\n node = node.parent as ElementNode\n }\n\n let size = 2\n\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\n typeof object == \"function\" && node.attributes.addListener(\"dataSize\", object)\n }\n return size\n}\n\n\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\n let index = offsetSize(contextSize(object), size)\n return themeVars().fontSizes[index]\n}","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.addListener(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, themeTokens, getTheme, themeName } from \"./theme.js\"\r\nimport light from \"./light.js\";\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\r\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\r\n let newIndex = tone <= midpoint ? tone + level : tone - level\r\n newIndex = newIndex < 0 || newIndex > TONE_STEPS - 1 ? - newIndex : newIndex\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction offsetTone(originTone: number, tone: ElementTone = \"inherit\"): number {\r\n\r\n if (typeof tone == \"number\") return tone\r\n\r\n if (tone == \"inherit\") return originTone\r\n\r\n if (!ElementTones.includes(tone!)) {\r\n throw Error(`tone name \"${tone}\" invalid`)\r\n }\r\n\r\n if (tone.startsWith(\"increase-\")) {\r\n let offset = parseInt(tone.replace(\"increase-\", \"\"), 10)\r\n return adjustTone(originTone, offset);\r\n\r\n } else if (tone.startsWith(\"decrease-\")) {\r\n let offset = parseInt(tone.replace(\"decrease-\", \"\"), 10)\r\n return adjustTone(originTone, - offset);\r\n\r\n } else if (tone.startsWith(\"shift-\")) {\r\n let offset = parseInt(tone.replace(\"shift-\", \"\"), 10)\r\n return shiftTone(originTone, offset);\r\n\r\n } else {\r\n return originTone\r\n }\r\n}\r\n\r\nfunction contextTone(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 0\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTone\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let tone = 0\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTone\")) {\r\n tone = offsetTone(tone, node.attributes.get(\"dataTone\"))\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTone\", object)\r\n }\r\n return tone\r\n}\r\n\r\nfunction themeTone(object: ElementNode | Listener, tone: ElementTone = \"inherit\"): number {\r\n\r\n return offsetTone(contextTone(object), tone)\r\n}\r\n\r\nfunction biasContext(context: number, direction: string, bias: number): number {\r\n if (bias <= 0) return context\r\n if (direction === \"lighten\" && context === 0) return bias\r\n if (direction === \"darken\" && context === TONE_STEPS - 1) return TONE_STEPS - 1 - bias\r\n return context\r\n}\r\n\r\nexport function themeColor(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let themeColor = color == \"inherit\" ? \"neutral\" : color;\r\n\r\n if (!object) {\r\n return themeVars()[themeColor][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(themeName(object)).baseTones[themeColor]\r\n } else {\r\n let theme = getTheme(themeName(object))\r\n let context = biasContext(contextTone(object), theme.direction, theme.toneBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n let colors = themeVars()[themeColor]\r\n if (!colors){\r\n throw Error(`color \"${themeColor}\" not found on theme \"${themeName(object)}`)\r\n }\r\n let resultColor = colors[resultTone]\r\n\r\n return resultColor\r\n}\r\n\r\nexport function themeColorToken(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let colorName = color == \"inherit\" ? \"neutral\" : color;\r\n let name = object ? themeName(object as ElementNode | Listener) : \"light\";\r\n let tokens = themeTokens(name);\r\n\r\n if (!object) {\r\n return tokens[colorName][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[colorName]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.toneBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n\r\n return tokens[colorName][resultTone]\r\n}\r\n"],"mappings":"AAEA,IAAIA,EAAoB,CACtB,UAAW,SACX,OAAQ,CACN,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,KAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,MAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAU,CACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,CACF,EACA,UAAW,CACT,UAAW,EACX,QAAS,EACT,MAAO,EACP,OAAQ,EACR,UAAW,EACX,QAAS,EACT,KAAM,EACN,QAAS,EACT,QAAS,CACX,EA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","names":["light","light_default","themes","light_default","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","section","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","i","offsetSize","origin","size","resultSize","offset","contextSize","object","node","themeSize","index","themeVars","ElementDensities","i","offsetDensity","origin","density","resultDensity","offset","contextDensity","object","node","themeDensity","index","getTheme","themeName","TONE_STEPS","light_default","ElementTones","i","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","offset","contextTone","object","node","biasContext","context","direction","bias","TONE_STEPS","themeColor","object","tone","color","themeVars","offsetTone","resultTone","getTheme","themeName","theme","contextTone","colors","themeColorToken","colorName","name","tokens","themeTokens"]}
1
+ {"version":3,"sources":["../src/light.ts","../src/theme.ts","../src/size.ts","../src/density.ts","../src/tone.ts"],"sourcesContent":["import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n \"primary\": [\r\n \"#ffffff\",\r\n \"#e3ecff\",\r\n \"#c6daff\",\r\n \"#aac8ff\",\r\n \"#8fb6ff\",\r\n \"#76a3ff\",\r\n \"#5f91fc\",\r\n \"#4a7ff4\",\r\n \"#386ee7\",\r\n \"#2a5ed7\",\r\n \"#1e4ec2\",\r\n \"#1440aa\",\r\n \"#0c3290\",\r\n \"#072674\",\r\n \"#041a57\",\r\n \"#020f38\",\r\n \"#010419\",\r\n \"#000000\"\r\n ],\r\n \"secondary\": [\r\n \"#ffffff\",\r\n \"#fce6ea\",\r\n \"#faced6\",\r\n \"#f7b5c2\",\r\n \"#f29db0\",\r\n \"#ec859e\",\r\n \"#e36e8d\",\r\n \"#d8597d\",\r\n \"#ca456e\",\r\n \"#b93460\",\r\n \"#a42351\",\r\n \"#8e1643\",\r\n \"#770b36\",\r\n \"#5f0529\",\r\n \"#46031d\",\r\n \"#2d0210\",\r\n \"#130104\",\r\n \"#000000\"\r\n ],\r\n \"info\": [\r\n \"#ffffff\",\r\n \"#dcf0f9\",\r\n \"#b7e1f6\",\r\n \"#90d2f1\",\r\n \"#6ac3eb\",\r\n \"#42b4e2\",\r\n \"#16a4d5\",\r\n \"#0094c4\",\r\n \"#0084b2\",\r\n \"#00739e\",\r\n \"#00638a\",\r\n \"#005476\",\r\n \"#004461\",\r\n \"#00354d\",\r\n \"#002638\",\r\n \"#001623\",\r\n \"#00070d\",\r\n \"#000000\"\r\n ],\r\n \"success\": [\r\n \"#ffffff\",\r\n \"#e3f3dc\",\r\n \"#c6e8b8\",\r\n \"#a9dd94\",\r\n \"#8ed171\",\r\n \"#75c450\",\r\n \"#61b635\",\r\n \"#51a51f\",\r\n \"#429304\",\r\n \"#358100\",\r\n \"#2a7000\",\r\n \"#215f00\",\r\n \"#194d00\",\r\n \"#123c00\",\r\n \"#0b2b00\",\r\n \"#051a00\",\r\n \"#010900\",\r\n \"#000000\"\r\n ],\r\n \"warning\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"attention\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"error\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"danger\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"highlight\": [\r\n \"#ffffff\",\r\n \"#f9f5cd\",\r\n \"#f4eb95\",\r\n \"#efe05a\",\r\n \"#e6d427\",\r\n \"#d3c100\",\r\n \"#bfad00\",\r\n \"#ab9b00\",\r\n \"#988900\",\r\n \"#857700\",\r\n \"#736600\",\r\n \"#615600\",\r\n \"#4f4600\",\r\n \"#3e3600\",\r\n \"#2c2700\",\r\n \"#1b1700\",\r\n \"#090700\",\r\n \"#000000\"\r\n ],\r\n \"neutral\": [\r\n \"#ffffff\",\r\n \"#ededed\",\r\n \"#dbdbdb\",\r\n \"#cacaca\",\r\n \"#bababa\",\r\n \"#ababab\",\r\n \"#9b9b9b\",\r\n \"#8d8d8d\",\r\n \"#7e7e7e\",\r\n \"#707070\",\r\n \"#636363\",\r\n \"#565656\",\r\n \"#484848\",\r\n \"#383838\",\r\n \"#282828\",\r\n \"#181818\",\r\n \"#080808\",\r\n \"#000000\"\r\n ]\r\n },\r\n baseTones: {\r\n highlight: 5,\r\n warning: 6,\r\n error: 8,\r\n danger: 8,\r\n secondary: 8,\r\n primary: 9,\r\n info: 8,\r\n success: 8,\r\n neutral: 8,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n densities: [0.75, 1, 1.5, 2, 2.5],\r\n darkBias: 1,\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\r\nimport { ThemeInput, ThemeVars } from \"./types.js\";\r\nimport light from \"./light.js\";\r\n\r\nconst themes: Record<string, ThemeInput> = {\r\n light: JSON.parse(JSON.stringify(light)),\r\n dark: createDark(light),\r\n};\r\n\r\nfunction colorSteps(input: ThemeInput): number {\r\n const firstColor = Object.keys(input.colors)[0];\r\n return firstColor ? input.colors[firstColor].length : 0;\r\n}\r\n\r\n// --- Validation ---\r\n\r\nfunction validateTheme(partial: Partial<ThemeInput>): void {\r\n for (let key in partial) {\r\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\r\n throw new Error(`Invalid key: ${key}`);\r\n }\r\n }\r\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\r\n throw new Error(`fontSize must be array of string`);\r\n }\r\n if (partial.densities) {\r\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\r\n throw new Error(`densities must be array of number`);\r\n }\r\n }\r\n if (\"custom\" in partial) {\r\n const custom = partial.custom!;\r\n if (typeof custom !== \"object\" || custom === null) {\r\n throw new Error(`Invalid custom property: must be an object`);\r\n }\r\n }\r\n}\r\n\r\n// --- Deep Merge ---\r\n\r\nfunction deepMerge(target: any, source: any): void {\r\n for (const key in source) {\r\n if (\r\n source[key] &&\r\n typeof source[key] === \"object\" &&\r\n !Array.isArray(source[key])\r\n ) {\r\n target[key] ??= {};\r\n deepMerge(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n}\r\n\r\n// --- Builders (pure functions) ---\r\n\r\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\r\n const styles: Record<string, string | number> = {};\r\n const toneSteps = colorSteps(input);\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const colorName in input.colors) {\r\n [...Array(toneSteps).keys()].forEach(i =>\r\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\r\n );\r\n }\r\n } else if (key === \"fontSizes\") {\r\n [...Array(8).keys()].forEach(i =>\r\n styles[`--fontSize-${i}`] = input.fontSizes[i]\r\n );\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n styles[`--${key}-${k.replace(\"/\", \"_\")}`] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n let text = \"\";\r\n for (const prop in styles) {\r\n text += ` ${prop}: ${styles[prop]};\\n`;\r\n }\r\n return `[data-theme=\"${name}\"] {\\n${text}}`;\r\n}\r\n\r\n// --- Public API ---\r\n\r\nexport function getTheme(name: string): ThemeInput {\r\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\r\n return themes[name];\r\n}\r\n\r\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\r\n validateTheme(input);\r\n if (!themes[name]) themes[name] = structuredClone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = structuredClone(source)\r\n dark.direction = \"lighten\"\r\n for (let name in dark.colors) {\r\n dark.colors[name].reverse()\r\n dark.baseTones[name] = dark.colors[name].length - 1 - dark.baseTones[name]\r\n }\r\n return dark\r\n}\r\n\r\nexport function themeTokens(name: string): Record<string, any> {\r\n let input = getTheme(name)\r\n const toneSteps = colorSteps(input);\r\n let tokens: Record<string, any> = {};\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\r\n tokens[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n tokens.fontSizes = input.fontSizes;\r\n } else if (key === \"densities\") {\r\n tokens.densities = input.densities;\r\n } else {\r\n tokens[key] = {} as any;\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n tokens[key][k] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\r\n let input = getTheme(\"light\")\r\n const toneSteps = colorSteps(input);\r\n let theme = {} as ThemeVars;\r\n\r\n for (const key in input) {\r\n const section = key as keyof ThemeVars;\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\r\n theme[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n theme[section] = {} as ThemeVars[typeof section];\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n (theme[section] as Record<string, string>)[k] = `var(--${section as string}-${k.replace(\"/\", \"_\")})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\r\n","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { themeVars } from \"./theme.js\";\n\nconst ElementSizes = [\"inherit\"];\n\n[...Array(8).keys()].forEach(i =>{\n ElementSizes.push(`decrease-${i}`)\n ElementSizes.push(`increase-${i}`)\n})\n\nexport type ElementSize = typeof ElementSizes[number];\n\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\n\n if (!ElementSizes.includes(size!)) {\n throw Error(`size name \"${size}\" invalid`)\n }\n let resultSize: number\n if (size == \"inherit\") {\n resultSize = origin as number\n } else if (size?.startsWith(\"increase-\")) {\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\n resultSize = origin + offset;\n } else if (size?.startsWith(\"decrease-\")) {\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\n resultSize = origin - offset;\n } else {\n resultSize = origin\n }\n return Math.max(0, Math.min(8, resultSize))\n}\n\nfunction contextSize(object: ElementNode | Listener | null): number {\n\n if (!object) return 2\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataSize\"))) {\n node = node.parent as ElementNode\n }\n\n let size = 2\n\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\n typeof object == \"function\" && node.attributes.addListener(\"dataSize\", object)\n }\n return size\n}\n\n\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\n let index = offsetSize(contextSize(object), size)\n return themeVars().fontSizes[index]\n}","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.addListener(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, themeTokens, getTheme, themeName } from \"./theme.js\"\r\nimport light from \"./light.js\";\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\r\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\r\n let newIndex = tone <= midpoint ? tone + level : tone - level\r\n newIndex = newIndex < 0 || newIndex > TONE_STEPS - 1 ? - newIndex : newIndex\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction offsetTone(originTone: number, tone: ElementTone = \"inherit\"): number {\r\n\r\n if (typeof tone == \"number\") return tone\r\n\r\n if (tone == \"inherit\") return originTone\r\n\r\n if (!ElementTones.includes(tone!)) {\r\n throw Error(`tone name \"${tone}\" invalid`)\r\n }\r\n\r\n if (tone.startsWith(\"increase-\")) {\r\n let offset = parseInt(tone.replace(\"increase-\", \"\"), 10)\r\n return adjustTone(originTone, offset);\r\n\r\n } else if (tone.startsWith(\"decrease-\")) {\r\n let offset = parseInt(tone.replace(\"decrease-\", \"\"), 10)\r\n return adjustTone(originTone, - offset);\r\n\r\n } else if (tone.startsWith(\"shift-\")) {\r\n let offset = parseInt(tone.replace(\"shift-\", \"\"), 10)\r\n return shiftTone(originTone, offset);\r\n\r\n } else {\r\n return originTone\r\n }\r\n}\r\n\r\nfunction contextTone(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 0\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTone\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let tone = 0\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTone\")) {\r\n tone = offsetTone(tone, node.attributes.get(\"dataTone\"))\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTone\", object)\r\n }\r\n return tone\r\n}\r\n\r\nfunction themeTone(object: ElementNode | Listener, tone: ElementTone = \"inherit\"): number {\r\n\r\n return offsetTone(contextTone(object), tone)\r\n}\r\n\r\nfunction biasContext(context: number, direction: string, bias: number): number {\r\n if (bias <= 0) return context\r\n if (direction === \"lighten\" && context === 0) return bias\r\n if (direction === \"darken\" && context === TONE_STEPS - 1) return TONE_STEPS - 1 - bias\r\n return context\r\n}\r\n\r\nexport function themeColor(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let themeColor = color == \"inherit\" ? \"neutral\" : color;\r\n\r\n if (!object) {\r\n return themeVars()[themeColor][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(themeName(object)).baseTones[themeColor]\r\n } else {\r\n let theme = getTheme(themeName(object))\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n let colors = themeVars()[themeColor]\r\n if (!colors){\r\n throw Error(`color \"${themeColor}\" not found on theme \"${themeName(object)}`)\r\n }\r\n let resultColor = colors[resultTone]\r\n\r\n return resultColor\r\n}\r\n\r\nexport function themeColorToken(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let colorName = color == \"inherit\" ? \"neutral\" : color;\r\n let name = object ? themeName(object as ElementNode | Listener) : \"light\";\r\n let tokens = themeTokens(name);\r\n\r\n if (!object) {\r\n return tokens[colorName][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[colorName]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n\r\n return tokens[colorName][resultTone]\r\n}\r\n"],"mappings":"AAEA,IAAIA,EAAoB,CACtB,UAAW,SACX,OAAQ,CACN,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,KAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,MAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAU,CACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,CACF,EACA,UAAW,CACT,UAAW,EACX,QAAS,EACT,MAAO,EACP,OAAQ,EACR,UAAW,EACX,QAAS,EACT,KAAM,EACN,QAAS,EACT,QAAS,CACX,EA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","names":["light","light_default","themes","light_default","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","section","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","i","offsetSize","origin","size","resultSize","offset","contextSize","object","node","themeSize","index","themeVars","ElementDensities","i","offsetDensity","origin","density","resultDensity","offset","contextDensity","object","node","themeDensity","index","getTheme","themeName","TONE_STEPS","light_default","ElementTones","i","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","offset","contextTone","object","node","biasContext","context","direction","bias","TONE_STEPS","themeColor","object","tone","color","themeVars","offsetTone","resultTone","getTheme","themeName","theme","contextTone","colors","themeColorToken","colorName","name","tokens","themeTokens"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@domphy/theme",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "Domphy Design System",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",