nodality 1.0.180 → 1.0.181

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 (192) hide show
  1. package/dist/animator.cjs.js +1 -1
  2. package/dist/animator.esm.js +1 -1
  3. package/dist/audionew.cjs.js +1 -1
  4. package/dist/audionew.esm.js +1 -1
  5. package/dist/base.cjs.js +1 -1
  6. package/dist/base.esm.js +1 -1
  7. package/dist/beta-desktop-bar.cjs.js +1 -1
  8. package/dist/beta-desktop-bar.esm.js +1 -1
  9. package/dist/beta-mobile-bar.cjs.js +1 -1
  10. package/dist/beta-mobile-bar.esm.js +1 -1
  11. package/dist/bundle.umd.js +1 -1
  12. package/dist/button.cjs.js +1 -1
  13. package/dist/button.esm.js +1 -1
  14. package/dist/center.cjs.js +1 -1
  15. package/dist/center.esm.js +1 -1
  16. package/dist/checkbox.cjs.js +1 -1
  17. package/dist/checkbox.esm.js +1 -1
  18. package/dist/code.cjs.js +1 -1
  19. package/dist/code.esm.js +1 -1
  20. package/dist/container.cjs.js +1 -1
  21. package/dist/container.esm.js +1 -1
  22. package/dist/data-list.cjs.js +1 -1
  23. package/dist/data-list.esm.js +1 -1
  24. package/dist/designer.cjs.js +1 -1
  25. package/dist/designer.esm.js +1 -1
  26. package/dist/dropdown.cjs.js +1 -1
  27. package/dist/dropdown.esm.js +1 -1
  28. package/dist/element-mapper.cjs.js +1 -1
  29. package/dist/element-mapper.esm.js +1 -1
  30. package/dist/finalresult.esm.js +1 -1
  31. package/dist/flex-card.cjs.js +1 -1
  32. package/dist/flex-card.esm.js +1 -1
  33. package/dist/flex-grid.cjs.js +1 -1
  34. package/dist/flex-grid.esm.js +1 -1
  35. package/dist/flex-row.cjs.js +1 -1
  36. package/dist/flex-row.esm.js +1 -1
  37. package/dist/floating-input.cjs.js +1 -1
  38. package/dist/floating-input.esm.js +1 -1
  39. package/dist/free.cjs.js +1 -1
  40. package/dist/free.esm.js +1 -1
  41. package/dist/horizontal-scroller.cjs.js +1 -1
  42. package/dist/horizontal-scroller.esm.js +1 -1
  43. package/dist/image-picker.cjs.js +1 -1
  44. package/dist/image-picker.esm.js +1 -1
  45. package/dist/image.cjs.js +1 -1
  46. package/dist/image.esm.js +1 -1
  47. package/dist/index.cjs.js +1 -1
  48. package/dist/index.esm.js +1 -1
  49. package/dist/link-getter.cjs.js +1 -1
  50. package/dist/link-getter.esm.js +1 -1
  51. package/dist/link.cjs.js +1 -1
  52. package/dist/link.esm.js +1 -1
  53. package/dist/meta-adder.cjs.js +1 -1
  54. package/dist/meta-adder.esm.js +1 -1
  55. package/dist/modal-2025.cjs.js +1 -1
  56. package/dist/modal-2025.esm.js +1 -1
  57. package/dist/multiswitcher.cjs.js +1 -1
  58. package/dist/multiswitcher.esm.js +1 -1
  59. package/dist/new-nav-bar.cjs.js +1 -1
  60. package/dist/new-nav-bar.esm.js +1 -1
  61. package/dist/picker.cjs.js +1 -1
  62. package/dist/picker.esm.js +1 -1
  63. package/dist/progress.cjs.js +1 -1
  64. package/dist/progress.esm.js +1 -1
  65. package/dist/radio.cjs.js +1 -1
  66. package/dist/radio.esm.js +1 -1
  67. package/dist/range.cjs.js +1 -1
  68. package/dist/range.esm.js +1 -1
  69. package/dist/side-bar.cjs.js +1 -1
  70. package/dist/side-bar.esm.js +1 -1
  71. package/dist/side-nav-bar.cjs.js +1 -1
  72. package/dist/side-nav-bar.esm.js +1 -1
  73. package/dist/simple-bar.cjs.js +1 -1
  74. package/dist/simple-bar.esm.js +1 -1
  75. package/dist/slider-2025.cjs.js +1 -1
  76. package/dist/slider-2025.esm.js +1 -1
  77. package/dist/spacer.cjs.js +1 -1
  78. package/dist/spacer.esm.js +1 -1
  79. package/dist/stack.cjs.js +1 -1
  80. package/dist/stack.esm.js +1 -1
  81. package/dist/table.cjs.js +1 -1
  82. package/dist/table.esm.js +1 -1
  83. package/dist/text-field.cjs.js +1 -1
  84. package/dist/text-field.esm.js +1 -1
  85. package/dist/text.cjs.js +1 -1
  86. package/dist/text.esm.js +1 -1
  87. package/dist/ulist.cjs.js +1 -1
  88. package/dist/ulist.esm.js +1 -1
  89. package/dist/video.cjs.js +1 -1
  90. package/dist/video.esm.js +1 -1
  91. package/dist/wrap.cjs.js +1 -1
  92. package/dist/wrap.esm.js +1 -1
  93. package/dist/zoom-card.cjs.js +1 -1
  94. package/dist/zoom-card.esm.js +1 -1
  95. package/layout/animator.js +1 -1
  96. package/layout/audio.js +1 -1
  97. package/layout/audionew.js +1 -1
  98. package/layout/base-2.js +1 -1
  99. package/layout/base.js +1 -1
  100. package/layout/beta-desktop-bar.js +1 -1
  101. package/layout/beta-mobile-bar.js +1 -1
  102. package/layout/box.js +1 -1
  103. package/layout/button.js +1 -1
  104. package/layout/cards.js +1 -1
  105. package/layout/center.js +1 -1
  106. package/layout/checkbox.js +1 -1
  107. package/layout/circle.js +1 -1
  108. package/layout/clean-row.js +1 -1
  109. package/layout/code.js +1 -1
  110. package/layout/container.js +1 -1
  111. package/layout/custom.js +1 -1
  112. package/layout/div-image.js +1 -1
  113. package/layout/dropdown-2025.js +1 -1
  114. package/layout/dropdown.js +1 -1
  115. package/layout/empty-element.js +1 -1
  116. package/layout/external-stylesheet.js +1 -1
  117. package/layout/flex-card.js +1 -1
  118. package/layout/flex-grid.js +1 -1
  119. package/layout/flex-row.js +1 -1
  120. package/layout/footer.js +1 -1
  121. package/layout/form-components/custom.js +1 -1
  122. package/layout/form-components/data-list.js +1 -1
  123. package/layout/form-components/floating-input.js +1 -1
  124. package/layout/form-components/form-all.js +1 -1
  125. package/layout/form-components/form.js +1 -1
  126. package/layout/form-components/image-picker.js +1 -1
  127. package/layout/form-components/picker.js +1 -1
  128. package/layout/form-components/radio.js +1 -1
  129. package/layout/form-components/radiogroup.js +1 -1
  130. package/layout/form-components/range.js +1 -1
  131. package/layout/free.js +1 -1
  132. package/layout/grid-new.js +1 -1
  133. package/layout/grid-switcher.js +1 -1
  134. package/layout/grid.js +1 -1
  135. package/layout/group.js +1 -1
  136. package/layout/header.js +1 -1
  137. package/layout/horizontal-scroller.js +1 -1
  138. package/layout/image-old.js +1 -1
  139. package/layout/image.js +1 -1
  140. package/layout/index.js +1 -1
  141. package/layout/label.js +1 -1
  142. package/layout/link.js +1 -1
  143. package/layout/list-OLD.js +1 -1
  144. package/layout/list.js +1 -1
  145. package/layout/meta-adder.js +1 -1
  146. package/layout/modal-2025.js +1 -1
  147. package/layout/modernwrap.js +1 -1
  148. package/layout/multiswitcher.js +1 -1
  149. package/layout/multiswitcherBeta.js +1 -1
  150. package/layout/nav-bar.js +1 -1
  151. package/layout/nav-factor/custom-div.js +1 -1
  152. package/layout/navBar-OLD.js +1 -1
  153. package/layout/new-flat-adder.js +1 -1
  154. package/layout/new-nav-bar.js +1 -1
  155. package/layout/offset-container.js +1 -1
  156. package/layout/polygon.js +1 -1
  157. package/layout/prerender-site.js +1 -1
  158. package/layout/prerender.js +1 -1
  159. package/layout/progress.js +1 -1
  160. package/layout/row.js +1 -1
  161. package/layout/saved-new-nav-bar.js +1 -1
  162. package/layout/scroll-video.js +1 -1
  163. package/layout/side-bar.js +1 -1
  164. package/layout/side-nav-bar.js +1 -1
  165. package/layout/simple-bar.js +1 -1
  166. package/layout/slider-2025.js +1 -1
  167. package/layout/spacer.js +1 -1
  168. package/layout/stack.js +1 -1
  169. package/layout/styler.js +1 -1
  170. package/layout/svg.js +1 -1
  171. package/layout/switcher.js +1 -1
  172. package/layout/table.js +1 -1
  173. package/layout/text-field.js +1 -1
  174. package/layout/text.js +1 -1
  175. package/layout/ulist.js +1 -1
  176. package/layout/video.js +1 -1
  177. package/layout/without-new.js +1 -1
  178. package/layout/wrap.js +1 -1
  179. package/layout/zoom-card.js +1 -1
  180. package/lib/card-getter.js +1 -1
  181. package/lib/data.js +1 -1
  182. package/lib/designer.js +1 -1
  183. package/lib/element-mapper.js +1 -1
  184. package/lib/keyframe-animation.js +1 -1
  185. package/lib/link-getter.js +1 -1
  186. package/lib/raster-ops.js +691 -33
  187. package/lib/scroll-video.js +1 -1
  188. package/lib/seo.js +1 -1
  189. package/lib/stacker.js +1 -1
  190. package/lib/theme.js +1 -1
  191. package/lib/transform-anim.js +1 -1
  192. package/package.json +1 -1
