@@ -0,0 +1,1467 @@
2+ // output/Data.Functor/foreign.js
3+ var arrayMap = function(f) {
4+ return function(arr) {
6+ var result = new Array(l);
7+ for (var i = 0; i < l; i++) {
8+ result[i] = f(arr[i]);
14+ // output/Data.Unit/foreign.js
17+ // output/Data.Functor/index.js
18+ var map = function(dict) {
25+ // output/Control.Apply/index.js
26+ var apply = function(dict) {
30+ // output/Control.Applicative/index.js
31+ var pure = function(dict) {
34+ var liftA1 = function(dictApplicative) {
35+ var apply2 = apply(dictApplicative.Apply0());
36+ var pure1 = pure(dictApplicative);
39+ return apply2(pure1(f))(a);
44+ // output/Effect/foreign.js
45+ var pureE = function(a) {
50+ var bindE = function(a) {
58+ // output/Control.Bind/foreign.js
59+ var arrayBind = typeof Array.prototype.flatMap === "function" ? function(arr) {
61+ return arr.flatMap(f);
67+ for (var i = 0; i < l; i++) {
70+ for (var j = 0; j < k; j++) {
78+ // output/Control.Bind/index.js
79+ var bind = function(dict) {
83+ // output/Control.Monad/index.js
84+ var ap = function(dictMonad) {
85+ var bind3 = bind(dictMonad.Bind1());
86+ var pure3 = pure(dictMonad.Applicative0());
89+ return bind3(f)(function(f$prime) {
90+ return bind3(a)(function(a$prime) {
91+ return pure3(f$prime(a$prime));
98+ // output/Data.Semigroup/index.js
99+ var append = function(dict) {
103+ // output/Data.Monoid/index.js
104+ var mempty = function(dict) {
108+ // output/Effect/index.js
109+ var $runtime_lazy = function(name14, moduleName, init) {
112+ return function(lineNumber) {
113+ if (state2 === 2) return val;
114+ if (state2 === 1) throw new ReferenceError(name14 + " was needed before it finished initializing (module " + moduleName + ", line " + lineNumber + ")", moduleName, lineNumber);
122+ Applicative0: function() {
123+ return applicativeEffect;
131+ Apply0: function() {
132+ return $lazy_applyEffect(0);
135+ var applicativeEffect = {
137+ Apply0: function() {
138+ return $lazy_applyEffect(0);
141+ var $lazy_functorEffect = /* @__PURE__ */ $runtime_lazy("functorEffect", "Effect", function() {
143+ map: liftA1(applicativeEffect)
146+ var $lazy_applyEffect = /* @__PURE__ */ $runtime_lazy("applyEffect", "Effect", function() {
148+ apply: ap(monadEffect),
149+ Functor0: function() {
150+ return $lazy_functorEffect(0);
154+ var functorEffect = /* @__PURE__ */ $lazy_functorEffect(20);
156+ // output/Data.Bounded/foreign.js
157+ var topChar = String.fromCharCode(65535);
158+ var bottomChar = String.fromCharCode(0);
159+ var topNumber = Number.POSITIVE_INFINITY;
160+ var bottomNumber = Number.NEGATIVE_INFINITY;
162+ // output/Data.Show/foreign.js
163+ var showIntImpl = function(n) {
164+ return n.toString();
167+ // output/Data.Show/index.js
171+ var show = function(dict) {
175+ // output/Data.Maybe/index.js
176+ var Nothing = /* @__PURE__ */ function() {
177+ function Nothing2() {
180+ Nothing2.value = new Nothing2();
183+ var Just = /* @__PURE__ */ function() {
184+ function Just2(value0) {
185+ this.value0 = value0;
188+ Just2.create = function(value0) {
189+ return new Just2(value0);
194+ // output/Effect.Ref/foreign.js
195+ var _new = function(val) {
197+ return { value: val };
200+ var read = function(ref) {
205+ var write = function(val) {
206+ return function(ref) {
213+ // output/Effect.Ref/index.js
216+ // output/Maquette/foreign.js
217+ var NAMESPACE_W3 = "http://www.w3.org/";
218+ var NAMESPACE_SVG = NAMESPACE_W3 + "2000/svg";
219+ var NAMESPACE_XLINK = NAMESPACE_W3 + "1999/xlink";
220+ var emptyArray = [];
221+ var extend = function(base, overrides) {
223+ Object.keys(base).forEach(function(key) {
224+ result[key] = base[key];
227+ Object.keys(overrides).forEach(function(key) {
228+ result[key] = overrides[key];
233+ var same = function(vnode1, vnode2) {
234+ if (vnode1.vnodeSelector !== vnode2.vnodeSelector) {
237+ if (vnode1.properties && vnode2.properties) {
238+ if (vnode1.properties.key !== vnode2.properties.key) {
241+ return vnode1.properties.bind === vnode2.properties.bind;
243+ return !vnode1.properties && !vnode2.properties;
245+ var checkStyleValue = function(styleValue) {
246+ if (typeof styleValue !== "string") {
247+ throw new Error("Style values must be strings");
250+ var findIndexOfChild = function(children, sameAs, start2) {
251+ if (sameAs.vnodeSelector !== "") {
252+ for (var i = start2; i < children.length; i++) {
253+ if (same(children[i], sameAs)) {
260+ var checkDistinguishable = function(childNodes, indexToCheck, parentVNode, operation) {
261+ var childNode = childNodes[indexToCheck];
262+ if (childNode.vnodeSelector === "") {
265+ var properties = childNode.properties;
266+ var key = properties ? properties.key === void 0 ? properties.bind : properties.key : void 0;
268+ for (var i = 0; i < childNodes.length; i++) {
269+ if (i !== indexToCheck) {
270+ var node = childNodes[i];
271+ if (same(node, childNode)) {
273+ error: new Error(parentVNode.vnodeSelector + " had a " + childNode.vnodeSelector + " child " + (operation === "added" ? operation : "removed") + ", but there is now more than one. You must add unique key properties to make them distinguishable."),
274+ parentNode: parentVNode,
282+ var nodeAdded = function(vNode) {
283+ if (vNode.properties) {
284+ var enterAnimation = vNode.properties.enterAnimation;
285+ if (enterAnimation) {
286+ enterAnimation(vNode.domNode, vNode.properties);
290+ var removedNodes = [];
291+ var requestedIdleCallback = false;
292+ var visitRemovedNode = function(node) {
293+ (node.children || []).forEach(visitRemovedNode);
294+ if (node.properties && node.properties.afterRemoved) {
295+ node.properties.afterRemoved.apply(node.properties.bind || node.properties, [
300+ var processPendingNodeRemovals = function() {
301+ requestedIdleCallback = false;
302+ removedNodes.forEach(visitRemovedNode);
303+ removedNodes.length = 0;
305+ var scheduleNodeRemoval = function(vNode) {
306+ removedNodes.push(vNode);
307+ if (!requestedIdleCallback) {
308+ requestedIdleCallback = true;
309+ if (typeof window !== "undefined" && "requestIdleCallback" in window) {
310+ window.requestIdleCallback(processPendingNodeRemovals, { timeout: 16 });
312+ setTimeout(processPendingNodeRemovals, 16);
316+ var nodeToRemove = function(vNode) {
317+ var domNode = vNode.domNode;
318+ if (vNode.properties) {
319+ var exitAnimation = vNode.properties.exitAnimation;
320+ if (exitAnimation) {
321+ domNode.style.pointerEvents = "none";
322+ var removeDomNode = function() {
323+ if (domNode.parentNode) {
324+ domNode.parentNode.removeChild(domNode);
325+ scheduleNodeRemoval(vNode);
328+ exitAnimation(domNode, removeDomNode, vNode.properties);
332+ if (domNode.parentNode) {
333+ domNode.parentNode.removeChild(domNode);
334+ scheduleNodeRemoval(vNode);
337+ var vnodeOnlyProps = [
345+ function filterVNodeOnlyProps(name14) {
346+ return !vnodeOnlyProps.includes(name14);
348+ var setProperties = function(domNode, properties, projectionOptions) {
352+ var eventHandlerInterceptor = projectionOptions.eventHandlerInterceptor;
353+ var propNames = Object.keys(properties).filter(filterVNodeOnlyProps);
354+ var propCount = propNames.length;
355+ for (var i = 0; i < propCount; i++) {
356+ var propName = propNames[i];
357+ var propValue = properties[propName];
358+ if (propName === "className") {
359+ throw new Error('Property "className" is not supported, use "class".');
360+ } else if (propName === "class") {
361+ toggleClasses(domNode, propValue, true);
362+ } else if (propName === "classes") {
363+ var classNames = Object.keys(propValue);
364+ var classNameCount = classNames.length;
365+ for (var j = 0; j < classNameCount; j++) {
366+ var className = classNames[j];
367+ if (propValue[className]) {
368+ domNode.classList.add(className);
371+ } else if (propName === "styles") {
372+ var styleNames = Object.keys(propValue);
373+ var styleCount = styleNames.length;
374+ for (var j = 0; j < styleCount; j++) {
375+ var styleName = styleNames[j];
376+ var styleValue = propValue[styleName];
378+ checkStyleValue(styleValue);
379+ projectionOptions.styleApplyer(domNode, styleName, styleValue);
382+ } else if (propName === "on" && propValue) {
383+ for (var _i = 0, _a = Object.entries(properties.on); _i < _a.length; _i++) {
384+ var _b = _a[_i], key = _b[0], handler = _b[1];
385+ var listener = typeof handler === "function" ? handler : handler.listener;
386+ if (eventHandlerInterceptor) {
387+ listener = eventHandlerInterceptor(key, listener, domNode, properties);
390+ domNode.addEventListener(key, listener, typeof handler === "function" ? void 0 : handler.options);
393+ } else if (propName !== "key" && propValue !== null && propValue !== void 0) {
394+ var type = typeof propValue;
395+ if (type === "function") {
396+ if (propName.lastIndexOf("on", 0) === 0) {
397+ if (eventHandlerInterceptor) {
398+ propValue = eventHandlerInterceptor(propName, propValue, domNode, properties);
401+ domNode[propName] = propValue;
402+ } else if (projectionOptions.namespace === NAMESPACE_SVG) {
403+ if (propName === "href") {
404+ domNode.setAttributeNS(NAMESPACE_XLINK, propName, propValue);
406+ domNode.setAttribute(propName, propValue);
408+ } else if (type === "string" && propName !== "value" && propName !== "innerHTML") {
409+ domNode.setAttribute(propName, propValue);
411+ domNode[propName] = propValue;
416+ var addChildren = function(domNode, children, projectionOptions) {
420+ for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
421+ var child = children_1[_i];
422+ createDom(child, domNode, void 0, projectionOptions);
425+ var initPropertiesAndChildren = function(domNode, vnode, projectionOptions) {
426+ addChildren(domNode, vnode.children, projectionOptions);
428+ domNode.textContent = vnode.text;
430+ setProperties(domNode, vnode.properties, projectionOptions);
431+ if (vnode.properties && vnode.properties.afterCreate) {
432+ vnode.properties.afterCreate.apply(vnode.properties.bind || vnode.properties, [
435+ vnode.vnodeSelector,
441+ var createDom = function(vnode, parentNode, insertBefore, projectionOptions) {
445+ var vnodeSelector = vnode.vnodeSelector;
446+ var doc = parentNode.ownerDocument;
447+ if (vnodeSelector === "") {
448+ if (vnode.domNode) {
449+ vnode.domNode.nodeValue = vnode.text;
451+ domNode = vnode.domNode = doc.createTextNode(vnode.text);
452+ if (insertBefore !== void 0) {
453+ parentNode.insertBefore(domNode, insertBefore);
455+ parentNode.appendChild(domNode);
459+ for (var i = 0; i <= vnodeSelector.length; ++i) {
460+ var c = vnodeSelector.charAt(i);
461+ if (i === vnodeSelector.length || c === "." || c === "#") {
462+ var type = vnodeSelector.charAt(start2 - 1);
463+ var found = vnodeSelector.slice(start2, i);
465+ domNode.classList.add(found);
466+ } else if (type === "#") {
469+ if (found === "svg") {
470+ projectionOptions = extend(projectionOptions, {
471+ namespace: NAMESPACE_SVG
474+ if (projectionOptions.namespace !== void 0) {
475+ domNode = vnode.domNode = doc.createElementNS(projectionOptions.namespace, found);
477+ domNode = vnode.domNode = vnode.domNode || (((_a = vnode.properties) === null || _a === void 0 ? void 0 : _a.is) ? doc.createElement(found, { is: vnode.properties.is }) : doc.createElement(found));
478+ if (found === "input" && vnode.properties && vnode.properties.type !== void 0) {
479+ domNode.setAttribute("type", vnode.properties.type);
482+ if (insertBefore !== void 0) {
483+ parentNode.insertBefore(domNode, insertBefore);
484+ } else if (domNode.parentNode !== parentNode) {
485+ parentNode.appendChild(domNode);
491+ initPropertiesAndChildren(domNode, vnode, projectionOptions);
495+ var toggleClasses = function(domNode, classes, on2) {
499+ classes.split(" ").forEach(function(classToToggle) {
500+ if (classToToggle) {
501+ domNode.classList.toggle(classToToggle, on2);
505+ var updateProperties = function(domNode, previousProperties, properties, projectionOptions) {
509+ var propertiesUpdated = false;
510+ var propNames = Object.keys(properties).filter(filterVNodeOnlyProps);
511+ var propCount = propNames.length;
512+ for (var i = 0; i < propCount; i++) {
513+ var propName = propNames[i];
514+ var propValue = properties[propName];
515+ var previousValue = previousProperties[propName];
516+ if (propName === "class") {
517+ if (previousValue !== propValue) {
518+ toggleClasses(domNode, previousValue, false);
519+ toggleClasses(domNode, propValue, true);
521+ } else if (propName === "classes") {
522+ var classList = domNode.classList;
523+ var classNames = Object.keys(propValue);
524+ var classNameCount = classNames.length;
525+ for (var j = 0; j < classNameCount; j++) {
526+ var className = classNames[j];
527+ var on2 = !!propValue[className];
528+ var previousOn = !!previousValue[className];
529+ if (on2 === previousOn) {
532+ propertiesUpdated = true;
534+ classList.add(className);
536+ classList.remove(className);
539+ } else if (propName === "styles") {
540+ var styleNames = Object.keys(propValue);
541+ var styleCount = styleNames.length;
542+ for (var j = 0; j < styleCount; j++) {
543+ var styleName = styleNames[j];
544+ var newStyleValue = propValue[styleName];
545+ var oldStyleValue = previousValue[styleName];
546+ if (newStyleValue === oldStyleValue) {
549+ propertiesUpdated = true;
550+ if (newStyleValue) {
551+ checkStyleValue(newStyleValue);
552+ projectionOptions.styleApplyer(domNode, styleName, newStyleValue);
554+ projectionOptions.styleApplyer(domNode, styleName, "");
558+ if (!propValue && typeof previousValue === "string") {
561+ if (propName === "value") {
562+ var domValue = domNode[propName];
563+ if (domValue !== propValue && // The 'value' in the DOM tree !== newValue
564+ propValue !== previousValue) {
565+ domNode[propName] = propValue;
567+ if (propValue !== previousValue) {
568+ propertiesUpdated = true;
570+ } else if (propValue !== previousValue) {
571+ var type = typeof propValue;
572+ if (type !== "function" || !projectionOptions.eventHandlerInterceptor) {
573+ if (projectionOptions.namespace === NAMESPACE_SVG) {
574+ if (propName === "href") {
575+ domNode.setAttributeNS(NAMESPACE_XLINK, propName, propValue);
577+ domNode.setAttribute(propName, propValue);
579+ } else if (type === "string" && propName !== "innerHTML") {
580+ if (propName === "role" && propValue === "") {
581+ domNode.removeAttribute(propName);
583+ domNode.setAttribute(propName, propValue);
585+ } else if (domNode[propName] !== propValue) {
586+ domNode[propName] = propValue;
588+ propertiesUpdated = true;
593+ return propertiesUpdated;
595+ var updateChildren = function(vnode, domNode, oldChildren, newChildren, projectionOptions) {
596+ if (oldChildren === newChildren) {
599+ oldChildren = oldChildren || emptyArray;
600+ newChildren = newChildren || emptyArray;
601+ var oldChildrenLength = oldChildren.length;
602+ var newChildrenLength = newChildren.length;
606+ var textUpdated = false;
607+ while (newIndex < newChildrenLength) {
608+ var oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : void 0;
609+ var newChild = newChildren[newIndex];
610+ if (oldChild !== void 0 && same(oldChild, newChild)) {
611+ textUpdated = updateDom(oldChild, newChild, projectionOptions, domNode, oldChildren) || textUpdated;
614+ var findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);
615+ if (findOldIndex >= 0) {
616+ for (i = oldIndex; i < findOldIndex; i++) {
617+ nodeToRemove(oldChildren[i]);
618+ checkDistinguishable(oldChildren, i, vnode, "removed");
620+ textUpdated = updateDom(oldChildren[findOldIndex], newChild, projectionOptions, domNode, oldChildren) || textUpdated;
621+ oldIndex = findOldIndex + 1;
623+ createDom(newChild, domNode, oldIndex < oldChildrenLength ? oldChildren[oldIndex].domNode : void 0, projectionOptions);
624+ nodeAdded(newChild);
625+ checkDistinguishable(newChildren, newIndex, vnode, "added");
630+ if (oldChildrenLength > oldIndex) {
631+ for (i = oldIndex; i < oldChildrenLength; i++) {
632+ nodeToRemove(oldChildren[i]);
633+ checkDistinguishable(oldChildren, i, vnode, "removed");
638+ updateDom = function(previous, vnode, projectionOptions, parentNode, oldChildren) {
639+ var domNode = previous.domNode;
640+ var textUpdated = false;
641+ if (previous === vnode) {
644+ var updated = false;
645+ if (vnode.vnodeSelector === "") {
646+ if (vnode.text !== previous.text) {
647+ var newTextNode = domNode.ownerDocument.createTextNode(vnode.text);
649+ parentNode.replaceChild(newTextNode, domNode);
651+ parentNode.replaceChild(newTextNode, parentNode.childNodes[oldChildren.indexOf(previous)]);
653+ vnode.domNode = newTextNode;
657+ vnode.domNode = domNode;
659+ if (vnode.vnodeSelector.lastIndexOf("svg", 0) === 0) {
660+ projectionOptions = extend(projectionOptions, {
661+ namespace: NAMESPACE_SVG
664+ if (previous.text !== vnode.text) {
666+ if (vnode.text === void 0) {
667+ domNode.removeChild(domNode.firstChild);
669+ domNode.textContent = vnode.text;
672+ vnode.domNode = domNode;
673+ updated = updateChildren(vnode, domNode, previous.children, vnode.children, projectionOptions) || updated;
674+ updated = updateProperties(domNode, previous.properties, vnode.properties, projectionOptions) || updated;
675+ if (vnode.properties && vnode.properties.afterUpdate) {
676+ vnode.properties.afterUpdate.apply(vnode.properties.bind || vnode.properties, [
679+ vnode.vnodeSelector,
685+ if (updated && vnode.properties && vnode.properties.updateAnimation) {
686+ vnode.properties.updateAnimation(domNode, vnode.properties, previous.properties);
690+ var createProjection = function(vnode, projectionOptions) {
692+ getLastRender: function() {
695+ update: function(updatedVnode) {
696+ if (vnode.vnodeSelector !== updatedVnode.vnodeSelector) {
697+ throw new Error("The selector for the root VNode may not be changed. (consider using dom.merge and add one extra level to the virtual DOM)");
699+ var previousVNode = vnode;
700+ vnode = updatedVnode;
701+ updateDom(previousVNode, updatedVnode, projectionOptions, previousVNode.domNode.parentNode, [previousVNode]);
703+ domNode: vnode.domNode
706+ var DEFAULT_PROJECTION_OPTIONS = {
708+ performanceLogger: function() {
711+ eventHandlerInterceptor: void 0,
712+ styleApplyer: function(domNode, styleName, value12) {
713+ if (styleName.charAt(0) === "-") {
714+ domNode.style.setProperty(styleName, value12);
716+ domNode.style[styleName] = value12;
720+ var applyDefaultProjectionOptions = function(projectorOptions) {
721+ return extend(DEFAULT_PROJECTION_OPTIONS, projectorOptions);
725+ * Creates a real DOM tree from `vnode`. The [[Projection]] object returned will contain the resulting DOM Node in
726+ * its [[Projection.domNode|domNode]] property.
727+ * This is a low-level method. Users will typically use a [[Projector]] instead.
728+ * @param vnode - The root of the virtual DOM tree that was created using the [[h]] function. NOTE: [[VNode]]
729+ * objects may only be rendered once.
730+ * @param projectionOptions - Options to be used to create and update the projection.
731+ * @returns The [[Projection]] which also contains the DOM Node that was created.
733+ create: function(vnode, projectionOptions) {
734+ projectionOptions = applyDefaultProjectionOptions(projectionOptions);
735+ createDom(vnode, document.createElement("div"), void 0, projectionOptions);
736+ return createProjection(vnode, projectionOptions);
739+ * Appends a new child node to the DOM which is generated from a [[VNode]].
740+ * This is a low-level method. Users will typically use a [[Projector]] instead.
741+ * @param parentNode - The parent node for the new child node.
742+ * @param vnode - The root of the virtual DOM tree that was created using the [[h]] function. NOTE: [[VNode]]
743+ * objects may only be rendered once.
744+ * @param projectionOptions - Options to be used to create and update the [[Projection]].
745+ * @returns The [[Projection]] that was created.
747+ append: function(parentNode, vnode, projectionOptions) {
748+ projectionOptions = applyDefaultProjectionOptions(projectionOptions);
749+ createDom(vnode, parentNode, void 0, projectionOptions);
750+ return createProjection(vnode, projectionOptions);
753+ * Inserts a new DOM node which is generated from a [[VNode]].
754+ * This is a low-level method. Users wil typically use a [[Projector]] instead.
755+ * @param beforeNode - The node that the DOM Node is inserted before.
756+ * @param vnode - The root of the virtual DOM tree that was created using the [[h]] function.
757+ * NOTE: [[VNode]] objects may only be rendered once.
758+ * @param projectionOptions - Options to be used to create and update the projection, see [[createProjector]].
759+ * @returns The [[Projection]] that was created.
761+ insertBefore: function(beforeNode, vnode, projectionOptions) {
762+ projectionOptions = applyDefaultProjectionOptions(projectionOptions);
763+ createDom(vnode, beforeNode.parentNode, beforeNode, projectionOptions);
764+ return createProjection(vnode, projectionOptions);
767+ * Merges a new DOM node which is generated from a [[VNode]] with an existing DOM Node.
768+ * This means that the virtual DOM and the real DOM will have one overlapping element.
769+ * Therefore the selector for the root [[VNode]] will be ignored, but its properties and children will be applied to the Element provided.
770+ * This is a low-level method. Users wil typically use a [[Projector]] instead.
771+ * @param element - The existing element to adopt as the root of the new virtual DOM. Existing attributes and child nodes are preserved.
772+ * @param vnode - The root of the virtual DOM tree that was created using the [[h]] function. NOTE: [[VNode]] objects
773+ * may only be rendered once.
774+ * @param projectionOptions - Options to be used to create and update the projection, see [[createProjector]].
775+ * @returns The [[Projection]] that was created.
777+ merge: function(element, vnode, projectionOptions) {
778+ projectionOptions = applyDefaultProjectionOptions(projectionOptions);
779+ vnode.domNode = element;
780+ initPropertiesAndChildren(element, vnode, projectionOptions);
781+ return createProjection(vnode, projectionOptions);
784+ * Replaces an existing DOM node with a node generated from a [[VNode]].
785+ * This is a low-level method. Users will typically use a [[Projector]] instead.
786+ * @param element - The node for the [[VNode]] to replace.
787+ * @param vnode - The root of the virtual DOM tree that was created using the [[h]] function. NOTE: [[VNode]]
788+ * objects may only be rendered once.
789+ * @param projectionOptions - Options to be used to create and update the [[Projection]].
790+ * @returns The [[Projection]] that was created.
792+ replace: function(element, vnode, projectionOptions) {
793+ projectionOptions = applyDefaultProjectionOptions(projectionOptions);
794+ createDom(vnode, element.parentNode, element, projectionOptions);
795+ element.parentNode.removeChild(element);
796+ return createProjection(vnode, projectionOptions);
799+ var toTextVNode = function(data) {
804+ text: data.toString(),
808+ var appendChildren = function(parentSelector, insertions, main2) {
809+ for (var i = 0, length_1 = insertions.length; i < length_1; i++) {
810+ var item = insertions[i];
811+ if (Array.isArray(item)) {
812+ appendChildren(parentSelector, item, main2);
814+ if (item !== null && item !== void 0 && item !== false) {
815+ if (typeof item === "string") {
816+ item = toTextVNode(item);
823+ function h(selector, properties, children) {
824+ if (Array.isArray(properties)) {
825+ children = properties;
826+ properties = void 0;
827+ } else if (properties && (typeof properties === "string" || properties.vnodeSelector) || children && (typeof children === "string" || children.vnodeSelector)) {
828+ throw new Error("h called with invalid arguments");
831+ var flattenedChildren;
832+ if (children && children.length === 1 && typeof children[0] === "string") {
833+ text5 = children[0];
834+ } else if (children) {
835+ flattenedChildren = [];
836+ appendChildren(selector, children, flattenedChildren);
837+ if (flattenedChildren.length === 0) {
838+ flattenedChildren = void 0;
842+ vnodeSelector: selector,
844+ children: flattenedChildren,
845+ text: text5 === "" ? void 0 : text5,
849+ var createParentNodePath = function(node, rootNode) {
850+ var parentNodePath = [];
851+ while (node && node !== rootNode) {
852+ parentNodePath.push(node);
853+ node = node.parentNode;
855+ return parentNodePath;
858+ if (Array.prototype.find) {
859+ find = function(items, predicate) {
860+ return items.find(predicate);
863+ find = function(items, predicate) {
864+ return items.filter(predicate)[0];
867+ var findVNodeByParentNodePath = function(vnode, parentNodePath) {
869+ parentNodePath.forEach(function(node) {
870+ result = result && result.children ? find(result.children, function(child) {
871+ return child.domNode === node;
876+ var createEventHandlerInterceptor = function(projector, getProjection, performanceLogger) {
877+ return function(propertyName, eventHandler, domNode, properties) {
878+ return modifiedEventHandler;
880+ function modifiedEventHandler(evt) {
882+ performanceLogger("domEvent", evt);
883+ var projection = getProjection();
884+ var parentNodePath = createParentNodePath(evt.currentTarget, projection.domNode);
885+ parentNodePath.reverse();
886+ var matchingVNode = findVNodeByParentNodePath(projection.getLastRender(), parentNodePath);
887+ projector.scheduleRender();
889+ if (matchingVNode) {
890+ var listener = (_b = (_a = matchingVNode.properties["on" + evt.type]) !== null && _a !== void 0 ? _a : matchingVNode.properties.on[evt.type].listener) !== null && _b !== void 0 ? _b : matchingVNode.properties.on[evt.type];
891+ result = listener.apply(matchingVNode.properties.bind || this, arguments);
893+ performanceLogger("domEventProcessed", evt);
897+ var createProjector = function(projectorOptions) {
899+ var projectionOptions = applyDefaultProjectionOptions(projectorOptions);
900+ var performanceLogger = projectionOptions.performanceLogger;
901+ var renderCompleted = true;
903+ var stopped = false;
904+ var projections = [];
905+ var renderFunctions = [];
906+ var addProjection = function(domFunction, node, renderFunction) {
908+ var getProjection = function() {
911+ projectionOptions.eventHandlerInterceptor = createEventHandlerInterceptor(projector, getProjection, performanceLogger);
912+ projection = domFunction(node, renderFunction(), projectionOptions);
913+ projections.push(projection);
914+ renderFunctions.push(renderFunction);
916+ var doRender = function() {
918+ if (!renderCompleted) {
921+ renderCompleted = false;
922+ performanceLogger("renderStart", void 0);
923+ for (var i = 0; i < projections.length; i++) {
924+ var updatedVnode = renderFunctions[i]();
925+ performanceLogger("rendered", void 0);
926+ projections[i].update(updatedVnode);
927+ performanceLogger("patched", void 0);
929+ performanceLogger("renderDone", void 0);
930+ renderCompleted = true;
933+ renderNow: doRender,
934+ scheduleRender: function() {
935+ if (!scheduled && !stopped) {
936+ scheduled = requestAnimationFrame(doRender);
941+ cancelAnimationFrame(scheduled);
946+ resume: function() {
948+ renderCompleted = true;
949+ projector.scheduleRender();
951+ append: function(parentNode, renderFunction) {
952+ addProjection(dom.append, parentNode, renderFunction);
954+ insertBefore: function(beforeNode, renderFunction) {
955+ addProjection(dom.insertBefore, beforeNode, renderFunction);
957+ merge: function(domNode, renderFunction) {
958+ addProjection(dom.merge, domNode, renderFunction);
960+ replace: function(domNode, renderFunction) {
961+ addProjection(dom.replace, domNode, renderFunction);
963+ detach: function(renderFunction) {
964+ for (var i = 0; i < renderFunctions.length; i++) {
965+ if (renderFunctions[i] === renderFunction) {
966+ renderFunctions.splice(i, 1);
967+ return projections.splice(i, 1)[0];
970+ throw new Error("renderFunction was not found");
975+ function _h(selector) {
976+ return function(properties) {
977+ return function(children) {
978+ return h(selector, properties, children);
982+ function replace(projector) {
983+ return function(el) {
984+ return function(render) {
986+ projector.replace(el, render);
992+ // output/Unsafe.Coerce/foreign.js
993+ var unsafeCoerce2 = function(x) {
997+ // output/Maquette/index.js
998+ var string = unsafeCoerce2;
1001+ // output/Data.Array/foreign.js
1002+ var replicateFill = function(count, value12) {
1006+ var result = new Array(count);
1007+ return result.fill(value12);
1009+ var replicatePolyfill = function(count, value12) {
1012+ for (var i = 0; i < count; i++) {
1013+ result[n++] = value12;
1017+ var replicateImpl = typeof Array.prototype.fill === "function" ? replicateFill : replicatePolyfill;
1019+ // output/Control.Monad.ST.Internal/foreign.js
1020+ var map_ = function(f) {
1021+ return function(a) {
1022+ return function() {
1027+ var pure_ = function(a) {
1028+ return function() {
1032+ var bind_ = function(a) {
1033+ return function(f) {
1034+ return function() {
1040+ // output/Control.Monad.ST.Internal/index.js
1041+ var $runtime_lazy2 = function(name14, moduleName, init) {
1044+ return function(lineNumber) {
1045+ if (state2 === 2) return val;
1046+ if (state2 === 1) throw new ReferenceError(name14 + " was needed before it finished initializing (module " + moduleName + ", line " + lineNumber + ")", moduleName, lineNumber);
1057+ Applicative0: function() {
1058+ return applicativeST;
1060+ Bind1: function() {
1066+ Apply0: function() {
1067+ return $lazy_applyST(0);
1070+ var applicativeST = {
1072+ Apply0: function() {
1073+ return $lazy_applyST(0);
1076+ var $lazy_applyST = /* @__PURE__ */ $runtime_lazy2("applyST", "Control.Monad.ST.Internal", function() {
1078+ apply: ap(monadST),
1079+ Functor0: function() {
1085+ // output/Data.Foldable/foreign.js
1086+ var foldrArray = function(f) {
1087+ return function(init) {
1088+ return function(xs) {
1090+ var len = xs.length;
1091+ for (var i = len - 1; i >= 0; i--) {
1092+ acc = f(xs[i])(acc);
1098+ var foldlArray = function(f) {
1099+ return function(init) {
1100+ return function(xs) {
1102+ var len = xs.length;
1103+ for (var i = 0; i < len; i++) {
1104+ acc = f(acc)(xs[i]);
1111+ // output/Data.Foldable/index.js
1112+ var foldr = function(dict) {
1115+ var foldMapDefaultR = function(dictFoldable) {
1116+ var foldr2 = foldr(dictFoldable);
1117+ return function(dictMonoid) {
1118+ var append2 = append(dictMonoid.Semigroup0());
1119+ var mempty2 = mempty(dictMonoid);
1120+ return function(f) {
1121+ return foldr2(function(x) {
1122+ return function(acc) {
1123+ return append2(f(x))(acc);
1129+ var foldableArray = {
1132+ foldMap: function(dictMonoid) {
1133+ return foldMapDefaultR(foldableArray)(dictMonoid);
1136+ var foldMap = function(dict) {
1137+ return dict.foldMap;
1140+ // output/Data.Array/index.js
1141+ var foldMap1 = /* @__PURE__ */ foldMap(foldableArray);
1142+ var foldMap2 = function(dictMonoid) {
1143+ return foldMap1(dictMonoid);
1146+ // output/Foreign.Object/foreign.js
1147+ function _copyST(m) {
1148+ return function() {
1151+ if (hasOwnProperty.call(m, k)) {
1159+ function runST(f) {
1162+ function _foldM(bind3) {
1163+ return function(f) {
1164+ return function(mz) {
1165+ return function(m) {
1168+ return function(z) {
1169+ return f(z)(k2)(m[k2]);
1173+ if (hasOwnProperty.call(m, k)) {
1174+ acc = bind3(acc)(g(k));
1182+ function toArrayWithKey(f) {
1183+ return function(m) {
1186+ if (hasOwnProperty.call(m, k)) {
1187+ r.push(f(k)(m[k]));
1193+ var keys = Object.keys || toArrayWithKey(function(k) {
1194+ return function() {
1199+ // output/Foreign.Object.ST/foreign.js
1200+ function poke2(k) {
1201+ return function(v) {
1202+ return function(m) {
1203+ return function() {
1211+ // output/Foreign.Object/index.js
1212+ var thawST = _copyST;
1213+ var mutate = function(f) {
1214+ return function(m) {
1215+ return runST(function __do() {
1216+ var s2 = thawST(m)();
1222+ var insert = function(k) {
1223+ return function(v) {
1224+ return mutate(poke2(k)(v));
1227+ var fromHomogeneous = function() {
1228+ return unsafeCoerce2;
1230+ var foldM = function(dictMonad) {
1231+ var bind1 = bind(dictMonad.Bind1());
1232+ var pure1 = pure(dictMonad.Applicative0());
1233+ return function(f) {
1234+ return function(z) {
1235+ return _foldM(bind1)(f)(pure1(z));
1239+ var foldM1 = /* @__PURE__ */ foldM(monadST);
1240+ var union = function(m) {
1241+ return mutate(function(s2) {
1242+ return foldM1(function(s$prime) {
1243+ return function(k) {
1244+ return function(v) {
1245+ return poke2(k)(v)(s$prime);
1252+ // output/Plum.View/index.js
1253+ var fromHomogeneous2 = /* @__PURE__ */ fromHomogeneous();
1254+ var show2 = /* @__PURE__ */ show(showInt);
1255+ var map2 = /* @__PURE__ */ map(functorArray);
1256+ var Flexbox = /* @__PURE__ */ function() {
1257+ function Flexbox2() {
1260+ Flexbox2.value = new Flexbox2();
1263+ var Spacing = /* @__PURE__ */ function() {
1264+ function Spacing2(value0, value1) {
1265+ this.value0 = value0;
1266+ this.value1 = value1;
1269+ Spacing2.create = function(value0) {
1270+ return function(value1) {
1271+ return new Spacing2(value0, value1);
1276+ var semigroupRenderedAttribut = {
1277+ append: function(v1) {
1278+ return function(v2) {
1280+ styles: union(v1.styles)(v2.styles)
1285+ var monoidRenderedAttribute = {
1289+ Semigroup0: function() {
1290+ return semigroupRenderedAttribut;
1293+ var foldMap3 = /* @__PURE__ */ foldMap2(monoidRenderedAttribute);
1294+ var withStyles = function() {
1295+ return function(v1) {
1296+ return function(styles) {
1298+ styles: union(v1.styles)(fromHomogeneous2(styles))
1303+ var withStyles1 = /* @__PURE__ */ withStyles();
1304+ var unView = function(v1) {
1307+ var spacing = function(x) {
1308+ return new Spacing(x, x);
1310+ var s = function(x) {
1311+ return function(v1) {
1315+ var renderAttribute = function(_ctx) {
1316+ return function(attr) {
1318+ styles: insert("gap")(show2(attr.value0) + ("px " + (show2(attr.value1) + "px")))(empty2)
1322+ var renderAttributes = function(ctx) {
1323+ return foldMap3(renderAttribute(ctx));
1325+ var renderWithStyles = function() {
1326+ return function(ctx) {
1327+ return function(attrs) {
1328+ return function(styles) {
1329+ return withStyles1(renderAttributes(ctx)(attrs))(styles);
1334+ var renderWithStyles1 = /* @__PURE__ */ renderWithStyles();
1335+ var button = function(v1) {
1336+ return function(v2) {
1337+ return function(fire) {
1339+ onclick: fire(v2.onPress)
1340+ })([unView(v2.view)(fire)]);
1344+ var _v = function(el) {
1345+ return function(attr) {
1346+ return function(children) {
1347+ return function(fire) {
1348+ return h2(el)(attr)(map2(function(v1) {
1355+ var row = function(attrs) {
1356+ return function(children) {
1357+ return _v("div")(renderWithStyles1(Flexbox.value)(attrs)({
1359+ "flex-direction": "row"
1364+ // output/Web.DOM.NonElementParentNode/foreign.js
1365+ function _getElementById(id) {
1366+ return function(node) {
1367+ return function() {
1368+ return node.getElementById(id);
1373+ // output/Data.Nullable/foreign.js
1374+ function nullable(a, r, f) {
1375+ return a == null ? r : f(a);
1378+ // output/Data.Nullable/index.js
1379+ var toMaybe = function(n) {
1380+ return nullable(n, Nothing.value, Just.create);
1383+ // output/Web.DOM.NonElementParentNode/index.js
1384+ var map3 = /* @__PURE__ */ map(functorEffect);
1385+ var getElementById = function(eid) {
1386+ var $2 = map3(toMaybe);
1387+ var $3 = _getElementById(eid);
1388+ return function($4) {
1393+ // output/Web.HTML/foreign.js
1394+ var windowImpl = function() {
1398+ // output/Web.HTML.HTMLDocument/index.js
1399+ var toNonElementParentNode = unsafeCoerce2;
1401+ // output/Web.HTML.Window/foreign.js
1402+ function document2(window2) {
1403+ return function() {
1404+ return window2.document;
1408+ // output/Plum/index.js
1409+ var bind2 = /* @__PURE__ */ bind(bindEffect);
1410+ var run3 = function(id) {
1411+ return function(plum2) {
1412+ return function __do() {
1413+ var modelRef = bind2(plum2.init)($$new)();
1414+ var v = bind2(bind2(windowImpl)(document2))(function() {
1415+ var $6 = getElementById(id);
1416+ return function($7) {
1417+ return $6(toNonElementParentNode($7));
1420+ if (v instanceof Just) {
1421+ var projector = createProjector();
1422+ return replace(projector)(v.value0)(function __do2() {
1423+ var model = read(modelRef)();
1424+ return unView(plum2.view(model))(function(msg) {
1425+ return function __do3() {
1426+ var m = read(modelRef)();
1427+ var m_ = plum2.update(msg)(m)();
1428+ return write(m_)(modelRef)();
1434+ if (v instanceof Nothing) {
1438+ throw new Error("Failed pattern match at Plum (line 24, column 92 - line 36, column 25): " + [v.constructor.name]);
1443+ // output/Main/index.js
1444+ var pure2 = /* @__PURE__ */ pure(applicativeEffect);
1446+ init: /* @__PURE__ */ pure2({
1449+ view: function(model) {
1450+ return row([spacing(16)])([s(model.text), button([])({
1455+ update: function(msg) {
1456+ return function(model) {
1458+ text: "Button pressed"
1463+ var main = /* @__PURE__ */ run3("plum")(plum);