amateras 0.15.1 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +9 -9
  2. package/build/core.js +1 -1
  3. package/build/css-colors.js +1 -0
  4. package/build/css-fluent.js +1 -0
  5. package/build/css-fluents.js +1 -0
  6. package/build/css-static-colors.js +1 -0
  7. package/build/css-variables.js +1 -0
  8. package/build/css.js +1 -1
  9. package/build/for.js +1 -1
  10. package/build/i18n.js +1 -1
  11. package/build/if.js +1 -1
  12. package/build/import-map.js +1 -1
  13. package/build/match.js +1 -1
  14. package/build/meta.js +1 -1
  15. package/build/prefetch.js +1 -1
  16. package/build/router.js +1 -1
  17. package/build/signal.js +1 -1
  18. package/build/ui.js +1 -1
  19. package/build/utils.js +1 -1
  20. package/build/widget.js +1 -1
  21. package/package.json +4 -4
  22. package/packages/core/src/index.ts +19 -44
  23. package/packages/core/src/lib/hmr.ts +1 -1
  24. package/packages/core/src/lib/virtual_scroll.ts +1 -1
  25. package/packages/core/src/structure/ElementProto.ts +18 -5
  26. package/packages/core/src/structure/Proto.ts +1 -1
  27. package/packages/core/src/structure/ProtoProcess.ts +45 -0
  28. package/packages/css/package.json +4 -2
  29. package/packages/css/src/ext/fluent.ts +3 -3
  30. package/packages/css/src/ext/fluents/border.ts +49 -0
  31. package/packages/css/src/ext/fluents/box.ts +135 -0
  32. package/packages/css/src/ext/fluents/container.ts +3 -0
  33. package/packages/css/src/ext/fluents/flex.ts +32 -0
  34. package/packages/css/src/ext/fluents/flexItem.ts +20 -0
  35. package/packages/css/src/ext/fluents/font.ts +18 -0
  36. package/packages/css/src/ext/fluents/grid.ts +15 -0
  37. package/packages/css/src/ext/fluents/hover.ts +6 -0
  38. package/packages/css/src/ext/fluents/media.ts +12 -0
  39. package/packages/css/src/ext/fluents.ts +9 -0
  40. package/packages/css/src/ext/static-colors.ts +2 -0
  41. package/packages/css/src/ext/variables/colors.ts +32 -0
  42. package/packages/css/src/ext/variables/general.ts +4 -0
  43. package/packages/css/src/ext/variables/lineHeight.ts +14 -0
  44. package/packages/css/src/ext/variables/radius.ts +13 -0
  45. package/packages/css/src/ext/variables/text.ts +17 -0
  46. package/packages/css/src/ext/variables/weight.ts +12 -0
  47. package/packages/css/src/ext/variables.ts +14 -0
  48. package/packages/css/src/index.ts +39 -5
  49. package/packages/css/src/lib/spacingFn.ts +3 -0
  50. package/packages/css/src/lib/static-colors/amber.ts +11 -0
  51. package/packages/css/src/lib/static-colors/blackwhite.ts +2 -0
  52. package/packages/css/src/lib/static-colors/blue.ts +11 -0
  53. package/packages/css/src/lib/static-colors/cyan.ts +11 -0
  54. package/packages/css/src/lib/static-colors/emerald.ts +11 -0
  55. package/packages/css/src/lib/static-colors/fuchsia.ts +11 -0
  56. package/packages/css/src/lib/static-colors/gray.ts +11 -0
  57. package/packages/css/src/lib/static-colors/green.ts +11 -0
  58. package/packages/css/src/lib/static-colors/indigo.ts +11 -0
  59. package/packages/css/src/lib/static-colors/lime.ts +11 -0
  60. package/packages/css/src/lib/static-colors/neutral.ts +11 -0
  61. package/packages/css/src/lib/static-colors/orange.ts +11 -0
  62. package/packages/css/src/lib/static-colors/pink.ts +11 -0
  63. package/packages/css/src/lib/static-colors/purple.ts +11 -0
  64. package/packages/css/src/lib/static-colors/red.ts +11 -0
  65. package/packages/css/src/lib/static-colors/rose.ts +11 -0
  66. package/packages/css/src/lib/static-colors/sky.ts +11 -0
  67. package/packages/css/src/lib/static-colors/slate.ts +11 -0
  68. package/packages/css/src/lib/static-colors/stone.ts +11 -0
  69. package/packages/css/src/lib/static-colors/teal.ts +11 -0
  70. package/packages/css/src/lib/static-colors/violet.ts +11 -0
  71. package/packages/css/src/lib/static-colors/yellow.ts +11 -0
  72. package/packages/css/src/lib/static-colors/zinc.ts +11 -0
  73. package/packages/css/src/lib/static-colors.ts +23 -0
  74. package/packages/css/src/lib/valueFn.ts +1 -0
  75. package/packages/css/src/structure/$CSSFluent.ts +81 -25
  76. package/packages/for/src/index.ts +1 -1
  77. package/packages/for/src/structure/For.ts +1 -1
  78. package/packages/hmr/src/index.ts +1 -1
  79. package/packages/i18n/package.json +2 -1
  80. package/packages/i18n/src/index.ts +4 -2
  81. package/packages/i18n/src/structure/I18n.ts +27 -24
  82. package/packages/i18n/src/structure/I18nDictionary.ts +9 -6
  83. package/packages/i18n/src/structure/I18nSession.ts +21 -3
  84. package/packages/i18n/src/structure/I18nTranslation.ts +4 -2
  85. package/packages/i18n/src/types.ts +43 -34
  86. package/packages/if/src/index.ts +2 -2
  87. package/packages/match/src/index.ts +1 -1
  88. package/packages/meta/src/index.ts +13 -4
  89. package/packages/prefetch/src/index.ts +21 -1
  90. package/packages/router/src/index.ts +10 -8
  91. package/packages/router/src/structure/NavLink.ts +10 -4
  92. package/packages/router/src/structure/Route.ts +5 -0
  93. package/packages/router/src/structure/RouteNode.ts +2 -2
  94. package/packages/router/src/structure/Router.ts +30 -24
  95. package/packages/signal/src/index.ts +8 -6
  96. package/packages/ui/src/index.ts +4 -1
  97. package/packages/ui/src/lib/matrix.ts +27 -0
  98. package/packages/ui/src/lib/slideshowAnimations.ts +2 -1
  99. package/packages/ui/src/lib/toCSS.ts +1 -1
  100. package/packages/ui/src/structure/Badge.ts +7 -10
  101. package/packages/ui/src/structure/Card.ts +27 -5
  102. package/packages/ui/src/structure/Carousel.ts +462 -0
  103. package/packages/ui/src/structure/Combobox/ComboboxChips.ts +15 -12
  104. package/packages/ui/src/structure/Container.ts +25 -0
  105. package/packages/ui/src/structure/ContextMenu.ts +145 -31
  106. package/packages/ui/src/structure/Field.ts +9 -6
  107. package/packages/ui/src/structure/Icon.ts +15 -2
  108. package/packages/ui/src/structure/Progress.ts +72 -0
  109. package/packages/ui/src/structure/Select/Select.ts +1 -2
  110. package/packages/ui/src/structure/Select/SelectValue.ts +1 -1
  111. package/packages/ui/src/structure/Slide.ts +7 -1
  112. package/packages/ui/src/structure/Slideshow.ts +6 -1
  113. package/packages/ui/src/structure/Tabs.ts +19 -19
  114. package/packages/ui/src/structure/TextArea.ts +2 -2
  115. package/packages/ui/src/structure/TextBlock.ts +2 -1
  116. package/packages/ui/src/structure/Waterfall.ts +1 -1
  117. package/packages/ui/src/style/content_style.ts +3 -3
  118. package/packages/ui/src/style/input_style.ts +14 -0
  119. package/packages/utils/src/lib/camelToDashedStyle.ts +1 -0
  120. package/packages/utils/src/lib/match.ts +28 -0
  121. package/packages/utils/src/lib/merge.ts +12 -0
  122. package/packages/utils/src/lib/tuple.ts +1 -0
  123. package/packages/utils/src/lib/utils.ts +5 -1
  124. package/packages/widget/src/index.ts +1 -1
  125. package/tsconfig.json +1 -0
package/README.md CHANGED
@@ -64,18 +64,18 @@ $.render(Counter, 'body');
64
64
 
65
65
  | Modules | Size | Gziped | Description |
66
66
  | --- | --- | --- | --- |
67
- | core | 8.33 kB | 3.31 kB | Core module |
67
+ | core | 8.96 kB | 3.54 kB | Core module |
68
68
  | widget | 0.45 kB | 0.14 kB | Component module |
69
- | signal | 3.02 kB | 1.10 kB | Reactive data module |
70
- | store | 0.51 kB | 0.19 kB | Access data between widgets |
71
- | css | 1.64 kB | 0.72 kB | CSS-in-JS module |
69
+ | signal | 3.05 kB | 1.11 kB | Reactive data module |
70
+ | store | 0.51 kB | 0.18 kB | Access data between widgets |
71
+ | css | 1.90 kB | 0.79 kB | CSS-in-JS module |
72
72
  | for | 1.25 kB | 0.41 kB | For loop control-flow |
73
- | if | 4.32 kB | 1.50 kB | If/Else/ElseIf control-flow |
73
+ | if | 4.36 kB | 1.51 kB | If/Else/ElseIf control-flow |
74
74
  | match | 1.51 kB | 0.45 kB | Match/Case/Default control-flow |
75
- | router | 6.70 kB | 2.42 kB | Router module |
76
- | i18n | 3.38 kB | 1.14 kB | Translation module |
77
- | idb | 5.37 kB | 2.01 kB | IndexedDB module |
78
- | markdown | 7.48 kB | 2.91 kB | Markdown to HTML module |
75
+ | router | 6.97 kB | 2.51 kB | Router module |
76
+ | i18n | 3.82 kB | 1.27 kB | Translation module |
77
+ | idb | 5.35 kB | 2.00 kB | IndexedDB module |
78
+ | markdown | 7.49 kB | 2.90 kB | Markdown to HTML module |
79
79
  | prefetch | 1.01 kB | 0.46 kB | SSR data prefetch |
80
80
  | meta | 0.17 kB | 0.08 kB | SSR `meta` tag manager |
81
81
  | ui | 0.00 kB | 0.00 kB | UI components |