package/dist/range.cjs.js CHANGED
@@ -1 +1 @@
1
- (()=>{"use strict";var e={d:(t,n)=>{for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{Range:()=>l});!function(){try{var e=localStorage.getItem("nodality.theme.mode");if("light"===e||"dark"===e)return e}catch(e){}"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches}();var n={hexalize:{stage:"cell",decl:function(e){return"uniform float ".concat(e,"size;")},code:function(e){return"\n {\n vec2 hp = warped / ".concat(e,"size;\n vec2 hr = vec2(1.0, 1.7320508), hh = hr * 0.5;\n vec2 ha = mod(hp, hr) - hh, hb = mod(hp - hh, hr) - hh;\n vec2 gv = dot(ha, ha) < dot(hb, hb) ? ha : hb;\n center = (hp - gv) * ").concat(e,"size;\n gv = abs(gv);\n edge = max(edge, smoothstep(0.44, 0.5,\n max(dot(gv, normalize(vec2(1.0, 1.7320508))), gv.x)));\n }")},uniforms:function(e,t){return{size:["1f",(e.size||24)*t]}}},offset:{stage:"warp",decl:function(e){return"uniform float ".concat(e,"strength; uniform float ").concat(e,"radius;")},code:function(e){return"\n {\n float d = length(warped - u_mouse);\n float fall = 1.0 - smoothstep(0.0, ".concat(e,"radius, d);\n vec2 dir = d > 0.5 ? (warped - u_mouse) / d : vec2(0.0);\n warped -= dir * ").concat(e,"strength * fall;\n }")},uniforms:function(e,t){return{strength:["1f",(e.strength||20)*t],radius:["1f",(e.radius||260)*t]}}},duotone:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"a; uniform vec3 ").concat(e,"b; uniform float ").concat(e,"radius;")},code:function(e,t){return"\n {\n float lum = dot(col, vec3(0.299, 0.587, 0.114));\n vec3 duo = mix(".concat(e,"a, ").concat(e,"b, lum);\n ").concat("mouse"===t.by?"float mask = 1.0 - smoothstep(".concat(e,"radius * 0.35, ").concat(e,"radius, length(center - u_mouse));"):"float mask = 1.0;","\n col = mix(col, duo, mask);\n }")},uniforms:function(e,t){var n=e.colors||["#104B87","#E8FF00"];return{a:["3fv",o(n[0])],b:["3fv",o(n[1])],radius:["1f",(e.radius||220)*t]}}},edges:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"color; uniform float ").concat(e,"strength;")},code:function(e){return"\n {\n edgeCol = ".concat(e,"color;\n edgeCov = max(edgeCov, edge * ").concat(e,"strength);\n }")},uniforms:function(e){return{color:["3fv",o(e.color||"#FFFFFF")],strength:["1f",null!=e.strength?e.strength:1]}}}};function o(e){return[1,3,5].map(function(t){return parseInt(e.slice(t,t+2),16)/255})}function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function a(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,i(o.key),o)}}function i(e){var t=function(e){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}Object.keys(n);var l=function(){return e=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.el=null,this.minLabel=null,this.maxLabel=null,this.currentLabel=null},(t=[{key:"padding",value:function(e){return this.el.style.padding=e,this}},{key:"toCode",value:function(){var e=JSON.stringify(this.options,null,4);return["new Range().set(".concat(e,")")]}},{key:"set",value:function(e){var t,n,o=this;this.options=e;var r=document.createElement("input");if(r.setAttribute("id","slider"),r.setAttribute("type","range"),r.setAttribute("min",e.min),r.setAttribute("max",e.max),r.setAttribute("value",e.min),r.style.width=null!==(t=e.width)&&void 0!==t?t:"100%",!e.plain){var a,i;r.style.setProperty("-webkit-appearance","none"),r.style.appearance="none",r.style.height="9px",r.style.background=null!==(a=e.style.trackColor)&&void 0!==a?a:"orange",r.style.borderRadius="5px";var l="\n #slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background: ".concat(null!==(i=e.style.thumbColor)&&void 0!==i?i:"4CAF50",";\n cursor: pointer;\n }\n "),c=document.createElement("style");c.appendChild(document.createTextNode(l)),document.head.appendChild(c)}var u=document.createElement("div");u.style.display="flex",u.style.flexDirection="column",u.style.alignItems="center",u.style.width="100%";var s=document.createElement("div");if(s.style.display="flex",s.style.justifyContent="space-between",s.style.width=null!==(n=e.width)&&void 0!==n?n:"100%",this.minLabel=document.createElement("span"),this.minLabel.textContent=e.min,this.maxLabel=document.createElement("span"),this.maxLabel.textContent=e.max,this.currentLabel=document.createElement("span"),this.currentLabel.textContent=r.value,e.font&&(this.currentLabel.style.fontFamily=e.font),e.font&&(this.minLabel.style.fontFamily=e.font),e.font&&(this.maxLabel.style.fontFamily=e.font),e.plain||(s.appendChild(this.minLabel),s.appendChild(this.currentLabel),s.appendChild(this.maxLabel)),r.addEventListener("input",function(){o.currentLabel.textContent=r.value}),window.matchMedia("(max-device-width: 415px)").matches)if(e.plain)r.style.width="80%";else{var d,h;r.style.height="20px",r.style.background=null!==(d=e.style.trackColor)&&void 0!==d?d:"1abc9C",r.style.borderRadius="10px",r.style.fontSize="3rem",r.style.width="80%";var m="\n #slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background: ".concat(null!==(h=e.style.thumbColor)&&void 0!==h?h:"blue",";\n cursor: pointer;\n }\n "),f=document.createElement("style");f.appendChild(document.createTextNode(m)),document.head.appendChild(f)}return u.appendChild(s),u.appendChild(r),this.el=u,this}},{key:"value",value:function(){return this.el.querySelector("#slider").value}},{key:"render",value:function(e){if(!e)return this.el;document.querySelector(e).appendChild(this.el)}}])&&a(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}();window.Range=l,module.exports=t})();
1
+ (()=>{"use strict";var e={d:(n,t)=>{for(var r in t)e.o(t,r)&&!e.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:t[r]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},n={};e.r(n),e.d(n,{Range:()=>s});function t(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=function(e,n){if(e){if("string"==typeof e)return r(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?r(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){t&&(e=t);var a=0,o=function(){};return{s:o,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,l=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return c=e.done,e},e:function(e){l=!0,i=e},f:function(){try{c||null==t.return||t.return()}finally{if(l)throw i}}}}function r(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}!function(){try{var e=localStorage.getItem("nodality.theme.mode");if("light"===e||"dark"===e)return e}catch(e){}"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches}();var a={hexalize:{stage:"cell",decl:function(e){return"uniform float ".concat(e,"size;")},code:function(e){return"\n {\n vec2 hp = warped / ".concat(e,"size;\n vec2 hr = vec2(1.0, 1.7320508), hh = hr * 0.5;\n vec2 ha = mod(hp, hr) - hh, hb = mod(hp - hh, hr) - hh;\n vec2 gv = dot(ha, ha) < dot(hb, hb) ? ha : hb;\n center = (hp - gv) * ").concat(e,"size;\n gv = abs(gv);\n edge = max(edge, smoothstep(0.44, 0.5,\n max(dot(gv, normalize(vec2(1.0, 1.7320508))), gv.x)));\n }")},uniforms:function(e,n){return{size:["1f",(e.size||24)*n]}}},offset:{stage:"warp",decl:function(e){return"uniform float ".concat(e,"strength; uniform float ").concat(e,"radius;")},code:function(e){return"\n {\n float d = length(warped - u_mouse);\n float fall = 1.0 - smoothstep(0.0, ".concat(e,"radius, d);\n vec2 dir = d > 0.5 ? (warped - u_mouse) / d : vec2(0.0);\n warped -= dir * ").concat(e,"strength * fall;\n }")},uniforms:function(e,n){return{strength:["1f",(e.strength||20)*n],radius:["1f",(e.radius||260)*n]}}},duotone:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"a; uniform vec3 ").concat(e,"b; uniform float ").concat(e,"radius;")},code:function(e,n){return"\n {\n float lum = dot(col, vec3(0.299, 0.587, 0.114));\n vec3 duo = mix(".concat(e,"a, ").concat(e,"b, lum);\n ").concat("mouse"===n.by?"float mask = 1.0 - smoothstep(".concat(e,"radius * 0.35, ").concat(e,"radius, length(center - u_mouse));"):"float mask = 1.0;","\n col = mix(col, duo, mask);\n }")},uniforms:function(e,n){var t=e.colors||["#104B87","#E8FF00"];return{a:["3fv",o(t[0])],b:["3fv",o(t[1])],radius:["1f",(e.radius||220)*n]}}},edges:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"color; uniform float ").concat(e,"strength;")},code:function(e){return"\n {\n edgeCol = ".concat(e,"color;\n edgeCov = max(edgeCov, edge * ").concat(e,"strength);\n }")},uniforms:function(e){return{color:["3fv",o(e.color||"#FFFFFF")],strength:["1f",null!=e.strength?e.strength:1]}}},stir:{stage:["warp","color"],decl:function(e){return"\n uniform sampler2D ".concat(e,"field;\n uniform float ").concat(e,"strength;\n uniform float ").concat(e,"sheen;\n uniform vec3 ").concat(e,"tint;\n uniform float ").concat(e,"enc;\n uniform float ").concat(e,"range;\n vec2 ").concat(e,"flow(vec2 uvp) {\n vec4 t = texture2D(").concat(e,"field, clamp(uvp, 0.001, 0.999));\n return ").concat(e,"enc > 0.5 ? (t.xy * 2.0 - 1.0) * ").concat(e,"range : t.xy;\n }")},code:function(e,n,t){return"warp"===t?"\n {\n // frag/warped are top-down pixels; the field is bottom-up\n // [0,1] — flip y going in, and flip the y of the vector\n // coming out so content drags WITH the pointer.\n vec2 fuv = vec2(warped.x / u_res.x, 1.0 - warped.y / u_res.y);\n vec2 m = ".concat(e,"flow(fuv);\n warped += vec2(m.x, -m.y) * ").concat(e,"strength;\n }"):"\n {\n // Moving liquid catches light: brighten toward the tint\n // where the flow is fast. Sampled at the cell centre so it\n // stays flat per tile when a cell op runs upstream.\n vec2 suv = vec2(center.x / u_res.x, 1.0 - center.y / u_res.y);\n float sm = length(".concat(e,"flow(suv));\n col = mix(col, ").concat(e,"tint, (1.0 - exp(-sm * 5.0)) * ").concat(e,"sheen);\n }")},uniforms:function(e,n){return{strength:["1f",(null!=e.strength?e.strength:26)*n],sheen:["1f",null!=e.sheen?e.sheen:.25],tint:["3fv",o(e.tint||"#BFE9FF")]}},field:{frag:function(){return"\nprecision highp float;\nuniform sampler2D s_field;\nuniform vec2 s_texel;\nuniform float s_dt;\nuniform float s_decay;\nuniform float s_swirl;\nuniform float s_advect;\nuniform vec2 s_point;\nuniform vec2 s_impulse;\nuniform float s_radius;\nuniform float s_aspect;\nuniform float s_idle;\nuniform float s_time;\nuniform float s_enc;\nuniform float s_range;\n\nvec2 rd(vec2 uvp) {\n vec4 t = texture2D(s_field, clamp(uvp, 0.0, 1.0));\n return s_enc > 0.5 ? (t.xy * 2.0 - 1.0) * s_range : t.xy;\n}\n\nvoid main() {\n vec2 uv = gl_FragCoord.xy * s_texel;\n vec2 m = rd(uv);\n\n // 1. Semi-Lagrangian backtrace: momentum rides its own flow.\n vec2 a = rd(uv - m * s_advect * s_dt);\n\n // 2. Curl of the field, normalised so the swirl setting is\n // resolution independent (central differences over two texels).\n float r = rd(uv + vec2(s_texel.x, 0.0)).y;\n float l = rd(uv - vec2(s_texel.x, 0.0)).y;\n float t = rd(uv + vec2(0.0, s_texel.y)).x;\n float b = rd(uv - vec2(0.0, s_texel.y)).x;\n float curl = ((r - l) - (t - b)) * 0.5 / s_texel.y;\n\n // 3. Rotate momentum by the local curl angle. Norm preserving, so\n // eddies spin and survive rather than smearing out — this is\n // what replaces vorticity confinement + pressure projection.\n float th = curl * s_swirl * s_dt;\n float cs = cos(th), sn = sin(th);\n a = mat2(cs, sn, -sn, cs) * a;\n\n // 4. Viscous decay (frame-rate independent).\n a *= pow(s_decay, s_dt * 60.0);\n\n // 5. The spoon: a gaussian impulse of pointer velocity.\n vec2 d = uv - s_point;\n d.x *= s_aspect;\n a += s_impulse * exp(-dot(d, d) / max(s_radius * s_radius, 1e-6));\n\n // 6. Optional hands-free stir: a source orbiting the centre.\n if (s_idle > 0.0) {\n float ia = s_time * 0.6;\n vec2 ic = vec2(0.5 + 0.22 * cos(ia), 0.5 + 0.22 * sin(ia));\n vec2 id = uv - ic;\n id.x *= s_aspect;\n a += vec2(-sin(ia), cos(ia)) * s_idle *\n exp(-dot(id, id) / max(s_radius * s_radius, 1e-6)) * s_dt * 60.0;\n }\n\n // Keep the field inside the encodable range.\n float mg = length(a);\n if (mg > s_range) a *= s_range / mg;\n\n gl_FragColor = s_enc > 0.5\n ? vec4(a / s_range * 0.5 + 0.5, 0.0, 1.0)\n : vec4(a, 0.0, 1.0);\n}"},uniforms:function(e){return{s_decay:["1f",null!=e.decay?e.decay:.985],s_swirl:["1f",null!=e.swirl?e.swirl:2.4],s_advect:["1f",null!=e.advect?e.advect:.35],s_radius:["1f",null!=e.radius?e.radius:.1],s_idle:["1f",null!=e.idle?e.idle:0]}},force:function(e){return null!=e.force?e.force:1},resolution:function(e){return Math.max(32,Math.min(e.resolution||192,512))}}},blobs:{stage:"color",overlay:!0,mips:!0,decl:function(e){return"\n uniform vec3 ".concat(e,"blobs[").concat(12,"];\n uniform int ").concat(e,"count;\n uniform vec3 ").concat(e,"tint;\n uniform float ").concat(e,"refract;\n uniform float ").concat(e,"rim;\n uniform float ").concat(e,"alpha;\n uniform float ").concat(e,"irid;\n uniform float ").concat(e,"disp;\n uniform float ").concat(e,"frost;\n float ").concat(e,"hash(vec3 v) {\n return fract(sin(dot(v, vec3(21.9898, 63.233, 41.719))) * 41739.317);\n }\n float ").concat(e,"noise(vec3 v) {\n vec3 f = floor(v);\n vec3 r = v - f;\n r = r * r * (3.0 - 2.0 * r);\n float c000 = ").concat(e,"hash(f);\n float c100 = ").concat(e,"hash(f + vec3(1.0, 0.0, 0.0));\n float c010 = ").concat(e,"hash(f + vec3(0.0, 1.0, 0.0));\n float c110 = ").concat(e,"hash(f + vec3(1.0, 1.0, 0.0));\n float c001 = ").concat(e,"hash(f + vec3(0.0, 0.0, 1.0));\n float c101 = ").concat(e,"hash(f + vec3(1.0, 0.0, 1.0));\n float c011 = ").concat(e,"hash(f + vec3(0.0, 1.0, 1.0));\n float c111 = ").concat(e,"hash(f + vec3(1.0, 1.0, 1.0));\n return mix(\n mix(mix(c000, c100, r.x), mix(c010, c110, r.x), r.y),\n mix(mix(c001, c101, r.x), mix(c011, c111, r.x), r.y), r.z);\n }")},code:function(e){return"\n {\n float field = 0.0;\n vec2 grad = vec2(0.0);\n for (int bi = 0; bi < ".concat(12,"; bi++) {\n if (bi >= ").concat(e,"count) break;\n vec2 bd = frag - ").concat(e,"blobs[bi].xy;\n float br = ").concat(e,"blobs[bi].z;\n float dd = max(dot(bd, bd), 1.0);\n field += (br * br) / dd;\n grad += (-2.0 * (br * br) / (dd * dd)) * bd;\n }\n float bmask = smoothstep(0.6, 1.0, field);\n if (bmask > 0.003) {\n float gmag = length(grad);\n vec2 g2 = gmag > 1e-6 ? -grad / gmag : vec2(0.0);\n // Pseudo-3D surface normal from the 2D field. For a\n // metaball field (sum of r^2/d^2), 1/sqrt(field) IS the\n // normalized radial position: 0 at the centre, 1 at the\n // surface. That yields a true hemisphere profile — the\n // curvature (and therefore refraction) varies smoothly\n // across the WHOLE disc, not just an edge annulus.\n float s = clamp(inversesqrt(max(field, 1e-4)), 0.0, 1.0);\n vec3 n = normalize(vec3(g2 * s, sqrt(max(1.0 - s * s, 0.004))));\n vec3 rd = vec3(0.0, 0.0, -1.0);\n\n // Dispersion: refract each channel with a slightly\n // different index (water-glass ~1.33). Near the rim the\n // exit direction flattens (|z| -> 0), so the sampling\n // offsets stretch — producing the smooth concentric\n // colour-fringed bands of a thick lens.\n float ca = 0.03 * ").concat(e,"disp;\n vec3 tR = refract(rd, n, 1.0 / (1.33 - ca));\n vec3 tG = refract(rd, n, 1.0 / 1.33);\n vec3 tB = refract(rd, n, 1.0 / (1.33 + ca));\n vec2 oR = tR.xy * (").concat(e,"refract / max(abs(tR.z), 0.3));\n vec2 oG = tG.xy * (").concat(e,"refract / max(abs(tG.z), 0.3));\n vec2 oB = tB.xy * (").concat(e,"refract / max(abs(tB.z), 0.3));\n\n // Blur grows with how far the ray was bent (mip bias), so\n // strongly-refracted regions smear smoothly instead of\n // showing sharp displaced copies. frost adds a base blur.\n float lod = ").concat(e,"frost * 5.0 + log2(1.0 + length(oG) * 0.035);\n vec2 px = 1.0 / u_res;\n vec4 sG = texture2D(u_tex, clamp(uv + oG * px, 0.002, 0.998), lod);\n vec3 refr;\n refr.r = texture2D(u_tex, clamp(uv + oR * px, 0.002, 0.998), lod).r;\n refr.g = sG.g;\n refr.b = texture2D(u_tex, clamp(uv + oB * px, 0.002, 0.998), lod).b;\n // Blend in (approximately) linear light for clean fringes.\n refr = pow(max(refr, 0.0), vec3(2.2));\n\n vec3 tintLin = pow(").concat(e,"tint, vec3(2.2));\n vec3 bodyLin = mix(tintLin * 0.35, refr, sG.a);\n\n // Glass darkens toward the silhouette (absorption), the\n // opposite of an additive glow ring.\n float edge = pow(1.0 - clamp(n.z, 0.0, 1.0), 1.5);\n bodyLin *= 1.0 - 0.35 * ").concat(e,"rim * edge;\n vec3 body = pow(max(bodyLin, 0.0), vec3(1.0 / 2.2));\n\n // Sparse iridescent glints: two drifting value-noise\n // fields sampled on the reflection direction, one warm\n // one cool, sharpened hard so only sparkles survive.\n vec3 rf = reflect(rd, n);\n float nA = ").concat(e,"noise(rf * 2.3 + u_time * 0.5);\n float nB = ").concat(e,"noise(rf * 2.3 - u_time * 0.5);\n vec3 glint = pow(max(vec3(0.30, 0.52, 0.86) * nA +\n vec3(0.80, 0.56, 0.34) * nB, 0.0), vec3(6.0));\n body += glint * ").concat(e,"irid;\n\n // Small hard specular from a fixed key light.\n vec3 L = normalize(vec3(-0.5, 0.7, 0.6));\n float spec = pow(max(dot(reflect(-L, n), vec3(0.0, 0.0, 1.0)), 0.0), 60.0);\n body += spec * 0.35;\n\n ovCol = body;\n ovA = max(ovA, bmask * ").concat(e,"alpha);\n }\n }")},uniforms:function(e,n){return{tint:["3fv",o(e.color||"#EAF4EE")],refract:["1f",(null!=e.refract?e.refract:70)*n],rim:["1f",null!=e.rim?e.rim:.6],alpha:["1f",null!=e.alpha?e.alpha:1],irid:["1f",null!=e.iridescence?e.iridescence:.8],disp:["1f",null!=e.dispersion?e.dispersion:1],frost:["1f",null!=e.frost?e.frost:.25]}},init:function(e,n,t,r){for(var a=(e.radius||46)*n,o=Math.max(1,Math.min(null!=e.trail?e.trail:7,12)),i=[],c=0,l=0;l<o;l++){var s=Math.pow(.86,l);i.push(s),c+=s*s}for(var u=Math.sqrt(c),f=i.map(function(e){return a*e/u}),d=i.map(function(e,n){return.85*a*Math.pow(.955,n)}),h=function(e,n){return e+Math.random()*(n-e)},m=Math.max(0,Math.min((e.count||1)-1,12-o)),v=[],p=0;p<m;p++){var y=h(0,2*Math.PI),g=h(30,80)*n;v.push({x:h(a,t-a),y:h(a,r-a),r:a*h(.45,.8),vx:Math.cos(y)*g,vy:Math.sin(y)*g,phase:h(0,2*Math.PI)})}for(var b={x:.5*t,y:.55*r},x=[],w=0;w<o;w++)x.push({x:b.x,y:b.y});return{head:b,chain:x,nTrail:o,drifters:v,trailIdleR:f,trailMoveR:d,stretch:0,seg:.9*a}},tick:function(e,n){var r=Math.min(n.dt,.05),a=n.w,o=n.h,i=1-Math.exp(9*-r);e.head.x+=(n.mouseX-e.head.x)*i,e.head.y+=(n.mouseY-e.head.y)*i;var c=e.chain;c[0].x=e.head.x,c[0].y=e.head.y;for(var l=1-Math.exp(16*-r),s=1;s<c.length;s++){var u=c[s-1],f=c[s],d=u.x-f.x,h=u.y-f.y,m=Math.hypot(d,h)||1e-4,v=e.seg;m>v&&(f.x+=d*(1-v/m),f.y+=h*(1-v/m)),f.x+=(u.x-f.x)*l,f.y+=(u.y-f.y)*l}var p=c[c.length-1],y=Math.hypot(p.x-e.head.x,p.y-e.head.y),g=Math.max(1,e.seg*(e.nTrail-1)),b=Math.min(1,y/g);e.stretch+=(b-e.stretch)*(1-Math.exp(8*-r));var x,w=t(e.drifters);try{for(w.s();!(x=w.n()).done;){var _=x.value;_.x+=_.vx*r,_.y+=_.vy*r,_.x<_.r?(_.x=_.r,_.vx=Math.abs(_.vx)):_.x>a-_.r&&(_.x=a-_.r,_.vx=-Math.abs(_.vx)),_.y<_.r?(_.y=_.r,_.vy=Math.abs(_.vy)):_.y>o-_.r&&(_.y=o-_.r,_.vy=-Math.abs(_.vy)),_.phase+=1.6*r}}catch(e){w.e(e)}finally{w.f()}for(var M=new Float32Array(36),k=e.stretch,C=0;C<e.nTrail;C++){var S=c[C];M[3*C]=S.x,M[3*C+1]=S.y,M[3*C+2]=e.trailIdleR[C]+(e.trailMoveR[C]-e.trailIdleR[C])*k}return e.drifters.forEach(function(n,t){var r=e.nTrail+t;M[3*r]=n.x,M[3*r+1]=n.y,M[3*r+2]=n.r*(1+.12*Math.sin(n.phase))}),[{name:"blobs",kind:"3fv",value:M},{name:"count",kind:"1i",value:e.nTrail+e.drifters.length}]}}};function o(e){return[1,3,5].map(function(n){return parseInt(e.slice(n,n+2),16)/255})}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,l(r.key),r)}}function l(e){var n=function(e){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=i(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(n)?n:n+""}Object.keys(a);var s=function(){return e=function e(n){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.el=null,this.minLabel=null,this.maxLabel=null,this.currentLabel=null},(n=[{key:"padding",value:function(e){return this.el.style.padding=e,this}},{key:"toCode",value:function(){var e=JSON.stringify(this.options,null,4);return["new Range().set(".concat(e,")")]}},{key:"set",value:function(e){var n,t,r=this;this.options=e;var a=document.createElement("input");if(a.setAttribute("id","slider"),a.setAttribute("type","range"),a.setAttribute("min",e.min),a.setAttribute("max",e.max),a.setAttribute("value",e.min),a.style.width=null!==(n=e.width)&&void 0!==n?n:"100%",!e.plain){var o,i;a.style.setProperty("-webkit-appearance","none"),a.style.appearance="none",a.style.height="9px",a.style.background=null!==(o=e.style.trackColor)&&void 0!==o?o:"orange",a.style.borderRadius="5px";var c="\n #slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background: ".concat(null!==(i=e.style.thumbColor)&&void 0!==i?i:"4CAF50",";\n cursor: pointer;\n }\n "),l=document.createElement("style");l.appendChild(document.createTextNode(c)),document.head.appendChild(l)}var s=document.createElement("div");s.style.display="flex",s.style.flexDirection="column",s.style.alignItems="center",s.style.width="100%";var u=document.createElement("div");if(u.style.display="flex",u.style.justifyContent="space-between",u.style.width=null!==(t=e.width)&&void 0!==t?t:"100%",this.minLabel=document.createElement("span"),this.minLabel.textContent=e.min,this.maxLabel=document.createElement("span"),this.maxLabel.textContent=e.max,this.currentLabel=document.createElement("span"),this.currentLabel.textContent=a.value,e.font&&(this.currentLabel.style.fontFamily=e.font),e.font&&(this.minLabel.style.fontFamily=e.font),e.font&&(this.maxLabel.style.fontFamily=e.font),e.plain||(u.appendChild(this.minLabel),u.appendChild(this.currentLabel),u.appendChild(this.maxLabel)),a.addEventListener("input",function(){r.currentLabel.textContent=a.value}),window.matchMedia("(max-device-width: 415px)").matches)if(e.plain)a.style.width="80%";else{var f,d;a.style.height="20px",a.style.background=null!==(f=e.style.trackColor)&&void 0!==f?f:"1abc9C",a.style.borderRadius="10px",a.style.fontSize="3rem",a.style.width="80%";var h="\n #slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background: ".concat(null!==(d=e.style.thumbColor)&&void 0!==d?d:"blue",";\n cursor: pointer;\n }\n "),m=document.createElement("style");m.appendChild(document.createTextNode(h)),document.head.appendChild(m)}return s.appendChild(u),s.appendChild(a),this.el=s,this}},{key:"value",value:function(){return this.el.querySelector("#slider").value}},{key:"render",value:function(e){if(!e)return this.el;document.querySelector(e).appendChild(this.el)}}])&&c(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n}();window.Range=s,module.exports=n})();
package/dist/range.esm.js CHANGED
@@ -1 +1 @@
1
- !function(){try{var e=localStorage.getItem("nodality.theme.mode");if("light"===e||"dark"===e)return e}catch(e){}"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches}();var e={hexalize:{stage:"cell",decl:function(e){return"uniform float ".concat(e,"size;")},code:function(e){return"\n {\n vec2 hp = warped / ".concat(e,"size;\n vec2 hr = vec2(1.0, 1.7320508), hh = hr * 0.5;\n vec2 ha = mod(hp, hr) - hh, hb = mod(hp - hh, hr) - hh;\n vec2 gv = dot(ha, ha) < dot(hb, hb) ? ha : hb;\n center = (hp - gv) * ").concat(e,"size;\n gv = abs(gv);\n edge = max(edge, smoothstep(0.44, 0.5,\n max(dot(gv, normalize(vec2(1.0, 1.7320508))), gv.x)));\n }")},uniforms:function(e,t){return{size:["1f",(e.size||24)*t]}}},offset:{stage:"warp",decl:function(e){return"uniform float ".concat(e,"strength; uniform float ").concat(e,"radius;")},code:function(e){return"\n {\n float d = length(warped - u_mouse);\n float fall = 1.0 - smoothstep(0.0, ".concat(e,"radius, d);\n vec2 dir = d > 0.5 ? (warped - u_mouse) / d : vec2(0.0);\n warped -= dir * ").concat(e,"strength * fall;\n }")},uniforms:function(e,t){return{strength:["1f",(e.strength||20)*t],radius:["1f",(e.radius||260)*t]}}},duotone:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"a; uniform vec3 ").concat(e,"b; uniform float ").concat(e,"radius;")},code:function(e,t){return"\n {\n float lum = dot(col, vec3(0.299, 0.587, 0.114));\n vec3 duo = mix(".concat(e,"a, ").concat(e,"b, lum);\n ").concat("mouse"===t.by?"float mask = 1.0 - smoothstep(".concat(e,"radius * 0.35, ").concat(e,"radius, length(center - u_mouse));"):"float mask = 1.0;","\n col = mix(col, duo, mask);\n }")},uniforms:function(e,n){var o=e.colors||["#104B87","#E8FF00"];return{a:["3fv",t(o[0])],b:["3fv",t(o[1])],radius:["1f",(e.radius||220)*n]}}},edges:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"color; uniform float ").concat(e,"strength;")},code:function(e){return"\n {\n edgeCol = ".concat(e,"color;\n edgeCov = max(edgeCov, edge * ").concat(e,"strength);\n }")},uniforms:function(e){return{color:["3fv",t(e.color||"#FFFFFF")],strength:["1f",null!=e.strength?e.strength:1]}}}};function t(e){return[1,3,5].map(function(t){return parseInt(e.slice(t,t+2),16)/255})}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,r(o.key),o)}}function r(e){var t=function(e){if("object"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,"string");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:t+""}Object.keys(e);var a=function(){return e=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.el=null,this.minLabel=null,this.maxLabel=null,this.currentLabel=null},(t=[{key:"padding",value:function(e){return this.el.style.padding=e,this}},{key:"toCode",value:function(){var e=JSON.stringify(this.options,null,4);return["new Range().set(".concat(e,")")]}},{key:"set",value:function(e){var t,n,o=this;this.options=e;var r=document.createElement("input");if(r.setAttribute("id","slider"),r.setAttribute("type","range"),r.setAttribute("min",e.min),r.setAttribute("max",e.max),r.setAttribute("value",e.min),r.style.width=null!==(t=e.width)&&void 0!==t?t:"100%",!e.plain){var a,i;r.style.setProperty("-webkit-appearance","none"),r.style.appearance="none",r.style.height="9px",r.style.background=null!==(a=e.style.trackColor)&&void 0!==a?a:"orange",r.style.borderRadius="5px";var l="\n #slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background: ".concat(null!==(i=e.style.thumbColor)&&void 0!==i?i:"4CAF50",";\n cursor: pointer;\n }\n "),c=document.createElement("style");c.appendChild(document.createTextNode(l)),document.head.appendChild(c)}var u=document.createElement("div");u.style.display="flex",u.style.flexDirection="column",u.style.alignItems="center",u.style.width="100%";var s=document.createElement("div");if(s.style.display="flex",s.style.justifyContent="space-between",s.style.width=null!==(n=e.width)&&void 0!==n?n:"100%",this.minLabel=document.createElement("span"),this.minLabel.textContent=e.min,this.maxLabel=document.createElement("span"),this.maxLabel.textContent=e.max,this.currentLabel=document.createElement("span"),this.currentLabel.textContent=r.value,e.font&&(this.currentLabel.style.fontFamily=e.font),e.font&&(this.minLabel.style.fontFamily=e.font),e.font&&(this.maxLabel.style.fontFamily=e.font),e.plain||(s.appendChild(this.minLabel),s.appendChild(this.currentLabel),s.appendChild(this.maxLabel)),r.addEventListener("input",function(){o.currentLabel.textContent=r.value}),window.matchMedia("(max-device-width: 415px)").matches)if(e.plain)r.style.width="80%";else{var d,h;r.style.height="20px",r.style.background=null!==(d=e.style.trackColor)&&void 0!==d?d:"1abc9C",r.style.borderRadius="10px",r.style.fontSize="3rem",r.style.width="80%";var m="\n #slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background: ".concat(null!==(h=e.style.thumbColor)&&void 0!==h?h:"blue",";\n cursor: pointer;\n }\n "),f=document.createElement("style");f.appendChild(document.createTextNode(m)),document.head.appendChild(f)}return u.appendChild(s),u.appendChild(r),this.el=u,this}},{key:"value",value:function(){return this.el.querySelector("#slider").value}},{key:"render",value:function(e){if(!e)return this.el;document.querySelector(e).appendChild(this.el)}}])&&o(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}();window.Range=a;export{a as Range};
1
+ function n(n,t){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!r){if(Array.isArray(n)||(r=function(n,t){if(n){if("string"==typeof n)return e(n,t);var r={}.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(n,t):void 0}}(n))||t&&n&&"number"==typeof n.length){r&&(n=r);var a=0,o=function(){};return{s:o,n:function(){return a>=n.length?{done:!0}:{done:!1,value:n[a++]}},e:function(n){throw n},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,l=!1;return{s:function(){r=r.call(n)},n:function(){var n=r.next();return c=n.done,n},e:function(n){l=!0,i=n},f:function(){try{c||null==r.return||r.return()}finally{if(l)throw i}}}}function e(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}!function(){try{var n=localStorage.getItem("nodality.theme.mode");if("light"===n||"dark"===n)return n}catch(n){}"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches}();var t={hexalize:{stage:"cell",decl:function(n){return"uniform float ".concat(n,"size;")},code:function(n){return"\n {\n vec2 hp = warped / ".concat(n,"size;\n vec2 hr = vec2(1.0, 1.7320508), hh = hr * 0.5;\n vec2 ha = mod(hp, hr) - hh, hb = mod(hp - hh, hr) - hh;\n vec2 gv = dot(ha, ha) < dot(hb, hb) ? ha : hb;\n center = (hp - gv) * ").concat(n,"size;\n gv = abs(gv);\n edge = max(edge, smoothstep(0.44, 0.5,\n max(dot(gv, normalize(vec2(1.0, 1.7320508))), gv.x)));\n }")},uniforms:function(n,e){return{size:["1f",(n.size||24)*e]}}},offset:{stage:"warp",decl:function(n){return"uniform float ".concat(n,"strength; uniform float ").concat(n,"radius;")},code:function(n){return"\n {\n float d = length(warped - u_mouse);\n float fall = 1.0 - smoothstep(0.0, ".concat(n,"radius, d);\n vec2 dir = d > 0.5 ? (warped - u_mouse) / d : vec2(0.0);\n warped -= dir * ").concat(n,"strength * fall;\n }")},uniforms:function(n,e){return{strength:["1f",(n.strength||20)*e],radius:["1f",(n.radius||260)*e]}}},duotone:{stage:"color",decl:function(n){return"uniform vec3 ".concat(n,"a; uniform vec3 ").concat(n,"b; uniform float ").concat(n,"radius;")},code:function(n,e){return"\n {\n float lum = dot(col, vec3(0.299, 0.587, 0.114));\n vec3 duo = mix(".concat(n,"a, ").concat(n,"b, lum);\n ").concat("mouse"===e.by?"float mask = 1.0 - smoothstep(".concat(n,"radius * 0.35, ").concat(n,"radius, length(center - u_mouse));"):"float mask = 1.0;","\n col = mix(col, duo, mask);\n }")},uniforms:function(n,e){var t=n.colors||["#104B87","#E8FF00"];return{a:["3fv",r(t[0])],b:["3fv",r(t[1])],radius:["1f",(n.radius||220)*e]}}},edges:{stage:"color",decl:function(n){return"uniform vec3 ".concat(n,"color; uniform float ").concat(n,"strength;")},code:function(n){return"\n {\n edgeCol = ".concat(n,"color;\n edgeCov = max(edgeCov, edge * ").concat(n,"strength);\n }")},uniforms:function(n){return{color:["3fv",r(n.color||"#FFFFFF")],strength:["1f",null!=n.strength?n.strength:1]}}},stir:{stage:["warp","color"],decl:function(n){return"\n uniform sampler2D ".concat(n,"field;\n uniform float ").concat(n,"strength;\n uniform float ").concat(n,"sheen;\n uniform vec3 ").concat(n,"tint;\n uniform float ").concat(n,"enc;\n uniform float ").concat(n,"range;\n vec2 ").concat(n,"flow(vec2 uvp) {\n vec4 t = texture2D(").concat(n,"field, clamp(uvp, 0.001, 0.999));\n return ").concat(n,"enc > 0.5 ? (t.xy * 2.0 - 1.0) * ").concat(n,"range : t.xy;\n }")},code:function(n,e,t){return"warp"===t?"\n {\n // frag/warped are top-down pixels; the field is bottom-up\n // [0,1] — flip y going in, and flip the y of the vector\n // coming out so content drags WITH the pointer.\n vec2 fuv = vec2(warped.x / u_res.x, 1.0 - warped.y / u_res.y);\n vec2 m = ".concat(n,"flow(fuv);\n warped += vec2(m.x, -m.y) * ").concat(n,"strength;\n }"):"\n {\n // Moving liquid catches light: brighten toward the tint\n // where the flow is fast. Sampled at the cell centre so it\n // stays flat per tile when a cell op runs upstream.\n vec2 suv = vec2(center.x / u_res.x, 1.0 - center.y / u_res.y);\n float sm = length(".concat(n,"flow(suv));\n col = mix(col, ").concat(n,"tint, (1.0 - exp(-sm * 5.0)) * ").concat(n,"sheen);\n }")},uniforms:function(n,e){return{strength:["1f",(null!=n.strength?n.strength:26)*e],sheen:["1f",null!=n.sheen?n.sheen:.25],tint:["3fv",r(n.tint||"#BFE9FF")]}},field:{frag:function(){return"\nprecision highp float;\nuniform sampler2D s_field;\nuniform vec2 s_texel;\nuniform float s_dt;\nuniform float s_decay;\nuniform float s_swirl;\nuniform float s_advect;\nuniform vec2 s_point;\nuniform vec2 s_impulse;\nuniform float s_radius;\nuniform float s_aspect;\nuniform float s_idle;\nuniform float s_time;\nuniform float s_enc;\nuniform float s_range;\n\nvec2 rd(vec2 uvp) {\n vec4 t = texture2D(s_field, clamp(uvp, 0.0, 1.0));\n return s_enc > 0.5 ? (t.xy * 2.0 - 1.0) * s_range : t.xy;\n}\n\nvoid main() {\n vec2 uv = gl_FragCoord.xy * s_texel;\n vec2 m = rd(uv);\n\n // 1. Semi-Lagrangian backtrace: momentum rides its own flow.\n vec2 a = rd(uv - m * s_advect * s_dt);\n\n // 2. Curl of the field, normalised so the swirl setting is\n // resolution independent (central differences over two texels).\n float r = rd(uv + vec2(s_texel.x, 0.0)).y;\n float l = rd(uv - vec2(s_texel.x, 0.0)).y;\n float t = rd(uv + vec2(0.0, s_texel.y)).x;\n float b = rd(uv - vec2(0.0, s_texel.y)).x;\n float curl = ((r - l) - (t - b)) * 0.5 / s_texel.y;\n\n // 3. Rotate momentum by the local curl angle. Norm preserving, so\n // eddies spin and survive rather than smearing out — this is\n // what replaces vorticity confinement + pressure projection.\n float th = curl * s_swirl * s_dt;\n float cs = cos(th), sn = sin(th);\n a = mat2(cs, sn, -sn, cs) * a;\n\n // 4. Viscous decay (frame-rate independent).\n a *= pow(s_decay, s_dt * 60.0);\n\n // 5. The spoon: a gaussian impulse of pointer velocity.\n vec2 d = uv - s_point;\n d.x *= s_aspect;\n a += s_impulse * exp(-dot(d, d) / max(s_radius * s_radius, 1e-6));\n\n // 6. Optional hands-free stir: a source orbiting the centre.\n if (s_idle > 0.0) {\n float ia = s_time * 0.6;\n vec2 ic = vec2(0.5 + 0.22 * cos(ia), 0.5 + 0.22 * sin(ia));\n vec2 id = uv - ic;\n id.x *= s_aspect;\n a += vec2(-sin(ia), cos(ia)) * s_idle *\n exp(-dot(id, id) / max(s_radius * s_radius, 1e-6)) * s_dt * 60.0;\n }\n\n // Keep the field inside the encodable range.\n float mg = length(a);\n if (mg > s_range) a *= s_range / mg;\n\n gl_FragColor = s_enc > 0.5\n ? vec4(a / s_range * 0.5 + 0.5, 0.0, 1.0)\n : vec4(a, 0.0, 1.0);\n}"},uniforms:function(n){return{s_decay:["1f",null!=n.decay?n.decay:.985],s_swirl:["1f",null!=n.swirl?n.swirl:2.4],s_advect:["1f",null!=n.advect?n.advect:.35],s_radius:["1f",null!=n.radius?n.radius:.1],s_idle:["1f",null!=n.idle?n.idle:0]}},force:function(n){return null!=n.force?n.force:1},resolution:function(n){return Math.max(32,Math.min(n.resolution||192,512))}}},blobs:{stage:"color",overlay:!0,mips:!0,decl:function(n){return"\n uniform vec3 ".concat(n,"blobs[").concat(12,"];\n uniform int ").concat(n,"count;\n uniform vec3 ").concat(n,"tint;\n uniform float ").concat(n,"refract;\n uniform float ").concat(n,"rim;\n uniform float ").concat(n,"alpha;\n uniform float ").concat(n,"irid;\n uniform float ").concat(n,"disp;\n uniform float ").concat(n,"frost;\n float ").concat(n,"hash(vec3 v) {\n return fract(sin(dot(v, vec3(21.9898, 63.233, 41.719))) * 41739.317);\n }\n float ").concat(n,"noise(vec3 v) {\n vec3 f = floor(v);\n vec3 r = v - f;\n r = r * r * (3.0 - 2.0 * r);\n float c000 = ").concat(n,"hash(f);\n float c100 = ").concat(n,"hash(f + vec3(1.0, 0.0, 0.0));\n float c010 = ").concat(n,"hash(f + vec3(0.0, 1.0, 0.0));\n float c110 = ").concat(n,"hash(f + vec3(1.0, 1.0, 0.0));\n float c001 = ").concat(n,"hash(f + vec3(0.0, 0.0, 1.0));\n float c101 = ").concat(n,"hash(f + vec3(1.0, 0.0, 1.0));\n float c011 = ").concat(n,"hash(f + vec3(0.0, 1.0, 1.0));\n float c111 = ").concat(n,"hash(f + vec3(1.0, 1.0, 1.0));\n return mix(\n mix(mix(c000, c100, r.x), mix(c010, c110, r.x), r.y),\n mix(mix(c001, c101, r.x), mix(c011, c111, r.x), r.y), r.z);\n }")},code:function(n){return"\n {\n float field = 0.0;\n vec2 grad = vec2(0.0);\n for (int bi = 0; bi < ".concat(12,"; bi++) {\n if (bi >= ").concat(n,"count) break;\n vec2 bd = frag - ").concat(n,"blobs[bi].xy;\n float br = ").concat(n,"blobs[bi].z;\n float dd = max(dot(bd, bd), 1.0);\n field += (br * br) / dd;\n grad += (-2.0 * (br * br) / (dd * dd)) * bd;\n }\n float bmask = smoothstep(0.6, 1.0, field);\n if (bmask > 0.003) {\n float gmag = length(grad);\n vec2 g2 = gmag > 1e-6 ? -grad / gmag : vec2(0.0);\n // Pseudo-3D surface normal from the 2D field. For a\n // metaball field (sum of r^2/d^2), 1/sqrt(field) IS the\n // normalized radial position: 0 at the centre, 1 at the\n // surface. That yields a true hemisphere profile — the\n // curvature (and therefore refraction) varies smoothly\n // across the WHOLE disc, not just an edge annulus.\n float s = clamp(inversesqrt(max(field, 1e-4)), 0.0, 1.0);\n vec3 n = normalize(vec3(g2 * s, sqrt(max(1.0 - s * s, 0.004))));\n vec3 rd = vec3(0.0, 0.0, -1.0);\n\n // Dispersion: refract each channel with a slightly\n // different index (water-glass ~1.33). Near the rim the\n // exit direction flattens (|z| -> 0), so the sampling\n // offsets stretch — producing the smooth concentric\n // colour-fringed bands of a thick lens.\n float ca = 0.03 * ").concat(n,"disp;\n vec3 tR = refract(rd, n, 1.0 / (1.33 - ca));\n vec3 tG = refract(rd, n, 1.0 / 1.33);\n vec3 tB = refract(rd, n, 1.0 / (1.33 + ca));\n vec2 oR = tR.xy * (").concat(n,"refract / max(abs(tR.z), 0.3));\n vec2 oG = tG.xy * (").concat(n,"refract / max(abs(tG.z), 0.3));\n vec2 oB = tB.xy * (").concat(n,"refract / max(abs(tB.z), 0.3));\n\n // Blur grows with how far the ray was bent (mip bias), so\n // strongly-refracted regions smear smoothly instead of\n // showing sharp displaced copies. frost adds a base blur.\n float lod = ").concat(n,"frost * 5.0 + log2(1.0 + length(oG) * 0.035);\n vec2 px = 1.0 / u_res;\n vec4 sG = texture2D(u_tex, clamp(uv + oG * px, 0.002, 0.998), lod);\n vec3 refr;\n refr.r = texture2D(u_tex, clamp(uv + oR * px, 0.002, 0.998), lod).r;\n refr.g = sG.g;\n refr.b = texture2D(u_tex, clamp(uv + oB * px, 0.002, 0.998), lod).b;\n // Blend in (approximately) linear light for clean fringes.\n refr = pow(max(refr, 0.0), vec3(2.2));\n\n vec3 tintLin = pow(").concat(n,"tint, vec3(2.2));\n vec3 bodyLin = mix(tintLin * 0.35, refr, sG.a);\n\n // Glass darkens toward the silhouette (absorption), the\n // opposite of an additive glow ring.\n float edge = pow(1.0 - clamp(n.z, 0.0, 1.0), 1.5);\n bodyLin *= 1.0 - 0.35 * ").concat(n,"rim * edge;\n vec3 body = pow(max(bodyLin, 0.0), vec3(1.0 / 2.2));\n\n // Sparse iridescent glints: two drifting value-noise\n // fields sampled on the reflection direction, one warm\n // one cool, sharpened hard so only sparkles survive.\n vec3 rf = reflect(rd, n);\n float nA = ").concat(n,"noise(rf * 2.3 + u_time * 0.5);\n float nB = ").concat(n,"noise(rf * 2.3 - u_time * 0.5);\n vec3 glint = pow(max(vec3(0.30, 0.52, 0.86) * nA +\n vec3(0.80, 0.56, 0.34) * nB, 0.0), vec3(6.0));\n body += glint * ").concat(n,"irid;\n\n // Small hard specular from a fixed key light.\n vec3 L = normalize(vec3(-0.5, 0.7, 0.6));\n float spec = pow(max(dot(reflect(-L, n), vec3(0.0, 0.0, 1.0)), 0.0), 60.0);\n body += spec * 0.35;\n\n ovCol = body;\n ovA = max(ovA, bmask * ").concat(n,"alpha);\n }\n }")},uniforms:function(n,e){return{tint:["3fv",r(n.color||"#EAF4EE")],refract:["1f",(null!=n.refract?n.refract:70)*e],rim:["1f",null!=n.rim?n.rim:.6],alpha:["1f",null!=n.alpha?n.alpha:1],irid:["1f",null!=n.iridescence?n.iridescence:.8],disp:["1f",null!=n.dispersion?n.dispersion:1],frost:["1f",null!=n.frost?n.frost:.25]}},init:function(n,e,t,r){for(var a=(n.radius||46)*e,o=Math.max(1,Math.min(null!=n.trail?n.trail:7,12)),i=[],c=0,l=0;l<o;l++){var s=Math.pow(.86,l);i.push(s),c+=s*s}for(var u=Math.sqrt(c),f=i.map(function(n){return a*n/u}),d=i.map(function(n,e){return.85*a*Math.pow(.955,e)}),h=function(n,e){return n+Math.random()*(e-n)},m=Math.max(0,Math.min((n.count||1)-1,12-o)),v=[],p=0;p<m;p++){var y=h(0,2*Math.PI),x=h(30,80)*e;v.push({x:h(a,t-a),y:h(a,r-a),r:a*h(.45,.8),vx:Math.cos(y)*x,vy:Math.sin(y)*x,phase:h(0,2*Math.PI)})}for(var g={x:.5*t,y:.55*r},b=[],w=0;w<o;w++)b.push({x:g.x,y:g.y});return{head:g,chain:b,nTrail:o,drifters:v,trailIdleR:f,trailMoveR:d,stretch:0,seg:.9*a}},tick:function(e,t){var r=Math.min(t.dt,.05),a=t.w,o=t.h,i=1-Math.exp(9*-r);e.head.x+=(t.mouseX-e.head.x)*i,e.head.y+=(t.mouseY-e.head.y)*i;var c=e.chain;c[0].x=e.head.x,c[0].y=e.head.y;for(var l=1-Math.exp(16*-r),s=1;s<c.length;s++){var u=c[s-1],f=c[s],d=u.x-f.x,h=u.y-f.y,m=Math.hypot(d,h)||1e-4,v=e.seg;m>v&&(f.x+=d*(1-v/m),f.y+=h*(1-v/m)),f.x+=(u.x-f.x)*l,f.y+=(u.y-f.y)*l}var p=c[c.length-1],y=Math.hypot(p.x-e.head.x,p.y-e.head.y),x=Math.max(1,e.seg*(e.nTrail-1)),g=Math.min(1,y/x);e.stretch+=(g-e.stretch)*(1-Math.exp(8*-r));var b,w=n(e.drifters);try{for(w.s();!(b=w.n()).done;){var _=b.value;_.x+=_.vx*r,_.y+=_.vy*r,_.x<_.r?(_.x=_.r,_.vx=Math.abs(_.vx)):_.x>a-_.r&&(_.x=a-_.r,_.vx=-Math.abs(_.vx)),_.y<_.r?(_.y=_.r,_.vy=Math.abs(_.vy)):_.y>o-_.r&&(_.y=o-_.r,_.vy=-Math.abs(_.vy)),_.phase+=1.6*r}}catch(n){w.e(n)}finally{w.f()}for(var k=new Float32Array(36),M=e.stretch,C=0;C<e.nTrail;C++){var L=c[C];k[3*C]=L.x,k[3*C+1]=L.y,k[3*C+2]=e.trailIdleR[C]+(e.trailMoveR[C]-e.trailIdleR[C])*M}return e.drifters.forEach(function(n,t){var r=e.nTrail+t;k[3*r]=n.x,k[3*r+1]=n.y,k[3*r+2]=n.r*(1+.12*Math.sin(n.phase))}),[{name:"blobs",kind:"3fv",value:k},{name:"count",kind:"1i",value:e.nTrail+e.drifters.length}]}}};function r(n){return[1,3,5].map(function(e){return parseInt(n.slice(e,e+2),16)/255})}function a(n){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},a(n)}function o(n,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,i(r.key),r)}}function i(n){var e=function(n){if("object"!=a(n)||!n)return n;var e=n[Symbol.toPrimitive];if(void 0!==e){var t=e.call(n,"string");if("object"!=a(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(n)}(n);return"symbol"==a(e)?e:e+""}Object.keys(t);var c=function(){return n=function n(e){!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.el=null,this.minLabel=null,this.maxLabel=null,this.currentLabel=null},(e=[{key:"padding",value:function(n){return this.el.style.padding=n,this}},{key:"toCode",value:function(){var n=JSON.stringify(this.options,null,4);return["new Range().set(".concat(n,")")]}},{key:"set",value:function(n){var e,t,r=this;this.options=n;var a=document.createElement("input");if(a.setAttribute("id","slider"),a.setAttribute("type","range"),a.setAttribute("min",n.min),a.setAttribute("max",n.max),a.setAttribute("value",n.min),a.style.width=null!==(e=n.width)&&void 0!==e?e:"100%",!n.plain){var o,i;a.style.setProperty("-webkit-appearance","none"),a.style.appearance="none",a.style.height="9px",a.style.background=null!==(o=n.style.trackColor)&&void 0!==o?o:"orange",a.style.borderRadius="5px";var c="\n #slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background: ".concat(null!==(i=n.style.thumbColor)&&void 0!==i?i:"4CAF50",";\n cursor: pointer;\n }\n "),l=document.createElement("style");l.appendChild(document.createTextNode(c)),document.head.appendChild(l)}var s=document.createElement("div");s.style.display="flex",s.style.flexDirection="column",s.style.alignItems="center",s.style.width="100%";var u=document.createElement("div");if(u.style.display="flex",u.style.justifyContent="space-between",u.style.width=null!==(t=n.width)&&void 0!==t?t:"100%",this.minLabel=document.createElement("span"),this.minLabel.textContent=n.min,this.maxLabel=document.createElement("span"),this.maxLabel.textContent=n.max,this.currentLabel=document.createElement("span"),this.currentLabel.textContent=a.value,n.font&&(this.currentLabel.style.fontFamily=n.font),n.font&&(this.minLabel.style.fontFamily=n.font),n.font&&(this.maxLabel.style.fontFamily=n.font),n.plain||(u.appendChild(this.minLabel),u.appendChild(this.currentLabel),u.appendChild(this.maxLabel)),a.addEventListener("input",function(){r.currentLabel.textContent=a.value}),window.matchMedia("(max-device-width: 415px)").matches)if(n.plain)a.style.width="80%";else{var f,d;a.style.height="20px",a.style.background=null!==(f=n.style.trackColor)&&void 0!==f?f:"1abc9C",a.style.borderRadius="10px",a.style.fontSize="3rem",a.style.width="80%";var h="\n #slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 25px;\n height: 25px;\n border-radius: 50%;\n background: ".concat(null!==(d=n.style.thumbColor)&&void 0!==d?d:"blue",";\n cursor: pointer;\n }\n "),m=document.createElement("style");m.appendChild(document.createTextNode(h)),document.head.appendChild(m)}return s.appendChild(u),s.appendChild(a),this.el=s,this}},{key:"value",value:function(){return this.el.querySelector("#slider").value}},{key:"render",value:function(n){if(!n)return this.el;document.querySelector(n).appendChild(this.el)}}])&&o(n.prototype,e),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,e}();window.Range=c;export{c as Range};
@@ -1 +1 @@
1
- (()=>{"use strict";var e={d:(t,n)=>{for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{SideBar:()=>s});!function(){try{var e=localStorage.getItem("nodality.theme.mode");if("light"===e||"dark"===e)return e}catch(e){}"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches}();var n={hexalize:{stage:"cell",decl:function(e){return"uniform float ".concat(e,"size;")},code:function(e){return"\n {\n vec2 hp = warped / ".concat(e,"size;\n vec2 hr = vec2(1.0, 1.7320508), hh = hr * 0.5;\n vec2 ha = mod(hp, hr) - hh, hb = mod(hp - hh, hr) - hh;\n vec2 gv = dot(ha, ha) < dot(hb, hb) ? ha : hb;\n center = (hp - gv) * ").concat(e,"size;\n gv = abs(gv);\n edge = max(edge, smoothstep(0.44, 0.5,\n max(dot(gv, normalize(vec2(1.0, 1.7320508))), gv.x)));\n }")},uniforms:function(e,t){return{size:["1f",(e.size||24)*t]}}},offset:{stage:"warp",decl:function(e){return"uniform float ".concat(e,"strength; uniform float ").concat(e,"radius;")},code:function(e){return"\n {\n float d = length(warped - u_mouse);\n float fall = 1.0 - smoothstep(0.0, ".concat(e,"radius, d);\n vec2 dir = d > 0.5 ? (warped - u_mouse) / d : vec2(0.0);\n warped -= dir * ").concat(e,"strength * fall;\n }")},uniforms:function(e,t){return{strength:["1f",(e.strength||20)*t],radius:["1f",(e.radius||260)*t]}}},duotone:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"a; uniform vec3 ").concat(e,"b; uniform float ").concat(e,"radius;")},code:function(e,t){return"\n {\n float lum = dot(col, vec3(0.299, 0.587, 0.114));\n vec3 duo = mix(".concat(e,"a, ").concat(e,"b, lum);\n ").concat("mouse"===t.by?"float mask = 1.0 - smoothstep(".concat(e,"radius * 0.35, ").concat(e,"radius, length(center - u_mouse));"):"float mask = 1.0;","\n col = mix(col, duo, mask);\n }")},uniforms:function(e,t){var n=e.colors||["#104B87","#E8FF00"];return{a:["3fv",o(n[0])],b:["3fv",o(n[1])],radius:["1f",(e.radius||220)*t]}}},edges:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"color; uniform float ").concat(e,"strength;")},code:function(e){return"\n {\n edgeCol = ".concat(e,"color;\n edgeCov = max(edgeCov, edge * ").concat(e,"strength);\n }")},uniforms:function(e){return{color:["3fv",o(e.color||"#FFFFFF")],strength:["1f",null!=e.strength?e.strength:1]}}}};function o(e){return[1,3,5].map(function(t){return parseInt(e.slice(t,t+2),16)/255})}function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function i(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,c(o.key),o)}}function c(e){var t=function(e){if("object"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}function a(){return a="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var o=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=l(e)););return e}(e,t);if(o){var r=Object.getOwnPropertyDescriptor(o,t);return r.get?r.get.call(arguments.length<3?e:n):r.value}},a.apply(null,arguments)}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}Object.keys(n);var s=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.ele=null,this.width="16em",this.height="100vh",this.els=t}return t=e,n=[{key:"setup",value:function(t){var n,o,r=this;t.tags&&(n=this,"function"==typeof(o=a(l(e.prototype),"setTags",n))?function(e){return o.apply(n,e)}:o)([t.tags]),t.width&&(this.width=t.width),t.height&&(this.height=t.height);var i=document.createElement("div");i.style.position="absolute";var c=document.createElement("button");c.style.position="absolute",c.style.background="white",c.style.opacity=.8,c.style.border="none",c.width="1.5em",c.height="1.5em",c.style.borderRadius="50%",c.style.zIndex=2;var s=document.createTextNode("☰");c.appendChild(s),c.style.fontSize="2em",window.matchMedia("(max-device-width: 400px)").matches&&(c.style.fontSize="6em"),window.matchMedia("(max-device-width: 400px)").matches&&t.fullMobile&&(this.width="100vw"),i.appendChild(c);var u=document.createElement("div");return u.style.position="absolute",u.style.backgroundColor="#fff",u.style.flexDirection="column",u.style.display="flex",u.style.alignItems="center",u.style.margin=0,u.style.padding=0,u.style.width=this.width,u.style.margin=0,u.style.marginTop="-10px",u.style.paddingTop="1em",u.style.paddingBottom="1em",u.style.height="".concat(this.height),u.style.transform="translateX(-".concat(this.width,")"),u.style.transition="all 0.80s",i.appendChild(u),this.hidden=!1,c.addEventListener("click",function(){r.hidden=!r.hidden;for(var e=0;e<u.children.length;e++)"☰"!==u.textContent&&(r.hidden?u.style.transform="translateX(0em)":u.style.transform="translateX(-".concat(r.width,")"))}),this.ele=i,this.els&&this.items(this.els),this}},{key:"background",value:function(e){return this.ele.children[1].style.backgroundColor=e.color,this.ele.children[1].style.opacity=e.opacity,this}},{key:"items",value:function(e){this.itemCount=e.length;for(var t=0;t<e.length;t++)this.ele.children[1].appendChild(e[t].render());return this}},{key:"render",value:function(e){return e?(document.querySelector(e).style.padding=0,document.querySelector(e).style.margin=0,document.querySelector(e).appendChild(this.ele),this.ele):this.ele}}],n&&i(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,n}();module.exports=t})();
1
+ (()=>{"use strict";var e={d:(n,t)=>{for(var r in t)e.o(t,r)&&!e.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:t[r]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},n={};e.r(n),e.d(n,{SideBar:()=>u});function t(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=function(e,n){if(e){if("string"==typeof e)return r(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?r(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){t&&(e=t);var o=0,a=function(){};return{s:a,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,s=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return c=e.done,e},e:function(e){s=!0,i=e},f:function(){try{c||null==t.return||t.return()}finally{if(s)throw i}}}}function r(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}!function(){try{var e=localStorage.getItem("nodality.theme.mode");if("light"===e||"dark"===e)return e}catch(e){}"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches}();var o={hexalize:{stage:"cell",decl:function(e){return"uniform float ".concat(e,"size;")},code:function(e){return"\n {\n vec2 hp = warped / ".concat(e,"size;\n vec2 hr = vec2(1.0, 1.7320508), hh = hr * 0.5;\n vec2 ha = mod(hp, hr) - hh, hb = mod(hp - hh, hr) - hh;\n vec2 gv = dot(ha, ha) < dot(hb, hb) ? ha : hb;\n center = (hp - gv) * ").concat(e,"size;\n gv = abs(gv);\n edge = max(edge, smoothstep(0.44, 0.5,\n max(dot(gv, normalize(vec2(1.0, 1.7320508))), gv.x)));\n }")},uniforms:function(e,n){return{size:["1f",(e.size||24)*n]}}},offset:{stage:"warp",decl:function(e){return"uniform float ".concat(e,"strength; uniform float ").concat(e,"radius;")},code:function(e){return"\n {\n float d = length(warped - u_mouse);\n float fall = 1.0 - smoothstep(0.0, ".concat(e,"radius, d);\n vec2 dir = d > 0.5 ? (warped - u_mouse) / d : vec2(0.0);\n warped -= dir * ").concat(e,"strength * fall;\n }")},uniforms:function(e,n){return{strength:["1f",(e.strength||20)*n],radius:["1f",(e.radius||260)*n]}}},duotone:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"a; uniform vec3 ").concat(e,"b; uniform float ").concat(e,"radius;")},code:function(e,n){return"\n {\n float lum = dot(col, vec3(0.299, 0.587, 0.114));\n vec3 duo = mix(".concat(e,"a, ").concat(e,"b, lum);\n ").concat("mouse"===n.by?"float mask = 1.0 - smoothstep(".concat(e,"radius * 0.35, ").concat(e,"radius, length(center - u_mouse));"):"float mask = 1.0;","\n col = mix(col, duo, mask);\n }")},uniforms:function(e,n){var t=e.colors||["#104B87","#E8FF00"];return{a:["3fv",a(t[0])],b:["3fv",a(t[1])],radius:["1f",(e.radius||220)*n]}}},edges:{stage:"color",decl:function(e){return"uniform vec3 ".concat(e,"color; uniform float ").concat(e,"strength;")},code:function(e){return"\n {\n edgeCol = ".concat(e,"color;\n edgeCov = max(edgeCov, edge * ").concat(e,"strength);\n }")},uniforms:function(e){return{color:["3fv",a(e.color||"#FFFFFF")],strength:["1f",null!=e.strength?e.strength:1]}}},stir:{stage:["warp","color"],decl:function(e){return"\n uniform sampler2D ".concat(e,"field;\n uniform float ").concat(e,"strength;\n uniform float ").concat(e,"sheen;\n uniform vec3 ").concat(e,"tint;\n uniform float ").concat(e,"enc;\n uniform float ").concat(e,"range;\n vec2 ").concat(e,"flow(vec2 uvp) {\n vec4 t = texture2D(").concat(e,"field, clamp(uvp, 0.001, 0.999));\n return ").concat(e,"enc > 0.5 ? (t.xy * 2.0 - 1.0) * ").concat(e,"range : t.xy;\n }")},code:function(e,n,t){return"warp"===t?"\n {\n // frag/warped are top-down pixels; the field is bottom-up\n // [0,1] — flip y going in, and flip the y of the vector\n // coming out so content drags WITH the pointer.\n vec2 fuv = vec2(warped.x / u_res.x, 1.0 - warped.y / u_res.y);\n vec2 m = ".concat(e,"flow(fuv);\n warped += vec2(m.x, -m.y) * ").concat(e,"strength;\n }"):"\n {\n // Moving liquid catches light: brighten toward the tint\n // where the flow is fast. Sampled at the cell centre so it\n // stays flat per tile when a cell op runs upstream.\n vec2 suv = vec2(center.x / u_res.x, 1.0 - center.y / u_res.y);\n float sm = length(".concat(e,"flow(suv));\n col = mix(col, ").concat(e,"tint, (1.0 - exp(-sm * 5.0)) * ").concat(e,"sheen);\n }")},uniforms:function(e,n){return{strength:["1f",(null!=e.strength?e.strength:26)*n],sheen:["1f",null!=e.sheen?e.sheen:.25],tint:["3fv",a(e.tint||"#BFE9FF")]}},field:{frag:function(){return"\nprecision highp float;\nuniform sampler2D s_field;\nuniform vec2 s_texel;\nuniform float s_dt;\nuniform float s_decay;\nuniform float s_swirl;\nuniform float s_advect;\nuniform vec2 s_point;\nuniform vec2 s_impulse;\nuniform float s_radius;\nuniform float s_aspect;\nuniform float s_idle;\nuniform float s_time;\nuniform float s_enc;\nuniform float s_range;\n\nvec2 rd(vec2 uvp) {\n vec4 t = texture2D(s_field, clamp(uvp, 0.0, 1.0));\n return s_enc > 0.5 ? (t.xy * 2.0 - 1.0) * s_range : t.xy;\n}\n\nvoid main() {\n vec2 uv = gl_FragCoord.xy * s_texel;\n vec2 m = rd(uv);\n\n // 1. Semi-Lagrangian backtrace: momentum rides its own flow.\n vec2 a = rd(uv - m * s_advect * s_dt);\n\n // 2. Curl of the field, normalised so the swirl setting is\n // resolution independent (central differences over two texels).\n float r = rd(uv + vec2(s_texel.x, 0.0)).y;\n float l = rd(uv - vec2(s_texel.x, 0.0)).y;\n float t = rd(uv + vec2(0.0, s_texel.y)).x;\n float b = rd(uv - vec2(0.0, s_texel.y)).x;\n float curl = ((r - l) - (t - b)) * 0.5 / s_texel.y;\n\n // 3. Rotate momentum by the local curl angle. Norm preserving, so\n // eddies spin and survive rather than smearing out — this is\n // what replaces vorticity confinement + pressure projection.\n float th = curl * s_swirl * s_dt;\n float cs = cos(th), sn = sin(th);\n a = mat2(cs, sn, -sn, cs) * a;\n\n // 4. Viscous decay (frame-rate independent).\n a *= pow(s_decay, s_dt * 60.0);\n\n // 5. The spoon: a gaussian impulse of pointer velocity.\n vec2 d = uv - s_point;\n d.x *= s_aspect;\n a += s_impulse * exp(-dot(d, d) / max(s_radius * s_radius, 1e-6));\n\n // 6. Optional hands-free stir: a source orbiting the centre.\n if (s_idle > 0.0) {\n float ia = s_time * 0.6;\n vec2 ic = vec2(0.5 + 0.22 * cos(ia), 0.5 + 0.22 * sin(ia));\n vec2 id = uv - ic;\n id.x *= s_aspect;\n a += vec2(-sin(ia), cos(ia)) * s_idle *\n exp(-dot(id, id) / max(s_radius * s_radius, 1e-6)) * s_dt * 60.0;\n }\n\n // Keep the field inside the encodable range.\n float mg = length(a);\n if (mg > s_range) a *= s_range / mg;\n\n gl_FragColor = s_enc > 0.5\n ? vec4(a / s_range * 0.5 + 0.5, 0.0, 1.0)\n : vec4(a, 0.0, 1.0);\n}"},uniforms:function(e){return{s_decay:["1f",null!=e.decay?e.decay:.985],s_swirl:["1f",null!=e.swirl?e.swirl:2.4],s_advect:["1f",null!=e.advect?e.advect:.35],s_radius:["1f",null!=e.radius?e.radius:.1],s_idle:["1f",null!=e.idle?e.idle:0]}},force:function(e){return null!=e.force?e.force:1},resolution:function(e){return Math.max(32,Math.min(e.resolution||192,512))}}},blobs:{stage:"color",overlay:!0,mips:!0,decl:function(e){return"\n uniform vec3 ".concat(e,"blobs[").concat(12,"];\n uniform int ").concat(e,"count;\n uniform vec3 ").concat(e,"tint;\n uniform float ").concat(e,"refract;\n uniform float ").concat(e,"rim;\n uniform float ").concat(e,"alpha;\n uniform float ").concat(e,"irid;\n uniform float ").concat(e,"disp;\n uniform float ").concat(e,"frost;\n float ").concat(e,"hash(vec3 v) {\n return fract(sin(dot(v, vec3(21.9898, 63.233, 41.719))) * 41739.317);\n }\n float ").concat(e,"noise(vec3 v) {\n vec3 f = floor(v);\n vec3 r = v - f;\n r = r * r * (3.0 - 2.0 * r);\n float c000 = ").concat(e,"hash(f);\n float c100 = ").concat(e,"hash(f + vec3(1.0, 0.0, 0.0));\n float c010 = ").concat(e,"hash(f + vec3(0.0, 1.0, 0.0));\n float c110 = ").concat(e,"hash(f + vec3(1.0, 1.0, 0.0));\n float c001 = ").concat(e,"hash(f + vec3(0.0, 0.0, 1.0));\n float c101 = ").concat(e,"hash(f + vec3(1.0, 0.0, 1.0));\n float c011 = ").concat(e,"hash(f + vec3(0.0, 1.0, 1.0));\n float c111 = ").concat(e,"hash(f + vec3(1.0, 1.0, 1.0));\n return mix(\n mix(mix(c000, c100, r.x), mix(c010, c110, r.x), r.y),\n mix(mix(c001, c101, r.x), mix(c011, c111, r.x), r.y), r.z);\n }")},code:function(e){return"\n {\n float field = 0.0;\n vec2 grad = vec2(0.0);\n for (int bi = 0; bi < ".concat(12,"; bi++) {\n if (bi >= ").concat(e,"count) break;\n vec2 bd = frag - ").concat(e,"blobs[bi].xy;\n float br = ").concat(e,"blobs[bi].z;\n float dd = max(dot(bd, bd), 1.0);\n field += (br * br) / dd;\n grad += (-2.0 * (br * br) / (dd * dd)) * bd;\n }\n float bmask = smoothstep(0.6, 1.0, field);\n if (bmask > 0.003) {\n float gmag = length(grad);\n vec2 g2 = gmag > 1e-6 ? -grad / gmag : vec2(0.0);\n // Pseudo-3D surface normal from the 2D field. For a\n // metaball field (sum of r^2/d^2), 1/sqrt(field) IS the\n // normalized radial position: 0 at the centre, 1 at the\n // surface. That yields a true hemisphere profile — the\n // curvature (and therefore refraction) varies smoothly\n // across the WHOLE disc, not just an edge annulus.\n float s = clamp(inversesqrt(max(field, 1e-4)), 0.0, 1.0);\n vec3 n = normalize(vec3(g2 * s, sqrt(max(1.0 - s * s, 0.004))));\n vec3 rd = vec3(0.0, 0.0, -1.0);\n\n // Dispersion: refract each channel with a slightly\n // different index (water-glass ~1.33). Near the rim the\n // exit direction flattens (|z| -> 0), so the sampling\n // offsets stretch — producing the smooth concentric\n // colour-fringed bands of a thick lens.\n float ca = 0.03 * ").concat(e,"disp;\n vec3 tR = refract(rd, n, 1.0 / (1.33 - ca));\n vec3 tG = refract(rd, n, 1.0 / 1.33);\n vec3 tB = refract(rd, n, 1.0 / (1.33 + ca));\n vec2 oR = tR.xy * (").concat(e,"refract / max(abs(tR.z), 0.3));\n vec2 oG = tG.xy * (").concat(e,"refract / max(abs(tG.z), 0.3));\n vec2 oB = tB.xy * (").concat(e,"refract / max(abs(tB.z), 0.3));\n\n // Blur grows with how far the ray was bent (mip bias), so\n // strongly-refracted regions smear smoothly instead of\n // showing sharp displaced copies. frost adds a base blur.\n float lod = ").concat(e,"frost * 5.0 + log2(1.0 + length(oG) * 0.035);\n vec2 px = 1.0 / u_res;\n vec4 sG = texture2D(u_tex, clamp(uv + oG * px, 0.002, 0.998), lod);\n vec3 refr;\n refr.r = texture2D(u_tex, clamp(uv + oR * px, 0.002, 0.998), lod).r;\n refr.g = sG.g;\n refr.b = texture2D(u_tex, clamp(uv + oB * px, 0.002, 0.998), lod).b;\n // Blend in (approximately) linear light for clean fringes.\n refr = pow(max(refr, 0.0), vec3(2.2));\n\n vec3 tintLin = pow(").concat(e,"tint, vec3(2.2));\n vec3 bodyLin = mix(tintLin * 0.35, refr, sG.a);\n\n // Glass darkens toward the silhouette (absorption), the\n // opposite of an additive glow ring.\n float edge = pow(1.0 - clamp(n.z, 0.0, 1.0), 1.5);\n bodyLin *= 1.0 - 0.35 * ").concat(e,"rim * edge;\n vec3 body = pow(max(bodyLin, 0.0), vec3(1.0 / 2.2));\n\n // Sparse iridescent glints: two drifting value-noise\n // fields sampled on the reflection direction, one warm\n // one cool, sharpened hard so only sparkles survive.\n vec3 rf = reflect(rd, n);\n float nA = ").concat(e,"noise(rf * 2.3 + u_time * 0.5);\n float nB = ").concat(e,"noise(rf * 2.3 - u_time * 0.5);\n vec3 glint = pow(max(vec3(0.30, 0.52, 0.86) * nA +\n vec3(0.80, 0.56, 0.34) * nB, 0.0), vec3(6.0));\n body += glint * ").concat(e,"irid;\n\n // Small hard specular from a fixed key light.\n vec3 L = normalize(vec3(-0.5, 0.7, 0.6));\n float spec = pow(max(dot(reflect(-L, n), vec3(0.0, 0.0, 1.0)), 0.0), 60.0);\n body += spec * 0.35;\n\n ovCol = body;\n ovA = max(ovA, bmask * ").concat(e,"alpha);\n }\n }")},uniforms:function(e,n){return{tint:["3fv",a(e.color||"#EAF4EE")],refract:["1f",(null!=e.refract?e.refract:70)*n],rim:["1f",null!=e.rim?e.rim:.6],alpha:["1f",null!=e.alpha?e.alpha:1],irid:["1f",null!=e.iridescence?e.iridescence:.8],disp:["1f",null!=e.dispersion?e.dispersion:1],frost:["1f",null!=e.frost?e.frost:.25]}},init:function(e,n,t,r){for(var o=(e.radius||46)*n,a=Math.max(1,Math.min(null!=e.trail?e.trail:7,12)),i=[],c=0,s=0;s<a;s++){var l=Math.pow(.86,s);i.push(l),c+=l*l}for(var f=Math.sqrt(c),u=i.map(function(e){return o*e/f}),d=i.map(function(e,n){return.85*o*Math.pow(.955,n)}),h=function(e,n){return e+Math.random()*(n-e)},m=Math.max(0,Math.min((e.count||1)-1,12-a)),v=[],p=0;p<m;p++){var y=h(0,2*Math.PI),g=h(30,80)*n;v.push({x:h(o,t-o),y:h(o,r-o),r:o*h(.45,.8),vx:Math.cos(y)*g,vy:Math.sin(y)*g,phase:h(0,2*Math.PI)})}for(var x={x:.5*t,y:.55*r},b=[],w=0;w<a;w++)b.push({x:x.x,y:x.y});return{head:x,chain:b,nTrail:a,drifters:v,trailIdleR:u,trailMoveR:d,stretch:0,seg:.9*o}},tick:function(e,n){var r=Math.min(n.dt,.05),o=n.w,a=n.h,i=1-Math.exp(9*-r);e.head.x+=(n.mouseX-e.head.x)*i,e.head.y+=(n.mouseY-e.head.y)*i;var c=e.chain;c[0].x=e.head.x,c[0].y=e.head.y;for(var s=1-Math.exp(16*-r),l=1;l<c.length;l++){var f=c[l-1],u=c[l],d=f.x-u.x,h=f.y-u.y,m=Math.hypot(d,h)||1e-4,v=e.seg;m>v&&(u.x+=d*(1-v/m),u.y+=h*(1-v/m)),u.x+=(f.x-u.x)*s,u.y+=(f.y-u.y)*s}var p=c[c.length-1],y=Math.hypot(p.x-e.head.x,p.y-e.head.y),g=Math.max(1,e.seg*(e.nTrail-1)),x=Math.min(1,y/g);e.stretch+=(x-e.stretch)*(1-Math.exp(8*-r));var b,w=t(e.drifters);try{for(w.s();!(b=w.n()).done;){var _=b.value;_.x+=_.vx*r,_.y+=_.vy*r,_.x<_.r?(_.x=_.r,_.vx=Math.abs(_.vx)):_.x>o-_.r&&(_.x=o-_.r,_.vx=-Math.abs(_.vx)),_.y<_.r?(_.y=_.r,_.vy=Math.abs(_.vy)):_.y>a-_.r&&(_.y=a-_.r,_.vy=-Math.abs(_.vy)),_.phase+=1.6*r}}catch(e){w.e(e)}finally{w.f()}for(var M=new Float32Array(36),S=e.stretch,k=0;k<e.nTrail;k++){var z=c[k];M[3*k]=z.x,M[3*k+1]=z.y,M[3*k+2]=e.trailIdleR[k]+(e.trailMoveR[k]-e.trailIdleR[k])*S}return e.drifters.forEach(function(n,t){var r=e.nTrail+t;M[3*r]=n.x,M[3*r+1]=n.y,M[3*r+2]=n.r*(1+.12*Math.sin(n.phase))}),[{name:"blobs",kind:"3fv",value:M},{name:"count",kind:"1i",value:e.nTrail+e.drifters.length}]}}};function a(e){return[1,3,5].map(function(n){return parseInt(e.slice(n,n+2),16)/255})}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var n=function(e){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=i(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(n)?n:n+""}function l(){return l="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,n,t){var r=function(e,n){for(;!{}.hasOwnProperty.call(e,n)&&null!==(e=f(e)););return e}(e,n);if(r){var o=Object.getOwnPropertyDescriptor(r,n);return o.get?o.get.call(arguments.length<3?e:t):o.value}},l.apply(null,arguments)}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}Object.keys(o);var u=function(){function e(n,t){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.ele=null,this.width="16em",this.height="100vh",this.els=n}return n=e,t=[{key:"setup",value:function(n){var t,r,o=this;n.tags&&(t=this,"function"==typeof(r=l(f(e.prototype),"setTags",t))?function(e){return r.apply(t,e)}:r)([n.tags]),n.width&&(this.width=n.width),n.height&&(this.height=n.height);var a=document.createElement("div");a.style.position="absolute";var i=document.createElement("button");i.style.position="absolute",i.style.background="white",i.style.opacity=.8,i.style.border="none",i.width="1.5em",i.height="1.5em",i.style.borderRadius="50%",i.style.zIndex=2;var c=document.createTextNode("☰");i.appendChild(c),i.style.fontSize="2em",window.matchMedia("(max-device-width: 400px)").matches&&(i.style.fontSize="6em"),window.matchMedia("(max-device-width: 400px)").matches&&n.fullMobile&&(this.width="100vw"),a.appendChild(i);var s=document.createElement("div");return s.style.position="absolute",s.style.backgroundColor="#fff",s.style.flexDirection="column",s.style.display="flex",s.style.alignItems="center",s.style.margin=0,s.style.padding=0,s.style.width=this.width,s.style.margin=0,s.style.marginTop="-10px",s.style.paddingTop="1em",s.style.paddingBottom="1em",s.style.height="".concat(this.height),s.style.transform="translateX(-".concat(this.width,")"),s.style.transition="all 0.80s",a.appendChild(s),this.hidden=!1,i.addEventListener("click",function(){o.hidden=!o.hidden;for(var e=0;e<s.children.length;e++)"☰"!==s.textContent&&(o.hidden?s.style.transform="translateX(0em)":s.style.transform="translateX(-".concat(o.width,")"))}),this.ele=a,this.els&&this.items(this.els),this}},{key:"background",value:function(e){return this.ele.children[1].style.backgroundColor=e.color,this.ele.children[1].style.opacity=e.opacity,this}},{key:"items",value:function(e){this.itemCount=e.length;for(var n=0;n<e.length;n++)this.ele.children[1].appendChild(e[n].render());return this}},{key:"render",value:function(e){return e?(document.querySelector(e).style.padding=0,document.querySelector(e).style.margin=0,document.querySelector(e).appendChild(this.ele),this.ele):this.ele}}],t&&c(n.prototype,t),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,t}();module.exports=n})();
@@ -1 +1 @@
1
- !function(){try{var t=localStorage.getItem("nodality.theme.mode");if("light"===t||"dark"===t)return t}catch(t){}"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches}();var t={hexalize:{stage:"cell",decl:function(t){return"uniform float ".concat(t,"size;")},code:function(t){return"\n {\n vec2 hp = warped / ".concat(t,"size;\n vec2 hr = vec2(1.0, 1.7320508), hh = hr * 0.5;\n vec2 ha = mod(hp, hr) - hh, hb = mod(hp - hh, hr) - hh;\n vec2 gv = dot(ha, ha) < dot(hb, hb) ? ha : hb;\n center = (hp - gv) * ").concat(t,"size;\n gv = abs(gv);\n edge = max(edge, smoothstep(0.44, 0.5,\n max(dot(gv, normalize(vec2(1.0, 1.7320508))), gv.x)));\n }")},uniforms:function(t,e){return{size:["1f",(t.size||24)*e]}}},offset:{stage:"warp",decl:function(t){return"uniform float ".concat(t,"strength; uniform float ").concat(t,"radius;")},code:function(t){return"\n {\n float d = length(warped - u_mouse);\n float fall = 1.0 - smoothstep(0.0, ".concat(t,"radius, d);\n vec2 dir = d > 0.5 ? (warped - u_mouse) / d : vec2(0.0);\n warped -= dir * ").concat(t,"strength * fall;\n }")},uniforms:function(t,e){return{strength:["1f",(t.strength||20)*e],radius:["1f",(t.radius||260)*e]}}},duotone:{stage:"color",decl:function(t){return"uniform vec3 ".concat(t,"a; uniform vec3 ").concat(t,"b; uniform float ").concat(t,"radius;")},code:function(t,e){return"\n {\n float lum = dot(col, vec3(0.299, 0.587, 0.114));\n vec3 duo = mix(".concat(t,"a, ").concat(t,"b, lum);\n ").concat("mouse"===e.by?"float mask = 1.0 - smoothstep(".concat(t,"radius * 0.35, ").concat(t,"radius, length(center - u_mouse));"):"float mask = 1.0;","\n col = mix(col, duo, mask);\n }")},uniforms:function(t,n){var o=t.colors||["#104B87","#E8FF00"];return{a:["3fv",e(o[0])],b:["3fv",e(o[1])],radius:["1f",(t.radius||220)*n]}}},edges:{stage:"color",decl:function(t){return"uniform vec3 ".concat(t,"color; uniform float ").concat(t,"strength;")},code:function(t){return"\n {\n edgeCol = ".concat(t,"color;\n edgeCov = max(edgeCov, edge * ").concat(t,"strength);\n }")},uniforms:function(t){return{color:["3fv",e(t.color||"#FFFFFF")],strength:["1f",null!=t.strength?t.strength:1]}}}};function e(t){return[1,3,5].map(function(e){return parseInt(t.slice(e,e+2),16)/255})}function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,r(o.key),o)}}function r(t){var e=function(t){if("object"!=n(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var o=e.call(t,"string");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==n(e)?e:e+""}function i(){return i="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,n){var o=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=c(t)););return t}(t,e);if(o){var r=Object.getOwnPropertyDescriptor(o,e);return r.get?r.get.call(arguments.length<3?t:n):r.value}},i.apply(null,arguments)}function c(t){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},c(t)}Object.keys(t);var a=function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.ele=null,this.width="16em",this.height="100vh",this.els=e}return e=t,n=[{key:"setup",value:function(e){var n,o,r=this;e.tags&&(n=this,"function"==typeof(o=i(c(t.prototype),"setTags",n))?function(t){return o.apply(n,t)}:o)([e.tags]),e.width&&(this.width=e.width),e.height&&(this.height=e.height);var a=document.createElement("div");a.style.position="absolute";var l=document.createElement("button");l.style.position="absolute",l.style.background="white",l.style.opacity=.8,l.style.border="none",l.width="1.5em",l.height="1.5em",l.style.borderRadius="50%",l.style.zIndex=2;var s=document.createTextNode("☰");l.appendChild(s),l.style.fontSize="2em",window.matchMedia("(max-device-width: 400px)").matches&&(l.style.fontSize="6em"),window.matchMedia("(max-device-width: 400px)").matches&&e.fullMobile&&(this.width="100vw"),a.appendChild(l);var u=document.createElement("div");return u.style.position="absolute",u.style.backgroundColor="#fff",u.style.flexDirection="column",u.style.display="flex",u.style.alignItems="center",u.style.margin=0,u.style.padding=0,u.style.width=this.width,u.style.margin=0,u.style.marginTop="-10px",u.style.paddingTop="1em",u.style.paddingBottom="1em",u.style.height="".concat(this.height),u.style.transform="translateX(-".concat(this.width,")"),u.style.transition="all 0.80s",a.appendChild(u),this.hidden=!1,l.addEventListener("click",function(){r.hidden=!r.hidden;for(var t=0;t<u.children.length;t++)"☰"!==u.textContent&&(r.hidden?u.style.transform="translateX(0em)":u.style.transform="translateX(-".concat(r.width,")"))}),this.ele=a,this.els&&this.items(this.els),this}},{key:"background",value:function(t){return this.ele.children[1].style.backgroundColor=t.color,this.ele.children[1].style.opacity=t.opacity,this}},{key:"items",value:function(t){this.itemCount=t.length;for(var e=0;e<t.length;e++)this.ele.children[1].appendChild(t[e].render());return this}},{key:"render",value:function(t){return t?(document.querySelector(t).style.padding=0,document.querySelector(t).style.margin=0,document.querySelector(t).appendChild(this.ele),this.ele):this.ele}}],n&&o(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n}();export{a as SideBar};
1
+ function n(n,t){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!r){if(Array.isArray(n)||(r=function(n,t){if(n){if("string"==typeof n)return e(n,t);var r={}.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(n,t):void 0}}(n))||t&&n&&"number"==typeof n.length){r&&(n=r);var o=0,a=function(){};return{s:a,n:function(){return o>=n.length?{done:!0}:{done:!1,value:n[o++]}},e:function(n){throw n},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,s=!1;return{s:function(){r=r.call(n)},n:function(){var n=r.next();return c=n.done,n},e:function(n){s=!0,i=n},f:function(){try{c||null==r.return||r.return()}finally{if(s)throw i}}}}function e(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}!function(){try{var n=localStorage.getItem("nodality.theme.mode");if("light"===n||"dark"===n)return n}catch(n){}"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches}();var t={hexalize:{stage:"cell",decl:function(n){return"uniform float ".concat(n,"size;")},code:function(n){return"\n {\n vec2 hp = warped / ".concat(n,"size;\n vec2 hr = vec2(1.0, 1.7320508), hh = hr * 0.5;\n vec2 ha = mod(hp, hr) - hh, hb = mod(hp - hh, hr) - hh;\n vec2 gv = dot(ha, ha) < dot(hb, hb) ? ha : hb;\n center = (hp - gv) * ").concat(n,"size;\n gv = abs(gv);\n edge = max(edge, smoothstep(0.44, 0.5,\n max(dot(gv, normalize(vec2(1.0, 1.7320508))), gv.x)));\n }")},uniforms:function(n,e){return{size:["1f",(n.size||24)*e]}}},offset:{stage:"warp",decl:function(n){return"uniform float ".concat(n,"strength; uniform float ").concat(n,"radius;")},code:function(n){return"\n {\n float d = length(warped - u_mouse);\n float fall = 1.0 - smoothstep(0.0, ".concat(n,"radius, d);\n vec2 dir = d > 0.5 ? (warped - u_mouse) / d : vec2(0.0);\n warped -= dir * ").concat(n,"strength * fall;\n }")},uniforms:function(n,e){return{strength:["1f",(n.strength||20)*e],radius:["1f",(n.radius||260)*e]}}},duotone:{stage:"color",decl:function(n){return"uniform vec3 ".concat(n,"a; uniform vec3 ").concat(n,"b; uniform float ").concat(n,"radius;")},code:function(n,e){return"\n {\n float lum = dot(col, vec3(0.299, 0.587, 0.114));\n vec3 duo = mix(".concat(n,"a, ").concat(n,"b, lum);\n ").concat("mouse"===e.by?"float mask = 1.0 - smoothstep(".concat(n,"radius * 0.35, ").concat(n,"radius, length(center - u_mouse));"):"float mask = 1.0;","\n col = mix(col, duo, mask);\n }")},uniforms:function(n,e){var t=n.colors||["#104B87","#E8FF00"];return{a:["3fv",r(t[0])],b:["3fv",r(t[1])],radius:["1f",(n.radius||220)*e]}}},edges:{stage:"color",decl:function(n){return"uniform vec3 ".concat(n,"color; uniform float ").concat(n,"strength;")},code:function(n){return"\n {\n edgeCol = ".concat(n,"color;\n edgeCov = max(edgeCov, edge * ").concat(n,"strength);\n }")},uniforms:function(n){return{color:["3fv",r(n.color||"#FFFFFF")],strength:["1f",null!=n.strength?n.strength:1]}}},stir:{stage:["warp","color"],decl:function(n){return"\n uniform sampler2D ".concat(n,"field;\n uniform float ").concat(n,"strength;\n uniform float ").concat(n,"sheen;\n uniform vec3 ").concat(n,"tint;\n uniform float ").concat(n,"enc;\n uniform float ").concat(n,"range;\n vec2 ").concat(n,"flow(vec2 uvp) {\n vec4 t = texture2D(").concat(n,"field, clamp(uvp, 0.001, 0.999));\n return ").concat(n,"enc > 0.5 ? (t.xy * 2.0 - 1.0) * ").concat(n,"range : t.xy;\n }")},code:function(n,e,t){return"warp"===t?"\n {\n // frag/warped are top-down pixels; the field is bottom-up\n // [0,1] — flip y going in, and flip the y of the vector\n // coming out so content drags WITH the pointer.\n vec2 fuv = vec2(warped.x / u_res.x, 1.0 - warped.y / u_res.y);\n vec2 m = ".concat(n,"flow(fuv);\n warped += vec2(m.x, -m.y) * ").concat(n,"strength;\n }"):"\n {\n // Moving liquid catches light: brighten toward the tint\n // where the flow is fast. Sampled at the cell centre so it\n // stays flat per tile when a cell op runs upstream.\n vec2 suv = vec2(center.x / u_res.x, 1.0 - center.y / u_res.y);\n float sm = length(".concat(n,"flow(suv));\n col = mix(col, ").concat(n,"tint, (1.0 - exp(-sm * 5.0)) * ").concat(n,"sheen);\n }")},uniforms:function(n,e){return{strength:["1f",(null!=n.strength?n.strength:26)*e],sheen:["1f",null!=n.sheen?n.sheen:.25],tint:["3fv",r(n.tint||"#BFE9FF")]}},field:{frag:function(){return"\nprecision highp float;\nuniform sampler2D s_field;\nuniform vec2 s_texel;\nuniform float s_dt;\nuniform float s_decay;\nuniform float s_swirl;\nuniform float s_advect;\nuniform vec2 s_point;\nuniform vec2 s_impulse;\nuniform float s_radius;\nuniform float s_aspect;\nuniform float s_idle;\nuniform float s_time;\nuniform float s_enc;\nuniform float s_range;\n\nvec2 rd(vec2 uvp) {\n vec4 t = texture2D(s_field, clamp(uvp, 0.0, 1.0));\n return s_enc > 0.5 ? (t.xy * 2.0 - 1.0) * s_range : t.xy;\n}\n\nvoid main() {\n vec2 uv = gl_FragCoord.xy * s_texel;\n vec2 m = rd(uv);\n\n // 1. Semi-Lagrangian backtrace: momentum rides its own flow.\n vec2 a = rd(uv - m * s_advect * s_dt);\n\n // 2. Curl of the field, normalised so the swirl setting is\n // resolution independent (central differences over two texels).\n float r = rd(uv + vec2(s_texel.x, 0.0)).y;\n float l = rd(uv - vec2(s_texel.x, 0.0)).y;\n float t = rd(uv + vec2(0.0, s_texel.y)).x;\n float b = rd(uv - vec2(0.0, s_texel.y)).x;\n float curl = ((r - l) - (t - b)) * 0.5 / s_texel.y;\n\n // 3. Rotate momentum by the local curl angle. Norm preserving, so\n // eddies spin and survive rather than smearing out — this is\n // what replaces vorticity confinement + pressure projection.\n float th = curl * s_swirl * s_dt;\n float cs = cos(th), sn = sin(th);\n a = mat2(cs, sn, -sn, cs) * a;\n\n // 4. Viscous decay (frame-rate independent).\n a *= pow(s_decay, s_dt * 60.0);\n\n // 5. The spoon: a gaussian impulse of pointer velocity.\n vec2 d = uv - s_point;\n d.x *= s_aspect;\n a += s_impulse * exp(-dot(d, d) / max(s_radius * s_radius, 1e-6));\n\n // 6. Optional hands-free stir: a source orbiting the centre.\n if (s_idle > 0.0) {\n float ia = s_time * 0.6;\n vec2 ic = vec2(0.5 + 0.22 * cos(ia), 0.5 + 0.22 * sin(ia));\n vec2 id = uv - ic;\n id.x *= s_aspect;\n a += vec2(-sin(ia), cos(ia)) * s_idle *\n exp(-dot(id, id) / max(s_radius * s_radius, 1e-6)) * s_dt * 60.0;\n }\n\n // Keep the field inside the encodable range.\n float mg = length(a);\n if (mg > s_range) a *= s_range / mg;\n\n gl_FragColor = s_enc > 0.5\n ? vec4(a / s_range * 0.5 + 0.5, 0.0, 1.0)\n : vec4(a, 0.0, 1.0);\n}"},uniforms:function(n){return{s_decay:["1f",null!=n.decay?n.decay:.985],s_swirl:["1f",null!=n.swirl?n.swirl:2.4],s_advect:["1f",null!=n.advect?n.advect:.35],s_radius:["1f",null!=n.radius?n.radius:.1],s_idle:["1f",null!=n.idle?n.idle:0]}},force:function(n){return null!=n.force?n.force:1},resolution:function(n){return Math.max(32,Math.min(n.resolution||192,512))}}},blobs:{stage:"color",overlay:!0,mips:!0,decl:function(n){return"\n uniform vec3 ".concat(n,"blobs[").concat(12,"];\n uniform int ").concat(n,"count;\n uniform vec3 ").concat(n,"tint;\n uniform float ").concat(n,"refract;\n uniform float ").concat(n,"rim;\n uniform float ").concat(n,"alpha;\n uniform float ").concat(n,"irid;\n uniform float ").concat(n,"disp;\n uniform float ").concat(n,"frost;\n float ").concat(n,"hash(vec3 v) {\n return fract(sin(dot(v, vec3(21.9898, 63.233, 41.719))) * 41739.317);\n }\n float ").concat(n,"noise(vec3 v) {\n vec3 f = floor(v);\n vec3 r = v - f;\n r = r * r * (3.0 - 2.0 * r);\n float c000 = ").concat(n,"hash(f);\n float c100 = ").concat(n,"hash(f + vec3(1.0, 0.0, 0.0));\n float c010 = ").concat(n,"hash(f + vec3(0.0, 1.0, 0.0));\n float c110 = ").concat(n,"hash(f + vec3(1.0, 1.0, 0.0));\n float c001 = ").concat(n,"hash(f + vec3(0.0, 0.0, 1.0));\n float c101 = ").concat(n,"hash(f + vec3(1.0, 0.0, 1.0));\n float c011 = ").concat(n,"hash(f + vec3(0.0, 1.0, 1.0));\n float c111 = ").concat(n,"hash(f + vec3(1.0, 1.0, 1.0));\n return mix(\n mix(mix(c000, c100, r.x), mix(c010, c110, r.x), r.y),\n mix(mix(c001, c101, r.x), mix(c011, c111, r.x), r.y), r.z);\n }")},code:function(n){return"\n {\n float field = 0.0;\n vec2 grad = vec2(0.0);\n for (int bi = 0; bi < ".concat(12,"; bi++) {\n if (bi >= ").concat(n,"count) break;\n vec2 bd = frag - ").concat(n,"blobs[bi].xy;\n float br = ").concat(n,"blobs[bi].z;\n float dd = max(dot(bd, bd), 1.0);\n field += (br * br) / dd;\n grad += (-2.0 * (br * br) / (dd * dd)) * bd;\n }\n float bmask = smoothstep(0.6, 1.0, field);\n if (bmask > 0.003) {\n float gmag = length(grad);\n vec2 g2 = gmag > 1e-6 ? -grad / gmag : vec2(0.0);\n // Pseudo-3D surface normal from the 2D field. For a\n // metaball field (sum of r^2/d^2), 1/sqrt(field) IS the\n // normalized radial position: 0 at the centre, 1 at the\n // surface. That yields a true hemisphere profile — the\n // curvature (and therefore refraction) varies smoothly\n // across the WHOLE disc, not just an edge annulus.\n float s = clamp(inversesqrt(max(field, 1e-4)), 0.0, 1.0);\n vec3 n = normalize(vec3(g2 * s, sqrt(max(1.0 - s * s, 0.004))));\n vec3 rd = vec3(0.0, 0.0, -1.0);\n\n // Dispersion: refract each channel with a slightly\n // different index (water-glass ~1.33). Near the rim the\n // exit direction flattens (|z| -> 0), so the sampling\n // offsets stretch — producing the smooth concentric\n // colour-fringed bands of a thick lens.\n float ca = 0.03 * ").concat(n,"disp;\n vec3 tR = refract(rd, n, 1.0 / (1.33 - ca));\n vec3 tG = refract(rd, n, 1.0 / 1.33);\n vec3 tB = refract(rd, n, 1.0 / (1.33 + ca));\n vec2 oR = tR.xy * (").concat(n,"refract / max(abs(tR.z), 0.3));\n vec2 oG = tG.xy * (").concat(n,"refract / max(abs(tG.z), 0.3));\n vec2 oB = tB.xy * (").concat(n,"refract / max(abs(tB.z), 0.3));\n\n // Blur grows with how far the ray was bent (mip bias), so\n // strongly-refracted regions smear smoothly instead of\n // showing sharp displaced copies. frost adds a base blur.\n float lod = ").concat(n,"frost * 5.0 + log2(1.0 + length(oG) * 0.035);\n vec2 px = 1.0 / u_res;\n vec4 sG = texture2D(u_tex, clamp(uv + oG * px, 0.002, 0.998), lod);\n vec3 refr;\n refr.r = texture2D(u_tex, clamp(uv + oR * px, 0.002, 0.998), lod).r;\n refr.g = sG.g;\n refr.b = texture2D(u_tex, clamp(uv + oB * px, 0.002, 0.998), lod).b;\n // Blend in (approximately) linear light for clean fringes.\n refr = pow(max(refr, 0.0), vec3(2.2));\n\n vec3 tintLin = pow(").concat(n,"tint, vec3(2.2));\n vec3 bodyLin = mix(tintLin * 0.35, refr, sG.a);\n\n // Glass darkens toward the silhouette (absorption), the\n // opposite of an additive glow ring.\n float edge = pow(1.0 - clamp(n.z, 0.0, 1.0), 1.5);\n bodyLin *= 1.0 - 0.35 * ").concat(n,"rim * edge;\n vec3 body = pow(max(bodyLin, 0.0), vec3(1.0 / 2.2));\n\n // Sparse iridescent glints: two drifting value-noise\n // fields sampled on the reflection direction, one warm\n // one cool, sharpened hard so only sparkles survive.\n vec3 rf = reflect(rd, n);\n float nA = ").concat(n,"noise(rf * 2.3 + u_time * 0.5);\n float nB = ").concat(n,"noise(rf * 2.3 - u_time * 0.5);\n vec3 glint = pow(max(vec3(0.30, 0.52, 0.86) * nA +\n vec3(0.80, 0.56, 0.34) * nB, 0.0), vec3(6.0));\n body += glint * ").concat(n,"irid;\n\n // Small hard specular from a fixed key light.\n vec3 L = normalize(vec3(-0.5, 0.7, 0.6));\n float spec = pow(max(dot(reflect(-L, n), vec3(0.0, 0.0, 1.0)), 0.0), 60.0);\n body += spec * 0.35;\n\n ovCol = body;\n ovA = max(ovA, bmask * ").concat(n,"alpha);\n }\n }")},uniforms:function(n,e){return{tint:["3fv",r(n.color||"#EAF4EE")],refract:["1f",(null!=n.refract?n.refract:70)*e],rim:["1f",null!=n.rim?n.rim:.6],alpha:["1f",null!=n.alpha?n.alpha:1],irid:["1f",null!=n.iridescence?n.iridescence:.8],disp:["1f",null!=n.dispersion?n.dispersion:1],frost:["1f",null!=n.frost?n.frost:.25]}},init:function(n,e,t,r){for(var o=(n.radius||46)*e,a=Math.max(1,Math.min(null!=n.trail?n.trail:7,12)),i=[],c=0,s=0;s<a;s++){var l=Math.pow(.86,s);i.push(l),c+=l*l}for(var f=Math.sqrt(c),u=i.map(function(n){return o*n/f}),d=i.map(function(n,e){return.85*o*Math.pow(.955,e)}),h=function(n,e){return n+Math.random()*(e-n)},m=Math.max(0,Math.min((n.count||1)-1,12-a)),v=[],p=0;p<m;p++){var y=h(0,2*Math.PI),g=h(30,80)*e;v.push({x:h(o,t-o),y:h(o,r-o),r:o*h(.45,.8),vx:Math.cos(y)*g,vy:Math.sin(y)*g,phase:h(0,2*Math.PI)})}for(var x={x:.5*t,y:.55*r},b=[],w=0;w<a;w++)b.push({x:x.x,y:x.y});return{head:x,chain:b,nTrail:a,drifters:v,trailIdleR:u,trailMoveR:d,stretch:0,seg:.9*o}},tick:function(e,t){var r=Math.min(t.dt,.05),o=t.w,a=t.h,i=1-Math.exp(9*-r);e.head.x+=(t.mouseX-e.head.x)*i,e.head.y+=(t.mouseY-e.head.y)*i;var c=e.chain;c[0].x=e.head.x,c[0].y=e.head.y;for(var s=1-Math.exp(16*-r),l=1;l<c.length;l++){var f=c[l-1],u=c[l],d=f.x-u.x,h=f.y-u.y,m=Math.hypot(d,h)||1e-4,v=e.seg;m>v&&(u.x+=d*(1-v/m),u.y+=h*(1-v/m)),u.x+=(f.x-u.x)*s,u.y+=(f.y-u.y)*s}var p=c[c.length-1],y=Math.hypot(p.x-e.head.x,p.y-e.head.y),g=Math.max(1,e.seg*(e.nTrail-1)),x=Math.min(1,y/g);e.stretch+=(x-e.stretch)*(1-Math.exp(8*-r));var b,w=n(e.drifters);try{for(w.s();!(b=w.n()).done;){var _=b.value;_.x+=_.vx*r,_.y+=_.vy*r,_.x<_.r?(_.x=_.r,_.vx=Math.abs(_.vx)):_.x>o-_.r&&(_.x=o-_.r,_.vx=-Math.abs(_.vx)),_.y<_.r?(_.y=_.r,_.vy=Math.abs(_.vy)):_.y>a-_.r&&(_.y=a-_.r,_.vy=-Math.abs(_.vy)),_.phase+=1.6*r}}catch(n){w.e(n)}finally{w.f()}for(var M=new Float32Array(36),k=e.stretch,S=0;S<e.nTrail;S++){var z=c[S];M[3*S]=z.x,M[3*S+1]=z.y,M[3*S+2]=e.trailIdleR[S]+(e.trailMoveR[S]-e.trailIdleR[S])*k}return e.drifters.forEach(function(n,t){var r=e.nTrail+t;M[3*r]=n.x,M[3*r+1]=n.y,M[3*r+2]=n.r*(1+.12*Math.sin(n.phase))}),[{name:"blobs",kind:"3fv",value:M},{name:"count",kind:"1i",value:e.nTrail+e.drifters.length}]}}};function r(n){return[1,3,5].map(function(e){return parseInt(n.slice(e,e+2),16)/255})}function o(n){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},o(n)}function a(n,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,i(r.key),r)}}function i(n){var e=function(n){if("object"!=o(n)||!n)return n;var e=n[Symbol.toPrimitive];if(void 0!==e){var t=e.call(n,"string");if("object"!=o(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(n)}(n);return"symbol"==o(e)?e:e+""}function c(){return c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(n,e,t){var r=function(n,e){for(;!{}.hasOwnProperty.call(n,e)&&null!==(n=s(n)););return n}(n,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(arguments.length<3?n:t):o.value}},c.apply(null,arguments)}function s(n){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},s(n)}Object.keys(t);var l=function(){function n(e,t){!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.ele=null,this.width="16em",this.height="100vh",this.els=e}return e=n,t=[{key:"setup",value:function(e){var t,r,o=this;e.tags&&(t=this,"function"==typeof(r=c(s(n.prototype),"setTags",t))?function(n){return r.apply(t,n)}:r)([e.tags]),e.width&&(this.width=e.width),e.height&&(this.height=e.height);var a=document.createElement("div");a.style.position="absolute";var i=document.createElement("button");i.style.position="absolute",i.style.background="white",i.style.opacity=.8,i.style.border="none",i.width="1.5em",i.height="1.5em",i.style.borderRadius="50%",i.style.zIndex=2;var l=document.createTextNode("☰");i.appendChild(l),i.style.fontSize="2em",window.matchMedia("(max-device-width: 400px)").matches&&(i.style.fontSize="6em"),window.matchMedia("(max-device-width: 400px)").matches&&e.fullMobile&&(this.width="100vw"),a.appendChild(i);var f=document.createElement("div");return f.style.position="absolute",f.style.backgroundColor="#fff",f.style.flexDirection="column",f.style.display="flex",f.style.alignItems="center",f.style.margin=0,f.style.padding=0,f.style.width=this.width,f.style.margin=0,f.style.marginTop="-10px",f.style.paddingTop="1em",f.style.paddingBottom="1em",f.style.height="".concat(this.height),f.style.transform="translateX(-".concat(this.width,")"),f.style.transition="all 0.80s",a.appendChild(f),this.hidden=!1,i.addEventListener("click",function(){o.hidden=!o.hidden;for(var n=0;n<f.children.length;n++)"☰"!==f.textContent&&(o.hidden?f.style.transform="translateX(0em)":f.style.transform="translateX(-".concat(o.width,")"))}),this.ele=a,this.els&&this.items(this.els),this}},{key:"background",value:function(n){return this.ele.children[1].style.backgroundColor=n.color,this.ele.children[1].style.opacity=n.opacity,this}},{key:"items",value:function(n){this.itemCount=n.length;for(var e=0;e<n.length;e++)this.ele.children[1].appendChild(n[e].render());return this}},{key:"render",value:function(n){return n?(document.querySelector(n).style.padding=0,document.querySelector(n).style.margin=0,document.querySelector(n).appendChild(this.ele),this.ele):this.ele}}],t&&a(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}();export{l as SideBar};