package/build/core.js CHANGED
@@ -1 +1 @@
1
- import{Utils as t}from"@amateras/utils";const e=window,s=document,i=t=>!t||t(),o=t=>!1,r=/* @__PURE__ */Symbol("ProtoType"),n=/* @__PURE__ */Symbol("Statement"),l=/* @__PURE__ */Symbol("Signal");class h{static disposers=/* @__PURE__ */new Set;promises=/* @__PURE__ */new Set;root;static initials=/* @__PURE__ */new Set;constructor(e){t.forEach(h.initials,e=>{const s=e(this);s&&t.assign(this,s)}),this.root=e,e.listen("dispose",()=>this.dispose())}dispose(){this.promises.clear(),this.root=t.Null,t.forEach(h.disposers,t=>t(this))}static assign(t){this.initials.add(t)}asyncTask(t){return this.promises.add(t),t.finally(()=>this.promises.delete(t)),t}}class a{static proto=t.Null;static[r]="Proto";static[n]=!1;static eventMap=/* @__PURE__ */new WeakMap;layout;parent=t.Null;global=a.proto?.global??new h(this);sibling=t.Null;firstProto=t.Null;lastProto=t.Null;builded=!1;visible=!0;virtual=!1;constructor(e){this.layout=e??t.Null}dispose(e=!0){this.dispatch("dispose",[this]),e&&t.forEach(this.protos,t=>t.dispose()),a.eventMap.delete(this),this.global=t.Null,this.sibling=t.Null,this.firstProto=t.Null,this.lastProto=t.Null,this.parent=t.Null,this.layout=t.Null}get children(){return t.map(this.protos,t=>t.constructor[n]?t.children:t).flat()}get visibleChildren(){return this.children.filter(t=>t.visible)}get protos(){let t=[],e=this.firstProto;if(e){let s=e;for(;s;)t.push(s),s=s.sibling}return t}append(...e){t.forEach(e,e=>{if(e.parent!==this&&e.parent?.removeProtos(e),this.lastProto){if(this.lastProto===e)return;this.firstProto===e&&(this.firstProto=e.sibling),e.sibling=t.Null,this.lastProto.sibling=e,this.lastProto=e}else this.firstProto=e,this.lastProto=e;e.parent=this,e.global=this.global})}replaceProtos(...t){this.clear(),this.processProtos(...t)}replace(t,...e){const s=this.protos;s.splice(s.indexOf(t),1,...e),this.processProtos(...s)}insert(t,e=-1){if(0===e)this.firstProto&&(t.sibling=this.firstProto),this.firstProto=t;else{let s=this.protos,i=e<0?s.length+e+1:e;s.splice(i,0,t),this.processProtos(...s)}t.parent=this,t.global=this.global}remove(){this.parent?.removeProtos(this)}removeProtos(...e){let s=new Set(this.protos);t.forEach(e,t=>{t.parent=null,t.sibling=null,s.delete(t)}),this.processProtos(...s)}processProtos(...e){let s=t.Null;e.length?t.forEach(e,(e,i)=>{0===i&&(this.firstProto=e),s&&(s.sibling=e),e.sibling=t.Null,s=e,e.parent=this}):this.firstProto=t.Null,this.lastProto=s}build(e=!0,s=!0){return s&&this.clear(!0),$.context(a,this,()=>this.layout?.(this)),this.builded=!0,e&&t.forEach(this.protos,t=>{t.build()}),this.dispatch("builded",[this]),this}toString(){return t.map(this.protos.filter(t=>t.visible),t=>`${t}`).join("")}toDOM(e=!0){let s=[];return t.forEach(this.protos,t=>{t.visible?e&&s.push(...t.toDOM()):t.removeNode()}),s}removeNode(){t.forEach(this.protos,t=>t.removeNode())}clear(e=!1){let s=this.protos;this.removeProtos(...s),e&&t.forEach(s,t=>t.dispose())}findAbove(e){let s=this.parent;return s?e(s)?s:s.findAbove(e):t.Null}findBelow(e){for(let t of this.protos){if(e(t))return t;let s=t.findBelow(e);if(s)return s}return t.Null}findBelowAll(t){let e=[];for(let s of this.protos)t(s)&&e.push(s),e.push(...s.findBelowAll(t));return e}mutate(){}get text(){return this.children.map(t=>t.text).join("")}get listeners(){return a.eventMap.get(this)}dispatch(e,s,i){let o=this.listeners?.[e],r=!1;if(i?.bubbles){let t=this.parent?.dispatch(e,s,i);r||(r=t??!1)}return t.forEach(o,t=>{let e=t(...s)??!1;r||(r=e)}),r}listen(t,e){let s=this.listeners??{};a.eventMap.set(this,s);let i=s[t]??/* @__PURE__ */new Set;s[t]=i,i.add(e)}}class d extends a{node=t.Null;constructor(t){super(t)}dispose(){super.dispose(),this.node=t.Null}inDOM(){return!!i()&&document.contains(this.node)}removeNode(){this.node?.remove()}DOMProcess(){let e=this.node;if(e){let s=this.protos,i=t.map(s.filter(t=>t.visible),t=>t.toDOM()).flat(),o=t.Null;t.forEach(i,(s,r)=>{let n=e.childNodes[r];n!==s&&(o=i.includes(n)?e.childNodes[r+1]??t.Null:n??t.Null,e.insertBefore(s,o))})}}}const u=["img","hr","br","input","link","meta"];class c extends d{tagname;#t={};static[r]="Element";#e="";__props__;constructor(t,e,s){super(()=>s?.(this)),this.tagname=t,this.__props__=e}static attrProcess(e,s){t.forEach(t.entries(s),([s,i])=>{for(let o of $.process.attr){let r=o(s,i,e);if(!t.isUndefined(r))return}e.attr(s,i)})}dispose(){super.dispose(),this.layout=null}build(e){return this.__props__&&(this.props(this.__props__),this.__props__=t.Null),super.build(e),this}props({...e}){let{class:s,...i}=e;s&&this.addClass(...s.split(" ")),t.forEach(t.entries(i),([e,s])=>{e.startsWith("on")&&t.isFunction(s)&&(this.on(e.replace("on",""),s),delete i[e])}),c.attrProcess(this,i)}on(t,e,s){let i=i=>{i.addEventListener(t,e,s),this.listen("dispose",()=>this.node?.removeEventListener(t,e))};this.node&&i(this.node),this.listen("dom",i)}toString(){return this.parseHTML()}parseHTML(e){let s=this.tagname,i=e?.children??(this.#e||t.map(this.protos,t=>t.visible?`${t}`:"").join("")),o=e?.attr??t.map(t.entries(this.#t),([t,e])=>e.length?`${t}="${e}"`:t).join(" "),r=o.length?" "+o:"";return u.includes(s)?`<${s}${r} />`:`<${s}${r}>${i}</${s}>`}toDOM(e=!0){super.toDOM();let s=!!this.node,i=this.node??document.createElement(this.tagname);return this.node=i,e&&(this.#e&&!s?this.node.innerHTML=this.#e:s&&!this.virtual||this.DOMProcess()),s||t.forEach(t.entries(this.#t),([t,e])=>i.setAttribute(t,e)),s||this.dispatch("dom",[this.node]),[i]}innerHTML(t){this.#e=t,this.node&&(this.node.innerHTML=t)}attr(e,s){return arguments.length?t.isUndefined(s)?this.#t[e]??t.Null:(t.isNull(s)?(delete this.#t[e],this.node?.removeAttribute(e)):(this.#t[e]=s,this.node?.setAttribute(e,s)),this):this.#t}hasAttr(e){return!t.isNull(this.attr(e))}addClass(...t){this.token("add","class",...t),this.node?.classList.add(...t)}removeClass(...t){this.token("delete","class",...t),this.node?.classList.remove(...t)}style(e){let s=()=>this.node&&t.assign(this.node.style,e);s(),this.node||this.listen("dom",s)}token(e,s,...i){let o=this.#t[s],r=new Set(o?.split(" ")??[]);t.forEach(i,t=>r[e](t)),this.#t[s]=t.arrayFrom(r).join(" ")}}class p extends d{#s;constructor(t){super(),this.#s=t}get content(){return this.#s}set content(t){this.#s=t,this.node&&(this.node.textContent=t)}toString(){return this.#s}toDOM(){if(super.toDOM(),this.node)return[this.node];let t=new Text(this.#s);return this.node=t,this.dispatch("dom",[this.node]),[t]}get text(){return this.#s}}class f extends d{constructor(t){super(t),i()&&(this.node=new Text)}toDOM(){return[this.node,...super.toDOM()]}removeNode(){super.removeNode(),t.forEach(this.protos,t=>t.removeNode())}}const m=t=>{i()&&(document.addEventListener("scroll",()=>b(t),!0),t.listen("dom",e=>new ResizeObserver(()=>b(t)).observe(e)),t.listen("mutate",()=>b(t)),t.virtual=!0)},b=e=>{if(!e.inDOM())return;if(!e.node)return;const s=e.node?.getBoundingClientRect();t.forEach(e.children,e=>{if(!t.isInstanceof(e,c))return;if(!e.node)return;if(e.node.contains(document.activeElement))return e.visible=!0;const{translate:i}=e.node.style,o=i.split(" ")[1],r=s.top+parseInt(o);r+e.node.offsetHeight<-200||r>outerHeight+200?e.visible=!1:e.visible=!0}),e.toDOM()};function g(e,...s){const i=a.proto,o=[],r=t=>{e&&i?.append(t),o.push(t)};for(let a of v.process.craft){let e=a(...s);if(!t.isUndefined(e))return r(e),e}const[n,l,h]=s;if(t.isInstanceof(n,a))return r(n),n;if(t.isString(n)){let e=t.isFunction(l)?[,l]:[l,h],s=new c(n,...e);return r(s),s}if(t.isFunction(n)){let e=l?[l,h]:[h];t.isInstanceof(n.prototype,c)&&(e=t.isFunction(l)?[{},l]:[l,h]);let s=new n(...e);if(t.isInstanceof(s,a))return r(s),s}if(t.isArray(n)){let e=e=>{for(let i of v.process.text){let s=i(e);if(!t.isUndefined(s))return r(s)}let s=t.isUndefined(e)?t.Null:new p(`${e}`);s&&r(s)},[i,...n]=s;return i.raw?t.forEach(i,(s,i)=>{let o=s.length?new p(s):t.Null,l=n[i];o&&r(o),e(l)}):t.forEach(i,t=>e(t)),o}}function v(...t){return g(!0,...t)}var N;(N=v||(v={})).process={craft:/* @__PURE__ */new Set,text:/* @__PURE__ */new Set,attr:/* @__PURE__ */new Set},N.craft=(...t)=>g(!1,...t),N.render=async(t,e)=>{let s=N(t),o=s.build().toDOM(),r=document.querySelector(e);r&&(await Promise.all(s.global.promises),r?.replaceChildren(...o),i()&&document.querySelector("style#__ssr__")?.remove())},N.context=(t,e,s)=>{let i=t.proto;t.proto=e,s(),t.proto=i},N.match=(t,e)=>{var s=/* @__PURE__ */new Map,i=/* @__PURE__ */Symbol("default"),o={case:(t,e)=>(s.set(t,e),o),default:t=>(s.set(i,t),o)};return e(o),s.get(t)?.()??s.get(i)?.()},N.tuple=(...t)=>t,N.async=t=>a.proto?.global.asyncTask(t(a.proto))??t(a.proto),N.stylesheet=i()?new CSSStyleSheet:t.Null,N.styleMap=/* @__PURE__ */new Map,N.style=(e,s)=>{let i=t.toArray(s);if(e){let s=N.styleMap.get(e)??/* @__PURE__ */new Set;t.forEach(i,t=>s.add(t)),N.styleMap.set(e,s)}N.stylesheet&&t.forEach(i,t=>N.stylesheet.insertRule(t))},N.stylesheet&&document.adoptedStyleSheets.push(N.stylesheet),N.stylesheet?.insertRule("@layer base, ui"),globalThis.$=v;export{v as $,c as ElementProto,h as GlobalState,d as NodeProto,a as Proto,f as ProxyProto,p as TextProto,m as VirtualScroll,s as _document,e as _window,i as onclient,o as onserver,r as symbol_ProtoType,l as symbol_Signal,n as symbol_Statement};
1
+ import{Utils as t}from"@amateras/utils";const e=window,s=document,i=t=>!t||t(),o=t=>!1,r=/* @__PURE__ */Symbol("ProtoType"),n=/* @__PURE__ */Symbol("Statement"),l=/* @__PURE__ */Symbol("Signal");class a{static disposers=/* @__PURE__ */new Set;promises=/* @__PURE__ */new Set;root;static initials=/* @__PURE__ */new Set;constructor(e){t.forEach(a.initials,e=>{const s=e(this);s&&t.assign(this,s)}),this.root=e,e.listen("dispose",()=>this.dispose())}dispose(){this.promises.clear(),this.root=t.Null,t.forEach(a.disposers,t=>t(this))}static assign(t){this.initials.add(t)}asyncTask(t){return this.promises.add(t),t.finally(()=>this.promises.delete(t)),t}}class h{static proto=t.Null;static[r]="Proto";static[n]=!1;static eventMap=/* @__PURE__ */new WeakMap;layout;parent=t.Null;global=h.proto?.global??new a(this);sibling=t.Null;firstProto=t.Null;lastProto=t.Null;builded=!1;visible=!0;virtual=!1;constructor(e){this.layout=e??t.Null}dispose(e=!0){this.dispatch("dispose",[this]),e&&t.forEach(this.protos,t=>t.dispose()),h.eventMap.delete(this),this.global=t.Null,this.sibling=t.Null,this.firstProto=t.Null,this.lastProto=t.Null,this.parent=t.Null,this.layout=t.Null}get children(){return t.map(this.protos,t=>t.constructor[n]?t.children:t).flat()}get visibleChildren(){return this.children.filter(t=>t.visible)}get protos(){let t=[],e=this.firstProto;if(e){let s=e;for(;s;)t.push(s),s=s.sibling}return t}append(...e){t.forEach(e,e=>{if(e.parent!==this&&e.parent?.removeProtos(e),this.lastProto){if(this.lastProto===e)return;this.firstProto===e&&(this.firstProto=e.sibling),e.sibling=t.Null,this.lastProto.sibling=e,this.lastProto=e}else this.firstProto=e,this.lastProto=e;e.parent=this,e.global=this.global})}replaceProtos(...t){this.clear(),this.processProtos(...t)}replace(t,...e){const s=this.protos;s.splice(s.indexOf(t),1,...e),this.processProtos(...s)}insert(t,e=-1){if(0===e)this.firstProto&&(t.sibling=this.firstProto),this.firstProto=t;else{let s=this.protos,i=e<0?s.length+e+1:e;s.splice(i,0,t),this.processProtos(...s)}t.parent=this,t.global=this.global}remove(){this.parent?.removeProtos(this)}removeProtos(...e){let s=new Set(this.protos);t.forEach(e,t=>{t.parent=null,t.sibling=null,s.delete(t)}),this.processProtos(...s)}processProtos(...e){let s=t.Null;e.length?t.forEach(e,(e,i)=>{0===i&&(this.firstProto=e),s&&(s.sibling=e),e.sibling=t.Null,s=e,e.parent=this}):this.firstProto=t.Null,this.lastProto=s}build(e=!0,s=!0){return s&&this.clear(!0),$.context(this,()=>this.layout?.(this)),this.builded=!0,e&&t.forEach(this.protos,t=>{t.build()}),this.dispatch("builded",[this]),this}toString(){return t.map(this.protos.filter(t=>t.visible),t=>`${t}`).join("")}toDOM(e=!0){let s=[];return t.forEach(this.protos,t=>{t.visible?e&&s.push(...t.toDOM()):t.removeNode()}),s}removeNode(){t.forEach(this.protos,t=>t.removeNode())}clear(e=!1){let s=this.protos;this.removeProtos(...s),e&&t.forEach(s,t=>t.dispose())}findAbove(e){let s=this.parent;return s?e(s)?s:s.findAbove(e):t.Null}findBelow(e){for(let t of this.protos){if(e(t))return t;let s=t.findBelow(e);if(s)return s}return t.Null}findBelowAll(t){let e=[];for(let s of this.protos)t(s)&&e.push(s),e.push(...s.findBelowAll(t));return e}mutate(){}get text(){return this.children.map(t=>t.text).join("")}get listeners(){return h.eventMap.get(this)}dispatch(e,s,i){let o=this.listeners?.[e],r=!1;if(i?.bubbles){let t=this.parent?.dispatch(e,s,i);r||(r=t??!1)}return t.forEach(o,t=>{let e=t(...s)??!1;r||(r=e)}),r}listen(t,e){let s=this.listeners??{};h.eventMap.set(this,s);let i=s[t]??/* @__PURE__ */new Set;s[t]=i,i.add(e)}}class d extends h{node=t.Null;constructor(t){super(t)}dispose(){super.dispose(),this.node=t.Null}inDOM(){return!!i()&&document.contains(this.node)}removeNode(){this.node?.remove()}DOMProcess(){let e=this.node;if(e){let s=this.protos,i=t.map(s.filter(t=>t.visible),t=>t.toDOM()).flat(),o=t.Null;t.forEach(i,(s,r)=>{let n=e.childNodes[r];n!==s&&(o=i.includes(n)?e.childNodes[r+1]??t.Null:n??t.Null,e.insertBefore(s,o))})}}}const c=["img","hr","br","input","link","meta"];class u extends d{tagname;#t={};static[r]="Element";#e="";__props__;constructor(t,e,s){super(()=>s?.(this)),this.tagname=t,this.__props__=e}static attrProcess(e,s){t.forEach(t.entries(s),([s,i])=>{for(let o of $.middleware.attr){let r=o(s,i,e);if(!t.isUndefined(r))return}e.attr(s,i)})}dispose(){super.dispose(),this.layout=null}build(e){return this.__props__&&(this.props(this.__props__),this.__props__=t.Null),super.build(e),this}props({...e}){let{class:s,...i}=e;s&&this.addClass(...s.split(" ")),t.forEach(t.entries(i),([e,s])=>{e.startsWith("on")&&t.isFunction(s)&&(this.on(e.replace("on",""),s),delete i[e])}),u.attrProcess(this,i)}on(t,e,s){let i=i=>{i.addEventListener(t,e,s),this.listen("dispose",()=>this.node?.removeEventListener(t,e))};this.node&&i(this.node),this.listen("dom",i)}off(t,e,s){this.node?.removeEventListener(t,e,s)}toString(){return this.parseHTML()}parseHTML(e){let s=this.tagname,i=e?.children??(this.#e||t.map(this.protos,t=>t.visible?`${t}`:"").join("")),o=e?.attr??t.map(t.entries(this.#t),([t,e])=>e.length?`${t}="${e}"`:t).join(" "),r=o.length?" "+o:"";return c.includes(s)?`<${s}${r} />`:`<${s}${r}>${i}</${s}>`}toDOM(e=!0){super.toDOM();let s=!!this.node,i=this.node??document.createElement(this.tagname);return this.node=i,e&&(this.#e&&!s?this.node.innerHTML=this.#e:s&&!this.virtual||this.DOMProcess()),s||t.forEach(t.entries(this.#t),([t,e])=>i.setAttribute(t,e)),s||this.dispatch("dom",[this.node]),[i]}innerHTML(t){this.#e=t,this.node&&(this.node.innerHTML=t)}attr(e,s){return arguments.length?t.isUndefined(s)?this.#t[e]??t.Null:(t.isNull(s)?(delete this.#t[e],this.node?.removeAttribute(e)):(this.#t[e]=`${s}`,this.node?.setAttribute(e,s)),this):this.#t}hasAttr(e){return!t.isNull(this.attr(e))}addClass(...t){this.token("add","class",...t),this.node?.classList.add(...t)}removeClass(...t){this.token("delete","class",...t),this.node?.classList.remove(...t)}style(e){if(this.node)t.assign(this.node.style,e);else{const s=this.attr("style");if(s){e={...t.fromEntries(s.split(";").map(t=>t.split(":"))),...e}}this.attr("style",t.entries(e).map(([e,s])=>`${t.camelToDashedStyle(e)}: ${s}`).join("; "))}}token(e,s,...i){let o=this.#t[s],r=new Set(o?.split(" ")??[]);t.forEach(i,t=>r[e](t)),this.#t[s]=t.arrayFrom(r).join(" ")}}class p extends d{#s;constructor(t){super(),this.#s=t}get content(){return this.#s}set content(t){this.#s=t,this.node&&(this.node.textContent=t)}toString(){return this.#s}toDOM(){if(super.toDOM(),this.node)return[this.node];let t=new Text(this.#s);return this.node=t,this.dispatch("dom",[this.node]),[t]}get text(){return this.#s}}class f extends d{constructor(t){super(t),i()&&(this.node=new Text)}toDOM(){return[this.node,...super.toDOM()]}removeNode(){super.removeNode(),t.forEach(this.protos,t=>t.removeNode())}}class m{proto;tasks=/* @__PURE__ */new Set;constructor(t=h.proto){if(!t)throw"ProtoProcess error: proto context is missing";this.proto=t}exec(t){return this.tasks.add({fn:t,await:!1}),this}await(e){return e=t.toArray(e),this.tasks.add({fn:()=>Promise.all(e.map(e=>t.isFunction(e)?e():e)),await:!0}),this}async run(){for(const e of this.tasks){const s=()=>{const s=$.context(this.proto,e.fn);if(t.isInstanceof(s,Promise))return this.proto?.global.asyncTask(s)};e.await?await s():s()}return this.dispose(),this}dispose(){this.tasks.clear(),this.proto=null}}const b=t=>{i()&&(document.addEventListener("scroll",()=>requestAnimationFrame(()=>g(t)),!0),t.listen("dom",e=>new ResizeObserver(()=>g(t)).observe(e)),t.listen("mutate",()=>g(t)),t.virtual=!0)},g=e=>{if(!e.inDOM())return;if(!e.node)return;const s=e.node?.getBoundingClientRect();t.forEach(e.children,e=>{if(!t.isInstanceof(e,u))return;if(!e.node)return;if(e.node.contains(document.activeElement))return e.visible=!0;const{translate:i}=e.node.style,o=i.split(" ")[1],r=s.top+parseInt(o);r+e.node.offsetHeight<-200||r>outerHeight+200?e.visible=!1:e.visible=!0}),e.toDOM()};function v(e,...s){const i=h.proto,o=[],r=t=>{e&&i?.append(t),o.push(t)};for(let h of y.middleware.craft){let e=h(...s);if(!t.isUndefined(e))return r(e),e}const[n,l,a]=s;if(t.isInstanceof(n,h))return r(n),n;if(t.isString(n)){let e=t.isFunction(l)?[,l]:[l,a],s=new u(n,...e);return r(s),s}if(t.isFunction(n)){let e=l?[l,a]:[a];t.isInstanceof(n.prototype,u)&&(e=t.isFunction(l)?[{},l]:[l,a]);let s=new n(...e);if(t.isInstanceof(s,h))return r(s),s}if(t.isArray(n)){let e=e=>{for(let i of y.middleware.text){let s=i(e);if(!t.isUndefined(s))return r(s)}let s=t.isUndefined(e)?t.Null:new p(`${e}`);s&&r(s)},[i,...n]=s;return i.raw?t.forEach(i,(s,i)=>{let o=s.length?new p(s):t.Null,l=n[i];o&&r(o),e(l)}):t.forEach(i,t=>e(t)),o}}function y(...t){return v(!0,...t)}var w;(w=y||(y={})).middleware={craft:/* @__PURE__ */new Set,text:/* @__PURE__ */new Set,attr:/* @__PURE__ */new Set,ssr:/* @__PURE__ */new Set},w.craft=(...t)=>v(!1,...t),w.render=async(t,e)=>{let s=w(t),o=s.build().toDOM(),r=document.querySelector(e);r&&(await Promise.all(s.global.promises),r?.replaceChildren(...o),i()&&document.querySelector("style#__ssr__")?.remove())},w.context=(t,e)=>{let s=h.proto;h.proto=t;let i=e();return h.proto=s,i},w.async=t=>h.proto?.global.asyncTask(t(h.proto))??t(h.proto),w.process=t=>t(new m).run(),w.stylesheet=i()?new CSSStyleSheet:t.Null,w.styleMap=/* @__PURE__ */new Map,w.style=(e,s)=>{let i=t.toArray(s);if(e){let s=w.styleMap.get(e)??/* @__PURE__ */new Set;t.forEach(i,t=>s.add(t)),w.styleMap.set(e,s)}w.stylesheet&&t.forEach(i,t=>w.stylesheet.insertRule(t))},w.stylesheet&&document.adoptedStyleSheets.push(w.stylesheet),w.stylesheet?.insertRule("@layer base, ui"),globalThis.$=y;export{y as $,u as ElementProto,a as GlobalState,d as NodeProto,h as Proto,f as ProxyProto,p as TextProto,b as VirtualScroll,s as _document,e as _window,i as onclient,o as onserver,r as symbol_ProtoType,l as symbol_Signal,n as symbol_Statement};
@@ -0,0 +1 @@
1
+ import{Utils as f}from"@amateras/utils";const e=(e,a)=>{$.color||f.assign($,{color:{}}),f.assign($.color,{[e]:a})};e("amber",{50:"#fffbeb",100:"#fef3c7",200:"#fde68a",300:"#fcd34d",400:"#fbbf24",500:"#f59e0b",600:"#d97706",700:"#b45309",800:"#92400e",900:"#78350f",950:"#451a03"}),e("black","#000000"),e("white","#ffffff");e("blue",{50:"#eff6ff",100:"#dbeafe",200:"#bfdbfe",300:"#93c5fd",400:"#60a5fa",500:"#3b82f6",600:"#2563eb",700:"#1d4ed8",800:"#1e40af",900:"#1e3a8a",950:"#172554"});e("cyan",{50:"#ecfeff",100:"#cffafe",200:"#a5f3fc",300:"#67e8f9",400:"#22d3ee",500:"#06b6d4",600:"#0891b2",700:"#0e7490",800:"#155e75",900:"#164e63",950:"#083344"});e("emerald",{50:"#ecfdf5",100:"#d1fae5",200:"#a7f3d0",300:"#6ee7b7",400:"#34d399",500:"#10b981",600:"#059669",700:"#047857",800:"#065f46",900:"#064e3b",950:"#022c22"});e("fuchsia",{50:"#fdf4ff",100:"#fae8ff",200:"#f5d0fe",300:"#f0abfc",400:"#e879f9",500:"#d946ef",600:"#c026d3",700:"#a21caf",800:"#86198f",900:"#701a75",950:"#4a044e"});e("gray",{50:"#f9fafb",100:"#f3f4f6",200:"#e5e7eb",300:"#d1d5db",400:"#9ca3af",500:"#6b7280",600:"#4b5563",700:"#374151",800:"#1f2937",900:"#111827",950:"#030712"});e("green",{50:"#f0fdf4",100:"#dcfce7",200:"#bbf7d0",300:"#86efac",400:"#4ade80",500:"#22c55e",600:"#16a34a",700:"#15803d",800:"#166534",900:"#14532d",950:"#052e16"});e("indigo",{50:"#eef2ff",100:"#e0e7ff",200:"#c7d2fe",300:"#a5b4fc",400:"#818cf8",500:"#6366f1",600:"#4f46e5",700:"#4338ca",800:"#3730a3",900:"#312e81",950:"#1e1b4b"});e("lime",{50:"#f7fee7",100:"#ecfccb",200:"#d9f99d",300:"#bef264",400:"#a3e635",500:"#84cc16",600:"#65a30d",700:"#4d7c0f",800:"#3f6212",900:"#365314",950:"#1a2e05"});e("neutral",{50:"#fafafa",100:"#f5f5f5",200:"#e5e5e5",300:"#d4d4d4",400:"#a3a3a3",500:"#737373",600:"#525252",700:"#404040",800:"#262626",900:"#171717",950:"#0a0a0a"});e("orange",{50:"#fff7ed",100:"#ffedd5",200:"#fed7aa",300:"#fdba74",400:"#fb923c",500:"#f97316",600:"#ea580c",700:"#c2410c",800:"#9a3412",900:"#7c2d12",950:"#431407"});e("pink",{50:"#fdf2f8",100:"#fce7f3",200:"#fbcfe8",300:"#f9a8d4",400:"#f472b6",500:"#ec4899",600:"#db2777",700:"#be185d",800:"#9d174d",900:"#831843",950:"#500724"});e("purple",{50:"#faf5ff",100:"#f3e8ff",200:"#e9d5ff",300:"#d8b4fe",400:"#c084fc",500:"#a855f7",600:"#9333ea",700:"#7e22ce",800:"#6b21a8",900:"#581c87",950:"#3b0764"});e("red",{50:"#fef2f2",100:"#fee2e2",200:"#fecaca",300:"#fca5a5",400:"#f87171",500:"#ef4444",600:"#dc2626",700:"#b91c1c",800:"#991b1b",900:"#7f1d1d",950:"#450a0a"});e("rose",{50:"#fff1f2",100:"#ffe4e6",200:"#fecdd3",300:"#fda4af",400:"#fb7185",500:"#f43f5e",600:"#e11d48",700:"#be123c",800:"#9f1239",900:"#881337",950:"#4c0519"});e("sky",{50:"#f0f9ff",100:"#e0f2fe",200:"#bae6fd",300:"#7dd3fc",400:"#38bdf8",500:"#0ea5e9",600:"#0284c7",700:"#0369a1",800:"#075985",900:"#0c4a6e",950:"#082f49"});e("slate",{50:"#f8fafc",100:"#f1f5f9",200:"#e2e8f0",300:"#cbd5e1",400:"#94a3b8",500:"#64748b",600:"#475569",700:"#334155",800:"#1e293b",900:"#0f172a",950:"#020617"});e("stone",{50:"#fafaf9",100:"#f5f5f4",200:"#e7e5e4",300:"#d6d3d1",400:"#a8a29e",500:"#78716c",600:"#57534e",700:"#44403c",800:"#292524",900:"#1c1917",950:"#0c0a09"});e("teal",{50:"#f0fdfa",100:"#ccfbf1",200:"#99f6e4",300:"#5eead4",400:"#2dd4bf",500:"#14b8a6",600:"#0d9488",700:"#0f766e",800:"#115e59",900:"#134e4a",950:"#042f2e"});e("violet",{50:"#f5f3ff",100:"#ede9fe",200:"#ddd6fe",300:"#c4b5fd",400:"#a78bfa",500:"#8b5cf6",600:"#7c3aed",700:"#6d28d9",800:"#5b21b6",900:"#4c1d95",950:"#2e1065"});e("yellow",{50:"#fefce8",100:"#fef9c3",200:"#fef08a",300:"#fde047",400:"#facc15",500:"#eab308",600:"#ca8a04",700:"#a16207",800:"#854d0e",900:"#713f12",950:"#422006"});e("zinc",{50:"#fafafa",100:"#f4f4f5",200:"#e4e4e7",300:"#d4d4d8",400:"#a1a1aa",500:"#71717a",600:"#52525b",700:"#3f3f46",800:"#27272a",900:"#18181b",950:"#09090b"});
@@ -0,0 +1 @@
1
+ import{Utils as t}from"@amateras/utils";class e{initRule;optionMap=/* @__PURE__ */new Map;target={};constructor(t){this.initRule=t??{}}init(t){return this.initRule=t,this}option(e,s){return t.isFunction(s)?this.optionMap.set(e,{type:3,name:e,value:s}):this.optionMap.set(e,{type:0,name:e,value:s}),this}prop(e,s){return t.forEach(t.entries(s),([s,i])=>{t.isFunction(i)?this.optionMap.set(s,{type:2,name:s,value:i,prop:e}):this.optionMap.set(s,{type:1,name:s,value:i,prop:e})}),this}group(e,s){return t.forEach(t.entries(s),([e,s])=>{t.isFunction(s)?this.optionMap.set(e,{type:3,name:e,value:s}):this.optionMap.set(e,{type:0,name:e,value:s})}),this}proxy(){this.reset();const e=new Proxy(this.target,{get:(s,i)=>{const n=this.target;if(!t.isString(i))return;if("$"===i){const t={...n};return this.reset(),t}const r=this.optionMap.get(i);if(r)switch(r.type){case 0:t.assign(n,r.value);break;case 1:t.assign(n,{[r.prop]:r.value});break;case 2:return(...s)=>(t.assign(n,{[r.prop]:r.value(...s)}),e);case 3:return(...s)=>(t.assign(n,r.value(...s)),e)}return e}});return e}reset(){this.target={...this.initRule}}}t.assign($.css,{fluent:t=>t(new e).proxy()});export{e as $CSSFluent};
@@ -0,0 +1 @@
1
+ import{Utils as e,UID as t}from"@amateras/utils";import{onclient as r,_document as o}from"@amateras/core";class i{initRule;optionMap=/* @__PURE__ */new Map;target={};constructor(e){this.initRule=e??{}}init(e){return this.initRule=e,this}option(t,r){return e.isFunction(r)?this.optionMap.set(t,{type:3,name:t,value:r}):this.optionMap.set(t,{type:0,name:t,value:r}),this}prop(t,r){return e.forEach(e.entries(r),([r,o])=>{e.isFunction(o)?this.optionMap.set(r,{type:2,name:r,value:o,prop:t}):this.optionMap.set(r,{type:1,name:r,value:o,prop:t})}),this}group(t,r){return e.forEach(e.entries(r),([t,r])=>{e.isFunction(r)?this.optionMap.set(t,{type:3,name:t,value:r}):this.optionMap.set(t,{type:0,name:t,value:r})}),this}proxy(){this.reset();const t=new Proxy(this.target,{get:(r,o)=>{const i=this.target;if(!e.isString(o))return;if("$"===o){const e={...i};return this.reset(),e}const n=this.optionMap.get(o);if(n)switch(n.type){case 0:e.assign(i,n.value);break;case 1:e.assign(i,{[n.prop]:n.value});break;case 2:return(...r)=>(e.assign(i,{[n.prop]:n.value(...r)}),t);case 3:return(...r)=>(e.assign(i,n.value(...r)),t)}return t}});return t}reset(){this.target={...this.initRule}}}e.assign($.css,{fluent:e=>e(new i).proxy()});class n{}class a extends n{name;value;constructor(e,t){super(),this.name=e,this.value=t}set(e){return r()&&o.documentElement.style.setProperty(`${this.name}`,e),this}reset(){return r()&&o.documentElement.style.removeProperty(`${this.name}`),this}default(e){return`var(${this.name}, ${e})`}declare(e){return{[this.name]:`${e??this.value}`}}toString(){return`var(${this.name})`}}e.assign($.css,{variable(r,o){let i=o?.unique?"_"+t.generate("css-variable",{lettercase:"lower"}):"";if(e.isObject(r)){const t=e.fromEntries(e.map(e.entries(r),([e,t])=>{return[e,new a(`--${o?.prefix??""}${r=e,r.replaceAll(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`)}${i}`,`${t}`)];var r}));return $.CSS({":root":e.fromEntries(e.map(e.entries(t),([e,{name:t,value:r}])=>[t,r]))}),t}{const e=new a(`--${i}`,r);return $.CSS({":root":{[e.name]:e.value}}),e}}});const s=$.css.variable({xs:"calc(var(--radius) * 0.6)",sm:"calc(var(--radius) * 0.8)",md:"var(--radius)",lg:"calc(var(--radius) * 1.2)",xl:"calc(var(--radius) * 1.4)",xl2:"calc(var(--radius) * 1.6)",round:"50%"},{prefix:"radius-"}),p={xs:s.xs,sm:s.sm,md:s.md,lg:s.lg,xl:s.xl,xl2:s.xl2,none:0,full:"calc(infinity * 1px)"},l=t=>e.fromEntries([...e.map(e.entries(p),([e,r])=>[`${t}_${e}`,r]),[t,e=>e]]),d=(t,...r)=>e.fromEntries([...e.map(e.entries(p),([o,i])=>[`${t}_${o}`,e.fromEntries(e.map(r,e=>[e,i]))]),[t,t=>e.fromEntries(e.map(r,e=>[e,t]))]]),m=$.css.fluent(e=>e.prop("borderRadius",l("rounded")).prop("borderTopLeftRadius",l("rounded_tl")).prop("borderTopRightRadius",l("rounded_tr")).prop("borderBottomLeftRadius",l("rounded_bl")).prop("borderBottomRightRadius",l("rounded_br")).group("borderRadiusTop",d("rounded_t","borderTopLeftRadius","borderTopRightRadius")).group("borderRadiusBottom",d("rounded_b","borderBottomLeftRadius","borderBottomRightRadius")).group("borderRadiusLeft",d("rounded_l","borderTopLeftRadius","borderBottomLeftRadius")).group("borderRadiusRight",d("rounded_r","borderTopRightRadius","borderBottomRightRadius")).prop("borderWidth",{w:e=>e}).prop("borderStyle",{solid:"solid",dashed:"dashed",hidden:"hidden",dotted:"dotted",double:"double",groove:"groove",ridge:"ridge",inset:"inset",outset:"outset"})),c="#a5f3fc",u="#f4f4f5",f="#a1a1aa",h="#52525b",g="#18181b",x=(e,t)=>`light-dark(${e}, ${t})`,v=$.css.variable({fg:x(h,"#d4d4d8"),bg:x("#e4e4e7","#27272a"),primaryFg:x(u,g),primaryBg:x("#3f3f46",u),secondaryFg:x(g,u),secondaryBg:x(u,g),accentFg:x("#06b6d4",c),accentBg:x(c,"#0e7490"),destructiveBg:x("#fca5a5","#7f1d1d"),destructiveFg:x("#dc2626","#f87171"),complementaryBg:x("#86efac","#14532d"),complementaryFg:x("#16a34a","#4ade80"),muted:x("#71717a",f),border:x(f,h),input:x(`oklch(from ${g} l c h / .15)`,`oklch(from ${u} l c h / .15)`)}),_=t=>e.isNumber(t)?`calc(var(--spacing) * ${t})`:t,b=$.css.fluent(e=>e.prop("paddingInline",{px:_}).prop("paddingBlock",{py:_}).prop("padding",{p:_}).prop("paddingTop",{pt:_}).prop("paddingLeft",{pl:_}).prop("paddingRight",{pr:_}).prop("paddingBottom",{pb:_}).prop("width",{w_full:"100%",w_min:"min-content",w_max:"max-content",w_fit:"fit-content",w:_}).prop("height",{h_full:"100%",h_min:"min-content",h_max:"max-content",h_fit:"fit-content",h:_}).prop("maxWidth",{maxw_full:"100%",maxw_min:"min-content",maxw_max:"max-content",maxw_fit:"fit-content",maxw:_}).prop("maxHeight",{maxh_full:"100%",maxh_min:"min-content",maxh_max:"max-content",maxh_fit:"fit-content",maxh:_}).prop("minWidth",{minw_full:"100%",minw_min:"min-content",minw_max:"max-content",minw_fit:"fit-content",minw:_}).prop("minHeight",{minh_full:"100%",minh_min:"min-content",maxh_max:"max-content",minh_fit:"fit-content",minh:_}).prop("marginInline",{mx:_}).prop("marginBlock",{my:_}).prop("marginTop",{mt:_}).prop("marginLeft",{ml:_}).prop("marginRight",{mr:_}).prop("marginBottom",{mb:_}).prop("backgroundColor",{primary:v.primaryBg,secondary:v.secondaryBg,muted:v.muted,accent:v.accentBg,destructive:v.destructiveBg,bg:e=>e}).prop("display",{block:"block",inline:"inline",contents:"contents",inline_block:"inline-block"}).prop("position",{absolute:"absolute",static:"static",sticky:"sticky",relative:"relative",fixed:"fixed"}).prop("overflow",{overflow_hidden:"hidden",overflow_visible:"visible",overflow_scroll:"scroll",overflow_auto:"auto"}).prop("overflowY",{overflow_y_hidden:"hidden",overflow_y_visible:"visible",overflow_y_scroll:"scroll",overflow_y_auto:"auto"}).prop("overflowX",{overflow_x_hidden:"hidden",overflow_x_visible:"visible",overflow_x_scroll:"scroll",overflow_x_auto:"auto"}).prop("placeSelf",{center:"center",auto:"auto",end:"end",start:"start",left:"left",right:"right"}).option("size",e=>({height:_(e),width:_(e)}))),w=$.css.fluent(e=>e.init({display:"flex"}).prop("flexDirection",{row:"row",column:"column",row_reverse:"row-reverse",column_reverse:"column-reverse"}).prop("gap",{gap:_}).prop("placeContent",{content_center:"center",content_between:"space-between",content_end:"flex-end",content_start:"flex-start"}).prop("placeItems",{items_center:"center",items_between:"space-between",items_end:"end",items_start:"start"}).prop("flexWrap",{nowrap:"nowrap",wrap:"wrap",wrap_reverse:"wrap-reverse"})),y=e=>e,R=$.css.fluent(e=>e.prop("flexGrow",{grow:y}).prop("flexBasic",{basic:y}).prop("flexShrink",{shrink:y}).prop("flex",{initial:"0 auto",auto:"auto",none:"none",flex:y})),B=$.css.variable({xs2:"0.625rem",xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem",xl2:"1.5rem",xl3:"1.875rem",xl4:"2.25rem",xl5:"3rem",xl7:"4.5rem"},{prefix:"text-"}),k=$.css.variable({light:300,normal:400,medium:500,semibold:600,bold:700,extrabold:800},{prefix:"font-weight-"}),T=$.css.fluent(e=>e.prop("fontSize",{...B}).prop("color",{...v}).prop("fontWeight",{...k}).option("trim",{textBox:"trim-both cap alphabetic"}).prop("textAlign",{left:"left",right:"right",center:"center",start:"start",end:"end"})),E=t=>({"html:not([touch]) &:hover":e.merge(...e.toArray(t))}),L=t=>r=>({[`@media ${t}`]:e.merge(...e.toArray(r))}),S={sm:L("(width < 40rem)"),md:L("(width < 48rem)"),lg:L("(width < 64rem)"),xl:L("(width < 80rem)"),xl2:L("(width < 96rem)")},M=$.css.fluent(e=>e.init({display:"grid"}).prop("gridTemplateColumns",{cols:(e,t=1)=>`repeat(${t}, ${e})`}).prop("gridTemplateRows",{rows:(e,t=1)=>`repeat(${t}, ${e})`}).prop("gap",{gap:_})),F=(t,r)=>({[`@container ${t}`]:e.merge(...e.toArray(r))});export{m as border,b as box,F as container,w as flex,R as flexItem,T as font,M as grid,E as hover,S as media};
@@ -0,0 +1 @@
1
+ const e=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fffbeb",c100:"#fef3c7",c200:"#fde68a",c300:"#fcd34d",c400:"#fbbf24",c500:"#f59e0b",c600:"#d97706",c700:"#b45309",c800:"#92400e",c900:"#78350f",c950:"#451a03"},Symbol.toStringTag,{value:"Module"})),c=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,black:"#000000",white:"#ffffff"},Symbol.toStringTag,{value:"Module"})),f=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#eff6ff",c100:"#dbeafe",c200:"#bfdbfe",c300:"#93c5fd",c400:"#60a5fa",c500:"#3b82f6",c600:"#2563eb",c700:"#1d4ed8",c800:"#1e40af",c900:"#1e3a8a",c950:"#172554"},Symbol.toStringTag,{value:"Module"})),o=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#ecfeff",c100:"#cffafe",c200:"#a5f3fc",c300:"#67e8f9",c400:"#22d3ee",c500:"#06b6d4",c600:"#0891b2",c700:"#0e7490",c800:"#155e75",c900:"#164e63",c950:"#083344"},Symbol.toStringTag,{value:"Module"})),t=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#ecfdf5",c100:"#d1fae5",c200:"#a7f3d0",c300:"#6ee7b7",c400:"#34d399",c500:"#10b981",c600:"#059669",c700:"#047857",c800:"#065f46",c900:"#064e3b",c950:"#022c22"},Symbol.toStringTag,{value:"Module"})),a=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fdf4ff",c100:"#fae8ff",c200:"#f5d0fe",c300:"#f0abfc",c400:"#e879f9",c500:"#d946ef",c600:"#c026d3",c700:"#a21caf",c800:"#86198f",c900:"#701a75",c950:"#4a044e"},Symbol.toStringTag,{value:"Module"})),b=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#f9fafb",c100:"#f3f4f6",c200:"#e5e7eb",c300:"#d1d5db",c400:"#9ca3af",c500:"#6b7280",c600:"#4b5563",c700:"#374151",c800:"#1f2937",c900:"#111827",c950:"#030712"},Symbol.toStringTag,{value:"Module"})),d=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#f0fdf4",c100:"#dcfce7",c200:"#bbf7d0",c300:"#86efac",c400:"#4ade80",c500:"#22c55e",c600:"#16a34a",c700:"#15803d",c800:"#166534",c900:"#14532d",c950:"#052e16"},Symbol.toStringTag,{value:"Module"})),l=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#eef2ff",c100:"#e0e7ff",c200:"#c7d2fe",c300:"#a5b4fc",c400:"#818cf8",c500:"#6366f1",c600:"#4f46e5",c700:"#4338ca",c800:"#3730a3",c900:"#312e81",c950:"#1e1b4b"},Symbol.toStringTag,{value:"Module"})),r=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#f7fee7",c100:"#ecfccb",c200:"#d9f99d",c300:"#bef264",c400:"#a3e635",c500:"#84cc16",c600:"#65a30d",c700:"#4d7c0f",c800:"#3f6212",c900:"#365314",c950:"#1a2e05"},Symbol.toStringTag,{value:"Module"})),_=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fafafa",c100:"#f5f5f5",c200:"#e5e5e5",c300:"#d4d4d4",c400:"#a3a3a3",c500:"#737373",c600:"#525252",c700:"#404040",c800:"#262626",c900:"#171717",c950:"#0a0a0a"},Symbol.toStringTag,{value:"Module"})),n=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fff7ed",c100:"#ffedd5",c200:"#fed7aa",c300:"#fdba74",c400:"#fb923c",c500:"#f97316",c600:"#ea580c",c700:"#c2410c",c800:"#9a3412",c900:"#7c2d12",c950:"#431407"},Symbol.toStringTag,{value:"Module"})),u=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fdf2f8",c100:"#fce7f3",c200:"#fbcfe8",c300:"#f9a8d4",c400:"#f472b6",c500:"#ec4899",c600:"#db2777",c700:"#be185d",c800:"#9d174d",c900:"#831843",c950:"#500724"},Symbol.toStringTag,{value:"Module"})),i=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#faf5ff",c100:"#f3e8ff",c200:"#e9d5ff",c300:"#d8b4fe",c400:"#c084fc",c500:"#a855f7",c600:"#9333ea",c700:"#7e22ce",c800:"#6b21a8",c900:"#581c87",c950:"#3b0764"},Symbol.toStringTag,{value:"Module"})),g=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fef2f2",c100:"#fee2e2",c200:"#fecaca",c300:"#fca5a5",c400:"#f87171",c500:"#ef4444",c600:"#dc2626",c700:"#b91c1c",c800:"#991b1b",c900:"#7f1d1d",c950:"#450a0a"},Symbol.toStringTag,{value:"Module"})),p=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fff1f2",c100:"#ffe4e6",c200:"#fecdd3",c300:"#fda4af",c400:"#fb7185",c500:"#f43f5e",c600:"#e11d48",c700:"#be123c",c800:"#9f1239",c900:"#881337",c950:"#4c0519"},Symbol.toStringTag,{value:"Module"})),y=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#f0f9ff",c100:"#e0f2fe",c200:"#bae6fd",c300:"#7dd3fc",c400:"#38bdf8",c500:"#0ea5e9",c600:"#0284c7",c700:"#0369a1",c800:"#075985",c900:"#0c4a6e",c950:"#082f49"},Symbol.toStringTag,{value:"Module"})),j=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#f8fafc",c100:"#f1f5f9",c200:"#e2e8f0",c300:"#cbd5e1",c400:"#94a3b8",c500:"#64748b",c600:"#475569",c700:"#334155",c800:"#1e293b",c900:"#0f172a",c950:"#020617"},Symbol.toStringTag,{value:"Module"})),O=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fafaf9",c100:"#f5f5f4",c200:"#e7e5e4",c300:"#d6d3d1",c400:"#a8a29e",c500:"#78716c",c600:"#57534e",c700:"#44403c",c800:"#292524",c900:"#1c1917",c950:"#0c0a09"},Symbol.toStringTag,{value:"Module"})),S=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#f0fdfa",c100:"#ccfbf1",c200:"#99f6e4",c300:"#5eead4",c400:"#2dd4bf",c500:"#14b8a6",c600:"#0d9488",c700:"#0f766e",c800:"#115e59",c900:"#134e4a",c950:"#042f2e"},Symbol.toStringTag,{value:"Module"})),m=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#f5f3ff",c100:"#ede9fe",c200:"#ddd6fe",c300:"#c4b5fd",c400:"#a78bfa",c500:"#8b5cf6",c600:"#7c3aed",c700:"#6d28d9",c800:"#5b21b6",c900:"#4c1d95",c950:"#2e1065"},Symbol.toStringTag,{value:"Module"})),v=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fefce8",c100:"#fef9c3",c200:"#fef08a",c300:"#fde047",c400:"#facc15",c500:"#eab308",c600:"#ca8a04",c700:"#a16207",c800:"#854d0e",c900:"#713f12",c950:"#422006"},Symbol.toStringTag,{value:"Module"})),z=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,c050:"#fafafa",c100:"#f4f4f5",c200:"#e4e4e7",c300:"#d4d4d8",c400:"#a1a1aa",c500:"#71717a",c600:"#52525b",c700:"#3f3f46",c800:"#27272a",c900:"#18181b",c950:"#09090b"},Symbol.toStringTag,{value:"Module"})),M=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,amber:e,blackwhite:c,blue:f,cyan:o,emerald:t,fuchsia:a,gray:b,green:d,indigo:l,lime:r,neutral:_,orange:n,pink:u,purple:i,red:g,rose:p,sky:y,slate:j,stone:O,teal:S,violet:m,yellow:v,zinc:z},Symbol.toStringTag,{value:"Module"}));export{M as Colors,e as amber,c as blackwhite,f as blue,o as cyan,t as emerald,a as fuchsia,b as gray,d as green,l as indigo,r as lime,_ as neutral,n as orange,u as pink,i as purple,g as red,p as rose,y as sky,j as slate,O as stone,S as teal,m as violet,v as yellow,z as zinc};
@@ -0,0 +1 @@
1
+ import{onclient as e,_document as r}from"@amateras/core";import{Utils as a,UID as t}from"@amateras/utils";const s=$.css.variable({radius:"0.625rem",spacing:"0.25rem"}),l="#a5f3fc",c="#f4f4f5",m="#a1a1aa",i="#52525b",n="#18181b",o=(e,r)=>`light-dark(${e}, ${r})`,x=$.css.variable({fg:o(i,"#d4d4d8"),bg:o("#e4e4e7","#27272a"),primaryFg:o(c,n),primaryBg:o("#3f3f46",c),secondaryFg:o(n,c),secondaryBg:o(c,n),accentFg:o("#06b6d4",l),accentBg:o(l,"#0e7490"),destructiveBg:o("#fca5a5","#7f1d1d"),destructiveFg:o("#dc2626","#f87171"),complementaryBg:o("#86efac","#14532d"),complementaryFg:o("#16a34a","#4ade80"),muted:o("#71717a",m),border:o(m,i),input:o(`oklch(from ${n} l c h / .15)`,`oklch(from ${c} l c h / .15)`)});class d{}class u extends d{name;value;constructor(e,r){super(),this.name=e,this.value=r}set(a){return e()&&r.documentElement.style.setProperty(`${this.name}`,a),this}reset(){return e()&&r.documentElement.style.removeProperty(`${this.name}`),this}default(e){return`var(${this.name}, ${e})`}declare(e){return{[this.name]:`${e??this.value}`}}toString(){return`var(${this.name})`}}a.assign($.css,{variable(e,r){let s=r?.unique?"_"+t.generate("css-variable",{lettercase:"lower"}):"";if(a.isObject(e)){const t=a.fromEntries(a.map(a.entries(e),([e,a])=>{return[e,new u(`--${r?.prefix??""}${t=e,t.replaceAll(/([A-Z])/g,(e,r)=>`-${r.toLowerCase()}`)}${s}`,`${a}`)];var t}));return $.CSS({":root":a.fromEntries(a.map(a.entries(t),([e,{name:r,value:a}])=>[r,a]))}),t}{const r=new u(`--${s}`,e);return $.CSS({":root":{[r.name]:r.value}}),r}}});const v=$.css.variable({xs2:"0.625rem",xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem",xl2:"1.5rem",xl3:"1.875rem",xl4:"2.25rem",xl5:"3rem",xl7:"4.5rem"},{prefix:"text-"}),f=$.css.variable({light:300,normal:400,medium:500,semibold:600,bold:700,extrabold:800},{prefix:"font-weight-"}),g=$.css.variable({xs:"calc(var(--radius) * 0.6)",sm:"calc(var(--radius) * 0.8)",md:"var(--radius)",lg:"calc(var(--radius) * 1.2)",xl:"calc(var(--radius) * 1.4)",xl2:"calc(var(--radius) * 1.6)",round:"50%"},{prefix:"radius-"}),p=$.css.variable({xs:"calc(1 / var(--text-xs))",sm:"calc(1.25 / var(--text-sm))",base:"calc(1.5 / var(--text-md))",lg:"calc(1.75 / var(--text-lg))",xl:"calc(1.75 / var(--text-xl))",xl2:"calc(2 / var(--text-xl2))",xl3:"calc(2.25 / var(--text-xl3))",xl4:"calc(2.5 / var(--text-xl4))"},{prefix:"line-height-"});export{x as colors,s as general,p as lineHeight,g as radius,v as text,f as weight};
package/build/css.js CHANGED
@@ -1 +1 @@
1
- import{Utils as e,UID as t}from"@amateras/utils";import{ElementProto as s,onserver as r}from"@amateras/core";const a=/* @__PURE__ */new WeakMap,n=/* @__PURE__ */new Set,l=e.call(()=>/* @__PURE__ */new Map);class o{}class i extends o{declarations=/* @__PURE__ */new Map;rules=/* @__PURE__ */new Map;selector;parent=e.Null;css;constructor(e,t,s){super(),this.selector=e,this.parent=s,t&&c(this,t),this.css=t}toString(){let t=e.map(this.declarations,([e,t])=>`${e.replaceAll(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}: ${t};`),s=e.map(this.rules,([e,t])=>`${t}`);return`${this.selector} { ${[...t,...s].join(" ")} }`}}const c=(t,s)=>{for(let[r,a]of e.entries(s))if("__selector__"!==r)if(e.isString(a)||e.isNumber(a)||e.isInstanceof(a,o))t.declarations.set(r,`${a}`);else{let e=t.selector.startsWith("@")&&!t.parent?r:`${/^[@]|&/.test(r)?r:`& ${r}`}`;t.rules.set(e,new i(e,a,t))}},u=(t,s,r=!0)=>{let a=r?e.stringify(s):"";if(r){let e=l.get(a);if(e)return e}let n=new i(t(),s,e.Null);return $.style(e.Null,`${n}`),r&&l.set(a,n),n};e.assign($,{css:s=>e.isInstanceof(s,i)?s:u(()=>`.${t.generate("css")}`,s),CSS:t=>e.map(e.entries(t),([e,t])=>{let s=u(()=>e,{...t,__selector__:e});return n.add(s),s})}),e.assign(s.prototype,{css(...t){return e.forEach(t,e=>p(this,e)),this}});const p=(e,t)=>{let s=$.css(t),r=s.selector.slice(1);e.addClass(r);const n=a.get(e)??/* @__PURE__ */new Set;n.add(s),a.set(e,n)};r()&&e.assign($.CSS,{rules(t){let s=/* @__PURE__ */new Set;return e.forEach([t,...t.protos],r=>{let n=a.get(r);e.forEach(n,e=>s.add(e)),t!==r&&e.forEach(this.rules(r),e=>s.add(e))}),e.arrayFrom(s)},text(e){return[...n,...this.rules(e)].join("\n")}}),$.process.attr.add((t,s,r)=>{if("css"===t)return e.forEach(e.toArray(s),e=>p(r,e)),!0});export{o as $CSS,i as $CSSRule,p as assignCSS};
1
+ import{Utils as e,UID as t}from"@amateras/utils";import{ElementProto as s,onserver as r,onclient as n}from"@amateras/core";const o=/* @__PURE__ */new WeakMap,a=/* @__PURE__ */new Set,l=e.call(()=>/* @__PURE__ */new Map);class i{}class c extends i{declarations=/* @__PURE__ */new Map;rules=/* @__PURE__ */new Map;selector;parent=e.Null;css;constructor(e,t,s){super(),this.selector=e,this.parent=s,t&&u(this,t),this.css=t}toString(){let t=e.map(this.declarations,([e,t])=>`${e.replaceAll(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}: ${t};`),s=e.map(this.rules,([e,t])=>`${t}`);return`${this.selector} { ${[...t,...s].join(" ")} }`}}const u=(t,s)=>{for(let[r,n]of e.entries(s))if("__selector__"!==r)if(e.isString(n)||e.isNumber(n)||e.isInstanceof(n,i))t.declarations.set(r,`${n}`);else{let e=t.selector.startsWith("@")&&!t.parent?r:`${/^[@]|&/.test(r)?r:`& ${r}`}`;t.rules.set(e,new c(e,n,t))}},d=(t,s,r=!0)=>{let n=r?e.stringify(s):"";if(r){let e=l.get(n);if(e)return e}let o=new c(t(),s,e.Null);return $.style(e.Null,`${o}`),r&&l.set(n,o),o};e.assign($,{css:s=>e.isInstanceof(s,c)?s:d(()=>`.${t.generate("css")}`,s),CSS:t=>e.map(e.entries(t),([e,t])=>{let s=d(()=>e,{...t,__selector__:e});return a.add(s),s})}),e.assign(s.prototype,{css(...e){return p(e,this),this}});const p=(t,s)=>{let r=e.Null;e.forEach(e.toArray(t),t=>{e.isInstanceof(t,c)?f(s,t):r=e.assign(r??{},t)}),e.isNull(r)||f(s,r)},f=(e,t)=>{let s=$.css(t),r=s.selector.slice(1);e.addClass(r);const n=o.get(e)??/* @__PURE__ */new Set;n.add(s),o.set(e,n)};if(r()&&e.assign($.CSS,{rules(t){let s=/* @__PURE__ */new Set;return e.forEach([t,...t.protos],r=>{let n=o.get(r);e.forEach(n,e=>s.add(e)),t!==r&&e.forEach(this.rules(r),e=>s.add(e))}),e.arrayFrom(s)},text(e){return[...a,...this.rules(e)].join("\n")}}),n()){const e=e=>{addEventListener(e,e=>{"touch"===e.pointerType?document.documentElement.setAttribute("touch",""):document.documentElement.removeAttribute("touch")})};e("pointerdown"),e("pointermove")}$.middleware.attr.add((e,t,s)=>{if("css"===e)return p(t,s),!0}),r()&&$.middleware.ssr.add((t,s)=>{let r="";if(e.forEach($.styleMap,([s,n])=>{t.findBelow(e=>e.constructor===s)&&e.forEach(n,e=>r+=e)}),r+=$.CSS.text(t),r.length){const e=$.context(s,()=>$.craft("style",{id:"__ssr__"},()=>$([r])));s.append(e),e.build()}});export{i as $CSS,c as $CSSRule};
package/build/for.js CHANGED
@@ -1 +1 @@
1
- import{ProxyProto as t,symbol_Statement as e,Proto as s}from"@amateras/core";import{Utils as i}from"@amateras/utils";class o extends t{static[e]=!0;#t;list$;#e=/* @__PURE__ */new Map;constructor(t,e){super(),this.list$=t,this.#t=e;let s=()=>{const t=this.exec();i.forEach(this.protos,t=>t.builded||t.build()),i.forEach(t,t=>t.removeNode());let e=this.node,s=e?.parentNode;if(e&&s){let t=this.toDOM(),o=i.arrayFrom(s.childNodes).indexOf(e),r=i.Null;i.forEach(t,a=>{if(a!==e){let e=s.childNodes[o];e!==a&&(r=t.includes(e)?s.childNodes[o+1]??i.Null:e??i.Null,s.insertBefore(a,r))}o++})}this.parent?.mutate(),this.parent?.dispatch("mutate",[],{bubbles:!0})};this.list$.subscribe(s),this.listen("dispose",()=>this.list$.unsubscribe(s))}build(){return this.#e=/* @__PURE__ */new Map,this.exec(),this.protos.forEach(t=>t.builded||t.build()),this}exec(){let t=new Set(this.protos),e=/* @__PURE__ */new Set;return i.forEach(i.arrayFrom(this.list$.value),(i,o)=>{$.context(s,this,()=>{let s=this.#t,a=this.#e.get(i)??new r(()=>s(i,o));this.#e.set(i,a),t.delete(a),e.add(a)})}),this.replaceProtos(...e),t}dispose(){super.dispose(),i.forEach(this.#e.values(),t=>t.dispose()),this.#e.clear()}mutate(){super.mutate(),this.parent?.mutate()}}class r extends s{static[e]=!0}globalThis.For=o,$.process.craft.add((t,e,s)=>{if(t===o)return new o(e,s)});export{o as For,r as ForItem};
1
+ import{ProxyProto as t,symbol_Statement as e,Proto as s}from"@amateras/core";import{Utils as i}from"@amateras/utils";class o extends t{static[e]=!0;#t;list$;#e=/* @__PURE__ */new Map;constructor(t,e){super(),this.list$=t,this.#t=e;let s=()=>{const t=this.exec();i.forEach(this.protos,t=>t.builded||t.build()),i.forEach(t,t=>t.removeNode());let e=this.node,s=e?.parentNode;if(e&&s){let t=this.toDOM(),o=i.arrayFrom(s.childNodes).indexOf(e),r=i.Null;i.forEach(t,a=>{if(a!==e){let e=s.childNodes[o];e!==a&&(r=t.includes(e)?s.childNodes[o+1]??i.Null:e??i.Null,s.insertBefore(a,r))}o++})}this.parent?.mutate(),this.parent?.dispatch("mutate",[],{bubbles:!0})};this.list$.subscribe(s),this.listen("dispose",()=>this.list$.unsubscribe(s))}build(){return this.#e=/* @__PURE__ */new Map,this.exec(),this.protos.forEach(t=>t.builded||t.build()),this}exec(){let t=new Set(this.protos),e=/* @__PURE__ */new Set;return i.forEach(i.arrayFrom(this.list$.value),(s,i)=>{$.context(this,()=>{let o=this.#t,a=this.#e.get(s)??new r(()=>o(s,i));this.#e.set(s,a),t.delete(a),e.add(a)})}),this.replaceProtos(...e),t}dispose(){super.dispose(),i.forEach(this.#e.values(),t=>t.dispose()),this.#e.clear()}mutate(){super.mutate(),this.parent?.mutate()}}class r extends s{static[e]=!0}globalThis.For=o,$.middleware.craft.add((t,e,s)=>{if(t===o)return new o(e,s)});export{o as For,r as ForItem};
package/build/i18n.js CHANGED
@@ -1 +1 @@
1
- import{onclient as t,Proto as e,GlobalState as s,ProxyProto as i}from"@amateras/core";import{Utils as n}from"@amateras/utils";class a{#t=null;#e=null;constructor(t){n.isFunction(t)?this.#e=t:this.#t=t}async context(){let e=()=>t()&&window.dispatchEvent(new Event("i18ncontext"));if(this.#t)return n.isAsyncFunction(this.#t)?await this.#t.finally(e):this.#t;if(!this.#e)throw"I18n Context Fetch Error";return this.#t=this.#e().then(t=>t.default).finally(e)}async find(t,e){e||(e=await this.context());const[s,...i]=t.split("."),a=e[s];return n.isObject(a)?i.length?this.find(i.join("."),a):a._:i.length?t:a}}class o{session;key;options;updating=!1;updaters=[];constructor(t,e,s){this.session=t,this.key=e,this.options=s,this.session.translations.add(this)}async update(){if(this.updating)return;this.updating=!0;const t=this.session.fetch(this.key,this.options);this.session.global.asyncTask(t);const{text:e,args:s}=await t,i=n.map(e,(t,e)=>e<s.length?[t,s[e]]:[t]).flat();return n.forEach(this.updaters,t=>t(i)),this.updating=!1,this}onupdate(t){this.updaters.push(t)}}class l{translations=/* @__PURE__ */new Set;i18n;#s;global;constructor(t,e){this.i18n=t,this.global=e,this.#s=t.locale(),t.sessions.add(this)}async fetch(t,e){const s=this.i18n.dictionaries.get(this.#s);if(!s)return{text:[t],args:[]};const i=await s.find(t);if(n.isUndefined(i))return{text:[t],args:[]};const a=i.split(/\$[a-zA-Z0-9_]+\$/);if(1===a.length||!e)return{text:[i],args:[]};const o=i.matchAll(/(\$([a-zA-Z0-9_]+)\$)/g);return{text:a,args:n.map(o,([,,t])=>e[t])}}locale(e){if(!arguments.length)return this.#s;if(e){if(!this.i18n.dictionaries.get(e)){let t=e.split("-");if(1===t.length)return;return this.locale(t[0])}}return e&&e!==this.#s?(this.#s=e,new Promise(async e=>{await Promise.all(n.map(this.translations,t=>t.update())),e(),t()&&dispatchEvent(new Event("localeupdate"))})):void 0}}class r{#s;dictionaries=/* @__PURE__ */new Map;defaultLocale;sessions=/* @__PURE__ */new Set;path="";static key="__locale__";constructor(t){this.defaultLocale=t,this.#s=t}add(t,e){return this.dictionaries.set(t,new a(e)),this}delete(t){return this.dictionaries.delete(t),this}t(t,e){return new o(this.getSession(),this.getFullPath(t),e)}async text(t,e){let s=await this.getSession().fetch(this.getFullPath(t),e);return s.text.reduce((t,e,i)=>t+e+(s.args[i]||""),"")}dir(t){let e=this;return{t:(s,i)=>e.t(`${t}.${s}`,i),text:(s,i)=>e.text(`${t}.${s}`,i),dir:s=>e.dir(`${t}.${s}`)}}locale(t){if(!arguments.length)return this.readStoreLocale(),this.#s;if(!t)return;if(!this.dictionaries.get(t)){let e=t.split("-");if(1===e.length)return;return this.locale(e[0])}return this.#s=t,this.writeStoreLocale(t),Promise.all(n.map(this.sessions,e=>e.locale(t)))}getFullPath(t){return this.path?`${this.path}.${t}`:t}getSession(){let t=e.proto;if(t){let e=t.global.i18n.session??new l(this,t.global);return t.global.i18n.session=e,e}throw"I18n.getSession(): session not found from Proto.proto"}readStoreLocale(){t()&&(this.#s=localStorage.getItem(r.key)??this.defaultLocale)}writeStoreLocale(e){t()&&localStorage.setItem(r.key,e)}}s.assign(()=>({i18n:{session:n.Null}})),s.disposers.add(t=>{t.i18n.session=n.Null}),n.assign($,{i18n:t=>new r(t)}),$.process.text.add(t=>{if(n.isInstanceof(t,o)){const e=new i;return t.onupdate(t=>{e.layout=()=>$([...t]),n.forEach(e.protos,t=>t.removeNode()),e.build(),e.node?.replaceWith(...e.toDOM()),e.dispatch("i18nupdate",[void 0],{bubbles:!0})}),t.update(),e}}),$.process.attr.add((t,e,s)=>{n.isInstanceof(e,o)&&(e.onupdate(e=>{s.attr(t,e.join(""))}),e.update())});export{r as I18n,a as I18nDictionary,o as I18nTranslation};
1
+ import{Utils as t}from"@amateras/utils";import{onclient as e,Proto as s,GlobalState as i,ProxyProto as n}from"@amateras/core";class a{session;key;options;locale;updating=!1;updaters=[];constructor(t,e,s,i){this.session=t,this.key=e,this.options=s,this.session.translations.add(this),this.locale=i}async update(){if(this.updating)return;this.updating=!0;const e=this.session.fetch(this.key,this.options,this.locale);this.session.global.asyncTask(e);const{text:s,args:i}=await e,n=t.map(s,(t,e)=>e<i.length?[t,i[e]]:[t]).flat();return t.forEach(this.updaters,t=>t(n)),this.updating=!1,this}onupdate(t){this.updaters.push(t)}}class l{translations=/* @__PURE__ */new Set;i18n;#t;locale$;global;listeners=/* @__PURE__ */new Set;constructor(t,e){this.i18n=t,this.global=e,this.#t=t.locale(),this.locale$=$.signal(this.#t),t.sessions.add(this)}async fetch(e,s,i=this.#t){const n=this.i18n.dictionaries.get(i);if(!n)return{text:[e],args:[]};const a=await n.find(e);if(t.isUndefined(a))return{text:[e],args:[]};const l=a.split(/\$[a-zA-Z0-9_]+\$/);if(1===l.length||!s)return{text:[a],args:[]};const o=a.matchAll(/(\$([a-zA-Z0-9_]+)\$)/g);return{text:l,args:t.map(o,([,,t])=>s[t])}}locale(s){if(!arguments.length)return this.#t;if(s){if(!this.i18n.dictionaries.get(s)){let t=s.split("-");if(1===t.length)return;return this.locale(t[0])}}return s&&s!==this.#t?(this.#t=s,this.locale$.set(s),new Promise(async s=>{await Promise.all(t.map(this.translations,t=>t.update())),s(),e()&&dispatchEvent(new Event("localeupdate")),t.forEach(this.listeners,t=>t(this))})):void 0}dispose(){this.global=t.Null,this.listeners=t.Null,this.i18n.sessions.delete(this),this.i18n=t.Null,this.translations=t.Null,this.locale$.dispose(),this.locale$=t.Null}}class o{#e=null;#s=null;constructor(e){t.isFunction(e)?this.#s=e:this.#e=e}async context(){let s=()=>e()&&window.dispatchEvent(new Event("i18ncontext"));if(this.#e)return t.isAsyncFunction(this.#e)?await this.#e.finally(s):this.#e;if(!this.#s)throw"I18n Context Fetch Error";return this.#e=this.#s().then(t=>t.default).finally(s)}async find(e,s){s||(s=await this.context());const[i,...n]=e.split("."),a=s[i];if(t.isFunction(a)){const t=await a().then(t=>t.default);return n.length?this.find(n.join("."),t):t._}return t.isObject(a)?n.length?this.find(n.join("."),a):a._:n.length?e:a}}class r{#t;dictionaries=/* @__PURE__ */new Map;defaultLocale;sessions=/* @__PURE__ */new Set;path="";static key="__locale__";constructor(t){this.defaultLocale=t,this.#t=t}add(t,e){return this.dictionaries.set(t,new o(e)),this}delete(t){return this.dictionaries.delete(t),this}t(t,...e){return new a(this.session,this.getFullPath(t),...e)}async text(e,...s){const[i,n]=s;let a=await this.session.fetch(this.getFullPath(e),...t.isString(i)?[t.Undefined,i]:[i,n]);return a.text.reduce((t,e,s)=>t+e+(a.args[s]||""),"")}dir(t){let e=this;return{t:(s,i,n)=>e.t(`${t}.${s}`,i,n),text:(s,i,n)=>e.text(`${t}.${s}`,i,n),dir:s=>e.dir(`${t}.${s}`)}}locale(e){if(!arguments.length)return this.readStoreLocale(),this.#t;if(!e)return;if(!this.dictionaries.get(e)){let t=e.split("-");if(1===t.length)return;return this.locale(t[0])}return this.#t=e,this.writeStoreLocale(e),Promise.all(t.map(this.sessions,t=>t.locale(e)))}getFullPath(t){return this.path?`${this.path}.${t}`:t}get session(){let t=s.proto;if(t){let e=t.global.i18n.session??new l(this,t.global);return t.global.i18n.session=e,e}throw"I18n.getSession(): session not found from Proto.proto"}readStoreLocale(){e()&&(this.#t=localStorage.getItem(r.key)??this.defaultLocale)}writeStoreLocale(t){e()&&localStorage.setItem(r.key,t)}}i.assign(()=>({i18n:{session:t.Null}})),i.disposers.add(e=>{e.i18n.session?.dispose(),e.i18n.session=t.Null}),t.assign($,{i18n:t=>new r(t)}),$.middleware.text.add(e=>{if(t.isInstanceof(e,a)){const s=new n;return e.onupdate(e=>{s.layout=()=>$([...e]),t.forEach(s.protos,t=>t.removeNode()),s.build(),s.node?.replaceWith(...s.toDOM()),s.dispatch("i18nupdate",[void 0],{bubbles:!0})}),e.update(),s}}),$.middleware.attr.add((e,s,i)=>{t.isInstanceof(s,a)&&(s.onupdate(t=>{i.attr(e,t.join(""))}),s.update())});export{r as I18n,o as I18nDictionary,l as I18nSession,a as I18nTranslation};
package/build/if.js CHANGED
@@ -1 +1 @@
1
- import{Proto as s,symbol_Statement as t,ProxyProto as e}from"@amateras/core";import{Utils as i}from"@amateras/utils";import{Signal as a}from"@amateras/signal";class l extends s{static[t]=!0;exps;constructor(s,t){super(()=>t(...this.exps??[])),this.exps=s?i.toArray(s):i.Null}dispose(){super.dispose(),this.exps=i.Null}mutate(){super.mutate(),this.parent?.mutate()}validate(){return!this.exps||!this.exps.find(s=>!s.value)}}class r extends l{}class o extends l{}class u extends l{}class p extends e{static[t]=!0;statement=i.Null;virtual=!0;build(){super.build(!1,!1),this.validate()?.build();let s=()=>{let s=this.validate();s?.builded||s?.build(),this.statement!==s&&(this.statement=s??i.Null,i.forEach(this.protos,s=>!s.visible&&s.removeNode()),this.node?.replaceWith(...this.toDOM()),this.parent?.mutate(),this.parent?.dispatch("mutate",[],{bubbles:!0}))};return i.forEach(this.protos,t=>{i.forEach(t.exps,e=>{e?.subscribe(s),t.listen("dispose",()=>{e?.unsubscribe(s)})})}),this}get protos(){return super.protos}dispose(){super.dispose(),this.statement=i.Null}mutate(){super.mutate(),this.parent?.mutate()}validate(){i.forEach(this.protos,s=>s.visible=!1);for(let s of this.protos)if(s.validate())return s.visible=!0,s}}globalThis.If=u,globalThis.Else=r,globalThis.ElseIf=o;let n=null;$.process.craft.add((s,t,e)=>{if(s===u&&(n=new p),i.isInstanceof(n,p)){if(i.isIncluded(s,[u,r,o])){{let l=new s(...i.isInstanceof(t,a)||i.isArray(t)?[t,e]:[i.Null,t]);n.append(l)}return n}n=i.Null}else if(i.isIncluded(s,[r,o]))throw"ElseIf/Else must be after If or ElseIf"});
1
+ import{Proto as s,symbol_Statement as t,ProxyProto as e}from"@amateras/core";import{Utils as i}from"@amateras/utils";import{Signal as a}from"@amateras/signal";class l extends s{static[t]=!0;exps;constructor(s,t){super(()=>t(...this.exps??[])),this.exps=s?i.toArray(s):i.Null}dispose(){super.dispose(),this.exps=i.Null}mutate(){super.mutate(),this.parent?.mutate()}validate(){return!this.exps||!this.exps.find(s=>!s.value)}}class r extends l{}class o extends l{}class u extends l{}class p extends e{static[t]=!0;statement=i.Null;virtual=!0;build(){super.build(!1,!1),this.validate()?.build();let s=()=>{let s=this.validate();s?.builded||s?.build(),this.statement!==s&&(this.statement=s??i.Null,i.forEach(this.protos,s=>!s.visible&&s.removeNode()),this.node?.replaceWith(...this.toDOM()),this.parent?.mutate(),this.parent?.dispatch("mutate",[],{bubbles:!0}))};return i.forEach(this.protos,t=>{i.forEach(t.exps,e=>{e?.subscribe(s),t.listen("dispose",()=>{e?.unsubscribe(s)})})}),this}get protos(){return super.protos}dispose(){super.dispose(),this.statement=i.Null}mutate(){super.mutate(),this.parent?.mutate()}validate(){i.forEach(this.protos,s=>s.visible=!1);for(let s of this.protos)if(s.validate())return s.visible=!0,s}}globalThis.If=u,globalThis.Else=r,globalThis.ElseIf=o;let d=null;$.middleware.craft.add((s,t,e)=>{if(s===u&&(d=new p),i.isInstanceof(d,p)){if(i.isIncluded(s,[u,r,o])){{let l=new s(...i.isInstanceof(t,a)||i.isArray(t)?[t,e]:[i.Null,t]);d.append(l)}return d}d=i.Null}else if(i.isIncluded(s,[r,o]))throw"ElseIf/Else must be after If or ElseIf"});
@@ -1 +1 @@
1
- const e=`https://unpkg.com/amateras@${"0.15.1"}/build`,t={amateras:`${e}/core.js`},s=[{name:"core",description:"Core module",entry:"core/src/index.ts",mapped:!0,listed:!0},{name:"widget",description:"Component module",entry:"widget/src/index.ts",mapped:!0,listed:!0},{name:"signal",description:"Reactive data module",entry:"signal/src/index.ts",mapped:!0,listed:!0},{name:"store",description:"Access data between widgets",entry:"store/src/index.ts",mapped:!0,listed:!0},{name:"css",description:"CSS-in-JS module",entry:"css/src/index.ts",mapped:!0,listed:!0},{name:"css-variable",description:"CSS variable module",entry:"css/src/ext/variable.ts",mapped:!0,listed:!1},{name:"css-keyframes",description:"CSS keyframes module",entry:"css/src/ext/keyframes.ts",mapped:!0,listed:!1},{name:"css-property",description:"CSS property module",entry:"css/src/ext/property.ts",mapped:!0,listed:!1},{name:"for",description:"For loop control-flow",entry:"for/src/index.ts",mapped:!0,listed:!0},{name:"if",description:"If/Else/ElseIf control-flow",entry:"if/src/index.ts",mapped:!0,listed:!0},{name:"match",description:"Match/Case/Default control-flow",entry:"match/src/index.ts",mapped:!0,listed:!0},{name:"router",description:"Router module",entry:"router/src/index.ts",mapped:!0,listed:!0},{name:"i18n",description:"Translation module",entry:"i18n/src/index.ts",mapped:!0,listed:!0},{name:"idb",description:"IndexedDB module",entry:"idb/src/index.ts",mapped:!0,listed:!0},{name:"markdown",description:"Markdown to HTML module",codeInsert:'import { Markdown } from "amateras/markdown"; new Markdown();',entry:"markdown/src/index.ts",mapped:!0,listed:!0},{name:"prefetch",description:"SSR data prefetch",entry:"prefetch/src/index.ts",mapped:!0,listed:!0},{name:"meta",description:"SSR `meta` tag manager",entry:"meta/src/index.ts",mapped:!0,listed:!0},{name:"ui",description:"UI components",entry:"ui/src/index.ts",mapped:!0,listed:!0},{name:"utils",description:"Utilities module",entry:"utils/src/index.ts",mapped:!0,listed:!0}].map(e=>e.name),r={...t,...Object.fromEntries(s.map(t=>{const s=`amateras/${t}`,r=`${e}/${t}.js`;return[[s,r],[`@${s}`,r]]}).flat())},n=document.querySelector('script[type="importmap"]');if(n){const e=JSON.parse(n.innerHTML);e.imports={...e.imports,...r},n.innerHTML=JSON.stringify(e,null,"\t")}else{const e=document.createElement("script");e.setAttribute("type","importmap"),e.innerHTML=JSON.stringify({imports:r},null,"\t"),document.head.prepend(e)}
1
+ const e=`https://unpkg.com/amateras@${"0.16.1"}/build`,t={amateras:`${e}/core.js`},s=[{name:"core",description:"Core module",entry:"core/src/index.ts",mapped:!0,listed:!0},{name:"widget",description:"Component module",entry:"widget/src/index.ts",mapped:!0,listed:!0},{name:"signal",description:"Reactive data module",entry:"signal/src/index.ts",mapped:!0,listed:!0},{name:"store",description:"Access data between widgets",entry:"store/src/index.ts",mapped:!0,listed:!0},{name:"css",description:"CSS-in-JS module",entry:"css/src/index.ts",mapped:!0,listed:!0},{name:"css-variable",description:"CSS variable module",entry:"css/src/ext/variable.ts",mapped:!0,listed:!1},{name:"css-keyframes",description:"CSS keyframes module",entry:"css/src/ext/keyframes.ts",mapped:!0,listed:!1},{name:"css-property",description:"CSS property module",entry:"css/src/ext/property.ts",mapped:!0,listed:!1},{name:"css-colors",description:"CSS Colors module",entry:"css/src/ext/colors.ts",mapped:!0,listed:!1},{name:"css-fluent",description:"CSS Fluent module",entry:"css/src/ext/fluent.ts",mapped:!0,listed:!1},{name:"css-fluents",description:"CSS Fluent Templates module",entry:"css/src/ext/fluents.ts",mapped:!0,listed:!1},{name:"css-static-colors",description:"CSS Static Colors module",entry:"css/src/ext/static-colors.ts",mapped:!0,listed:!1},{name:"css-variables",description:"CSS Preset Variables module",entry:"css/src/ext/variables.ts",mapped:!0,listed:!1},{name:"for",description:"For loop control-flow",entry:"for/src/index.ts",mapped:!0,listed:!0},{name:"if",description:"If/Else/ElseIf control-flow",entry:"if/src/index.ts",mapped:!0,listed:!0},{name:"match",description:"Match/Case/Default control-flow",entry:"match/src/index.ts",mapped:!0,listed:!0},{name:"router",description:"Router module",entry:"router/src/index.ts",mapped:!0,listed:!0},{name:"i18n",description:"Translation module",entry:"i18n/src/index.ts",mapped:!0,listed:!0},{name:"idb",description:"IndexedDB module",entry:"idb/src/index.ts",mapped:!0,listed:!0},{name:"markdown",description:"Markdown to HTML module",codeInsert:'import { Markdown } from "amateras/markdown"; new Markdown();',entry:"markdown/src/index.ts",mapped:!0,listed:!0},{name:"prefetch",description:"SSR data prefetch",entry:"prefetch/src/index.ts",mapped:!0,listed:!0},{name:"meta",description:"SSR `meta` tag manager",entry:"meta/src/index.ts",mapped:!0,listed:!0},{name:"ui",description:"UI components",entry:"ui/src/index.ts",mapped:!0,listed:!0},{name:"utils",description:"Utilities module",entry:"utils/src/index.ts",mapped:!0,listed:!0}].map(e=>e.name),r={...t,...Object.fromEntries(s.map(t=>{const s=`amateras/${t}`,r=`${e}/${t}.js`;return[[s,r],[`@${s}`,r]]}).flat())},n=document.querySelector('script[type="importmap"]');if(n){const e=JSON.parse(n.innerHTML);e.imports={...e.imports,...r},n.innerHTML=JSON.stringify(e,null,"\t")}else{const e=document.createElement("script");e.setAttribute("type","importmap"),e.innerHTML=JSON.stringify({imports:r},null,"\t"),document.head.prepend(e)}
package/build/match.js CHANGED
@@ -1 +1 @@
1
- import{Proto as t,symbol_Statement as e,ProxyProto as s}from"@amateras/core";import{Utils as i}from"@amateras/utils";class a extends t{static[e]=!0;condition;constructor(t,e){super(e),this.condition=i.isArray(t)?t:[t]}}class l extends t{static[e]=!0;constructor(t){super(t)}}class d extends s{static[e]=!0;exp$;cases=/* @__PURE__ */new Set;matched=i.Null;#t=i.Null;constructor(t,e){super(()=>{e((t,e,s)=>{$(t,e,s)})}),this.exp$=t}dispose(){i.forEach(this.cases,t=>t.dispose()),this.#t?.dispose(),this.matched=i.Null,this.#t=i.Null,this.cases.clear()}build(){super.build(!1),this.validate();let t=()=>{let t=this.matched,e=this.validate();t!==e&&(i.forEach(this.cases,t=>t!==e&&t.removeNode()),e!==this.#t&&this.#t?.removeNode(),this.node?.replaceWith(...this.toDOM()),this.parent?.mutate(),this.parent?.dispatch("mutate",[],{bubbles:!0}))};return i.forEach(this.cases,e=>{this.exp$.subscribe(t),e.listen("dispose",()=>this.exp$.unsubscribe(t))}),this}mutate(){super.mutate(),this.parent?.mutate()}case(t,e){let s=new a(t,e);return this.cases.add(s),s}default(t){let e=new l(t);return this.#t=e,e}validate(){this.clear();for(let t of this.cases)if(t.condition.includes(this.exp$.value))return this.append(t),t.builded||t.build(),this.matched=t;if(this.#t)return this.append(this.#t),this.#t.builded||this.#t.build(),this.matched=this.#t}}globalThis.Match=d,globalThis.Case=a,globalThis.Default=l,$.process.craft.add((e,s,h)=>e===d?new d(s,h):e===a?i.is(t.proto,d)?.case(s,h):e===l?i.is(t.proto,d)?.default(s):void 0);
1
+ import{Proto as t,symbol_Statement as e,ProxyProto as s}from"@amateras/core";import{Utils as i}from"@amateras/utils";class a extends t{static[e]=!0;condition;constructor(t,e){super(e),this.condition=i.isArray(t)?t:[t]}}class l extends t{static[e]=!0;constructor(t){super(t)}}class d extends s{static[e]=!0;exp$;cases=/* @__PURE__ */new Set;matched=i.Null;#t=i.Null;constructor(t,e){super(()=>{e((t,e,s)=>{$(t,e,s)})}),this.exp$=t}dispose(){i.forEach(this.cases,t=>t.dispose()),this.#t?.dispose(),this.matched=i.Null,this.#t=i.Null,this.cases.clear()}build(){super.build(!1),this.validate();let t=()=>{let t=this.matched,e=this.validate();t!==e&&(i.forEach(this.cases,t=>t!==e&&t.removeNode()),e!==this.#t&&this.#t?.removeNode(),this.node?.replaceWith(...this.toDOM()),this.parent?.mutate(),this.parent?.dispatch("mutate",[],{bubbles:!0}))};return i.forEach(this.cases,e=>{this.exp$.subscribe(t),e.listen("dispose",()=>this.exp$.unsubscribe(t))}),this}mutate(){super.mutate(),this.parent?.mutate()}case(t,e){let s=new a(t,e);return this.cases.add(s),s}default(t){let e=new l(t);return this.#t=e,e}validate(){this.clear();for(let t of this.cases)if(t.condition.includes(this.exp$.value))return this.append(t),t.builded||t.build(),this.matched=t;if(this.#t)return this.append(this.#t),this.#t.builded||this.#t.build(),this.matched=this.#t}}globalThis.Match=d,globalThis.Case=a,globalThis.Default=l,$.middleware.craft.add((e,s,h)=>e===d?new d(s,h):e===a?i.is(t.proto,d)?.case(s,h):e===l?i.is(t.proto,d)?.default(s):void 0);
package/build/meta.js CHANGED
@@ -1 +1 @@
1
- import{Utils as t}from"@amateras/utils";import{Proto as r,onclient as e,onserver as o}from"@amateras/core";const n=(r,e,o,i)=>{let s=t=>o?`${o}:${t}`:t,a=(t,r)=>e.push({[i]:s(t),content:r});for(const[c,m]of t.entries(r))t.isString(m)?a(c,m):t.isArray(m)?t.forEach(m,r=>{t.isString(r)?a(c,r):n(r,e,s(c),i)}):n(m,e,s(c),i)};function i(r,e){for(const[o,n]of t.entries(e))!t.isNull(n)&&t.isObject(n)&&r[o]?i(r[o],n):r[o]=n;return r}t.assign($,{meta(t,o=r.proto){e()||o&&(o.global.meta=i(o.global.meta??{},t))}}),o()&&t.assign($.meta,{resolve:function(t){let r=[],{description:e,og:o,twitter:i}=t;return e&&r.push({name:"description",content:e}),o&&n(o,r,"og","property"),i&&n(i,r,"twitter","name"),r}});
1
+ import{Utils as t}from"@amateras/utils";import{Proto as e,onclient as o,onserver as r}from"@amateras/core";const a=(e,o,r,n)=>{let s=t=>r?`${r}:${t}`:t,i=(t,e)=>o.push({[n]:s(t),content:e});for(const[c,l]of t.entries(e))t.isString(l)?i(c,l):t.isArray(l)?t.forEach(l,e=>{t.isString(e)?i(c,e):a(e,o,s(c),n)}):a(l,o,s(c),n)};function n(e,o){for(const[r,a]of t.entries(o))!t.isNull(a)&&t.isObject(a)&&e[r]?n(e[r],a):e[r]=a;return e}t.assign($,{meta(t,r=e.proto){o()||r&&(r.global.meta=n(r.global.meta??{},t))}}),r()&&$.middleware.ssr.add((e,o)=>{const r=e.global.meta;let a=$.meta.resolve(r);t.forEach(a,t=>{const e=$.context(o,()=>$.craft("meta",t));o.append(e),e.build()})}),r()&&t.assign($.meta,{resolve:function(t){let e=[],{description:o,og:r,twitter:n}=t;return o&&e.push({name:"description",content:o}),r&&a(r,e,"og","property"),n&&a(n,e,"twitter","name"),e}});
package/build/prefetch.js CHANGED
@@ -1 +1 @@
1
- import{GlobalState as e,onclient as t,Proto as r,onserver as o}from"@amateras/core";import{Utils as i}from"@amateras/utils";e.assign(()=>({prefetch:{caches:{},req:null,expired:Date.now()+3e4}})),e.disposers.add(e=>{e.prefetch.caches=i.Null,e.prefetch.req=i.Null,e.prefetch=i.Null}),t()&&!globalThis.prefetch&&(globalThis.prefetch={caches:{},expired:Date.now()}),i.assign($,{async fetch(e,c,l=r.proto){e=i.toURL(e,$.fetch.origin);let h=t()&&Date.now()<prefetch.expired?s(e,c):i.Null,n=c?.then,d=new Promise(async t=>{if(h){let e=n?.(h.data);return void t({record:h.data,result:e})}let{origin:s,server:d}=$.fetch,f=l?.global.prefetch.req?.headers.get("cookie")||"",p=e.origin===s&&d?await d.fetch(new Request(e,{...c,headers:{...c?.headers,Cookie:f}})):await fetch(e,c),u=c?.record;if(u){let s,h=i.isAsyncFunction(u)?await u(p):u(p);o()&&l&&a(l,e,h,c),$.context(r,l,()=>{s=n?.(h)}),t({record:h,result:s})}});return o()&&l?.global.asyncTask(d),d}});const a=(e,t,r,o)=>{const a=e.global.prefetch.caches[t.href]??[],s=i.isUndefined(o?.body)?"":i.isString(o.body)?o.body:i.Null;i.isNull(s)||(a.push({data:r,method:o?.method??"GET",body:s}),e.global.prefetch.caches[t.href]=a)},s=(e,t)=>{const r=prefetch.caches[e.href],o=i.isUndefined(t?.body)?"":i.isString(t.body)?t.body:i.Null;if(!i.isNull(o)&&r)return r.find(e=>{if(e.method===(t?.method??"GET"))return e.body===o||void 0})};i.assign($.fetch,{origin:t()?location.origin:"http://localhost",server:null});
1
+ import{GlobalState as e,onclient as r,onserver as t,Proto as o}from"@amateras/core";import{Utils as i}from"@amateras/utils";e.assign(()=>({prefetch:{caches:{},req:null,expired:Date.now()+3e4}})),e.disposers.add(e=>{e.prefetch.caches=i.Null,e.prefetch.req=i.Null,e.prefetch=i.Null}),r()&&!globalThis.prefetch&&(globalThis.prefetch={caches:{},expired:Date.now()}),t()&&$.middleware.ssr.add((e,r)=>{const t=$.context(r,()=>$("script",()=>$`window.prefetch = ${JSON.stringify({caches:e.global.prefetch.caches,expired:e.global.prefetch.expired})}`));r.append(t),t.build()}),i.assign($,{async fetch(e,s,l=o.proto){e=i.toURL(e,$.fetch.origin);let h=r()&&Date.now()<prefetch.expired?a(e,s):i.Null,d=s?.then,n=new Promise(async r=>{if(h){let e=d?.(h.data);return void r({record:h.data,result:e})}let{origin:o,server:a}=$.fetch,n=l?.global.prefetch.req?.headers.get("cookie")||"",f=e.origin===o&&a?await a.fetch(new Request(e,{...s,headers:{...s?.headers,Cookie:n}})):await fetch(e,s),p=s?.record;if(p){let o,a=i.isAsyncFunction(p)?await p(f):p(f);t()&&l&&c(l,e,a,s),$.context(l,()=>{o=d?.(a)}),r({record:a,result:o})}});return t()&&l?.global.asyncTask(n),n}});const c=(e,r,t,o)=>{const c=e.global.prefetch.req;if(c&&r.origin===$.fetch.origin){const e=new URL(c.url),t=c.headers.get("x-forwarded-proto")||e.protocol.replace(":",""),o=c.headers.get("x-forwarded-host")||c.headers.get("host")||r.host;r=new URL(r.href.replace(r.origin,""),`${t}://${o}`)}const a=e.global.prefetch.caches[r.href]??[],s=i.isUndefined(o?.body)?"":i.isString(o.body)?o.body:i.Null;i.isNull(s)||(a.push({data:t,method:o?.method??"GET",body:s}),e.global.prefetch.caches[r.href]=a)},a=(e,r)=>{const t=prefetch.caches[e.href],o=i.isUndefined(r?.body)?"":i.isString(r.body)?r.body:i.Null;if(!i.isNull(o)&&t)return t.find(e=>{if(e.method===(r?.method??"GET"))return e.body===o||void 0})};i.assign($.fetch,{origin:r()?location.origin:"http://localhost",server:null});
package/build/router.js CHANGED
@@ -1 +1 @@
1
- import{ElementProto as t,onclient as e,Proto as s,ProxyProto as r,symbol_ProtoType as i,GlobalState as o}from"@amateras/core";import{Utils as l}from"@amateras/utils";class a extends t{constructor(t,e){super("a",t,e),this.on("click",t=>{if(t.shiftKey||t.ctrlKey)return;t.preventDefault();let e=this.attr("target"),s=this.attr("href");s&&("_replace"===e?$.replace(s):$.open(s,e??l.Undefined))})}}let n=0;const[h,c]=[1,2],[u,p]=["forward","back"],d="__scroll_history__",f=e()?sessionStorage:l.Null,g=e()?window.addEventListener:l.Null,v=e()?window.removeEventListener:l.Null;e()&&(history.scrollRestoration="manual");const w=t=>{const e=y.scrollHistory;if(t){let s=t.target;"#document"===s.nodeName?e[n]={[s.nodeName]:{x:window.scrollX,y:window.scrollY}}:""!==s.id&&(e[n]={[s.id]:{x:s.scrollLeft,y:s.scrollTop}})}else l.forEach(l.entries(e),([t])=>+t>=n&&delete e[+t]);f?.setItem(d,l.stringify(e))};class y extends s{static direction=u;prev=l.Null;url=l.Null;routes=/* @__PURE__ */new Map;slot=new b;static routers=/* @__PURE__ */new Set;constructor(){super(()=>$(this.slot)),e()&&y.routers.add(this)}set href(t){this.global.router.href=t}build(){if(e()){const t=()=>{const t=history.state?.index??0;n>t&&(y.direction=p),n<t&&(y.direction=u),n=t,this.prev=this.href,this.href=l.toURL(location.href),this.resolve(location.href)};t(),g?.("popstate",t),g?.("scroll",w,{capture:!0,passive:!1}),this.listen("dispose",()=>{v?.("popstate",t),v?.("scroll",w,{capture:!0})})}return super.build()}dispose(t){super.dispose(t),y.routers.delete(this)}async resolve(t){if(!t)return;let e=l.toURL(t);this.global.router.scrollQueue.clear();for(let[,s]of this.routes){let t=await s.resolve(e.pathname,this.slot,{});if(t){this.global.router.routes=t;let e=[""],s=[];l.forEach(t,t=>(e=l.map(t.validPaths,t=>l.map(e,e=>e+t)).flat(),s.push(...e),e)),this.global.router.matchPaths=s;break}}this.url=e,l.forEach(this.global.router.navlinks,t=>t.checkActive()),y.dispatchEvent(),Promise.all(this.global.router.scrollQueue).then(()=>{e===this.url&&y.scrollRestoration()})}static open(t,e="_self"){l.toURL(t).origin!==origin?open(t,e):y.writeState(t,h,e)}static forward(){history.forward()}static back(){history.back()}static replace(t){y.writeState(t,c)}static get scrollData(){return this.scrollHistory[n]??{}}static get scrollHistory(){return l.json(f?.getItem(d)??"{}")}static scrollRestoration(){if(e()){let t=y.scrollData??{x:0,y:0},e=l.entries(t);e.length?l.forEach(e,([t,{x:e,y:s}])=>{"#document"===t?window.scrollTo(e,s):document.getElementById(t)?.scrollTo(e,s)}):(document.querySelectorAll("*").forEach(t=>t.scrollTo(0,0)),window.scrollTo(0,0))}}static writeState(t,s,r){if(!t)return;let i=l.toURL(t);if(!e()||i.href!==location.href){if(r&&"_self"!==r)return open(i,r);s===h&&n++,e()&&w(),y.direction=u,l.forEach(this.routers,t=>{e()&&(t.prev=l.toURL(location.href)),t.href=i}),e()&&history[s===h?"pushState":"replaceState"]({index:n},"",i),l.forEach(this.routers,e=>e.resolve(t)),y.dispatchEvent()}}static dispatchEvent(){e()&&window.dispatchEvent(new Event("pathchange"))}}class b extends r{page=l.Null;prevPage=l.Null;constructor(){super()}switch(t){this.page!==t&&(this.prevPage=this.page,this.clear(),this.layout=()=>$(t),this.append(t),this.page=t,t.builded||t.build(),t.updateTitle(),this.dispatch("pageswitch",[this,y.direction],{bubbles:!0})||this.render())}render(){if(e()){this.prevPage?.removeNode();let t=this.toDOM();this.node?.replaceWith(...t)}}dispose(){super.dispose(),this.page=l.Null,this.prevPage=l.Null}}class m extends s{slot=new b;route;title=l.Null;constructor(t,e,s){super(()=>e({params:s,slot:this.slot})),this.route=t}updateTitle(){let t=this.title??this.findAbove(t=>l.is(t,m)?.title)?.title??l.Null,s=t=>{e()&&(document.title=t),this.global.title=t};t&&(l.isInstanceof(t,Promise)?t.then(t=>{this.title=t,s(t)}):s(t))}}class k{routes=/* @__PURE__ */new Map;path;paths=/* @__PURE__ */new Map;validPaths=[];constructor(t){this.path=t,this.paths.set(t,l.Undefined)}routing(t){let e=t.split("/"),s={},r="";t:for(let[o,a]of this.paths){s={};let t=o.split("/"),i=[];for(let s=0;s<Math.max(e.length,t.length);s++)i.push([t[s],e[s]]);e:for(let[e,o]of i){let t=()=>{r=""},i=()=>{r+=("/"!==r?"/":"")+o};if(l.isUndefined(e))break e;if(l.isUndefined(o)){t();continue t}if(e?.includes(":")){let[r,l]=e.split(":");if(!o.startsWith(r)){t();continue t}s[l]=o.replace(r,""),i();continue e}if(e!==o){t();continue t}i()}if(r){s={...s,...l.isFunction(a)?a():a};break t}}if(!r)return;let i=k.resolvePath(this.path,s);return this.validPaths=l.map(this.paths,t=>k.resolvePath(t[0],s)),[i,r,s]}static resolvePath(t,e){return t.replaceAll(/:([^/]+)/g,(t,s)=>`${e[s]}`)}alias(t,e){return this.paths.set(t,e),this}}class P extends k{constructor(t){super(t)}async resolve(t,e,s){let r=this.routing(t);if(!r)return;let[,i,o]=r;s={...s,...o};let l=t.replace(i,"");for(let[a,n]of this.routes){let t=await n.resolve(l||"/",e,s);if(t)return[this,...t]}return[this]}}class x extends k{pages=/* @__PURE__ */new Map;page=l.Null;#t;constructor(t,e){super(t),this.#t=e}async resolve(t,e,s){let r=this.routing(t);if(!r)return;let[i,o,l]=r;s={...s,...l};let a=await this.usePage(i,s,e),n=t.replace(o,"");for(let[h,c]of this.routes){let t=await c.resolve(n||"/",a.slot,s);if(t)return[this,...t]}return n?void 0:[this]}async usePage(t,r,o){let a=this.pages.get(t);if(!a){let n,h=this.#t;if(l.isArray(h)){let t=h[0]();e()&&t.catch(()=>location.reload());let s=await t.then(t=>t.default);n=()=>$(s,r,()=>$(a.slot))}else n="Widget"===this.#t[i]?()=>$(this.#t,r,()=>$(a.slot)):this.#t;$.context(s,o,()=>{a=new m(this,n,r)}),this.pages.set(t,a)}return this.page=a,o.switch(a),a}}const N=t=>class extends y{static[i]="Router";constructor(){super(),t(this)}};let R={route(t,e,s){let r=new x(t,e);return this.routes.set(t,r),s?.(r),this},group(t,e){let s=new P(t);return this.routes.set(t,s),e?.(s),this},notfound(){}};l.assign(k.prototype,R),l.assign(y.prototype,R),o.assign(()=>({router:{routers:/* @__PURE__ */new Set,resolve(t){return l.map(this.routers,e=>e.resolve(t))},href:new URL("http://localhost"),routes:[],matchPaths:[],navlinks:/* @__PURE__ */new Set,scrollQueue:/* @__PURE__ */new Set,postScrollRestoration(t){t.finally(()=>this.scrollQueue.delete(t)),this.scrollQueue.add(t)}}})),o.disposers.add(({router:t})=>{t.routers.clear(),t.routes=[],t.matchPaths=[],t.navlinks.clear()}),l.assign($,{router:t=>N(t),open:y.open,replace:y.replace,back:y.back,forward:y.forward,scrollRestoration:y.scrollRestoration,title(t,e=s.proto){let r=e?.findAbove(t=>l.is(t,m));r&&(r.title=t,r.updateTitle())}}),globalThis.Link=a,globalThis.NavLink=class extends a{constructor(t,e){super(t,e),this.global.router.navlinks.add(this)}dispose(){this.global.router.navlinks.delete(this),super.dispose()}checkActive(){let t=this.attr("href");if(t){for(let e of this.global.router.matchPaths)if(l.toURL(e).href===l.toURL(t).href)return this.attr("active","");this.attr("active",l.Null)}}build(t){return super.build(t),this.checkActive(),this}},$.process.craft.add(t=>{if(l.isFunction(t)&&"Router"===t[i]){let e=s.proto,r=new t;return e?.global.router.routers.add(r),r}});export{a as Link,m as Page,k as Route,P as RouteGroup,x as RouteNode,b as RouteSlot,y as Router};
1
+ import{ElementProto as t,onclient as e,Proto as s,onserver as r,ProxyProto as i,symbol_ProtoType as o,GlobalState as l}from"@amateras/core";import{Utils as a}from"@amateras/utils";class n extends t{constructor(t,e){super("a",t,e),this.on("click",t=>{if(t.shiftKey||t.ctrlKey)return;t.preventDefault();let e=this.attr("target"),s=this.attr("href");s&&("_replace"===e?$.replace(s):$.open(s,e??a.Undefined))})}}let c=0;const[h,u]=[1,2],[p,d]=["forward","back"],f="__scroll_history__",g=e()?sessionStorage:a.Null,w=e()?window.addEventListener:a.Null,v=e()?window.removeEventListener:a.Null;e()&&(history.scrollRestoration="manual");const b=t=>{const e=m.scrollHistory;if(t){let s=t.target;"#document"===s.nodeName?e[c]={[s.nodeName]:{x:window.scrollX,y:window.scrollY}}:""!==s.id&&(e[c]={[s.id]:{x:s.scrollLeft,y:s.scrollTop}})}else a.forEach(a.entries(e),([t])=>+t>=c&&delete e[+t]);g?.setItem(f,a.stringify(e))};class m extends s{static direction=p;static prev=a.Null;static url=a.Null;routes=/* @__PURE__ */new Map;slot=new x;static routers=/* @__PURE__ */new Set;constructor(){super(()=>$(this.slot)),e()&&m.routers.add(this)}set url(t){this.global.router.url=t}build(){if(e()){const t=()=>{const t=history.state?.index??0;c>t&&(m.direction=d),c<t&&(m.direction=p),c=t,m.prev=this.url,this.url=a.toURL(location.href),this.resolve(location.href)};t(),w?.("popstate",t),w?.("scroll",b,{capture:!0,passive:!1}),this.listen("dispose",()=>{v?.("popstate",t),v?.("scroll",b,{capture:!0})})}return super.build()}dispose(t){super.dispose(t),m.routers.delete(this)}async resolve(t){if(!t)return;let s=a.toURL(t);this.url=s,this.global.router.scrollQueue.clear();for(let[,e]of this.routes){let t=await e.resolve(s.pathname,this.slot,{});if(t){this.global.router.routes=t;let e=[""],s=[];a.forEach(t,t=>(e=a.map(t.validPaths,t=>a.map(e,e=>e+t)).flat(),s.push(...e),e)),this.global.router.matchPaths=s;break}}m.url=s,a.forEach(this.global.router.navlinks,t=>t.checkActive()),e()&&window.dispatchEvent(new y("pathchange",this.constructor)),Promise.all(this.global.router.scrollQueue).then(()=>{s===m.url&&m.scrollRestoration()})}static open(t,e="_self"){r()||(a.toURL(t).origin!==origin?open(t,e):m.writeState(t,h,e))}static forward(){r()||history.forward()}static back(){r()||history.back()}static replace(t){r()||m.writeState(t,u)}static get scrollData(){return this.scrollHistory[c]??{}}static get scrollHistory(){return a.json(g?.getItem(f)??"{}")}static scrollRestoration(){if(e()){if(!window.dispatchEvent(new y("scrollrestoration",this,{cancelable:!0})))return;let t=m.scrollData??{x:0,y:0},e=a.entries(t);e.length?a.forEach(e,([t,{x:e,y:s}])=>{"#document"===t?window.scrollTo(e,s):document.getElementById(t)?.scrollTo(e,s)}):(document.querySelectorAll("*").forEach(t=>t.scrollTo(0,0)),window.scrollTo(0,0))}}static writeState(t,e,s){if(r())return;if(!t)return;let i=a.toURL(t);if(i.href!==location.href){if(s&&"_self"!==s)return open(i,s);e===h&&c++,b(),m.direction=p,m.prev=a.toURL(location.href),history[e===h?"pushState":"replaceState"]({index:c},"",i),a.forEach(this.routers,e=>e.resolve(t)),window.dispatchEvent(new y("pathchange",this))}}}class y extends Event{Router;constructor(t,e,s){super(t,s),this.Router=e}}class x extends i{page=a.Null;prevPage=a.Null;constructor(){super()}switch(t){this.page!==t&&(this.prevPage=this.page,this.clear(),this.layout=()=>$(t),this.append(t),this.page=t,t.builded||t.build(),t.updateTitle(),this.dispatch("pageswitch",[this,m.direction],{bubbles:!0})||this.render())}render(){if(e()){this.prevPage?.removeNode();let t=this.toDOM();this.node?.replaceWith(...t)}}dispose(){super.dispose(),this.page=a.Null,this.prevPage=a.Null}}class k extends s{slot=new x;route;title=a.Null;constructor(t,e,s){super(()=>e({params:s,slot:this.slot})),this.route=t}updateTitle(){let t=this.title??this.findAbove(t=>a.is(t,k)?.title)?.title??a.Null,s=t=>{e()&&(document.title=t),this.global.title=t};t&&(a.isInstanceof(t,Promise)?t.then(t=>{this.title=t,s(t)}):s(t))}}class R{routes=/* @__PURE__ */new Map;path;paths=/* @__PURE__ */new Map;validPaths=[];constructor(t){this.path=t,this.paths.set(t,a.Undefined)}routing(t){let e=t.split("/"),s={},r="";t:for(let[o,l]of this.paths){s={};let t=o.split("/"),i=[];for(let s=0;s<Math.max(e.length,t.length);s++)i.push([t[s],e[s]]);e:for(let[e,o]of i){let t=()=>{r=""},i=()=>{r+=("/"!==r?"/":"")+o};if(a.isUndefined(e))break e;if(a.isUndefined(o)){t();continue t}if("*"!==e){if(e?.includes(":")){let[r,l]=e.split(":");if(!o.startsWith(r)){t();continue t}s[l]=o.replace(r,""),i();continue e}if(e!==o){t();continue t}i()}else i()}if(r){s={...s,...a.isFunction(l)?l():l};break t}}if(!r)return;let i=R.resolvePath(this.path,s);return this.validPaths=a.map(this.paths,t=>R.resolvePath(t[0],s)),[i,r,s]}static resolvePath(t,e){return t.replaceAll(/:([^/]+)/g,(t,s)=>`${e[s]}`)}alias(t,e){return this.paths.set(t,e),this}}class P extends R{constructor(t){super(t)}async resolve(t,e,s){let r=this.routing(t);if(!r)return;let[,i,o]=r;s={...s,...o};let l=t.replace(i,"");for(let[a,n]of this.routes){let t=await n.resolve(l||"/",e,s);if(t)return[this,...t]}return[this]}}class N extends R{pages=/* @__PURE__ */new Map;page=a.Null;#t;constructor(t,e){super(t),this.#t=e}async resolve(t,e,s){let r=this.routing(t);if(!r)return;let[i,o,l]=r;s={...s,...l};let a=await this.usePage(i,s,e),n=t.replace(o,"");for(let[c,h]of this.routes){let t=await h.resolve(n||"/",a.slot,s);if(t)return[this,...t]}return n?void 0:[this]}async usePage(t,s,r){let i=this.pages.get(t);if(!i){let l,n=this.#t;if(a.isArray(n)){let t=n[0]();e()&&t.catch(()=>location.reload());let r=await t.then(t=>t.default);l=()=>$(r,s,()=>$(i.slot))}else l="Widget"===this.#t[o]?()=>$(this.#t,s,()=>$(i.slot)):this.#t;$.context(r,()=>{i=new k(this,l,s)}),this.pages.set(t,i)}return this.page=i,r.switch(i),i}}const L=t=>class extends m{static[o]="Router";constructor(){super(),t(this)}};let E={route(t,e,s){let r=new N(t,e);return this.routes.set(t,r),s?.(r),this},group(t,e){let s=new P(t);return this.routes.set(t,s),e?.(s),this}};a.assign(R.prototype,E),a.assign(m.prototype,E),l.assign(()=>({router:{routers:/* @__PURE__ */new Set,resolve(t){return a.map(this.routers,e=>e.resolve(t))},url:e()?new URL(location.href):new URL("http://localhost"),routes:[],matchPaths:[],navlinks:/* @__PURE__ */new Set,scrollQueue:/* @__PURE__ */new Set,postScrollRestoration(t){t.finally(()=>this.scrollQueue.delete(t)),this.scrollQueue.add(t)}}})),l.disposers.add(({router:t})=>{t.routers.clear(),t.routes=[],t.matchPaths=[],t.navlinks.clear()}),a.assign($,{router:t=>L(t),open:m.open,replace:m.replace,back:m.back,forward:m.forward,scrollRestoration:m.scrollRestoration,title(t,e=s.proto){let r=e?.findAbove(t=>a.is(t,k));r&&(r.title=t,r.updateTitle())}}),globalThis.Link=n,globalThis.NavLink=class extends n{constructor(t,e){super(t,e),this.global.router.navlinks.add(this)}dispose(){this.global.router.navlinks.delete(this),super.dispose()}checkActive(){let t=this.attr("href");if(!t)return;const e=this.global.router.matchPaths;for(let s of e)if(("true"!==this.attr("exact")||e.indexOf(s)===e.length-1)&&a.toURL(s).href.replace(/\/$/,"")===a.toURL(t).href.replace(/\/$/,""))return this.attr("active","");this.attr("active",a.Null)}build(t){return super.build(t),this.checkActive(),this}},$.middleware.craft.add(t=>{if(a.isFunction(t)&&"Router"===t[o]){let e=s.proto,r=new t;return e?.global.router.routers.add(r),r}}),r()&&$.middleware.ssr.add((t,e)=>{const s=$.context(e,()=>$.craft("title",()=>$([t.global.title])));e.append(s),s.build()});export{n as Link,k as Page,R as Route,P as RouteGroup,N as RouteNode,x as RouteSlot,m as Router,y as RouterEvent};
package/build/signal.js CHANGED
@@ -1 +1 @@
1
- import{Utils as e}from"@amateras/utils";import{symbol_Signal as s,Proto as t,GlobalState as i,ProxyProto as l}from"@amateras/core";let u=!1,a=/* @__PURE__ */new Set,r=e=>{u=!1;let s=e();return u=!0,s},n=e=>{u=!0;let s=e(r);return u=!1,s},o=new FinalizationRegistry(({signal:e,ref:s})=>{e.computes?.delete(s)});class h extends Function{[s]=!0;linked=e.Null;_value;subs=e.Null;map=e.Null;exec=e.Null;computes=e.Null;constructor(s){return super(),t.proto?.global.signals.add(this),this._value=s,e.isInstanceof(s,h)&&this.link(s),new Proxy(this,{apply:()=>this._exec(),get:(s,t)=>{if(e.isSymbol(t)||e.isString(t)&&!t.endsWith("$"))return this[t];t=t.slice(0,-1),this.map||(this.map={});const i=this.map[t];if(i)return i;{const s=this.map[t]??new h(null);return this.map[t]=s,this.setPropValue(s,t),s.subscribe(s=>{e.isObject(this.value)&&!e.isNull(this.value)&&Object.getOwnPropertyDescriptor(this.value,t)?.writable&&(this.value[t]=s),e.isNull(this.value)||this.emit()}),this.subscribe(()=>this.setPropValue(s,t)),s}}})}_exec(){return u&&a.add(this),this.value}setPropValue(s,t){if(e.isObject(this.value)&&!e.isNull(this.value)){const e=this.value[t];s.set(e)}else s._value=null}get value(){return this.linked?this.linked.value:this._value}dispose(){this.subs=e.Null,this.linked=e.Null,e.forEach(this.computes,e=>e.deref()?.dispose()),this.computes=e.Null,this.exec=e.Null,this._value=e.Null,this.map&&e.forEach(e.entries(this.map),([e,s])=>s.dispose()),this.map=e.Null}set(s){e.isInstanceof(s,h)?this.link(s):e.isFunction(s)?this.set(s(this.value)):this.value!==s&&(this._value=s,this.linked=e.Null,this.emit())}modify(e){e(this.value),this.linked?.emit(),this.emit()}emit(){e.forEach(this.subs,e=>e(this.value)),e.forEach(this.computes,e=>{let s=e.deref();s||this.computes?.delete(e),s?.exec?.()})}subscribe(e){this.subs=this.subs??[],this.subs.push(e)}unsubscribe(s){let t=this.subs?.indexOf(s);e.isUndefined(t)||-1===t||this.subs?.splice(t,1)}link(e){if(this===e)throw"Signal.link(): cannot link self";this.linked=e,this.emit(),e.subscribe(()=>this.emit())}is(e){return e(this)}toString(){return`${this.value}`}}i.assign(()=>({signals:/* @__PURE__ */new Set})),i.disposers.add(s=>{e.forEach(s.signals,e=>e.dispose()),s.signals.clear()}),e.assign($,{signal:e=>new h(e),effect(s,t=[]){n(s),e.forEach(t,e=>a.add(e)),e.forEach(a,e=>e.subscribe(e=>s(r))),a.clear()},compute(s){let i=n(s),l=$.signal(i),u=t.proto;return l.exec=()=>{$.context(t,u,()=>{l.set(s(r))})},e.forEach(a,e=>{e.computes=e.computes??/* @__PURE__ */new Set;let s=new WeakRef(l);e.computes.add(s),o.register(l,{signal:e,ref:s})}),a.clear(),l},optional:s=>s.value?s:e.Null,resolve:(s,t)=>e.isInstanceof(s,h)?(t&&(s.subscribe(t),t(s.value)),s.value):(t?.(s),s)});let c=s=>{if(e.isInstanceof(s,h)){let t=new l,i=e.Undefined,u=s=>{e.isString(s)||e.isBoolean(s)||e.isNumber(s)?(i?i.content=`${s}`:t.layout=()=>i=$([s]).at(0),t.builded||t.build()):(i=e.Undefined,t.layout=()=>$([s]),e.forEach(t.protos,e=>e.removeNode()),t.clear(!0),t.builded&&t.build(),t.node?.replaceWith(...t.toDOM()))};return s.subscribe(u),t.listen("dispose",()=>s.unsubscribe(u)),u(s.value),t}};$.process.text.add(c),$.process.craft.add(c),$.process.attr.add((s,t,i)=>{if(e.isInstanceof(t,h)){let e=()=>i.attr(s,t.value);return t.subscribe(e),e(),i.listen("dispose",()=>t.unsubscribe(e)),!0}});export{h as Signal};
1
+ import{Utils as e}from"@amateras/utils";import{symbol_Signal as s,Proto as t,GlobalState as i,ProxyProto as l}from"@amateras/core";let u=!1,a=/* @__PURE__ */new Set,r=e=>{u=!1;let s=e();return u=!0,s},n=e=>{u=!0;let s=e(r);return u=!1,s},o=new FinalizationRegistry(({signal:e,ref:s})=>{e.computes?.delete(s)});class h extends Function{[s]=!0;linked=e.Null;_value;subs=e.Null;map=e.Null;exec=e.Null;computes=e.Null;constructor(s){return super(),t.proto?.global.signals.add(this),this._value=s,e.isInstanceof(s,h)&&this.link(s),new Proxy(this,{apply:()=>this._exec(),get:(s,t)=>{if(e.isSymbol(t)||e.isString(t)&&!t.endsWith("$"))return this[t];t=t.slice(0,-1),this.map||(this.map={});const i=this.map[t];if(i)return i;{const s=this.map[t]??new h(null);return this.map[t]=s,this.setPropValue(s,t),s.subscribe(s=>{e.isObject(this.value)&&!e.isNull(this.value)&&Object.getOwnPropertyDescriptor(this.value,t)?.writable&&(this.value[t]=s),e.isNull(this.value)||this.emit()}),this.subscribe(()=>this.setPropValue(s,t)),s}}})}_exec(){return u&&a.add(this),this.value}setPropValue(s,t){if(e.isObject(this.value)&&!e.isNull(this.value)){const e=this.value[t];s.set(e)}else s._value=null}get value(){return this.linked?this.linked.value:this._value}dispose(){this.subs=e.Null,this.linked=e.Null,e.forEach(this.computes,e=>e.deref()?.dispose()),this.computes=e.Null,this.exec=e.Null,this._value=e.Null,this.map&&e.forEach(e.entries(this.map),([e,s])=>s.dispose()),this.map=e.Null}set(s){e.isInstanceof(s,h)?this.link(s):e.isFunction(s)?this.set(s(this.value)):this.value!==s&&(this._value=s,this.linked=e.Null,this.emit())}modify(e){e(this.value),this.linked?.emit(),this.emit()}emit(){e.forEach(this.subs,e=>e(this.value)),e.forEach(this.computes,e=>{let s=e.deref();s||this.computes?.delete(e),s?.exec?.()})}subscribe(e){this.subs=this.subs??[],this.subs.push(e)}unsubscribe(s){let t=this.subs?.indexOf(s);e.isUndefined(t)||-1===t||this.subs?.splice(t,1)}link(e){if(this===e)throw"Signal.link(): cannot link self";this.linked=e,this.emit(),e.subscribe(()=>this.emit())}is(e){return e(this)}toString(){return`${this.value}`}}i.assign(()=>({signals:/* @__PURE__ */new Set})),i.disposers.add(s=>{e.forEach(s.signals,e=>e.dispose()),s.signals.clear()}),e.assign($,{signal:e=>new h(e),effect(s,t=[]){n(s),e.forEach(t,e=>a.add(e)),e.forEach(a,e=>e.subscribe(e=>s(r))),a.clear()},compute(s,i=[]){let l=n(s),u=$.signal(l),h=t.proto;return u.exec=()=>{$.context(h,()=>{u.set(s(r))})},e.forEach(i,e=>a.add(e)),e.forEach(a,e=>{e.computes=e.computes??/* @__PURE__ */new Set;let s=new WeakRef(u);e.computes.add(s),o.register(u,{signal:e,ref:s})}),a.clear(),u},optional:s=>s.value?s:e.Null,resolve:(s,t)=>e.isInstanceof(s,h)?(t&&(s.subscribe(t),t(s.value)),s.value):(t?.(s),s)});let c=s=>{if(e.isInstanceof(s,h)){let t=new l,i=e.Undefined,u=s=>{e.isString(s)||e.isBoolean(s)||e.isNumber(s)?(i?i.content=`${s}`:t.layout=()=>i=$([s]).at(0),t.builded||t.build()):(i=e.Undefined,t.layout=()=>$([s]),e.forEach(t.protos,e=>e.removeNode()),t.clear(!0),t.builded&&t.build(),t.node?.replaceWith(...t.toDOM()))};return s.subscribe(u),t.listen("dispose",()=>s.unsubscribe(u)),u(s.value),t}};$.middleware.text.add(c),$.middleware.craft.add(c),$.middleware.attr.add((s,t,i)=>{if(e.isInstanceof(t,h)){let e=()=>i.attr(s,t.value);return t.subscribe(e),e(),i.listen("dispose",()=>t.unsubscribe(e)),!0}});export{h as Signal};