@optionfactory/fml 8.0.2 → 9.0.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +7 -0
- package/README.md +88 -0
- package/dist/client-errors.iife.js +30 -9
- package/dist/client-errors.iife.js.map +1 -1
- package/dist/client-errors.iife.min.js +1 -1
- package/dist/client-errors.iife.min.js.map +1 -1
- package/dist/custom-elements.json +1502 -408
- package/dist/fml.css +21 -10
- package/dist/fml.css.map +1 -1
- package/dist/fml.d.mts +3 -1299
- package/dist/fml.iife.js +5304 -2270
- package/dist/fml.iife.js.map +1 -1
- package/dist/fml.iife.min.js +1 -1
- package/dist/fml.iife.min.js.map +1 -1
- package/dist/fml.min.mjs +1 -1
- package/dist/fml.min.mjs.map +1 -1
- package/dist/fml.mjs +6 -8694
- package/dist/fml.mjs.map +1 -1
- package/dist/ftl.d.mts +433 -72
- package/dist/ftl.iife.js +1313 -807
- package/dist/ftl.iife.js.map +1 -1
- package/dist/ftl.iife.min.js +1 -1
- package/dist/ftl.iife.min.js.map +1 -1
- package/dist/ftl.min.mjs +1 -1
- package/dist/ftl.min.mjs.map +1 -1
- package/dist/ftl.mjs +1312 -808
- package/dist/ftl.mjs.map +1 -1
- package/dist/ful.css +21 -10
- package/dist/ful.css.map +1 -1
- package/dist/ful.d.mts +806 -257
- package/dist/ful.iife.js +3697 -1356
- package/dist/ful.iife.js.map +1 -1
- package/dist/ful.iife.min.js +1 -1
- package/dist/ful.iife.min.js.map +1 -1
- package/dist/ful.min.mjs +1 -1
- package/dist/ful.min.mjs.map +1 -1
- package/dist/ful.mjs +3686 -1356
- package/dist/ful.mjs.map +1 -1
- package/dist/httpc.d.mts +114 -19
- package/dist/httpc.iife.js +253 -83
- package/dist/httpc.iife.js.map +1 -1
- package/dist/httpc.iife.min.js +1 -1
- package/dist/httpc.iife.min.js.map +1 -1
- package/dist/httpc.min.mjs +1 -1
- package/dist/httpc.min.mjs.map +1 -1
- package/dist/httpc.mjs +250 -84
- package/dist/httpc.mjs.map +1 -1
- package/dist/vscode.html-custom-data.json +607 -65
- package/dist/web-types.json +1471 -376
- package/package.json +16 -8
package/dist/fml.min.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fml.min.mjs","sources":["../src/ftl/ast.mjs","../src/ftl/expressions-parser.peggy","../src/ftl/expressions.mjs","../src/ftl/dom.mjs","../src/ftl/template.mjs","../src/ftl/registry.mjs","../src/ftl/templates.mjs","../src/ftl/rendering.mjs","../src/ftl/parsed-element.mjs","../src/httpc/failure.mjs","../src/httpc/encodings.mjs","../src/httpc/http-client.mjs","../src/ful/storage.mjs","../src/ful/events/async.mjs","../src/ful/timing.mjs","../src/ful/elements/bindings.mjs","../src/ful/elements/form.mjs","../src/ful/elements/input.mjs","../src/ful/elements/temporals.mjs","../src/ful/elements/files.mjs","../src/ful/elements/select.mjs","../src/ful/elements/radio.mjs","../src/ful/elements/checkbox.mjs","../src/ful/elements/spinner.mjs","../src/ful/elements/table.mjs","../src/ful/elements/filters.mjs","../src/ful/elements/l10n.mjs","../src/ful/elements/plugin.mjs","../src/index.mjs"],"sourcesContent":["const nodes = {\n ter: Symbol('ternary'),\n elv: Symbol('elvis'),\n nullc: Symbol('null-coalescence'),\n or: Symbol('or'),\n and: Symbol('and'),\n eq: Symbol('eq'),\n cmp: Symbol('cmp'),\n not: Symbol('not'),\n access: Symbol('access'),\n member: Symbol('access-member'),\n subscript: Symbol('access-subscript'),\n method: Symbol('access-method-call'),\n call: Symbol('module-function-call'),\n tstring: Symbol('tstring'),\n literal: Symbol('literal'),\n array: Symbol('array-literal'),\n dict: Symbol('dict-literal'),\n function: Symbol('module-function'),\n symbol: Symbol('symbol'),\n templated: {\n ten: Symbol('templated-node'),\n teh: Symbol('templated-html'),\n tet: Symbol('templated-text'),\n tel: Symbol('templated-literal'),\n },\n dom: {\n t: Symbol('text'),\n h: Symbol('html'),\n n: Symbol('node'),\n },\n};\n\nexport { nodes };\n","{{\n import { nodes } from \"./ast.mjs\";\n}}\n\nTemplatedRoot = TemplatedExpression*\n\nTemplatedExpression = value:(BeginNode @ExpressionRoot EndNode) { return {type:nodes.templated.ten, value}}\n\t/ value:(BeginHtml @ExpressionRoot EndHtml) { return {type:nodes.templated.teh, value}}\n\t/ value:(BeginText @ExpressionRoot EndText) { return {type:nodes.templated.tet, value}} \n\t/ value:TemplatedText { return {type:nodes.templated.tel, value}}\n\nBeginNode = '{{{{'\nEndNode = '}}}}'\t\nBeginHtml = '{{{'\nEndHtml = '}}}'\nBeginText = '{{'\nEndText = '}}'\n\nTemplatedText\n = parts:(\n $( [^\\\\{]+ ) // normal text\n / '\\\\' c:. { return c; } //escaped\n / '{' !'{' // single brace that isn't a delimiter\n )+ { return parts.join(''); }\n\nExpressionRoot\n = _ r:Expression _ { return r; }\n\nExpression = TernaryExpression\n\nTernaryExpression \n = cond:ElvisExpression _ \"?\" _ ifTrue:TernaryExpression _ \":\" _ ifFalse:TernaryExpression { return {type:nodes.ter, cond, ifTrue, ifFalse}; }\n / ElvisExpression\n\nElvisExpression\n = cond:NullCoalescingExpression _ \"?:\" _ ifFalse:ElvisExpression {return {type:nodes.elv, cond, ifFalse}; }\n / NullCoalescingExpression\n\nNullCoalescingExpression\n = lhs:OrExpression _ \"??\" _ rhs:NullCoalescingExpression { return {type:nodes.nullc, lhs, rhs}; } \n / OrExpression\n\nOrExpression \n = head:AndExpression tail:(_ \"||\" _ @rhs:AndExpression)* {\n let result = head;\n for (const rhs of tail) {\n result = {type: nodes.or, lhs: result, rhs};\n }\n return result;\n }\n\nAndExpression\n = head:EqExpression tail:(_ \"&&\" _ @rhs:EqExpression)* { \n let result = head;\n for (const rhs of tail) {\n result = {type: nodes.and, lhs: result, rhs};\n }\n return result;\n }\n\nEqExpression\n = head:RelExpression tail:(_ op:EqualityOp _ rhs:RelExpression {return {op, rhs};})* { \n let result = head;\n for (const element of tail) {\n result = {type: nodes.eq, op: element.op, lhs: result, rhs: element.rhs};\n }\n return result;\n }\n\nRelExpression\n = head:NotExpression tail:(_ op:RelationalOp _ rhs:NotExpression {return {op, rhs};})* {\n let result = head;\n for (const element of tail) {\n result = {type: nodes.cmp, op: element.op, lhs: result, rhs: element.rhs};\n }\n return result;\n }\n\n\nNotExpression\n = \"!\" _ expr:NotExpression { return {type:nodes.not, expr} }\n / Access\n\n\nAccess \n = lhs:GroupingExpression _ rhs:(@AccessExpression _)+ { return {type: nodes.access, lhs, rhs} } \n / GroupingExpression\n\n\nAccessExpression \n = AccessMember\n / AccessSubscript \n / AccessMethodCall\n \nAccessMember \"member\"\n = op:(\"?.\"/\".\") _ rhs:Symbol { \n return {type: nodes.member, ns: op === '?.', rhs: rhs.value}; \n }\n\nAccessSubscript \"subscript\" \n = op:\"?.\"? \"[\" _ rhs:Expression _ \"]\" { \n return {type: nodes.subscript, ns: op !== null, rhs}; \n } \n\nAccessMethodCall \"method-call\" \n = op:\"?.\"? \"(\" _ h:(@Expression _)? t:(\",\" _ @Expression _)* \")\" { \n return {type: nodes.method, ns: op !== null, args: h === null ? [] : [h, ...t]}; \n }\n\nGroupingExpression \n = \"(\" _ e:Expression _ \")\" { return e }\n / ModuleFunctionCall \n / AnyLiteral\n / Symbol\n\n\nModuleFunctionCall \"module-function-call\" \n = fn:ModuleFunction \"(\" _ h:(@Expression _)? t:(\",\" _ @Expression _)* \")\" {\n const args = h === null ? [] : [h, ...t];\n return {type: nodes.call, value: fn, args};\n }\n\nAnyLiteral\n = NumberLiteral\n / BooleanLiteral\n / NullLiteral\n / UndefinedLiteral\n / StringLiteral\n / ArrayLiteral\n / DictLiteral\n\nBooleanLiteral \"boolean-literal\"\n = \"true\" { \n return {type: nodes.literal, value: true}; \n }\n / \"false\" { \n return {type: nodes.literal, value: false}; \n }\n\nNullLiteral \"null-literal\"\n = \"null\" {\n return {type: nodes.literal, value: null};\n }\n\nUndefinedLiteral \"undefined-literal\" // <--- Add this\n = \"undefined\" {\n return {type: nodes.literal, value: undefined};\n } \n\nNumberLiteral \"number-literal\" \n = value:$( '-'? ([0-9]+ ('.' [0-9]*)? / '.' [0-9]+ ) ) {\n return { type: nodes.literal, value: parseFloat(value) };\n }\n\nStringLiteral \"string-literal\"\n = \"'\" value:$[^']* \"'\" { return {type: nodes.literal, value}; }\n / '\"' value:$[^\"]* '\"' { return {type: nodes.literal, value}; }\n / \"`\" parts:(TemplateStringExpression / TemplateStringLiteral)* \"`\" { \n return {type: nodes.tstring, parts}; \n }\n\nTemplateStringExpression \"tstring-expression\"\n = \"{\" _ expr:Expression _ \"}\" { \n return expr; \n }\n\nTemplateStringLiteral \"tstring-literal\"\n = parts:(\n $([^\\\\`{]+)\n / \"\\\\\" c:. { return c; }\n )+ {\n return { type: nodes.literal, value: parts.join('') };\n }\n / char:$(\"{\") { \n return { type: nodes.literal, value: char }; \n }\n\nArrayLiteral \"array-literal\" \n = \"[\" _ h:(Expression)? _ t:(\",\" _ @Expression _)* \"]\" { \n const value = h === null ? [] : [h, ...t];\n return {type: nodes.array, value};\n }\n\nDictLiteral \"dict-literal\" \n = \"{\" _ h:(@StringLiteral _ \":\" _ @Expression)? _ t:(\",\" _ @StringLiteral _ \":\" _ @Expression _)* \"}\" {\n var value = []\n if (h !== null){\n value.push(h);\n }\n value.push.apply(value, t);\n return {type: nodes.dict, value}; \n }\n\nModuleFunction \"module-function\"\n = '#' module:(@$([a-zA-Z$_][a-zA-Z$_0-9_]*) ':')? v:$([a-zA-Z$_][a-zA-Z$_0-9_]*) {\n return {type: nodes.function, module, value: v}\n }\n\nSymbol \"symbol\"\n = s:$([a-zA-Z$_][a-zA-Z$_0-9_]*) { \n return {type: nodes.symbol, value: s}; \n }\n \nEqualityOp\n = \"==\"\n / \"!=\"\n\nRelationalOp\n = \">=\"\n / \">\"\n / \"<=\"\n / \"<\"\n\n_ \"whitespaces\"\n = [ \\t\\n\\r]*\n\n","import { parse } from './expressions-parser.peggy';\nimport { nodes } from './ast.mjs';\n\nclass EvaluatingVisitor {\n #modules;\n #dataStack;\n constructor(modules, dataStack) {\n this.#modules = modules;\n this.#dataStack = dataStack;\n }\n #resolve(prop) {\n if (prop === 'self') {\n return this.#dataStack[this.#dataStack.length - 1];\n }\n for (let i = this.#dataStack.length - 1; i >= 0; i--) {\n const overlay = this.#dataStack[i];\n if (overlay != null && (typeof overlay === 'object' || typeof overlay === 'function')) {\n if (prop in overlay) {\n return overlay[prop];\n }\n }\n }\n return undefined;\n }\n\n #cached_resolve_proxy;\n #resolve_proxy() {\n if (!this.#cached_resolve_proxy) {\n this.#cached_resolve_proxy = new Proxy(this.#dataStack, {\n get: (target, prop) => this.#resolve(prop)\n });\n }\n return this.#cached_resolve_proxy;\n }\n [nodes.and](node) {\n return this.visit(node.lhs) && this.visit(node.rhs);\n }\n [nodes.or](node) {\n return this.visit(node.lhs) || this.visit(node.rhs);\n }\n [nodes.nullc](node) {\n const lhs = this.visit(node.lhs);\n return lhs !== null && lhs !== undefined ? lhs : this.visit(node.rhs);\n }\n [nodes.not](node) {\n return !this.visit(node.expr);\n }\n [nodes.eq](node) {\n const lhs = this.visit(node.lhs);\n const rhs = this.visit(node.rhs);\n const eq = lhs === rhs;\n return node.op === '==' ? eq : !eq;\n }\n [nodes.cmp](node) {\n const lhs = this.visit(node.lhs);\n const rhs = this.visit(node.rhs);\n switch (node.op) {\n case '>':\n return lhs > rhs;\n case '<':\n return lhs < rhs;\n case '>=':\n return lhs >= rhs;\n case '<=':\n return lhs <= rhs;\n default:\n throw new Error(`unknown cmp op ${node.op}`);\n }\n }\n [nodes.call](node) {\n const fnRef = node.value;\n const module = fnRef.module === null ? this.#modules : this.#modules?.[fnRef.module];\n if (!module) {\n throw new Error(`Module \"${fnRef.module}\" not found`);\n }\n const fn = module[fnRef.value];\n if (!fn) {\n throw new Error(`Function \"#${fnRef.module === null ? '' : `${fnRef.module}:`}${fnRef.value}\" not found`);\n }\n const args = node.args.map((arg) => this.visit(arg));\n return fn.apply(this.#resolve_proxy(), args);\n }\n [nodes.literal](node) {\n return node.value;\n }\n [nodes.tstring](node) {\n let result = '';\n const parts = node.parts;\n for (let i = 0, len = parts.length; i < len; i++) {\n const evaluated = this.visit(parts[i]);\n if (evaluated !== null && evaluated !== undefined) {\n result += evaluated;\n }\n }\n return result;\n }\n [nodes.symbol](node) {\n return this.#resolve(node.value);\n }\n [nodes.dict](node) {\n return Object.fromEntries(node.value.map((entry) => [entry[0].value, this.visit(entry[1])]));\n }\n [nodes.array](node) {\n return node.value.map((v) => this.visit(v));\n }\n [nodes.ter](node) {\n return this.visit(node.cond) ? this.visit(node.ifTrue) : this.visit(node.ifFalse);\n }\n [nodes.elv](node) {\n const cond = this.visit(node.cond);\n return cond ? cond : this.visit(node.ifFalse);\n }\n [nodes.access](node) {\n let prev ;\n let cur = this.visit(node.lhs);\n for (let i = 0; i !== node.rhs.length; ++i) {\n const rhs = node.rhs[i];\n if (rhs.ns && cur == null) {\n return undefined;\n }\n let value ;\n switch (rhs.type) {\n case nodes.member: {\n value = cur[rhs.rhs];\n break;\n }\n case nodes.subscript: {\n value = cur[this.visit(rhs.rhs)];\n break;\n }\n case nodes.method: {\n if (!cur) {\n throw new Error(`Method missing \"${node.rhs[i - 1].rhs}\"`);\n }\n const args = rhs.args.map((arg) => this.visit(arg));\n value = cur.apply(prev, args);\n break;\n }\n }\n prev = cur;\n cur = value;\n }\n return cur;\n }\n visit(node, ...args) {\n return this[node.type](node, ...args);\n }\n visitRoot(ast, templated) {\n return !templated\n ? this.visit(ast)\n : ast.map((node) => {\n switch (node.type) {\n case nodes.templated.tel:\n return { type: nodes.dom.t, value: node.value };\n case nodes.templated.tet:\n return { type: nodes.dom.t, value: this.visit(node.value) };\n case nodes.templated.teh:\n return { type: nodes.dom.h, value: this.visit(node.value) };\n case nodes.templated.ten:\n return { type: nodes.dom.n, value: this.visit(node.value) };\n default:\n throw new Error(`unknown node type ${node.type.toString()}`);\n }\n });\n }\n}\n\nclass Expressions {\n static MODE_EXPRESSION = Symbol('MODE_EXPRESSION');\n static MODE_TEMPLATED = Symbol('MODE_TEMPLATED');\n\n static #astCache = new Map();\n static #MAX_CACHE_SIZE = 1000;\n\n /**\n * Parses an expression.\n * @param {string} expression\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode]\n * @returns the ast\n */\n static parse(expression, mode) {\n const key = mode?.toString() + expression;\n\n if (!this.#astCache.has(key)) {\n if (this.#astCache.size >= this.#MAX_CACHE_SIZE) {\n const oldestKey = this.#astCache.keys().next().value;\n this.#astCache.delete(oldestKey);\n }\n this.#astCache.set(key, parse(expression, {\n startRule: mode === Expressions.MODE_TEMPLATED ? 'TemplatedRoot' : 'ExpressionRoot',\n }));\n }\n\n return this.#astCache.get(key);\n }\n /**\n * Evaluates an expression.\n * @param {{[k: string]: any } | null | undefined } modules\n * @param {any[]} dataStack\n * @param {any} ast\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode]\n * @returns the result\n */\n static evaluate(modules, dataStack, ast, mode) {\n return new EvaluatingVisitor(modules, dataStack).visitRoot(ast, mode === Expressions.MODE_TEMPLATED);\n }\n /**\n * Parses and evaluates an expression.\n * @param {{ [x: string]: any; } | null | undefined} modules\n * @param {any[]} dataStack\n * @param {string} expression\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode]\n * @returns the result\n */\n static interpret(modules, dataStack, expression, mode) {\n return Expressions.evaluate(modules, dataStack, Expressions.parse(expression, mode), mode);\n }\n}\n\nclass ExpressionEvaluator {\n #modules;\n #dataStack;\n constructor(modules, dataStack) {\n this.#modules = modules;\n this.#dataStack = dataStack;\n }\n withModule(name, value) {\n const module = name ? { [name]: value } : value;\n return new ExpressionEvaluator({ ...this.#modules, ...module }, this.#dataStack);\n }\n withOverlay(...data) {\n return new ExpressionEvaluator(\n this.#modules,\n data.length === 0 ? this.#dataStack : [...this.#dataStack, ...data],\n );\n }\n evaluate(expression, mode) {\n return Expressions.interpret(this.#modules, this.#dataStack, expression, mode);\n }\n evaluateExpression(expression) {\n return this.evaluate(expression, Expressions.MODE_EXPRESSION);\n }\n evaluateTemplated(expression) {\n return this.evaluate(expression, Expressions.MODE_TEMPLATED);\n }\n}\n\nexport { Expressions, ExpressionEvaluator };\n","class Fragments {\n /**\n * Creates a DocumentFragment from an string.\n * @param {...string} html\n * @returns {DocumentFragment} the fragment\n */\n static fromHtml(...html) {\n const el = document.createElement('template');\n el.innerHTML = html.map((h) => h.trim()).join('');\n return document.adoptNode(el.content);\n }\n /**\n * Creates a string representation (HTML) of a DocumentFragment.\n * @param {DocumentFragment} fragment\n * @returns {string} the html\n */\n static toHtml(fragment) {\n var el = document.createElement('template');\n el.content.appendChild(fragment);\n return el.innerHTML;\n }\n /**\n * Checks if a fragment contains only blank text nodes\n * @param {DocumentFragment} fragment\n * @returns {boolean} true if the fragment is blank\n */\n static isBlank(fragment) {\n return fragment.childElementCount === 0 && fragment.textContent.trim() === '';\n }\n /**\n * Creates a DocumentFragment from nodes.\n * @param {...Node} nodes\n * @returns {DocumentFragment} the fragment\n */\n static from(...nodes) {\n const fragment = new DocumentFragment();\n for (const node of nodes) {\n fragment.appendChild(node);\n }\n return fragment;\n }\n /**\n * Creates a DocumentFragment from childNodes of an element.\n * @param {Node} el\n * @returns {DocumentFragment} the fragment\n */\n static fromChildNodes(el) {\n const fragment = new DocumentFragment();\n while (el.firstChild) {\n fragment.appendChild(el.firstChild);\n }\n return fragment;\n }\n}\n\nclass Attributes {\n static id = 0;\n /**\n * Creates a unique id with the given prefix.\n * @param {string} prefix\n * @returns\n */\n static uid(prefix) {\n return `${prefix}-${++Attributes.id}`;\n }\n /**\n * Sets an attribute if not present.\n * @param {Element} el\n * @param {string} k\n * @param {string} v\n * @returns\n */\n static defaultValue(el, k, v) {\n if (!el.hasAttribute(k)) {\n el.setAttribute(k, v);\n }\n return el.getAttribute(k);\n }\n /**\n * Forwards prefixed attributes from an element to another (removing the prefix).\n * @param {string} prefix\n * @param {Element} from\n * @param {Element} to\n */\n static forward(prefix, from, to) {\n from.getAttributeNames()\n .filter((a) => a.startsWith(prefix))\n .forEach((a) => {\n const target = a.substring(prefix.length);\n if (target === 'class') {\n const classes = from.getAttribute(`${prefix}class`)?.split(/\\s+/).filter((a) => a.length) ?? [];\n to.classList.add(...classes);\n return;\n }\n to.setAttribute(target, /** @type {string} */(from.getAttribute(a)));\n });\n }\n /**\n * Changes the presence of an attribute.\n * @param {Element} el\n * @param {string} attr\n * @param {boolean} value\n */\n static toggle(el, attr, value) {\n if (value) {\n el.setAttribute(attr, '');\n } else {\n el.removeAttribute(attr);\n }\n }\n /**\n * Changes the presence of an attribute based on its current state.\n * @param {Element} el\n * @param {string} attr\n */\n static flip(el, attr) {\n if (el.hasAttribute(attr)) {\n el.removeAttribute(attr);\n } else {\n el.setAttribute(attr, '');\n }\n }\n /**\n * Sets the value of an attribute. nullish values remove the attribute.\n * @param {Element} el\n * @param {string} attr\n * @param {string | null | undefined} value\n */\n static set(el, attr, value) {\n if (value == null) {\n el.removeAttribute(attr);\n } else {\n el.setAttribute(attr, value);\n }\n }\n}\n\nclass LightSlots {\n /**\n * Extracts light slots from an element. For non default slots in a template tag, the content is extracted.\n * @param {Element} el\n * @returns the slots\n */\n static from(el) {\n /** @type [string, Element|DocumentFragment][] */\n const namedSlots = Array.from(el.children)\n .filter((el) => el.matches('[slot]'))\n .map((el) => {\n el.remove();\n const slot = el.getAttribute('slot') || 'unnamed';\n el.removeAttribute('slot');\n return [slot, LightSlots.slotFromNode(el)];\n });\n const slots = {};\n slots.default = new DocumentFragment();\n slots.default.append(...el.childNodes);\n for (const [name, el] of namedSlots) {\n if (!(name in slots)) {\n slots[name] = new DocumentFragment();\n }\n slots[name].append(el);\n }\n return slots;\n }\n static slotFromNode(el) {\n if (el instanceof HTMLTemplateElement) {\n return document.adoptNode(el.content);\n }\n if (el instanceof HTMLScriptElement && el.type !== '' && el.type !== 'text/javascript') {\n return Fragments.fromHtml(el.innerHTML);\n }\n return el;\n }\n}\n\nclass Nodes {\n /**\n * Checks if an element is already parsed.\n * @param {Element} el\n * @returns\n */\n static isParsed(el) {\n for (let c = /** @type {Node | null} */ (el); c; c = c.parentNode) {\n if (c.nextSibling) {\n return true;\n }\n }\n return false;\n }\n\n static waitParsed(el) {\n if (el.ownerDocument.readyState === 'complete' || Nodes.isParsed(el)) {\n return Promise.resolve(el);\n }\n return new Promise((resolve) => {\n const ac = new AbortController();\n const clearAndQueue = () => {\n ac.abort();\n observer.disconnect();\n resolve(el);\n };\n el.ownerDocument.addEventListener('DOMContentLoaded', clearAndQueue, { signal: ac.signal });\n const observer = new MutationObserver(() => {\n if (!Nodes.isParsed(el)) {\n return;\n }\n clearAndQueue();\n });\n const parent = /** @type {Node} */ (el.parentNode);\n observer.observe(parent, { childList: true });\n });\n }\n\n /**\n * Returns the first child of the element element (if exists) matching the selector.\n * @param {Element} el\n * @param {string} selector\n * @returns\n */\n static queryChildren(el, selector) {\n for (const c of el.children) {\n if (c.matches(selector)) {\n return c;\n }\n }\n return null;\n }\n /**\n * Returns all children of the element matching the selector.\n * @param {Element} el\n * @param {string} selector\n * @returns\n */\n static queryChildrenAll(el, selector) {\n const r = [];\n for (const c of el.children) {\n if (c.matches(selector)) {\n r.push(c);\n }\n }\n return r;\n }\n}\n\nexport { Fragments, Attributes, LightSlots, Nodes };\n","import { nodes } from './ast.mjs';\nimport { Attributes, Fragments } from './dom.mjs';\nimport { Expressions, ExpressionEvaluator } from './expressions.mjs';\n\nclass NodeOperations {\n #forRemoval = new Set();\n removed(node) {\n return this.#forRemoval.has(node);\n }\n remove(node) {\n node.replaceChildren?.();\n Object.keys(node.dataset || {})\n .filter((k) => k.startsWith('tpl'))\n .forEach((k) => {\n delete node.dataset[k];\n });\n this.#forRemoval.add(node);\n }\n popData(node, key) {\n const v = node.dataset[key];\n delete node.dataset[key];\n return v;\n }\n prepend(ref, node) {\n ref.parentNode.insertBefore(node, ref);\n }\n append(ref, node) {\n ref.parentNode.insertBefore(node, ref.nextSibling);\n }\n replace(ref, node) {\n this.prepend(ref, node);\n this.remove(ref);\n }\n cleanup() {\n for (const node of this.#forRemoval) {\n node.remove();\n }\n this.#forRemoval.clear();\n }\n}\n\nclass CommandsHandler {\n static ORDERED_COMMANDS = [\n 'tplIf',\n 'tplWith',\n 'tplEach',\n 'tplWhen',\n 'tplClassAppend',\n 'tplAttrAppend',\n 'tplText',\n 'tplHtml',\n 'tplRemove',\n 'tplVerbatim',\n ];\n static tplIf(node, expression, ops, modules, dataStack) {\n const accept = Expressions.interpret(modules, dataStack, expression);\n if (!accept) {\n ops.remove(node);\n }\n }\n static tplWith(node, expression, ops, modules, dataStack) {\n const evaluated = Expressions.interpret(modules, dataStack, expression);\n const varName = ops.popData(node, 'tplVar');\n const newNode = new Template(node, modules, dataStack)\n .withOverlay(varName ? { [varName]: evaluated } : evaluated)\n .render();\n ops.replace(node, newNode);\n }\n static tplEach(node, expression, ops, modules, dataStack) {\n const varName = ops.popData(node, 'tplVar');\n const template = new Template(node, modules, dataStack);\n const evaluated = Expressions.interpret(modules, dataStack, expression);\n if (!evaluated?.[Symbol.iterator]) {\n throw new Error(`Expected an iterable got '${evaluated}'`);\n }\n for (const v of evaluated) {\n ops.prepend(node, template.withOverlay(varName ? { [varName]: v } : v).render());\n }\n ops.remove(node);\n }\n static tplWhen(node, expression, ops, modules, dataStack) {\n const accept = Expressions.interpret(modules, dataStack, expression);\n if (!accept) {\n ops.remove(node);\n }\n }\n static tplVerbatim(node, expression, ops, modules, dataStack) {\n const newNode = node.cloneNode(true);\n ops.replace(node, newNode);\n }\n static tplRemove(node, value, ops, modules, dataStack) {\n switch (value.toLowerCase()) {\n case 'tag': {\n const fragment = new DocumentFragment();\n while (node.firstChild) {\n fragment.appendChild(node.firstChild);\n }\n if ('tplVerbatim' in node.dataset) {\n //we are removing the parent element so we have to handle the lower priority commands\n ops.popData(node, 'tplVerbatim');\n ops.replace(node, fragment);\n } else {\n ops.append(node, fragment);\n ops.remove(node);\n }\n break;\n }\n case 'body':\n node.replaceChildren();\n break;\n case 'all':\n ops.remove(node);\n break;\n }\n }\n static tplText(node, expression, ops, modules, dataStack) {\n const text = Expressions.interpret(modules, dataStack, expression);\n const newNode = node.cloneNode();\n newNode.replaceChildren(text == null ? '' : text);\n ops.replace(node, newNode);\n }\n static tplHtml(node, expression, ops, modules, dataStack) {\n const html = Expressions.interpret(modules, dataStack, expression);\n const newNode = node.cloneNode();\n newNode.innerHTML = html == null ? '' : html;\n ops.replace(node, newNode);\n }\n static tplClassAppend(node, expression, ops, modules, dataStack) {\n const classes = Expressions.interpret(modules, dataStack, expression);\n if (!classes) {\n return;\n }\n const classesAsArray = Array.isArray(classes) ? classes : [classes];\n const cleanClasses = classesAsArray\n .flatMap(c => typeof c === 'string' ? c.split(' ') : c)\n .filter(Boolean);\n if (cleanClasses.length === 0) {\n return;\n }\n node.classList.add(...cleanClasses);\n }\n static tplAttrAppend(node, expression, ops, modules, dataStack) {\n const attributesAndValues = Expressions.interpret(modules, dataStack, expression);\n if (!attributesAndValues || attributesAndValues.length === 0) {\n return;\n }\n const tuples = Array.isArray(attributesAndValues[0]) ? attributesAndValues : [attributesAndValues];\n tuples.forEach(([k, v]) => {\n node.setAttribute(k, v);\n });\n }\n static textNode(node, expression, ops, modules, dataStack) {\n for (const v of Expressions.interpret(modules, dataStack, expression, Expressions.MODE_TEMPLATED)) {\n if (v.value == null) {\n continue;\n }\n switch (v.type) {\n case nodes.dom.t:\n ops.prepend(node, document.createTextNode(v.value));\n break;\n case nodes.dom.h:\n ops.prepend(node, Fragments.fromHtml(v.value));\n break;\n case nodes.dom.n:\n ops.prepend(node, v.value);\n break;\n }\n }\n ops.remove(node);\n }\n}\n\n// Module-isolated string cache for dataset-to-attribute conversions, bounded with\n// FIFO eviction like the expression ast cache\nconst attributeCache = new Map();\nconst ATTRIBUTE_CACHE_MAX_SIZE = 1000;\n\n/**\n * Converts a tpl camelCase dataset key into a kebab-case attribute name.\n * Uses a cache lookup to avoid repetitive regex/string splitting.\n * @param {string} dataSetKey\n * @returns {string}\n */\nfunction toAttr(dataSetKey) {\n let cached = attributeCache.get(dataSetKey);\n if (!cached) {\n if (attributeCache.size >= ATTRIBUTE_CACHE_MAX_SIZE) {\n attributeCache.delete(attributeCache.keys().next().value);\n }\n cached = dataSetKey\n .substring(3)\n .split(/(?=[A-Z])/)\n .join('-')\n .toLowerCase();\n attributeCache.set(dataSetKey, cached);\n }\n return cached;\n}\n\nclass Template {\n /**\n * Creates a template from a string.\n * @param {string} html\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data\n * @returns the template\n */\n static fromHtml(html, modules, ...data) {\n return new Template(Fragments.fromHtml(html), modules, data);\n }\n\n /**\n * Creates a template from the content of the first template element matching the selector.\n * @param {string} selector for an HTMLTemplateElement\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data\n * @returns the template\n */\n static fromSelector(selector, modules, ...data) {\n const templateEl = document.querySelector(selector);\n if (!(templateEl instanceof HTMLTemplateElement)) {\n throw new Error('template selector does not match any template tag');\n }\n const fragment = document.adoptNode(templateEl.content);\n return new Template(fragment, modules, data);\n }\n\n /**\n * Creates a template from the content of an HTMLTemplateElement.\n * @param {HTMLTemplateElement} templateEl\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data\n * @returns the template\n */\n static fromTemplate(templateEl, modules, ...data) {\n const fragment = document.adoptNode(templateEl.content);\n return new Template(fragment, modules, data);\n }\n\n /**\n * Creates a template from a DocumentFragment.\n * @param {DocumentFragment} fragment\n * @param { { [k: string] : any }? } [modules]\n * @param {...*} data\n * @returns the template\n */\n static fromFragment(fragment, modules, ...data) {\n return new Template(fragment, modules, data);\n }\n #fragment;\n #modules;\n #dataStack;\n /**\n * Creates a template.\n * @param {DocumentFragment} fragment\n * @param {{ [x: string]: any; } | null | undefined} modules\n * @param {any[]} dataStack\n */\n constructor(fragment, modules, dataStack) {\n this.#fragment = fragment;\n this.#modules = modules;\n this.#dataStack = dataStack;\n }\n /**\n * Creates a new Template replacing the modules and dataStack from a context.\n * @param {{modules: { [x: string]: any; } | null | undefined, data: any[]}} context\n */\n withContext({ modules, data }) {\n return new Template(this.#fragment, modules, data);\n }\n /**\n * Creates a new Template replacing the modules and dataStack from a registry.\n * @param any registry\n */\n withContextFrom(registry) {\n return this.withContext(registry.context());\n }\n /**\n * Creates a new Template replacing the fragment.\n * @param {DocumentFragment} fragment\n */\n withFragment(fragment) {\n return new Template(fragment, this.#modules, this.#dataStack);\n }\n /**\n * Creates a new Template with a new module added.\n * @param {string?} name\n * @param {{[k: string]: any}} value\n */\n withModule(name, value) {\n const module = name ? { [name]: value } : value;\n return new Template(this.#fragment, { ...this.#modules, ...module }, this.#dataStack);\n }\n /**\n * Creates a new Template replacing the modules.\n * @param {{ [x: string]: any; }?} modules\n */\n withModules(modules) {\n return new Template(this.#fragment, modules, this.#dataStack);\n }\n /**\n * Creates a new Template replacing the data stack.\n * @param {any[]} dataStack the dataStack\n */\n withData(dataStack) {\n return new Template(this.#fragment, this.#modules, dataStack);\n }\n /**\n * Creates a new Template with new a data overlay added to the stack.\n * @param {...*} data\n */\n withOverlay(...data) {\n return new Template(\n this.#fragment,\n this.#modules,\n data.length === 0 ? this.#dataStack : [...this.#dataStack, ...data],\n );\n }\n /**\n * Evaluates an expression using the configured modules and data.\n * @param {string} expression\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode]\n * @param {...*} data\n * @returns the evaluated expression result\n */\n evaluate(expression, mode, ...data) {\n return new ExpressionEvaluator(this.#modules, this.#dataStack).withOverlay(...data).evaluate(expression, mode);\n }\n /**\n * Returns an expression evaluator with bound modules and dataStack.\n */\n evaluator() {\n return new ExpressionEvaluator(this.#modules, this.#dataStack);\n }\n /**\n * Renders the template.\n * @returns a DocumentFragment\n */\n render() {\n try {\n const ops = new NodeOperations();\n const imported = document.importNode(this.#fragment, true);\n const fragment =\n imported.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ? imported\n : (() => {\n const d = new DocumentFragment();\n d.appendChild(imported);\n return d;\n })();\n const iterator = document.createNodeIterator(\n fragment,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n Template.#NODE_FILTER,\n );\n let node;\n while ((node = iterator.nextNode()) !== null) {\n ops.cleanup();\n if (node.nodeType === Node.TEXT_NODE) {\n try {\n CommandsHandler.textNode(node, node.nodeValue, ops, this.#modules, this.#dataStack);\n } catch (ex) {\n throw new RenderError('Error evaluating text node', node, ex);\n }\n continue;\n }\n const el = /** @type {HTMLElement} */ (node);\n for (const command of CommandsHandler.ORDERED_COMMANDS) {\n if (!(command in el.dataset)) {\n continue;\n }\n const value = ops.popData(el, command);\n try {\n CommandsHandler[command](el, value, ops, this.#modules, this.#dataStack);\n } catch (ex) {\n throw new RenderError(`Error evaluating command ${command}`, el, ex);\n }\n if (ops.removed(el)) {\n break;\n }\n }\n for (const dataSetKey of Object.keys(el.dataset || {})) {\n if (!dataSetKey.startsWith('tpl')) {\n continue;\n }\n const attributeName = toAttr(dataSetKey);\n try {\n const expression = ops.popData(el, dataSetKey);\n const evaluated = Expressions.interpret(this.#modules, this.#dataStack, expression);\n if (typeof evaluated === 'boolean') {\n Attributes.toggle(el, attributeName, evaluated);\n continue;\n }\n if (evaluated !== null && evaluated !== undefined) {\n el.setAttribute(attributeName, evaluated);\n }\n } catch (ex) {\n throw new RenderError(`Error evaluating command ${dataSetKey}`, el, ex);\n }\n }\n }\n ops.cleanup();\n return fragment;\n } catch (ex) {\n throw new RenderError('Error rendering template', this.#fragment, ex);\n }\n }\n /**\n * Renders this template on the Element (replacing children).\n * @param {Element} el\n */\n renderTo(el) {\n el.replaceChildren(this.render());\n }\n /**\n * Renders this template appending the resulting fragment to the Element.\n * @param {Element} el\n */\n appendTo(el) {\n el.appendChild(this.render());\n }\n /**\n * Renders this template appending the resulting fragment to the first Element maching the selector, if exists.\n * @param {string} selector\n */\n renderToSelector(selector) {\n const el = document.querySelector(selector);\n if (el) {\n this.renderTo(el);\n }\n }\n /**\n * Renders this template appending the resulting fragment to the Element maching the selector, if exists.\n * @param {string} selector\n */\n appendToSelector(selector) {\n const el = document.querySelector(selector);\n if (el) {\n this.appendTo(el);\n }\n }\n static #NODE_FILTER(node) {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.nodeValue.includes('{{') && node.nodeValue.includes('}}')\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_REJECT;\n }\n for (const attr of node.attributes) {\n if (attr.name.startsWith('data-tpl-')) {\n return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n }\n}\n\nclass RenderError extends Error {\n constructor(message, nodeOrFragment, cause) {\n super(`${message} in \\`${RenderError.stringify(nodeOrFragment)}\\``, { cause });\n this.name = 'RenderError';\n this.node = nodeOrFragment.cloneNode(true);\n }\n static stringify(nodeOrFragment) {\n const t = document.createElement('template');\n t.content.appendChild(RenderError.#cleanup(nodeOrFragment.cloneNode(true)));\n return t.innerHTML;\n }\n static #cleanup(node) {\n if (node.nodeType === Node.TEXT_NODE) {\n node.nodeValue = node.nodeValue.trim();\n }\n for (let n = 0; n < node.childNodes.length; n++) {\n const child = node.childNodes[n];\n if (child.nodeType === Node.TEXT_NODE) {\n child.nodeValue = child.nodeValue.trim();\n if (child.nodeValue.length === 0) {\n node.removeChild(child);\n n--;\n }\n } else if (child.nodeType === Node.ELEMENT_NODE) {\n RenderError.#cleanup(child);\n }\n }\n return node;\n }\n}\n\nexport { Template, RenderError };\n","import { Nodes } from './dom.mjs';\nimport { ExpressionEvaluator } from './expressions.mjs';\nimport { Template } from './template.mjs';\n\nclass UpgradeQueue {\n #q = new Map();\n constructor() {\n document.addEventListener('DOMContentLoaded', async () => {\n await this.settle();\n document.dispatchEvent(\n new CustomEvent('ftl:ready', {\n bubbles: false,\n cancelable: false,\n }),\n );\n });\n }\n #finished = new Map();\n enqueue(el) {\n if (this.#q.has(el)) {\n //already upgrading, can happen when disconnecting an element\n //while it's already queued for upgrade (e.g.: ful-form)\n return;\n }\n //settling waits on a signal that only ever resolves, so nothing here attaches a\n //rejection handler to the upgrade itself: a component that fails is still\n //reported the way it always was\n const { promise: finished, resolve: markFinished } = /** @type {PromiseWithResolvers<void>} */ (\n Promise.withResolvers()\n );\n const promise = Nodes.waitParsed(el)\n .then(() => el.upgrade())\n .finally(() => {\n this.#q.delete(el);\n this.#finished.delete(el);\n markFinished();\n });\n this.#q.set(el, promise);\n this.#finished.set(el, finished);\n }\n /**\n * Waits for every queued upgrade to settle, including the ones enqueued while\n * waiting: a component is only queued once its parent connects it, so a single pass\n * would miss everything nested. A component that fails to upgrade does not hold the\n * others back, readiness means the queue drained rather than that everything worked.\n */\n async settle() {\n while (this.#finished.size !== 0) {\n await Promise.all(Array.from(this.#finished.values()));\n }\n }\n get entries() {\n return this.#q.entries();\n }\n}\n\n\nclass Registry {\n #tagToClass = {};\n #configured = false;\n #mappers = {\n string: {\n unmarshal(str, name, el) {\n return str;\n },\n marshal(value, name, el) {\n return value == null ? null : String(value);\n },\n },\n number: {\n unmarshal(str, name, el) {\n return str === null ? null : Number(str);\n },\n marshal(value, name, el) {\n return value == null ? null : String(value);\n },\n },\n presence: {\n unmarshal(str, name, el) {\n return str !== null;\n },\n marshal(value, name, el) {\n return value ? '' : null;\n },\n },\n bool: {\n unmarshal(str, name, el) {\n return str === 'true';\n },\n marshal(value, name, el) {\n return value == null ? null : String(value === true);\n },\n },\n json: {\n unmarshal(str, name, el) {\n return str === null ? null : JSON.parse(str);\n },\n marshal(value, name, el) {\n return value == null ? null : JSON.stringify(value);\n },\n },\n csv: {\n unmarshal(str, name, el) {\n return str === null\n ? []\n : str\n .split(',')\n .map((e) => e.trim())\n .filter((e) => e);\n },\n marshal(value, name, el) {\n return value == null ? null : value.join(',');\n },\n },\n csvm: {\n unmarshal(str, name, el) {\n if (el.hasAttribute('multiple')) {\n return str === null\n ? []\n : str\n .split(',')\n .map((e) => e.trim())\n .filter((e) => e);\n }\n return str === null || str === '' ? null : str;\n },\n marshal(value, name, el) {\n if (el.hasAttribute('multiple')) {\n return value === null ? null : value.join(',');\n }\n return value == null ? null : String(value);\n },\n },\n };\n #components = {};\n #modules;\n #data = [];\n #upgradeQueue = new UpgradeQueue();\n defineElement(tag, klass) {\n if (!this.#configured) {\n this.#tagToClass[tag] = klass;\n return this;\n }\n this.#augmentAndDefineElement(tag, klass);\n return this;\n }\n #augmentAndDefineElement(tag, klass) {\n const { observed, attributes, template, templates, slots, mappers } = klass;\n const observedNames = (observed ?? []).map((a) => a.split(':')[0]);\n const attrToMapper = [...(attributes ?? []), ...(observed ?? [])].reduce((acc, a) => {\n const [attr, maybeType] = a.split(':');\n const type = maybeType?.trim() ?? 'string';\n if (!(type in this.#mappers) && !(type in (mappers ?? {}))) {\n throw new Error(`unsupported attribute type: ${type}`);\n }\n acc[attr.trim()] = mappers?.[type] ?? this.#mappers[type];\n return acc;\n }, {});\n\n const namesAndTemplates = Object.entries(\n Object.assign({}, templates, template ? { default: template } : {}),\n ).map(([k, v]) => [k, Template.fromHtml(v)]);\n const nameToTemplate = Object.fromEntries(namesAndTemplates);\n\n klass.BITS = {\n enqueue: (el) => this.#upgradeQueue.enqueue(el),\n SLOTS: slots,\n OBSERVED: observedNames,\n ATTR_TO_MAPPER: attrToMapper,\n TEMPLATES: nameToTemplate,\n };\n customElements.define(tag, klass);\n }\n defineModule(name, value) {\n const module = name ? { [name]: value } : value;\n this.#modules = { ...this.#modules, ...module };\n return this;\n }\n defineModules(ms) {\n this.#modules = ms;\n return this;\n }\n defineComponent(name, value) {\n this.#components[name] = value;\n return this;\n }\n defineData(...data) {\n this.#data = data;\n return this;\n }\n defineOverlay(...data) {\n this.#data = [...this.#data, ...data];\n return this;\n }\n defineMapper(k, v) {\n this.#mappers[k] = v;\n return this;\n }\n plugin(p) {\n p.configure(this);\n return this;\n }\n configure() {\n for (const [tag, klass] of Object.entries(this.#tagToClass)) {\n this.#augmentAndDefineElement(tag, klass);\n delete this.#tagToClass[tag];\n }\n this.#configured = true;\n return this;\n }\n get upgrades() {\n return this.#upgradeQueue.entries;\n }\n context() {\n return { modules: this.#modules, data: this.#data };\n }\n evaluator() {\n return new ExpressionEvaluator(this.#modules, this.#data);\n }\n component(name) {\n return this.#components[name];\n }\n}\n\nconst registry = new Registry();\n\nexport { Registry, registry };\n","import { registry } from './registry.mjs';\nimport { Template } from './template.mjs';\n\nclass Templates {\n static fromHtml(html) {\n const { modules, data } = registry.context();\n return Template.fromHtml(html, modules, ...data);\n }\n static fromSelector(selector) {\n const { modules, data } = registry.context();\n return Template.fromSelector(selector, modules, ...data);\n }\n static fromTemplate(templateEl) {\n const { modules, data } = registry.context();\n return Template.fromTemplate(templateEl, modules, ...data);\n }\n static fromFragment(fragment) {\n const { modules, data } = registry.context();\n return Template.fromFragment(fragment, modules, ...data);\n }\n}\n\nexport { Templates };\n","import { registry } from './registry.mjs';\n\n/**\n * Waits for the queued upgrades matching the filter, including the ones enqueued while\n * waiting: a component is only queued once its parent connects it, so a single pass\n * would miss everything nested.\n * @param {(el: Element) => boolean} accept\n */\nconst settle = async (accept) => {\n for (;;) {\n const pending = Array.from(registry.upgrades)\n .filter(([child]) => accept(child))\n .map(([, promise]) => promise);\n if (pending.length === 0) {\n return;\n }\n await Promise.all(pending);\n }\n};\n\nclass Rendering {\n static async waitFor(el) {\n await settle((child) => el.contains(child));\n }\n static async waitForChildren(el) {\n await settle((child) => el !== child && el.contains(child));\n }\n}\n\nexport { Rendering };\n","import { Attributes, LightSlots } from './dom.mjs';\nimport { registry } from './registry.mjs';\n\n/**\n * An attribute Mapper.\n *\n * @typedef {object} Mapper\n * @property {(val: string|null|undefined, name: string, el: Element) => any} unmarshal\n * @property {(val: any, name: string, el: Element) => string|null} marshal\n */\n\n\nclass ParsedElement extends HTMLElement {\n static BITS = {\n enqueue: (el) => {},\n SLOTS: false,\n OBSERVED: [],\n /** @type {Record<string, Mapper>} */\n ATTR_TO_MAPPER: {},\n TEMPLATES: {},\n };\n static get observedAttributes() {\n return this.BITS.OBSERVED;\n }\n #parsed = false;\n #reflecting = 0;\n #bits() {\n return /** @type {typeof ParsedElement} */ (this.constructor).BITS;\n }\n unmarshal(attr, str) {\n return this.#bits().ATTR_TO_MAPPER[attr].unmarshal(str, attr, this);\n }\n marshal(attr, value) {\n return this.#bits().ATTR_TO_MAPPER[attr].marshal(value, attr, this);\n }\n /**\n * @param {string} [name] - The name of the template target, defaults to 'default'\n */\n template(name) {\n const { modules, data } = registry.context();\n let t = this.#bits().TEMPLATES[name ?? 'default'].withData(data).withModules(modules);\n for (const k of ['l10n', 'config']) {\n const v = this.constructor[k];\n if (v) {\n t = t.withOverlay({ [k]: v });\n }\n }\n return t;\n }\n connectedCallback() {\n if (this.#parsed) {\n return;\n }\n this.#bits().enqueue(this);\n }\n attributeChangedCallback(attr, oldValue, newValue) {\n if (!this.#parsed || oldValue === newValue) {\n return;\n }\n if (this.#reflecting > 0) {\n return;\n }\n this[attr] = this.unmarshal(attr, newValue);\n }\n #disabledBeforeParsed = null;\n formDisabledCallback(disabled) {\n if (!this.#parsed) {\n this.#disabledBeforeParsed = disabled;\n return;\n }\n Reflect.set(this, 'disabled', disabled);\n if (disabled) {\n this.#unclaimFormDisabled();\n }\n }\n //a disabled ancestor fieldset already matches the element through :disabled, and\n //an attribute of its own would keep the element disabled once the fieldset is\n //re-enabled, as formDisabledCallback(false) is only delivered on an actual state\n //change. a claim of its own made while already disabled by ancestry is safe: the\n //platform fires no callback for it, so it survives the fieldset being re-enabled\n #unclaimFormDisabled() {\n if (this.closest('fieldset:disabled')) {\n this.removeAttribute('disabled');\n }\n }\n async upgrade() {\n if (this.#parsed) {\n return;\n }\n this.#parsed = true;\n const slots = this.#bits().SLOTS ? LightSlots.from(this) : undefined;\n const observed = Object.fromEntries(\n this.#bits().OBSERVED.map((attribute) => [\n attribute,\n this.unmarshal(attribute, this.getAttribute(attribute)),\n ]),\n );\n const disabled = this.#disabledBeforeParsed ?? false;\n await this.render({ slots, observed, disabled });\n if (disabled) {\n this.#unclaimFormDisabled();\n }\n }\n render(c) {}\n reflect(fn) {\n ++this.#reflecting;\n try {\n fn();\n } finally {\n --this.#reflecting;\n }\n }\n reflectTo(attr, value) {\n ++this.#reflecting;\n try {\n Attributes.set(this, attr, this.marshal(attr, value));\n } finally {\n --this.#reflecting;\n }\n }\n}\n\nexport { ParsedElement };\n","/**\n * @typedef {{ type: string; context: string?; reason: string; details: any?; }} Problem\n */\nclass Failure extends Error {\n /**\n *\n * @param {string} message\n * @param {Problem[]} problems\n * @param {*} cause\n */\n constructor(message, problems, cause) {\n super(message, { cause });\n this.name = 'Failure';\n this.problems = problems;\n }\n dropping(prefix) {\n return new Failure(this.message, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n static dropProblemsContext(problems, prefix) {\n return problems.map(({ type, context, reason, details }) => {\n const nctx = context?.startsWith(prefix) ? context.substring(prefix.length) : context;\n return { type, context: nctx, reason, details };\n });\n }\n}\n\nexport { Failure };\n","class Base64 {\n static encode(arrayBuffer, dialect) {\n const d = dialect || Base64.URL_SAFE;\n const len = arrayBuffer.byteLength;\n const view = new Uint8Array(arrayBuffer);\n let res = '';\n for (let i = 0; i < len; i += 3) {\n const v1 = d[view[i] >> 2];\n const v2 = d[((view[i] & 3) << 4) | (view[i + 1] >> 4)];\n const v3 = d[((view[i + 1] & 15) << 2) | (view[i + 2] >> 6)];\n const v4 = d[view[i + 2] & 63];\n res += v1 + v2 + v3 + v4;\n }\n if (len % 3 === 2) {\n res = res.substring(0, res.length - 1);\n } else if (len % 3 === 1) {\n res = res.substring(0, res.length - 2);\n }\n return res;\n }\n static decode(str, dialect) {\n const d = dialect || Base64.URL_SAFE;\n let nbytes = Math.floor(str.length * 0.75);\n for (let i = 0; i !== str.length; ++i) {\n if (str[str.length - i - 1] !== '=') {\n break;\n }\n --nbytes;\n }\n const view = new Uint8Array(nbytes);\n\n let vi = 0;\n let si = 0;\n //every group yields three bytes, but a padded input stops short of the last\n //one or two: writing them anyway would rely on typed arrays dropping writes\n //past their length\n while (vi < nbytes) {\n const v1 = d.indexOf(str.charAt(si++));\n const v2 = d.indexOf(str.charAt(si++));\n const v3 = d.indexOf(str.charAt(si++));\n const v4 = d.indexOf(str.charAt(si++));\n view[vi++] = (v1 << 2) | (v2 >> 4);\n if (vi === nbytes) {\n break;\n }\n view[vi++] = ((v2 & 15) << 4) | (v3 >> 2);\n if (vi === nbytes) {\n break;\n }\n view[vi++] = ((v3 & 3) << 6) | v4;\n }\n\n return view.buffer;\n }\n}\n\nBase64.STANDARD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nBase64.URL_SAFE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\nclass Hex {\n static decode(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error('invalid length');\n }\n const lenInBytes = hex.length / 2;\n return new Uint8Array(lenInBytes).map((e, i) => {\n const offset = i * 2;\n const octet = hex.substring(offset, offset + 2);\n return parseInt(octet, 16);\n });\n }\n static encode(bytes, upper) {\n return Array.from(bytes)\n .map((b) => b.toString(16))\n .map((b) => (upper ? b.toUpperCase() : b))\n .map((o) => o.padStart(2, '0'))\n .join('');\n }\n}\n\nexport { Base64, Hex };\n","import { Failure } from './failure.mjs';\n\nclass MediaType {\n #type;\n #subtype;\n constructor(type, subtype) {\n this.#type = type;\n this.#subtype = subtype;\n }\n get normalized() {\n return `${this.#type}/${this.#subtype}`;\n }\n get type() {\n return this.#type;\n }\n get subtype() {\n return this.#subtype;\n }\n /**\n *\n * @param {string|null|undefined} v\n * @returns\n */\n static parse(v) {\n if (!v) {\n return new MediaType('unknown', 'unknown');\n }\n const [prefix, _] = v.split(';');\n const [ptype, psubtype] = prefix.trim().split('/');\n return new MediaType(ptype.toLowerCase(), psubtype?.toLowerCase());\n }\n}\n\n/**\n * @typedef {Int8Array| Uint8Array| Uint8ClampedArray| Int16Array| Uint16Array| Int32Array| Uint32Array| Float32Array| Float64Array| BigInt64Array| BigUint64Array} TypedArray\n */\n/**\n * @typedef {object} HttpInterceptor\n * @property {(url: URL, init: RequestInit|undefined, chain: HttpInterceptorChain) => Promise<Response>} intercept\n */\n\nclass HttpClientError extends Failure {\n /**\n * @param {string} message\n * @param {number} status\n * @param {{ type: string; context: string?; reason: string; details: any?; }[]} problems\n * @param {Error|undefined} [cause]\n */\n constructor(message, status, problems, cause) {\n super(message, problems, cause);\n this.name = 'HttpClientError';\n this.status = status;\n }\n dropping(prefix) {\n return new HttpClientError(this.message, this.status, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n /**\n *\n * @param {string} type\n * @param {any} cause\n * @returns\n */\n static of(type, cause) {\n return new HttpClientError(\n cause.message,\n 0,\n [\n {\n type,\n context: null,\n reason: cause.message,\n details: null,\n },\n ],\n cause,\n );\n }\n /**\n * Creates an HttpClientError from a Response.\n * @param {Response} response\n * @returns an HttpClientError\n */\n static async fromResponse(response) {\n switch (MediaType.parse(response.headers.get('Content-Type')).normalized) {\n case 'application/failures+json': {\n const data = await response.json();\n const message = `${response.status} ${response.statusText}: ${data.length} failures`;\n return new HttpClientError(message, response.status, data);\n }\n case 'application/problem+json': {\n const data = await response.json();\n const message = `${response.status} ${response.statusText}: ${data.title} ${data.detail}`;\n return new HttpClientError(\n message,\n response.status,\n data.problems || [\n {\n type: 'GENERIC_PROBLEM',\n context: null,\n reason: message,\n details: null,\n },\n ],\n );\n }\n default: {\n const text = await response.text();\n const message = `${response.status} ${response.statusText}: ${text}`;\n return new HttpClientError(message, response.status, [\n {\n type: 'GENERIC_PROBLEM',\n context: null,\n reason: message,\n details: null,\n },\n ]);\n }\n }\n }\n}\n\n/**\n * @implements {HttpInterceptor}\n */\nclass CsrfTokenInterceptor {\n #k;\n #v;\n constructor() {\n this.#k = document.querySelector(\"meta[name='_csrf_header']\")?.getAttribute('content');\n this.#v = document.querySelector(\"meta[name='_csrf']\")?.getAttribute('content');\n }\n async intercept(url, request, chain) {\n if (this.#k && this.#v) {\n request.headers.set(this.#k, this.#v);\n }\n return await chain.proceed(url, request);\n }\n}\n/**\n * @implements {HttpInterceptor}\n */\nclass RedirectOnUnauthorizedInterceptor {\n #redirectUri;\n /**\n * @param {string} redirectUri\n */\n constructor(redirectUri) {\n this.#redirectUri = redirectUri;\n }\n async intercept(url, request, chain) {\n const response = await chain.proceed(url, request);\n if (response.status === 401) {\n window.location.href = this.#redirectUri;\n return new Promise(() => {});\n }\n return response;\n }\n}\n\nclass HttpClientBuilder {\n /**\n * @type {HttpInterceptor[]}\n */\n #interceptors;\n constructor() {\n this.#interceptors = [];\n }\n withCsrfToken() {\n this.#interceptors.push(new CsrfTokenInterceptor());\n return this;\n }\n withRedirectOnUnauthorized(redirectUri) {\n this.#interceptors.push(new RedirectOnUnauthorizedInterceptor(redirectUri));\n return this;\n }\n /**\n * @param {...HttpInterceptor} interceptors\n */\n withInterceptors(...interceptors) {\n this.#interceptors.push(...interceptors);\n return this;\n }\n build() {\n return new HttpClient(this.#interceptors);\n }\n}\n\n/**\n * @implements {HttpInterceptor}\n */\nclass HttpCall {\n async intercept(url, request, chain) {\n return await fetch(url, request);\n }\n}\n\nclass HttpInterceptorChain {\n #interceptors;\n #current;\n /**\n *\n * @param {HttpInterceptor[]} interceptors\n * @param {number} current\n */\n constructor(interceptors, current) {\n this.#interceptors = interceptors;\n this.#current = current;\n }\n /**\n *\n * @param {URL} url\n * @param {RequestInit} request\n * @returns {Promise<Response>} the response\n */\n async proceed(url, request) {\n const interceptor = this.#interceptors[this.#current];\n return await interceptor.intercept(\n url,\n request,\n new HttpInterceptorChain(this.#interceptors, this.#current + 1),\n );\n }\n}\n\nclass HttpClient {\n #interceptors;\n /**\n * Creates a builder for an HttpClient.\n * @returns {HttpClientBuilder} the client builder\n */\n static builder() {\n return new HttpClientBuilder();\n }\n /**\n * Creates an HttpClient.\n * @param {HttpInterceptor[]|undefined} interceptors - a list of interceptors to be registered for every request performed by the created client.\n */\n constructor(interceptors) {\n this.#interceptors = interceptors || [];\n }\n /**\n * Performs an HTTP exchange.\n * @async\n * @param {string} uri - the (possibly relative) request url\n * @param {RequestInit|undefined} options - fetch options\n * @param {HttpInterceptor[]|undefined} interceptors - the HttpInterceptors to be registered for this exchange.\n * @returns {Promise<Response>} the response\n */\n async exchange(uri, options, interceptors) {\n const is = [...this.#interceptors, ...(interceptors || []), new HttpCall()];\n const chain = new HttpInterceptorChain(is, 0);\n const url = new URL(new Request(uri).url);\n return await chain.proceed(url, options ?? {});\n }\n /**\n * Creates a request builder.\n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n request(method, uri) {\n return HttpRequestBuilder.create(this, method, uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n get(uri) {\n return HttpRequestBuilder.create(this, 'GET', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n head(uri) {\n return HttpRequestBuilder.create(this, 'HEAD', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n post(uri) {\n return HttpRequestBuilder.create(this, 'POST', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n put(uri) {\n return HttpRequestBuilder.create(this, 'PUT', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n patch(uri) {\n return HttpRequestBuilder.create(this, 'PATCH', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n delete(uri) {\n return HttpRequestBuilder.create(this, 'DELETE', uri);\n }\n}\n\n/**\n *\n * @param {Response} response\n * @param {'text'|'json'|'blob'|'arrayBuffer'} type\n * @returns\n */\nconst unmarshal = async (response, type) => {\n try {\n return await response[type]();\n } catch (ex) {\n throw HttpClientError.of('UNMARSHALING_PROBLEM', ex);\n }\n};\n\n/**\n * Yields the entries of a headers or params initializer preserving nullish values:\n * normalizing through `Headers`/`URLSearchParams` first would stringify them to\n * \"null\"/\"undefined\" instead of removing the key.\n * @param {any} source\n * @returns {Iterable<[string, any]>}\n */\nconst rawEntries = (source) => {\n if (source == null) {\n return [];\n }\n if (typeof source === 'string') {\n return new URLSearchParams(source);\n }\n if (typeof source[Symbol.iterator] === 'function') {\n return source;\n }\n return Object.entries(source);\n};\n\nclass HttpRequestBuilder {\n #client;\n #method;\n #uri;\n #params;\n #headers;\n #body;\n #options;\n #interceptors;\n /**\n * Creates an HttpRequestBuilder.\n * @param {HttpClient} client\n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the builder\n */\n static create(client, method, uri) {\n const [baseUri, queryString = ''] = uri.split('?');\n return new HttpRequestBuilder(\n client,\n method,\n baseUri,\n new URLSearchParams(queryString),\n new Headers(),\n undefined,\n {},\n [],\n );\n }\n /**\n * Creates an HttpRequestBuilder.\n * @param {HttpClient} client\n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @param {URLSearchParams} params\n * @param {Headers} headers\n * @param {any} body\n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} options\n * @param {HttpInterceptor[]} interceptors\n */\n constructor(client, method, uri, params, headers, body, options, interceptors) {\n this.#client = client;\n this.#method = method;\n this.#uri = uri;\n this.#params = params;\n this.#body = body;\n this.#headers = headers;\n this.#options = options;\n this.#interceptors = interceptors;\n }\n /**\n * Add all passed headers to the request, overriding existing ones if that key already exists. Null and undefined values cause the key to be removed.\n * @param {HeadersInit|Record<string,string|null|undefined>} hs\n * @returns {HttpRequestBuilder} this builder\n */\n headers(hs) {\n for (const [k, v] of rawEntries(hs)) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n }\n return this;\n }\n /**\n * Adds an header to the request, overriding it if it already exists. Null and undefined values cause the key to be removed\n * @param {string} k\n * @param {string} v\n * @returns {HttpRequestBuilder} this builder\n */\n header(k, v) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n return this;\n }\n /**\n * Add all query parameters to the request, overriding existing ones if that key already exists. Null and undefined values cause the key to be removed\n * @param {URLSearchParams|Record<string,string|null|undefined>|string[][]|string} ps\n * @returns {HttpRequestBuilder} this builder\n */\n params(ps) {\n for (const [k, v] of rawEntries(ps)) {\n if (v == null) {\n this.#params.delete(k);\n } else {\n this.#params.set(k, v);\n }\n }\n return this;\n }\n /**\n * Adds a query parameter to the request, overriding it if it already exists. Empty vs, or a single null or undefined value cause the key to be removed.\n * @param {string} k\n * @param {...string} vs\n * @returns {HttpRequestBuilder} this builder\n */\n param(k, ...vs) {\n //overriding, as header, headers and params all do: pass every value in one\n //call to get a multi valued parameter\n this.#params.delete(k);\n if (vs.length === 0 || vs[0] == null) {\n return this;\n }\n for (const v of vs) {\n this.#params.append(k, v);\n }\n return this;\n }\n /**\n * Sets the request body.\n * `Content-Type: multipart/form-data` header is automatically added by fetch when data is a FormData instance if not explicitly set.\n * `Content-Type: application/x-www-form-urlencoded` header is automatically added by fetch when data is an URLSearchParams instance if not explicitly set.\n * `Content-Type: text/plain` header is automatically added by fetch when data is a string instance if not explicitly set.\n * @param {string|ArrayBuffer|Blob|DataView|File|FormData|TypedArray|URLSearchParams|ReadableStream} data\n * @returns {HttpRequestBuilder} this builder\n */\n body(data) {\n this.#body = data;\n return this;\n }\n /**\n * Sets the request body that will be serialized as json. Calling this method adds the `Content-Type application/json` header for the request.\n * @param {any} body - the body to be serialized as json\n * @returns {HttpRequestBuilder} this builder\n */\n json(body) {\n this.#headers.set('Content-Type', 'application/json');\n this.#body = JSON.stringify(body);\n return this;\n }\n /**\n * Sets the request body as a FormData configured using the callback.\n * `Content-Type: multipart/form-data` header is automatically added by fetch if not explicitly set.\n * @param {(c: HttpMultipartRequestCustomizer) => void} callback\n */\n multipart(callback) {\n const formData = new FormData();\n const builder = new HttpMultipartRequestCustomizer(formData);\n callback(builder);\n this.#body = formData;\n return this;\n }\n /**\n * Sets a fetch options for the request.\n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} kvs\n * @returns {HttpRequestBuilder} this builder\n */\n options(kvs) {\n for (const [k, v] of Object.entries(kvs)) {\n this.#options[k] = v;\n }\n return this;\n }\n /**\n * Sets a fetch option for the request.\n * @param {keyof Omit<RequestInit,\"headers\"|\"method\"|\"body\">} k\n * @param {*} v\n * @returns {HttpRequestBuilder} this builder\n */\n option(k, v) {\n this.#options[k] = v;\n return this;\n }\n /**\n * Adds interceptors to the request.\n * @param {[HttpInterceptor]} is - the interceptor to be regisered\n * @returns {HttpRequestBuilder} this builder\n */\n interceptors(is) {\n for (const i of is) {\n this.#interceptors.push(i);\n }\n return this;\n }\n /**\n * Adds an interceptor to the request.\n * @param {HttpInterceptor} i - the interceptor to be regisered\n * @returns {HttpRequestBuilder} this builder\n */\n interceptor(i) {\n this.#interceptors.push(i);\n return this;\n }\n /**\n * Performs an HTTP exchange using the configured client, request and interceptors.\n * @returns {Promise<Response>} the response\n */\n async exchange() {\n const uri = this.#params.size ? `${this.#uri}?${this.#params}` : this.#uri;\n const opts = {\n ...this.#options,\n headers: this.#headers,\n method: this.#method,\n body: this.#body,\n };\n return await this.#client.exchange(uri, opts, this.#interceptors);\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<Response>} the response\n */\n async fetch() {\n const uri = this.#params.size ? `${this.#uri}?${this.#params}` : this.#uri;\n const opts = {\n ...this.#options,\n headers: this.#headers,\n method: this.#method,\n body: this.#body,\n };\n try {\n const response = await this.#client.exchange(uri, opts, this.#interceptors);\n if (!response.ok) {\n throw await HttpClientError.fromResponse(response);\n }\n return response;\n } catch (ex) {\n if (ex instanceof Failure) {\n throw ex;\n }\n throw HttpClientError.of('CONNECTION_PROBLEM', ex);\n }\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<string>} the response body, as text\n */\n async fetchText() {\n const response = await this.fetch();\n return await unmarshal(response, 'text');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<any>} the response body, deserialized as JSON\n */\n async fetchJson() {\n const response = await this.fetch();\n return await unmarshal(response, 'json');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<Blob>} the response body, as a Blob\n */\n async fetchBlob() {\n const response = await this.fetch();\n return await unmarshal(response, 'blob');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<ArrayBuffer>} the response body, as an ArrayBuffer\n */\n async fetchArrayBuffer() {\n const response = await this.fetch();\n return await unmarshal(response, 'arrayBuffer');\n }\n}\n\nclass HttpMultipartRequestCustomizer {\n #formData;\n /**\n *\n * @param {FormData} formData\n */\n constructor(formData) {\n this.#formData = formData;\n }\n /**\n * Appends a value to the FormData.\n * @param {string} name\n * @param {*} value\n * @returns this builder\n */\n field(name, value) {\n this.#formData.append(name, value);\n return this;\n }\n /**\n * Appends a Blob to the FormData.\n * If `filename` is omitted, FormData defaults are applied:\n * The default filename for Blob objects is \"blob\";\n * The default filename for File objects is the file's filename.\n * @param {string} name\n * @param {Blob} value\n * @param {string|undefined} filename\n * @returns this builder\n */\n blob(name, value, filename) {\n this.#formData.append(name, value, filename);\n return this;\n }\n /**\n * Appends multiple Blobs to the FormData with the same name.\n * The default filename for Blob objects is \"blob\";\n * The default filename for File objects is the file's filename.\n * @param {string} name\n * @param {Blob[]} values\n * @returns this builder\n */\n blobs(name, values) {\n for (const v of values) {\n this.#formData.append(name, v);\n }\n return this;\n }\n /**\n * Appends a JSON serialized blob to the FormData.\n * @param {string} name\n * @param {any} value\n * @param {string|undefined} filename\n * @returns this builder\n */\n json(name, value, filename) {\n const blob = new Blob([JSON.stringify(value)], { type: 'application/json' });\n this.#formData.append(name, blob, filename);\n return this;\n }\n}\n\nexport { MediaType, HttpClient, HttpClientError };\n","class LocalStorage extends Storage {\n static save(k, v) {\n localStorage.setItem(k, JSON.stringify(v));\n }\n static load(k) {\n const got = localStorage.getItem(k);\n if (got === null) {\n return undefined;\n }\n try {\n return JSON.parse(got);\n } catch {\n //not what save wrote: drop it, otherwise every later read fails the same way\n localStorage.removeItem(k);\n return undefined;\n }\n }\n static remove(k) {\n localStorage.removeItem(k);\n }\n static pop(k) {\n const decoded = LocalStorage.load(k);\n LocalStorage.remove(k);\n return decoded;\n }\n}\n\nclass SessionStorage extends Storage {\n static save(k, v) {\n sessionStorage.setItem(k, JSON.stringify(v));\n }\n static load(k) {\n const got = sessionStorage.getItem(k);\n if (got === null) {\n return undefined;\n }\n try {\n return JSON.parse(got);\n } catch {\n //not what save wrote: drop it, otherwise every later read fails the same way\n sessionStorage.removeItem(k);\n return undefined;\n }\n }\n static remove(k) {\n sessionStorage.removeItem(k);\n }\n static pop(k) {\n const decoded = SessionStorage.load(k);\n SessionStorage.remove(k);\n return decoded;\n }\n}\n\nclass VersionedLocalStorage {\n static save(key, revision, data) {\n LocalStorage.save(key, { revision, data });\n }\n static load(key, revision) {\n const stored = LocalStorage.load(key);\n if (stored === undefined) {\n return undefined;\n }\n if (stored.revision !== revision) {\n LocalStorage.remove(key);\n return undefined;\n }\n return stored.data;\n }\n}\n\nclass VersionedSessionStorage {\n static save(key, revision, data) {\n SessionStorage.save(key, { revision, data });\n }\n static load(key, revision) {\n const stored = SessionStorage.load(key);\n if (stored === undefined) {\n return undefined;\n }\n if (stored.revision !== revision) {\n SessionStorage.remove(key);\n return undefined;\n }\n return stored.data;\n }\n}\n\nexport { LocalStorage, VersionedLocalStorage, SessionStorage, VersionedSessionStorage };\n","/**\n * @typedef {Object} AsyncExtension\n * @property {Promise<any>[]} promises\n * @typedef {Event & { async?: AsyncExtension }} AsyncEvent\n */\nclass AsyncEvents {\n /**\n * Dispatches an event and handles asynchronous resolution based on the execution mode.\n * @param {HTMLElement} el - The target element dispatching the event.\n * @param {AsyncEvent} evt - The event instance.\n * @param {{mode?: 'broadcast' | 'pipeline' | 'delegate'}} [options] - Configuration options (defaults to 'broadcast').\n * @returns {Promise<any>} Resolves with an array of values for broadcasts, a single value for pipelines/delegates, or undefined.\n */\n static async fireAsync(el, evt, options) {\n el.dispatchEvent(evt);\n const promises = evt.async?.promises ?? [];\n const mode = options?.mode ?? 'broadcast';\n if (mode === 'pipeline' && promises.length > 1) {\n throw new Error(\n `[AsyncEvents] Event \"${evt.type}\" is configured in 'pipeline' mode and expects at most one async listener, but ${promises.length} listeners were triggered on this element.`,\n );\n }\n if (mode === 'delegate' && promises.length !== 1) {\n throw new Error(\n `[AsyncEvents] Event \"${evt.type}\" is configured in 'delegate' mode and requires exactly one async listener, but ${promises.length} were registered.`,\n );\n }\n return mode === 'broadcast' ? Promise.all(promises) : Promise.resolve(promises[0]);\n }\n\n /**\n * Registers an asynchronous event listener wrapper.\n * @param {HTMLElement} el - The target element.\n * @param {string} type - The event name/type.\n * @param {Function} fn - The async listener middleware function returning the execution result.\n * @param {AddEventListenerOptions} [options] - Native addEventListener options.\n * @returns {EventListener} The underlying proxy listener function needed for cleanup via asyncOff.\n */\n static asyncOn(el, type, fn, options) {\n /** @type {(evt: Event) => Promise<void>} */\n const listener = async (event) => {\n const ae = /** @type {AsyncEvent} */ (event);\n if (!ae.async) {\n ae.async = { promises: [] };\n }\n const { promise, resolve, reject } = Promise.withResolvers();\n ae.async.promises.push(promise);\n try {\n resolve(await fn(ae));\n } catch (e) {\n reject(e);\n }\n };\n\n el.addEventListener(type, listener, options);\n return listener;\n }\n\n /**\n * Unregisters an asynchronous event listener proxy.\n * @param {HTMLElement} el - The target element.\n * @param {string} type - The event name/type.\n * @param {EventListener} listener - The proxy listener instance previously returned by asyncOn.\n * @param {EventListenerOptions} [options] - Native removeEventListener options.\n */\n static asyncOff(el, type, listener, options) {\n el.removeEventListener(type, listener, options);\n }\n\n /**\n * Mixes the asynchronous execution engine extensions into target class prototypes.\n * @param {...Function} classes - The target class constructors to decorate.\n */\n static mixInto(...classes) {\n for (const k of classes) {\n Object.assign(k.prototype, {\n /**\n * @this {HTMLElement}\n * @param {AsyncEvent} evt\n * @param {{mode?: 'broadcast' | 'pipeline' | 'delegate'}} [options]\n * @returns {Promise<any>}\n */\n async fireAsync(evt, options) {\n return await AsyncEvents.fireAsync(this, evt, options);\n },\n\n /**\n * @this {HTMLElement}\n * @param {string} type\n * @param {Function} fn\n * @param {AddEventListenerOptions} [options]\n * @returns {EventListener}\n */\n asyncOn(type, fn, options) {\n return AsyncEvents.asyncOn(this, type, fn, options);\n },\n\n /**\n * @this {HTMLElement}\n * @param {string} type\n * @param {EventListener} listener\n * @param {EventListenerOptions} [options]\n * @returns {void}\n */\n asyncOff(type, listener, options) {\n AsyncEvents.asyncOff(this, type, listener, options);\n },\n });\n }\n }\n}\n\nexport { AsyncEvents };\n","class Timing {\n static sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n static DEBOUNCE_DEFAULT = 0;\n static DEBOUNCE_IMMEDIATE = 1;\n /**\n * Executes only after a period of inactivity (pause in events).\n * Respond to the \"end\" of a series of events.\n * @param {*} timeoutMs\n * @param {*} func\n * @param {*} [options]\n * @returns {[function, function]}\n */\n static debounce(timeoutMs, func, options) {\n const opts = options ?? Timing.DEBOUNCE_DEFAULT;\n let tid = /** @type {number | null} */ (null);\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n const elapsed = performance.now() - previousTimestamp;\n if (timeoutMs > elapsed) {\n tid = setTimeout(later, timeoutMs - elapsed);\n return;\n }\n tid = null;\n if (opts !== Timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n // This check is needed because `func` can recursively invoke `debounced`.\n if (tid === null) {\n args = [];\n }\n };\n\n const debounced = (...called) => {\n args = called;\n previousTimestamp = performance.now();\n if (tid === null) {\n tid = setTimeout(later, timeoutMs);\n if (opts === Timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n }\n };\n const abort = () => {\n clearTimeout(tid ?? undefined);\n tid = null;\n args = [];\n };\n return [debounced, abort];\n }\n static THROTTLE_DEFAULT = 0;\n static THROTTLE_NO_LEADING = 1;\n static THROTTLE_NO_TRAILING = 2;\n /**\n * Executes at most once per specified time interval, regardless of ongoing events.\n * @param {*} timeoutMs\n * @param {*} func\n * @param {*} [options]\n * @returns {[function, function]}\n */\n static throttle(timeoutMs, func, options) {\n const opts = options ?? Timing.THROTTLE_DEFAULT;\n let tid = /** @type {number | null} */ (null);\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n previousTimestamp = opts & Timing.THROTTLE_NO_LEADING ? 0 : performance.now();\n tid = null;\n func(...args);\n if (tid === null) {\n args = [];\n }\n };\n const throttled = (...called) => {\n const now = performance.now();\n if (!previousTimestamp && opts & Timing.THROTTLE_NO_LEADING) {\n previousTimestamp = now;\n }\n const remaining = previousTimestamp === 0 ? 0 : timeoutMs - (now - previousTimestamp);\n args = called;\n if (remaining <= 0 || remaining > timeoutMs) {\n if (tid !== null) {\n clearTimeout(tid);\n tid = null;\n }\n previousTimestamp = now;\n func(...args);\n if (tid === null) {\n args = [];\n }\n } else if (tid === null && !(opts & Timing.THROTTLE_NO_TRAILING)) {\n tid = setTimeout(later, remaining);\n }\n };\n const abort = () => {\n clearTimeout(tid ?? undefined);\n tid = null;\n args = [];\n };\n return [throttled, abort];\n }\n}\n\nexport { Timing };\n","class Bindings {\n /**\n * @param {{ [x: string]: any; }} obj\n * @param {string} prefix\n * @param {Set<String>} stops\n * @return {{ [x: string]: any; }}\n */\n static flatten(obj, prefix, stops) {\n return Object.keys(obj).reduce((acc, k) => {\n const pre = prefix.length ? `${prefix}.${k}` : k;\n if (!stops.has(pre) && typeof obj[k] === 'object' && obj[k] !== null) {\n Object.assign(acc, Bindings.flatten(obj[k], pre, stops));\n } else {\n acc[pre] = obj[k];\n }\n return acc;\n }, {});\n }\n\n /**\n * @param {any} result\n * @param {string} path\n * @param {any} value\n */\n static providePath(result, path, value) {\n const keys = path.split('.').map((k) => (/^[0-9]+$/.test(k) ? +k : k));\n let current = result ?? {};\n let previous = /** @type {any} */ (null);\n for (let i = 0; ; ++i) {\n const ckey = keys[i];\n const pkey = keys[i - 1];\n if (Number.isInteger(ckey) && !Array.isArray(current)) {\n if (previous !== null) {\n previous[pkey] = current = [];\n } else {\n result = current = [];\n }\n }\n if (i === keys.length - 1) {\n //when value is undefined we only want to define the property if it's not defined\n current[ckey] = value !== undefined ? value : ckey in current ? current[ckey] : null;\n return result;\n }\n if (current[ckey] === undefined) {\n current[ckey] = {};\n }\n previous = current;\n current = current[ckey];\n }\n }\n /**\n *\n * @param {Element & {dataset?: any} & {checked?: boolean} & {value?: any}} el\n * @returns\n */\n static extract(el) {\n if (el.getAttribute('type') === 'radio') {\n if (!el.checked) {\n return undefined;\n }\n return el.dataset.fulBindType === 'boolean' ? el.value === 'true' : el.value;\n }\n if (el.getAttribute('type') === 'checkbox') {\n return el.checked;\n }\n if (el.dataset.fulBindType === 'boolean') {\n return !el.value ? null : el.value === 'true';\n }\n if (el.tagName === 'INPUT' || el.tagName === 'SELECT' || el.tagName === 'TEXTAREA') {\n return el.value === '' || el.value === undefined ? null : el.value;\n }\n return el.value;\n }\n\n /**\n *\n * @param {HTMLFormElement} form\n * @param {HTMLElement} [submitter]\n * @returns\n */\n static extractFrom(form, submitter) {\n let result = {};\n for (const el of form.elements) {\n // we are assuming submitters are disabled during submit.\n if (!el.hasAttribute('name') || (el.matches(':disabled') && el !== submitter)) {\n continue;\n }\n result = Bindings.providePath(\n result,\n /** @type {string} */ (el.getAttribute('name')),\n Bindings.extract(el),\n );\n }\n return result;\n }\n\n /**\n *\n * @param {Element & {dataset?: any} & {checked?: boolean} & {value?: any}} el\n * @returns\n */\n static mutate(el, raw) {\n if (el.getAttribute('type') === 'radio') {\n //values are matched as strings, as ful-radio-group does: extract decodes\n //boolean radios, and payloads carry numbers where the attribute is text\n el.checked = raw != null && el.getAttribute('value') === String(raw);\n return;\n }\n if (el.getAttribute('type') === 'checkbox') {\n el.checked = raw;\n return;\n }\n el.value = raw;\n }\n\n static mutateIn(form, values) {\n const names = Array.from(form.elements)\n .map((el) => el.getAttribute('name'))\n .filter((n) => n);\n for (const [flattenedKey, value] of Object.entries(Bindings.flatten(values, '', new Set(names)))) {\n for (const el of form.querySelectorAll(`[name='${CSS.escape(flattenedKey)}']`)) {\n Bindings.mutate(el, value);\n }\n }\n }\n\n static errors(form, es, scrollOnError) {\n const fieldErrors = es.filter((e) => e.type === 'FIELD_ERROR' || e.type === 'INVALID_FORMAT');\n const globalErrors = es.filter((e) => e.type !== 'FIELD_ERROR' && e.type !== 'INVALID_FORMAT');\n form.querySelectorAll(`[name]`).forEach((el) => {\n el.setCustomValidity?.('');\n });\n form.querySelectorAll('ful-errors').forEach((el) => {\n el.replaceChildren();\n el.setAttribute('hidden', '');\n });\n fieldErrors.forEach((e) => {\n const name = e.context.replace(/\\[/g, '.').replace(/\\]\\./g, '.').replace(/\\]/g, '')\n const parts = name.split('.');\n for (let i = parts.length; i !== 0; --i) {\n const prefix = parts.slice(0, i).join('.');\n const suffix = parts.slice(i, parts.length).join('.');\n form.querySelectorAll(`[name='${CSS.escape(prefix)}']`).forEach((input) => {\n input.setCustomValidity?.(e.reason, suffix);\n });\n }\n });\n form.querySelectorAll('ful-errors').forEach((el) => {\n const hel = /** @type HTMLElement} */ (el);\n hel.innerText = globalErrors.map((e) => e.reason).join('\\n');\n if (globalErrors.length !== 0) {\n el.removeAttribute('hidden');\n }\n });\n if (es.length === 0 || !scrollOnError) {\n return;\n }\n Array.from(form.querySelectorAll(`:invalid`))\n .sort((a, b) => a.getBoundingClientRect().y - b.getBoundingClientRect().y)[0]\n ?.focus();\n }\n}\n\nexport { Bindings };\n","import { Attributes, ParsedElement, registry } from '../../ftl/index.mjs';\nimport { Failure } from '../../httpc/index.mjs';\nimport { Bindings } from './bindings.mjs';\nimport { AsyncEvents } from '../events/async.mjs';\n\nclass RemoteJsonFormLoader {\n #http;\n #url;\n #method;\n #requestMapper;\n #responseMapper;\n constructor(http, url, method, requestMapper, responseMapper) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#requestMapper = requestMapper;\n this.#responseMapper = responseMapper;\n }\n prepare(values, form) {\n return this.#requestMapper(values, form);\n }\n async submit(values, form) {\n return await this.#http.request(this.#method, this.#url).json(values).fetch();\n }\n transform(response, form) {\n return this.#responseMapper(response, form);\n }\n}\n\nclass LocalFormLoader {\n #requestMapper;\n #responseMapper;\n constructor(requestMapper, responseMapper) {\n this.#requestMapper = requestMapper;\n this.#responseMapper = responseMapper;\n }\n async prepare(values, form) {\n return await this.#requestMapper(values, form);\n }\n async submit(values, form, response) {\n return response;\n }\n async transform(response, form) {\n return await this.#responseMapper(response, form);\n }\n}\n\nclass FormLoader {\n static create(el, conf) {\n const http = registry.component('http-client');\n const requestMapper = el.hasAttribute('request-mapper')\n ? registry.component(el.getAttribute('request-mapper'))\n : (v) => v;\n const responseMapper = el.hasAttribute('response-mapper')\n ? registry.component(el.getAttribute('response-mapper'))\n : (v) => v;\n const url = el.getAttribute('action');\n if (!url) {\n return new LocalFormLoader(requestMapper, responseMapper);\n }\n const method = el.getAttribute('method') ?? 'POST';\n return new RemoteJsonFormLoader(http, url, method, requestMapper, responseMapper);\n }\n}\n\nclass Form extends ParsedElement {\n form;\n render() {\n const form = document.createElement('form');\n this.form = form;\n form.setAttribute('novalidate', '');\n Attributes.forward('form-', this, form);\n form.replaceChildren(...this.childNodes);\n form.addEventListener('submit', async (e) => {\n e.preventDefault();\n e.stopPropagation();\n await this.submit(e.submitter ?? undefined);\n });\n if (this.hasAttribute('clear-invalid-on-change')) {\n this.addEventListener('change', (/** @type any */ evt) => {\n evt.target.setCustomValidity?.('');\n });\n }\n this.replaceChildren(form);\n }\n /**\n *\n * @param {HTMLElement} [submitter]\n * @returns\n */\n async submit(submitter) {\n this.spinner(true);\n //one try: building the loader and preparing the request are as much part of a\n //submit as sending it, and a mapper that throws is how a caller reports a\n //problem with the values\n let values;\n let request;\n try {\n const loader = registry.component(this.getAttribute('loader') ?? 'loaders:form').create(this);\n values = Bindings.extractFrom(this.form, submitter);\n request = await loader.prepare(values, this);\n const se = new CustomEvent('submit', {\n bubbles: true,\n cancelable: true,\n detail: { submitter, values, request },\n });\n if (!this.dispatchEvent(se)) {\n return;\n }\n this.errors = [];\n const sre = new CustomEvent('submit:requested', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values: se.detail.values, request: se.detail.request },\n });\n let response = await AsyncEvents.fireAsync(this, sre, { mode: 'pipeline' });\n request = sre.detail.request;\n\n response = await loader.submit(request, this, response);\n const mapped = await loader.transform(response, this);\n this.dispatchEvent(\n new CustomEvent('submit:success', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values, request, response: mapped },\n }),\n );\n } catch (e) {\n this.dispatchEvent(\n new CustomEvent('submit:failure', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values, request, exception: e },\n }),\n );\n if (e instanceof Failure) {\n this.errors = e.problems;\n }\n console.warn('failed to submit form', this, 'reason:', e);\n } finally {\n this.spinner(false);\n }\n }\n reset() {\n this.form.reset();\n }\n #spinning = 0;\n spinner(spin) {\n //submits can overlap: only the outermost one saves and restores the button states\n if (spin) {\n ++this.#spinning;\n if (this.#spinning !== 1) {\n return;\n }\n } else {\n this.#spinning = Math.max(0, this.#spinning - 1);\n if (this.#spinning !== 0) {\n return;\n }\n }\n this.querySelectorAll('ful-spinner').forEach((el) => {\n const hel = /** @type HTMLElement */ (el);\n hel.hidden = !spin;\n });\n this.querySelectorAll('input,button').forEach((el) => {\n const hel = /** @type HTMLButtonElement|HTMLInputElement */ (el);\n if (hel.type !== 'submit' && hel.type !== 'reset') {\n return;\n }\n if (spin) {\n hel.dataset.wd = String(hel.disabled);\n hel.disabled = true;\n } else {\n hel.disabled = hel.dataset.wd === 'true';\n delete hel.dataset.wd;\n }\n });\n }\n set values(vs) {\n Bindings.mutateIn(this.form, vs);\n }\n get values() {\n return Bindings.extractFrom(this.form);\n }\n set errors(es) {\n Bindings.errors(this.form, es, this.hasAttribute('scroll-on-error'));\n }\n}\n\nexport { FormLoader, Form };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\n\nclass Input extends ParsedElement {\n static observed = ['value', 'readonly:presence', 'required:presence', 'placeholder'];\n static slots = true;\n static template = `\n <div class=\"form-label\">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </div>\n <div class=\"input-group\">\n <span data-tpl-if=\"slots.ibefore\" class=\"input-group-text\">{{{{ slots.ibefore }}}}</span>\n {{{{ slots.before }}}}\n <input data-tpl-if=\"type != 'textarea'\" class=\"form-control\" data-tpl-type=\"type\" placeholder=\" \" form=\"\">\n <textarea data-tpl-if=\"type == 'textarea'\" class=\"form-control\" placeholder=\" \" form=\"\"></textarea>\n {{{{ slots.after }}}}\n <span data-tpl-if=\"slots.iafter\" class=\"input-group-text\">{{{{ slots.iafter }}}}</span>\n </div>\n <ful-field-error></ful-field-error>\n `;\n static formAssociated = true;\n _input;\n _fieldError;\n constructor() {\n super();\n this.internals = this.attachInternals();\n this.internals.role = 'presentation';\n }\n _type() {\n return this.getAttribute('type') ?? 'text';\n }\n _fragment(type, slots) {\n return this.template().withOverlay({ type, slots }).render();\n }\n render({ slots, observed, disabled, skipObservedSetup }) {\n const type = this._type();\n const fragment = this._fragment(type, slots);\n this._input = fragment.querySelector('input,textarea');\n\n Attributes.forward('input-', this, this._input);\n this._input.addEventListener('keydown', (evt) => {\n if (evt.key !== 'Enter' || this._type() === 'textarea') {\n return;\n }\n const form = this.internals.form;\n if (!form) {\n return;\n }\n const candidates = /** @type [HTMLButtonElement|HTMLInputElement] */ (\n Array.from(form.querySelectorAll('button:not(:disabled), input:not(:disabled)'))\n );\n const submitter = candidates.find((el) => el.type === 'submit');\n form.requestSubmit(submitter);\n });\n this._input.addEventListener('input', (evt) => {\n const mask = this.getAttribute('mask');\n if (!mask) {\n return;\n }\n const strip = (v) => v.replace(new RegExp(mask, 'g'), '');\n const before = evt.target.value;\n const after = strip(before);\n if (before === after) {\n return;\n }\n const start = evt.target.selectionStart;\n evt.target.value = after;\n if (start === null) {\n //email, number and the date types have no selection to restore\n return;\n }\n //the caret keeps its place among the characters that survived, so only the\n //ones stripped before it count\n const caret = strip(before.slice(0, start)).length;\n evt.target.setSelectionRange(caret, caret);\n });\n this._input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value,\n },\n }),\n );\n });\n const label = fragment.querySelector('label');\n label.addEventListener('click', () => this.focus());\n this._fieldError = fragment.querySelector('ful-field-error');\n this._input.ariaDescribedByElements = [this._fieldError];\n this._input.ariaLabelledByElements = [label];\n this.replaceChildren(fragment);\n if (!skipObservedSetup) {\n // biome-ignore lint/complexity/noUselessThisAlias: keeps checkJs from seeing these as class fields\n const el = this;\n el.disabled = disabled;\n el.readonly = observed.readonly;\n el.required = observed.required;\n el.placeholder = observed.placeholder;\n el.value = observed.value;\n }\n }\n get value() {\n const uppercase = this.hasAttribute('uppercase');\n const trim = this.hasAttribute('trim');\n const v = this._input.value;\n const uppercased = uppercase ? v.toUpperCase() : v;\n const trimmed = trim ? uppercased.trim() : uppercased;\n return trimmed === '' ? null : trimmed;\n }\n set value(value) {\n this._input.value = value === '' ? null : value;\n }\n get readonly() {\n return this._input.readOnly;\n }\n set readonly(v) {\n this._input.readOnly = v;\n this.reflect(() => {\n Attributes.toggle(this, 'readonly', v);\n });\n }\n get disabled() {\n return this._input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this._input, 'disabled', d);\n //also on the host: a form associated element only matches :disabled through its\n //own attribute, and that is what keeps it out of the submitted values. no reflect\n //is needed, disabled is deliberately not observed: the platform delivers it\n //through formDisabledCallback, which also covers a disabled ancestor fieldset\n Attributes.toggle(this, 'disabled', d);\n }\n get required() {\n return this._input.getAttribute('aria-required') === 'true';\n }\n set required(d) {\n Attributes.set(this._input, 'aria-required', d ? 'true' : null);\n this.reflect(() => {\n Attributes.toggle(this, 'required', d);\n });\n }\n get placeholder() {\n const v = this._input.getAttribute('placeholder');\n return v === ' ' ? null : v;\n }\n set placeholder(d) {\n //without a placeholder :placeholder-shown never matches, and floating labels\n //rely on it, so a blank one stands in for none\n Attributes.set(this._input, 'placeholder', d ?? ' ');\n this.reflect(() => {\n Attributes.set(this, 'placeholder', d);\n });\n }\n focus(options) {\n this._input.focus(options);\n }\n setCustomValidity(error) {\n if (!error) {\n this.internals.setValidity({});\n this._fieldError.innerText = '';\n return;\n }\n this.internals.setValidity({ customError: true }, ' ');\n this._fieldError.innerText = error;\n }\n formResetCallback() {\n this.value = this.unmarshal('value', this.getAttribute('value'));\n }\n}\n\nexport { Input };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { Input } from './input.mjs';\n\nclass LocalDate extends ParsedElement {\n render() {\n const content = this.textContent.trim();\n if (content === '') {\n this.replaceChildren(this.getAttribute('default') ?? '');\n return;\n }\n const locale = this.getAttribute('locale') ?? Intl.DateTimeFormat().resolvedOptions().locale;\n const formatter = new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'numeric', day: 'numeric' });\n const [y, m, d] = content.split('-').map(Number);\n this.replaceChildren(formatter.format(new Date(y, m - 1, d)));\n }\n}\n\nclass Instant extends ParsedElement {\n render() {\n const content = this.textContent.trim();\n if (content === '') {\n this.replaceChildren(this.getAttribute('default') ?? '');\n return;\n }\n const locale = this.getAttribute('locale') ?? Intl.DateTimeFormat().resolvedOptions().locale;\n const format = new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hour12: false,\n });\n this.replaceChildren(format.format(new Date(Instant.isoToLocal(content))));\n }\n static isoToLocal(iso) {\n //this is so sad\n const d = new Date(iso);\n const pad = (n, v) => String(v).padStart(n, '0');\n const date = `${d.getFullYear()}-${pad(2, d.getMonth() + 1)}-${pad(2, d.getDate())}`;\n const time = `${pad(2, d.getHours())}:${pad(2, d.getMinutes())}:${pad(2, d.getSeconds())}.${pad(3, d.getMilliseconds())}`;\n return `${date}T${time}`;\n }\n}\n\nclass InputLocalDate extends Input {\n static observed = ['value', 'readonly:presence', 'required:presence', 'placeholder', 'min', 'max', 'step'];\n _type() {\n return 'date';\n }\n render(conf) {\n const { observed } = conf;\n super.render(conf);\n //step first: on a time input min and max are snapped to its grid\n this.step = observed.step;\n this.min = observed.min;\n this.max = observed.max;\n }\n get min() {\n const v = this._input.min;\n return v === '' ? null : v;\n }\n set min(v) {\n this._input.min = InputLocalDate.#fromIsoOrOffset(v);\n }\n get max() {\n const v = this._input.max;\n return v === '' ? null : v;\n }\n set max(v) {\n this._input.max = InputLocalDate.#fromIsoOrOffset(v);\n }\n get step() {\n const v = this._input.step;\n return v === '' ? null : v;\n }\n set step(v) {\n this._input.step = v ?? '';\n }\n static #fromIsoOrOffset(v) {\n if (!v) {\n return '';\n }\n //this could be date.toLocaleDateString('en-CA')\n const formatLocalDate = (date) =>\n new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().split('T')[0];\n if (v === 'now') {\n return formatLocalDate(new Date());\n }\n const re = /^([+-])(\\d+)([dmy])$/;\n const match = re.exec(v);\n if (!match) {\n return v;\n }\n const sign = match[1] === '-' ? -1 : 1;\n const offset = +match[2];\n const r = new Date();\n r.setHours(0, 0, 0, 0);\n switch (match[3]) {\n case 'd':\n r.setDate(r.getDate() + offset * sign);\n break;\n case 'm': {\n const originalDay = r.getDate();\n r.setMonth(r.getMonth() + offset * sign);\n if (r.getDate() !== originalDay) {\n r.setDate(0);\n }\n break;\n }\n case 'y':\n r.setFullYear(r.getFullYear() + offset * sign);\n break;\n }\n return formatLocalDate(r);\n }\n}\n\nclass InputLocalTime extends InputLocalDate {\n _type() {\n return 'time';\n }\n get min() {\n const v = this._input.min;\n return v === '' ? null : v;\n }\n set min(v) {\n this._input.min = this.#fromNowOrOffset(v);\n }\n get max() {\n const v = this._input.max;\n return v === '' ? null : v;\n }\n set max(v) {\n this._input.max = this.#fromNowOrOffset(v);\n }\n /**\n * Resolves `now` and hour or minute offsets against the current time, wrapping\n * around midnight. `m` is minutes here, unlike the date offsets of the parent where\n * it is months: months mean nothing on a time. Anything else is passed through.\n */\n #fromNowOrOffset(v) {\n if (!v) {\n return '';\n }\n const resolved = new Date();\n if (v !== 'now') {\n const re = /^([+-])(\\d+)([hm])$/;\n const match = re.exec(v);\n if (!match) {\n return v;\n }\n const sign = match[1] === '-' ? -1 : 1;\n const offset = +match[2] * sign;\n if (match[3] === 'h') {\n resolved.setHours(resolved.getHours() + offset);\n } else {\n resolved.setMinutes(resolved.getMinutes() + offset);\n }\n }\n return InputLocalTime.#snapped(resolved, Number(this._input.step) || 60);\n }\n /**\n * Truncates a time to the step grid: min anchors that grid, so a bound that is not\n * on it makes every value on it invalid.\n */\n static #snapped(date, stepSeconds) {\n const pad = (n) => String(n).padStart(2, '0');\n const seconds = date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds();\n const snapped = Math.floor(seconds / stepSeconds) * stepSeconds;\n const hh = pad(Math.floor(snapped / 3600));\n const mm = pad(Math.floor((snapped % 3600) / 60));\n return stepSeconds % 60 === 0 ? `${hh}:${mm}` : `${hh}:${mm}:${pad(snapped % 60)}`;\n }\n}\n\nclass InputInstant extends Input {\n static observed = ['value', 'readonly:presence', 'required:presence', 'placeholder', 'min', 'max', 'step'];\n _type() {\n return 'datetime-local';\n }\n render(conf) {\n const { observed } = conf;\n super.render(conf);\n this.min = observed.min;\n this.max = observed.max;\n this.step = observed.step;\n }\n get value() {\n const v = this._input.value;\n return v === '' ? null : new Date(v).toISOString();\n }\n set value(v) {\n this._input.value = v ? Instant.isoToLocal(v) : '';\n }\n get min() {\n const v = this._input.min;\n return v === '' ? null : new Date(v).toISOString();\n }\n set min(v) {\n this._input.min = v ? Instant.isoToLocal(v) : '';\n }\n get max() {\n const v = this._input.max;\n return v === '' ? null : new Date(v).toISOString();\n }\n set max(v) {\n this._input.max = v ? Instant.isoToLocal(v) : '';\n }\n get step() {\n const v = this._input.step;\n return v === '' ? null : v;\n }\n set step(v) {\n this._input.step = v ?? '';\n }\n}\n\nexport { Instant, LocalDate, InputLocalDate, InputLocalTime, InputInstant };\n","import { Attributes } from '../../ftl/index.mjs';\nimport { Input } from './input.mjs';\n\nclass InputFile extends Input {\n static l10n = {\n en: {\n dropzonelabel: 'Click or drop your files here',\n unacceptablefiletype: 'Only files of type {0} are supported',\n maxfilesizeexceeded: 'Maximum supported file size is {0}',\n maxtotalsizeexceeded: 'Maximum supported total file size is {0}',\n maxfilesexceeded: 'Maximum files count exceeded',\n },\n it: {\n dropzonelabel: 'Clicca o trascina i file qui',\n unacceptablefiletype: 'Solo i file di tipo {0} sono supportati',\n maxfilesizeexceeded: 'La dimensione massima di un file è di {0}',\n maxtotalsizeexceeded: 'La dimensione massima complessiva dei file è di {0}',\n maxfilesexceeded: 'Numero massimo di file superato',\n },\n es: {\n dropzonelabel: 'Haz clic o arrastra tus archivos aquí',\n unacceptablefiletype: 'Solo se admiten archivos de tipo {0}',\n maxfilesizeexceeded: 'El tamaño máximo de archivo admitido es {0}',\n maxtotalsizeexceeded: 'El tamaño total máximo admitido es {0}',\n maxfilesexceeded: 'Se ha superado el número máximo de archivos',\n },\n fr: {\n dropzonelabel: 'Cliquez ou déposez vos fichiers ici',\n unacceptablefiletype: 'Seuls les fichiers de type {0} sont pris en charge',\n maxfilesizeexceeded: 'La taille maximale de fichier prise en charge est {0}',\n maxtotalsizeexceeded: 'La taille totale maximale prise en charge est {0}',\n maxfilesexceeded: 'Nombre maximal de fichiers dépassé',\n },\n };\n static observed = [\n 'value',\n 'readonly:presence',\n 'required:presence',\n 'placeholder',\n 'accept:csv',\n 'multiple:presence',\n 'itemlist:presence',\n 'dropzone:presence',\n 'maxfiles:number',\n 'maxfilesize:number',\n 'maxtotalsize:number',\n ];\n #accept;\n #items;\n #dropzone;\n #warnings;\n _type() {\n return 'file';\n }\n static template = `\n <div class=\"form-label\">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </div>\n <div class=\"input-group\">\n <span data-tpl-if=\"slots.ibefore\" class=\"input-group-text\">{{{{ slots.ibefore }}}}</span>\n {{{{ slots.before }}}}\n <input class=\"form-control\" data-tpl-type=\"type\" placeholder=\" \" form=\"\">\n {{{{ slots.after }}}}\n <span data-tpl-if=\"slots.iafter\" class=\"input-group-text\">{{{{ slots.iafter }}}}</span>\n </div>\n <div data-ref=\"dropzone\" class=\"dropzone\" data-tpl-if=\"slots.dropzone\">\n {{{{ slots.dropzone }}}}\n </div>\n <div data-ref=\"dropzone\" class=\"default-dropzone\" data-tpl-if=\"!slots.dropzone\">\n {{ #l10n:t('dropzonelabel') }}\n </div>\n <ful-item-list></ful-item-list>\n <ful-field-warnings></ful-field-warnings>\n <ful-field-error></ful-field-error>\n `;\n static templates = {\n items: `\n <ful-item data-tpl-each=\"files\" data-tpl-var=\"file\" data-tpl-data-name=\"file.name\">\n <div>{{ file.name }}</div>\n <div>{{ #bytes:format(file.size) }}</div>\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger bi bi-x-lg\" alt=\"Rimuovi\"></button>\n </ful-item>\n `,\n warning: `<ful-field-warning>{{ #l10n:t(key, args) }}</ful-field-warning>`,\n };\n render(conf) {\n const { observed } = conf;\n super.render({ ...conf, skipObservedSetup: true });\n this.#items = this.querySelector('ful-item-list');\n this.#dropzone = this.querySelector('[data-ref=dropzone]');\n this.#warnings = this.querySelector('ful-field-warnings');\n this.accept = observed.accept;\n this.multiple = observed.multiple;\n this.itemlist = observed.itemlist;\n this.dropzone = observed.dropzone;\n this.maxfiles = observed.maxfiles;\n this.maxfilesize = observed.maxfilesize;\n this.maxtotalsize = observed.maxtotalsize;\n\n this.disabled = conf.disabled;\n this.readonly = observed.readonly;\n this.required = observed.required;\n this.placeholder = observed.placeholder;\n this.value = observed.value;\n this.#warnings.addEventListener('animationend', (e) => {\n e.target.remove();\n });\n this.#items.addEventListener('click', (e) => {\n if (!e.target.closest('button')) {\n return;\n }\n const idx = [...this.#items.children].indexOf(e.target.closest('ful-item'));\n if (idx === -1) {\n return;\n }\n const dt = new DataTransfer();\n [...this.files]\n .filter((f, i) => i !== idx)\n .forEach((f) => {\n dt.items.add(f);\n });\n this.files = dt.files;\n });\n this.#dropzone.addEventListener('click', (e) => {\n this.querySelector('input')?.click();\n });\n\n this.#dropzone.addEventListener('dragover', (e) => {\n e.preventDefault();\n });\n this.#dropzone.addEventListener('drop', (e) => {\n e.preventDefault();\n const dropped = [...e.dataTransfer.items].filter((i) => i.kind === 'file');\n if (dropped.length === 0) {\n return;\n }\n const dt = new DataTransfer();\n dropped.forEach((i) => {\n dt.items.add(i.getAsFile());\n });\n this.files = dt.files;\n });\n this._input.addEventListener('change', (e) => {\n this.#update();\n });\n }\n #formatByteSize(v) {\n return v > 1024 * 1024\n ? `${Math.round((v / 1024 / 1024) * 100) / 100}MiB`\n : v > 1024\n ? `${Math.round((v / 1024) * 100) / 100}KiB`\n : `${v}B`;\n }\n #update() {\n this.setCustomValidity();\n this.#warnings.replaceChildren();\n this.#ensureAcceptable();\n this.#ensureFileSizes();\n this.#ensureTotalSize();\n this.#ensureFilesCount();\n this.template('items')\n .withOverlay({ files: this.files })\n .withModule('bytes', { format: this.#formatByteSize })\n .renderTo(this.#items);\n }\n warning(key, args) {\n this.template('warning').withOverlay({ key, args }).appendTo(this.#warnings);\n }\n #ensureAcceptable() {\n if (!this.#accept.length) {\n return;\n }\n const unacceptable = [...this.files].filter(\n (file) => !this.#accept.some((type) => file.name.toLowerCase().endsWith(type.toLowerCase())),\n );\n\n if (unacceptable.length === 0) {\n return;\n }\n this.warning('unacceptablefiletype', this.#accept.join(', '));\n const dt = new DataTransfer();\n [...this.files]\n .filter((f) => !unacceptable.includes(f))\n .forEach((f) => {\n dt.items.add(f);\n });\n this._input.files = dt.files;\n }\n #ensureFilesCount() {\n if (this.#maxfiles === null) {\n return;\n }\n if (this.files.length <= this.#maxfiles) {\n return;\n }\n this.warning('maxfilesexceeded');\n this._input.files = new DataTransfer().files;\n }\n\n #ensureFileSizes() {\n if (this.#maxfilesize === null) {\n return;\n }\n const oversized = [...this.files].filter((file) => file.size > this.#maxfilesize);\n if (oversized.length === 0) {\n return;\n }\n this.warning('maxfilesizeexceeded', this.#formatByteSize(this.#maxfilesize));\n const dt = new DataTransfer();\n [...this.files]\n .filter((f) => !oversized.includes(f))\n .forEach((f) => {\n dt.items.add(f);\n });\n this._input.files = dt.files;\n }\n #ensureTotalSize() {\n if (this.#maxtotalsize === null) {\n return;\n }\n const totalSize = [...this.files].reduce((acc, file) => acc + file.size, 0);\n if (totalSize <= this.#maxtotalsize) {\n return;\n }\n this.warning('maxtotalsizeexceeded', this.#formatByteSize(this.#maxtotalsize));\n this._input.files = new DataTransfer().files;\n }\n get accept() {\n return this.#accept;\n }\n set accept(vs) {\n this._input.accept = vs.join(',');\n this.#accept = vs;\n this.reflect(() => {\n this.setAttribute('accept', this._input.accept);\n });\n }\n get multiple() {\n return this._input.multiple;\n }\n set multiple(v) {\n this._input.multiple = v;\n this.reflect(() => {\n Attributes.toggle(this, 'multiple', v);\n });\n }\n get files() {\n return this._input.files;\n }\n set files(vs) {\n this._input.files = vs;\n this.#update();\n }\n get file() {\n return this.files[0] ?? null;\n }\n set file(v) {\n const dt = new DataTransfer();\n if (v) {\n dt.items.add(v);\n }\n this.files = dt.files;\n }\n get value() {\n const names = Array.from(this._input.files).map((f) => f.name);\n return this.multiple ? names : (names[0] ?? null);\n }\n set value(v) {\n if (v) {\n return;\n }\n this.files = new DataTransfer().files;\n }\n get totalsize() {\n return Array.from(this.files).reduce((a, f) => a + f.size, 0);\n }\n #maxfiles;\n get maxfiles() {\n return this.#maxfiles;\n }\n set maxfiles(v) {\n this.#maxfiles = v;\n this.reflect(() => {\n Attributes.set(this, 'maxfiles', v);\n });\n }\n #maxfilesize;\n get maxfilesize() {\n return this.#maxfilesize;\n }\n set maxfilesize(v) {\n this.#maxfilesize = v;\n this.reflect(() => {\n Attributes.set(this, 'maxfilesize', v);\n });\n }\n #maxtotalsize;\n get maxtotalsize() {\n return this.#maxtotalsize;\n }\n set maxtotalsize(v) {\n this.#maxtotalsize = v;\n this.reflect(() => {\n Attributes.set(this, 'maxtotalsize', v);\n });\n }\n #useItemlist;\n get itemlist() {\n return this.#useItemlist;\n }\n set itemlist(v) {\n this.#useItemlist = v;\n this.reflect(() => {\n Attributes.toggle(this, 'itemlist', v);\n });\n }\n #useDropzone;\n get dropzone() {\n return this.#useDropzone;\n }\n set dropzone(v) {\n this.#useDropzone = v;\n this.reflect(() => {\n Attributes.toggle(this, 'dropzone', v);\n });\n }\n}\n\nexport { InputFile };\n","import { Attributes, Fragments, ParsedElement, registry, Templates } from '../../ftl/index.mjs';\nimport { VersionedLocalStorage } from '../storage.mjs';\nimport { Timing } from '../timing.mjs';\n\nclass RemoteLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n #prefetch;\n #revision;\n #data;\n constructor({ http, url, method, responseMapper, prefetch, revision }) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\n this.#prefetch = prefetch;\n this.#revision = revision;\n this.#data = null;\n }\n async prefetch() {\n if (!this.#prefetch) {\n return;\n }\n await this.#ensureFetched();\n }\n async exact(...keys) {\n await this.#ensureFetched();\n return this.#data.filter(([k, v]) => keys.some((r) => r == k));\n }\n async load(needle) {\n await this.#ensureFetched();\n return this.#data.filter(([k, v]) => (v ?? '').toLowerCase().includes(needle?.toLowerCase()));\n }\n async reconfigureUrl(url) {\n this.#data = null;\n this.#url = url;\n }\n async #ensureFetched() {\n if (this.#data !== null) {\n return;\n }\n const raw = await RemoteLoader.#revisionedData(this.#http, this.#method, this.#url, this.#revision);\n this.#data = this.#responseMapper(raw);\n }\n static async #revisionedData(http, method, url, revision) {\n const storageKey = `${method}@${url}`;\n if (revision !== null) {\n const data = VersionedLocalStorage.load(storageKey, revision);\n if (data !== undefined) {\n return data;\n }\n }\n const data = await http.request(method, url).fetchJson();\n if (revision !== null) {\n VersionedLocalStorage.save(storageKey, revision, data);\n }\n return data;\n }\n}\n\nclass PartialRemoteLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n constructor({ http, url, method, responseMapper }) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\n }\n async exact(...keys) {\n const response = await this.#http\n .request(this.#method, this.#url)\n .param('k', ...keys)\n .fetchJson();\n return this.#responseMapper(response);\n }\n async load(needle) {\n const response = await this.#http.request(this.#method, this.#url).param('s', needle).fetchJson();\n return this.#responseMapper(response);\n }\n}\n\nclass InMemoryLoader {\n #data;\n constructor(data) {\n this.#data = data;\n }\n update(data) {\n this.#data = data;\n }\n exact(...keys) {\n return this.#data.filter(([k, v]) => keys.some((r) => r == k));\n }\n load(needle) {\n return this.#data.filter(([k, v]) => (v ?? '').toLowerCase().includes(needle?.toLowerCase()));\n }\n}\n\nclass SelectLoader {\n static create(el, conf) {\n if (!el.hasAttribute('src')) {\n const els = Array.from(conf.options?.querySelectorAll('option') ?? []);\n const data = els.map((e) => {\n return [e.getAttribute('value') ?? e.innerText.trim(), e.innerText.trim()];\n });\n return new InMemoryLoader(data);\n }\n const http = registry.component('http-client');\n const responseMapper = SelectLoader.#responseMapperFrom(el);\n\n if ('chunked' === el.getAttribute('mode')) {\n return new PartialRemoteLoader({\n http,\n url: el.getAttribute('src'),\n method: el.getAttribute('method') ?? 'POST',\n responseMapper,\n });\n }\n return new RemoteLoader({\n http,\n url: el.getAttribute('src'),\n method: el.getAttribute('method') ?? 'POST',\n responseMapper,\n prefetch: el.hasAttribute('preload'),\n revision: el.getAttribute('revision'),\n });\n }\n static #responseMapperFrom(el) {\n if (el.hasAttribute('k-expr') && el.hasAttribute('l-expr')) {\n return (response) => {\n const rows = registry\n .evaluator()\n .withOverlay(response)\n .evaluateExpression(el.getAttribute('d-expr') ?? 'self');\n return rows.map((row) => {\n const evaluator = registry.evaluator().withOverlay(row);\n return [\n evaluator.evaluateExpression(el.getAttribute('k-expr')),\n evaluator.evaluateExpression(el.getAttribute('l-expr')),\n evaluator.evaluateExpression(el.getAttribute('m-expr') ?? 'self'),\n ];\n });\n };\n }\n if (el.hasAttribute('response-mapper')) {\n return registry.component(el.getAttribute('response-mapper'));\n }\n return (response) => response;\n }\n}\n\nclass Dropdown extends ParsedElement {\n static slots = true;\n static template = `\n <ful-spinner class=\"centered\" hidden></ful-spinner>\n <menu tabindex=\"-1\" role=\"listbox\" hidden></menu>\n `;\n static templates = {\n options: `\n <li data-tpl-each=\"self\" data-tpl-selected=\"index == 0\" data-tpl-value=\"index\" role=\"option\" data-tpl-aria-selected=\"index == 0 ? 'true' : 'false'\">\n {{ label }}\n </li>\n `,\n };\n #spinner;\n #menu;\n #optionstemplate;\n #options = new Map();\n render({ slots }) {\n const fragment = this.template().render();\n this.#optionstemplate = Fragments.isBlank(slots.default)\n ? this.template('options')\n : Templates.fromFragment(slots.default);\n this.#spinner = fragment.querySelector('ful-spinner');\n this.#menu = fragment.querySelector('menu');\n this.#menu.addEventListener('click', (evt) => {\n evt.stopPropagation();\n const li = evt.target.closest('li');\n if (!li) {\n this.hide();\n return;\n }\n this.#change(li);\n });\n this.replaceChildren(fragment);\n }\n #selected() {\n return this.#menu?.querySelector('[selected]') ?? this.#menu?.firstElementChild ?? null;\n }\n acceptSelection() {\n const selected = this.#selected();\n if (!selected) {\n return;\n }\n this.#change(selected);\n }\n update(values) {\n if (values === undefined) {\n throw new Error('null data');\n }\n this.#options = new Map(values.map((v, i) => [String(i), v]));\n const data = values.map(([key, label, metadata], index) => ({ index, key, label, metadata }));\n this.#optionstemplate.withOverlay(data).renderTo(this.#menu);\n }\n #change(target) {\n const index = target.getAttribute('value');\n const data = this.#options.get(index);\n this.hide();\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { index, data },\n }),\n );\n }\n hide() {\n this.setAttribute('hidden', '');\n }\n get shown() {\n return !this.hasAttribute('hidden');\n }\n async show(loader) {\n this.removeAttribute('hidden');\n this.#menu.setAttribute('hidden', '');\n this.#spinner.removeAttribute('hidden');\n try {\n const data = await loader();\n this.update(data);\n } catch (e) {\n this.hide();\n throw e;\n } finally {\n this.#spinner.setAttribute('hidden', '');\n this.#menu.removeAttribute('hidden');\n }\n }\n async moveOrShow(forward, loader) {\n if (this.shown) {\n const selected = this.#selected();\n const candidate = selected?.[`${forward ? 'next' : 'previous'}ElementSibling`];\n if (selected && candidate) {\n selected.removeAttribute('selected');\n candidate.setAttribute('selected', '');\n candidate.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n return;\n }\n await this.show(loader);\n }\n}\n\nclass Select extends ParsedElement {\n static observed = ['value:csvm', 'readonly:presence', 'required:presence', 'itemlist:presence'];\n static slots = true;\n static template = `\n <div class=\"form-label\">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </div>\n <div class=\"input-group flex-nowrap\" tabindex=\"-1\">\n <span data-tpl-if=\"slots.ibefore\" class=\"input-group-text\">{{{{ slots.ibefore }}}}</span>\n {{{{ slots.before }}}}\n <div class=\"ful-select-input-container\">\n <div class=\"ful-select-input\">\n <badges></badges>\n <input type=\"text\" form=\"\" role=\"combobox\" aria-autocomplete=\"list\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\n </div>\n <ful-dropdown hidden popover=\"manual\">{{{{ slots.dropdown }}}}</ful-dropdown>\n </div>\n {{{{ slots.after }}}}\n <span data-tpl-if=\"slots.iafter\" class=\"input-group-text\">{{{{ slots.iafter }}}}</span>\n </div>\n <ful-item-list></ful-item-list>\n <ful-field-error></ful-field-error>\n `;\n static templates = {\n items: `\n <ful-item data-tpl-each=\"entries\" data-tpl-var=\"entry\" data-tpl-data-key=\"entry[0]\">\n <div>{{ entry[1][0] }}</div>\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger bi bi-x-lg\"></button>\n </ful-item>\n `,\n };\n static formAssociated = true;\n internals;\n #loader;\n #badges;\n #ddmenu;\n #input;\n #items;\n #multiple;\n #fieldError;\n #values = new Map();\n #token = 0;\n constructor() {\n super();\n this.internals = this.attachInternals();\n this.internals.role = 'presentation';\n }\n async render({ slots, observed, disabled }) {\n const name = this.getAttribute('name');\n this.#loader = registry\n .component(this.getAttribute('loader') ?? 'loaders:select')\n .create(this, { options: slots.options });\n\n this.#multiple = this.hasAttribute('multiple');\n try {\n await this.#loader.prefetch?.();\n } catch (/** @type any */ e) {\n console.warn('failed to prefetch select options', this, 'reason:', e);\n }\n const fragment = this.template().withOverlay({ slots, name }).render();\n this.#input = fragment.querySelector('input');\n this.#items = fragment.querySelector('ful-item-list');\n Attributes.forward('input-', this, this.#input);\n this.#badges = fragment.querySelector('badges');\n\n this.value = observed.value;\n this.disabled = disabled;\n this.readonly = observed.readonly;\n this.required = observed.required;\n this.itemlist = observed.itemlist;\n\n this.#ddmenu = fragment.querySelector('ful-dropdown');\n const label = fragment.querySelector('label');\n label.addEventListener('click', () => this.focus());\n this.#fieldError = fragment.querySelector('ful-field-error');\n this.#input.ariaDescribedByElements = [this.#fieldError];\n this.#input.ariaLabelledByElements = [label];\n const [dload, abortdload] = Timing.throttle(400, () => {\n this.#input.setAttribute('aria-expanded', 'true');\n this.#ddmenu.show(() => this.#loader.load(this.#input.value));\n });\n this.addEventListener('click', (/** @type any */ e) => {\n if (e.target.matches('input')) {\n return;\n }\n if (this.disabled || this.readonly) {\n return;\n }\n if (this.#ddmenu.shown) {\n this.#input.setAttribute('aria-expanded', 'false');\n this.#ddmenu.hide();\n return;\n }\n this.#input.focus();\n dload();\n });\n this.#items.addEventListener('click', (e) => {\n e.stopPropagation();\n if (!e.target.closest('button')) {\n return;\n }\n if (this.disabled || this.readonly) {\n return;\n }\n const idx = [...this.#items.children].indexOf(e.target.closest('ful-item'));\n if (idx === -1) {\n return;\n }\n this.#values.delete(Array.from(this.#values.keys())[idx]);\n this.#changed();\n this.#syncBadges();\n });\n this.#badges.addEventListener('click', (e) => {\n e.stopPropagation();\n if (this.disabled || this.readonly) {\n return;\n }\n const idx = [...this.#badges.children].indexOf(e.target);\n if (idx === -1) {\n return;\n }\n this.#values.delete(Array.from(this.#values.keys())[idx]);\n this.#changed();\n this.#syncBadges();\n });\n this.#input.addEventListener('change', (e) => {\n e.stopPropagation();\n });\n this.#input.addEventListener('blur', (e) => {\n e.stopPropagation();\n if (e.relatedTarget && this.contains(e.relatedTarget)) {\n return;\n }\n abortdload();\n this.#input.setAttribute('aria-expanded', 'false');\n this.#ddmenu.hide();\n this.#input.value = '';\n });\n this.#input.addEventListener('keydown', (e) => {\n if (this.disabled || this.readonly) {\n return;\n }\n switch (e.code) {\n case 'ArrowUp': {\n e.preventDefault();\n this.#input.setAttribute('aria-expanded', 'true');\n this.#ddmenu.moveOrShow(false, () => this.#loader.load(this.#input.value));\n break;\n }\n case 'ArrowDown': {\n e.preventDefault();\n this.#input.setAttribute('aria-expanded', 'true');\n this.#ddmenu.moveOrShow(true, () => this.#loader.load(this.#input.value));\n break;\n }\n case 'Escape': {\n this.#input.setAttribute('aria-expanded', 'false'); \n this.#ddmenu.hide();\n break;\n }\n case 'Enter': {\n if (!this.#ddmenu.shown) {\n //nothing to accept: submit the form as ful-input does. the inner\n //input carries form=\"\" so it never submits one on its own\n this.#requestSubmit();\n return;\n }\n e.preventDefault();\n this.#input.setAttribute('aria-expanded', 'false');\n this.#ddmenu.acceptSelection();\n this.#input.value = '';\n break;\n }\n case 'Backspace': {\n //remove last if caret at position 0\n if (this.#values.size && this.#input.selectionStart === 0 && this.#input.selectionEnd === 0) {\n this.#values.delete(Array.from(this.#values.keys()).pop());\n this.#changed();\n this.#syncBadges();\n }\n break;\n }\n case 'Tab': {\n this.#input.setAttribute('aria-expanded', 'false');\n this.#ddmenu.hide();\n abortdload();\n break;\n }\n }\n });\n this.#input.addEventListener('input', (e) => {\n e.stopPropagation();\n if (this.disabled || this.readonly) {\n return;\n }\n dload();\n });\n this.#ddmenu.addEventListener('change', (e) => {\n e.stopPropagation();\n if (!this.#multiple) {\n this.#values.clear();\n }\n this.#values.set(e.detail.data[0], e.detail.data.slice(1));\n this.#changed();\n this.#syncBadges();\n this.#input.focus();\n this.#input.setAttribute('aria-expanded', 'false');\n this.#ddmenu.hide();\n this.#input.value = '';\n });\n this.replaceChildren(fragment);\n }\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n #requestSubmit() {\n const form = this.internals.form;\n if (!form) {\n return;\n }\n const candidates = /** @type [HTMLButtonElement|HTMLInputElement] */ (\n Array.from(form.querySelectorAll('button:not(:disabled), input:not(:disabled)'))\n );\n form.requestSubmit(candidates.find((el) => el.type === 'submit'));\n }\n #changed() {\n const selection = [...this.#values.entries()].map((e) => ({\n key: e[0],\n label: e[1][0],\n metadata: e[1].slice(1),\n }));\n const value = this.#multiple ? selection : (selection[0] ?? null);\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { value },\n }),\n );\n }\n #syncBadges() {\n const badges = Array.from(this.#values.entries()).map(([k, v]) => {\n const b = document.createElement('badge');\n b.setAttribute('role', 'button');\n b.setAttribute('value', k);\n b.innerText = v[0];\n return b;\n });\n this.#badges.replaceChildren();\n this.#badges.append(...badges);\n this.#items.replaceChildren();\n this.template('items').withOverlay({ entries: this.#values.entries() }).renderTo(this.#items);\n }\n set value(vs) {\n //the csvm mapper yields [] for a missing multiple value, an empty string is\n //left alone: it is a usable key for an <option value=\"\">\n const keys = vs == null ? [] : Array.isArray(vs) ? vs : [vs];\n //the keys are known synchronously and are all `value` reads, so they are applied\n //now: only the labels need the loader, until then a key stands in for its own\n this.#values = new Map(keys.map((k) => [k, [k]]));\n this.#syncBadges();\n const token = ++this.#token;\n if (keys.length === 0) {\n return;\n }\n this.#resolve(keys, token);\n }\n /**\n * Resolves the labels of the assigned keys. A failed lookup is left to reject so\n * that it is reported like any other failure: the keys stay applied either way.\n */\n async #resolve(keys, token) {\n const entries = await this.#loader.exact(...keys);\n if (token !== this.#token) {\n //a newer assignment has been made in the meantime\n return;\n }\n //label the keys that are still selected: a removal made while the lookup was in\n //flight must not be undone by it, and a key the loader does not know is dropped\n const resolved = new Map(entries.map((e) => [e[0], e.slice(1)]));\n for (const key of keys) {\n if (!this.#values.has(key)) {\n continue;\n }\n if (resolved.has(key)) {\n this.#values.set(key, resolved.get(key));\n } else {\n this.#values.delete(key);\n }\n }\n this.#syncBadges();\n }\n get value() {\n if (this.#multiple) {\n return [...this.#values.keys()];\n }\n return [...this.#values.keys()][0] ?? null;\n }\n get entry() {\n if (this.#multiple) {\n return [...this.#values.entries()];\n }\n return [...this.#values.entries()][0] ?? null;\n }\n get disabled() {\n return this.#input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this.#input, 'disabled', d);\n //also on the host: a form associated element only matches :disabled through its\n //own attribute, and that is what keeps it out of the submitted values. no reflect\n //is needed, disabled is deliberately not observed: the platform delivers it\n //through formDisabledCallback, which also covers a disabled ancestor fieldset\n Attributes.toggle(this, 'disabled', d);\n }\n get readonly() {\n return this.#input.readOnly;\n }\n set readonly(v) {\n this.#input.readOnly = v;\n this.reflect(() => {\n Attributes.toggle(this, 'readonly', v);\n });\n }\n get required() {\n return this.#input.getAttribute('aria-required') === 'true';\n }\n set required(d) {\n Attributes.set(this.#input, 'aria-required', d ? 'true' : null);\n this.reflect(() => {\n Attributes.toggle(this, 'required', d);\n });\n }\n #useItemlist;\n get itemlist() {\n return this.#useItemlist;\n }\n set itemlist(v) {\n this.#useItemlist = v;\n this.reflect(() => {\n Attributes.toggle(this, 'itemlist', v);\n });\n }\n focus(options) {\n this.#input.focus(options);\n }\n setCustomValidity(error) {\n if (!error) {\n this.internals.setValidity({});\n this.#fieldError.innerText = '';\n return;\n }\n this.internals.setValidity({ customError: true }, ' ');\n this.#fieldError.innerText = error;\n }\n}\n\nexport { Dropdown, Select, SelectLoader };\n","import { Attributes, Fragments, ParsedElement } from '../../ftl/index.mjs';\n\nclass RadioGroup extends ParsedElement {\n static observed = ['value', 'readonly:presence', 'required:presence'];\n static slots = true;\n static template = `\n <fieldset>\n <legend class=\"form-label\">\n {{{{ slots.default }}}}\n </legend>\n <header data-tpl-if=\"slots.header\">\n {{{{ slots.header }}}}\n </header>\n <section>\n <div class=\"label-wrapper\" data-tpl-each=\"inputsAndLabels\" data-tpl-var=\"ial\">\n <label>\n {{{{ ial[0] }}}}\n <div>{{{{ ial[1] }}}}</div>\n </label>\n </div>\n </section>\n <ful-field-error></ful-field-error>\n <footer data-tpl-if=\"slots.footer\">\n {{{{ slots.footer }}}}\n </footer>\n </fieldset>\n `;\n static formAssociated = true;\n #fieldset;\n #fieldError;\n #firstRadio;\n #booleanType;\n constructor() {\n super();\n this.internals = this.attachInternals();\n this.internals.role = 'radiogroup';\n }\n render({ slots, observed, disabled }) {\n const name = this.getAttribute('name') ?? Attributes.uid('ful-radiogroup');\n const radioEls = Array.from(slots.default.querySelectorAll('ful-radio'));\n const inputsAndLabels = radioEls.map((el) => {\n const input = document.createElement('input');\n input.setAttribute('type', 'radio');\n Attributes.forward('input-', this, input);\n Attributes.forward('', el, input);\n input.setAttribute('name', `${name}-ignore`);\n input.setAttribute('form', ``);\n input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n //change is not cancelable\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value,\n },\n }),\n );\n });\n const label = Fragments.fromChildNodes(el);\n return [input, label];\n });\n\n radioEls.forEach((el) => {\n el.remove();\n });\n this.template().withOverlay({ name, slots, inputsAndLabels }).renderTo(this);\n this.#fieldset = this.firstElementChild;\n this.disabled = disabled;\n this.readonly = observed.readonly;\n this.required = observed.required;\n this.value = observed.value;\n this.#fieldError = this.querySelector('ful-field-error');\n this.ariaDescribedByElements = [this.#fieldError];\n this.#firstRadio = this.querySelector('input[type=radio]');\n this.#booleanType = this.getAttribute('type') === 'boolean';\n }\n get value() {\n /** @type {HTMLInputElement|null} */\n const checked = this.querySelector('input[type=radio]:checked');\n return checked ? (this.#booleanType ? checked.value === 'true' : checked.value) : null;\n }\n set value(value) {\n if (value === null) {\n this.querySelectorAll(`input[type=radio]`).forEach((el) => {\n /** @type {HTMLInputElement} */ (el).checked = false;\n });\n return;\n }\n /** @type {HTMLInputElement|null} */\n const el = this.querySelector(`input[type=radio][value=${CSS.escape(String(value))}]`);\n if (el) {\n el.checked = true;\n }\n }\n get readonly() {\n return this.#fieldset.inert;\n }\n set readonly(v) {\n this.#fieldset.inert = v;\n this.reflect(() => {\n Attributes.toggle(this, 'readonly', v);\n });\n }\n get disabled() {\n return this.#fieldset.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this.#fieldset, 'disabled', d);\n //also on the host: a form associated element only matches :disabled through its\n //own attribute, and that is what keeps it out of the submitted values. no reflect\n //is needed, disabled is deliberately not observed: the platform delivers it\n //through formDisabledCallback, which also covers a disabled ancestor fieldset\n Attributes.toggle(this, 'disabled', d);\n }\n get required() {\n return this.#fieldset.getAttribute('aria-required') === 'true';\n }\n set required(d) {\n Attributes.set(this.#fieldset, 'aria-required', d ? 'true' : null);\n this.reflect(() => {\n Attributes.toggle(this, 'required', d);\n });\n }\n focus(options) {\n this.#firstRadio.focus(options);\n }\n setCustomValidity(error) {\n if (!error) {\n this.internals.setValidity({});\n this.#fieldError.innerText = '';\n return;\n }\n this.internals.setValidity({ customError: true }, ' ');\n this.#fieldError.innerText = error;\n }\n}\n\nexport { RadioGroup };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\n\nclass Checkbox extends ParsedElement {\n static observed = ['value:bool', 'readonly:presence', 'required:presence'];\n static slots = true;\n static template = `\n <div data-tpl-class=\"klass\">\n <div class=\"input-container\">\n <input class=\"form-check-input\" type=\"checkbox\" data-tpl-role=\"isSwitch ? 'switch' : false\" form=\"\" placeholder=\" \">\n </div>\n <div class=\"form-check-label\">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </div>\n </div>\n <ful-field-error></ful-field-error>\n `;\n #container;\n #input;\n #fieldError;\n static formAssociated = true;\n constructor() {\n super();\n this.internals = this.attachInternals();\n this.internals.role = 'presentation';\n }\n render({ slots, observed, disabled }) {\n const isSwitch = this.getAttribute('type') === 'switch';\n const klass = isSwitch ? 'form-check form-switch' : 'form-check';\n const fragment = this.template().withOverlay({ slots, klass, isSwitch }).render();\n this.#container = fragment.firstElementChild;\n this.#input = fragment.querySelector('input');\n Attributes.forward('input-', this, this.#input);\n this.disabled = disabled;\n this.readonly = observed.readonly;\n this.required = observed.required;\n this.value = observed.value;\n this.#input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value,\n },\n }),\n );\n });\n const label = fragment.querySelector('label');\n label.addEventListener('click', () => {\n this.focus();\n if (this.disabled || this.readonly) {\n return;\n }\n this.value = !this.value;\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value,\n },\n }),\n );\n });\n this.#fieldError = fragment.querySelector('ful-field-error');\n this.#input.ariaDescribedByElements = [this.#fieldError];\n this.#input.ariaLabelledByElements = [label];\n this.replaceChildren(fragment);\n }\n get value() {\n return this.#input.checked;\n }\n set value(value) {\n this.#input.checked = value;\n }\n get readonly() {\n return this.#container.inert;\n }\n set readonly(v) {\n this.#container.inert = v;\n this.reflect(() => {\n Attributes.toggle(this, 'readonly', v);\n });\n }\n get disabled() {\n return this.#input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this.#input, 'disabled', d);\n //also on the host: a form associated element only matches :disabled through its\n //own attribute, and that is what keeps it out of the submitted values. no reflect\n //is needed, disabled is deliberately not observed: the platform delivers it\n //through formDisabledCallback, which also covers a disabled ancestor fieldset\n Attributes.toggle(this, 'disabled', d);\n }\n get required() {\n return this.#input.getAttribute('aria-required') === 'true';\n }\n set required(d) {\n Attributes.set(this.#input, 'aria-required', d ? 'true' : null);\n this.reflect(() => {\n Attributes.toggle(this, 'required', d);\n });\n }\n focus(options) {\n this.#input.focus(options);\n }\n setCustomValidity(error) {\n if (!error) {\n this.internals.setValidity({});\n this.#fieldError.innerText = '';\n return;\n }\n this.internals.setValidity({ customError: true }, ' ');\n this.#fieldError.innerText = error;\n }\n}\n\nexport { Checkbox };\n","import { ParsedElement } from '../../ftl/index.mjs';\n\nclass Spinner extends ParsedElement {\n static slots = true;\n static template = `\n <div class=\"ful-spinner-wrapper\" role=\"status\">\n <div class=\"ful-spinner-text\">{{{{ slots.default }}}}</div>\n <div class=\"ful-spinner-icon\"></div>\n </div>\n `;\n render({ slots }) {\n this.template().withOverlay({ slots }).renderTo(this);\n }\n}\n\nexport { Spinner };\n","import { Attributes, Fragments, Nodes, ParsedElement, registry, Rendering } from '../../ftl/index.mjs';\n\nclass SortButton extends ParsedElement {\n static observed = ['order'];\n #order;\n render({ observed }) {\n const sorter = this.getAttribute('sorter');\n const orders = ['asc', 'desc', null];\n this.order = observed.order;\n this.addEventListener('click', () => {\n const nextOrder = orders[(orders.indexOf(this.order) + 1) % 3];\n this.dispatchEvent(\n new CustomEvent('sort-requested', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: { sorter, order: nextOrder },\n },\n }),\n );\n });\n }\n\n get order() {\n return this.#order || null;\n }\n\n set order(value) {\n this.#order = value || null;\n this.reflect(() => {\n if (this.#order) {\n this.setAttribute('order', value);\n } else {\n this.removeAttribute('order');\n }\n });\n }\n}\n\nclass Pagination extends ParsedElement {\n static observed = ['total:number', 'current:number'];\n static l10n = {\n en: {\n showing: 'Page {0} of {1}',\n navigation: 'Page navigation',\n previous: 'Previous',\n next: 'Next',\n },\n it: {\n showing: 'Pagina {0} di {1}',\n navigation: 'Navigazione pagine',\n previous: 'Precedente',\n next: 'Successivo',\n },\n es: {\n showing: 'Página {0} de {1}',\n navigation: 'Navegación de páginas',\n previous: 'Anterior',\n next: 'Siguiente',\n },\n fr: {\n showing: 'Page {0} sur {1}',\n navigation: 'Navigation des pages',\n previous: 'Précédent',\n next: 'Suivant',\n },\n };\n static config = {\n prevIcon: 'bi bi-chevron-left',\n nextIcon: 'bi bi-chevron-right',\n reloadIcon: 'bi bi-arrow-clockwise',\n };\n static template = `\n <nav data-tpl-aria-label=\"#l10n:t('navigation')\" class=\"user-select-none\">\n <ul class=\"pagination\">\n <li class=\"page-item ms-auto me-2 pagination-index\"> {{ #l10n:t('showing', curr.label, total) }}</li>\n <li class=\"page-item me-2 reload\"><a role=\"button\"><i data-tpl-class=\"config.reloadIcon\"></i></a></li>\n <li class=\"page-item prev\">\n <a data-tpl-class=\"prev.enabled?'page-link':'page-link disabled'\" data-tpl-aria-label=\"#l10n:t('previous')\" role=\"button\" data-tpl-data-page=\"prev.index\">\n <i aria-hidden=\"true\" data-tpl-class=\"config.prevIcon\"></i>\n </a>\n </li>\n <li class=\"page-item\" data-tpl-each=\"pages\" data-tpl-var=\"page\">\n <a data-tpl-class=\"curr.index != page.index ? 'page-link': 'page-link disabled'\" role=\"button\" data-tpl-data-page=\"page.index\" >\n {{ page.label }}\n </a>\n </li>\n <li class=\"page-item next\">\n <a data-tpl-class=\"next.enabled?'page-link':'page-link disabled'\" data-tpl-aria-label=\"#l10n:t('next')\" role=\"button\" data-tpl-data-page=\"next.index\">\n <i aria-hidden=\"true\" data-tpl-class=\"config.nextIcon\"></i>\n </a>\n </li>\n </ul>\n </nav>\n `;\n #total = 0;\n #current = 0;\n render({ observed }) {\n this.total = observed.total ?? 0;\n this.current = observed.current ?? 0;\n this.addEventListener('click', (/** @type any */ evt) => {\n const el = evt.target.closest('a');\n if (!el || el.classList.contains('disabled')) {\n //a disabled link leads nowhere: the page it would ask for does not exist\n return;\n }\n this.dispatchEvent(\n new CustomEvent('page-requested', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: Number(el.dataset.page ?? this.#current),\n },\n }),\n );\n });\n }\n update(current, total) {\n const maxRender = Number(this.getAttribute('pages') ?? '5');\n const hasPrev = current > 0;\n const hasNext = current + 1 < total;\n //a disabled arrow carries no page: there is nothing valid for it to point at\n const prev = { index: hasPrev ? current - 1 : null, enabled: hasPrev };\n const curr = { index: current, label: current + 1 };\n const next = { index: hasNext ? current + 1 : null, enabled: hasNext };\n //the window holds at most maxRender pages, centered on the current one and slid\n //back towards the end so it stays full on the last pages\n const rendered = Math.max(1, Math.min(maxRender, total));\n const first = Math.max(0, Math.min(current - Math.floor((rendered - 1) / 2), total - rendered));\n const pages = Array.from({ length: rendered }, (_, offset) => ({\n index: first + offset,\n label: first + offset + 1,\n }));\n this.template().withOverlay({ total, prev, curr, next, pages }).renderTo(this);\n }\n get total() {\n return this.#total;\n }\n set total(value) {\n this.#total = value;\n this.reflect(() => {\n this.setAttribute('total', String(value));\n this.update(this.#current ?? 0, this.#total);\n });\n }\n get current() {\n return this.#current;\n }\n set current(value) {\n this.#current = value;\n this.reflect(() => {\n this.setAttribute('current', String(value));\n this.update(this.#current, this.#total ?? 0);\n });\n }\n}\n\nclass TableSchemaParser {\n static parse(nodeOrFragment, template) {\n //nodeOrFragment is undefined when the slot is missing altogether\n const schema = nodeOrFragment ? Nodes.queryChildren(nodeOrFragment, 'schema') : null;\n if (!schema) {\n throw new Error('missing expected <schema>: ful-table needs a <template slot=\"schema\"> holding one');\n }\n const headersTr = document.createElement('tr');\n const rowsTr = document.createElement('tr');\n rowsTr.setAttribute('data-tpl-each', 'rows');\n for (const attr of schema.getAttributeNames()) {\n const value = schema.getAttribute(attr);\n headersTr.setAttribute(attr, value ?? '');\n rowsTr.setAttribute(attr, value ?? '');\n }\n const columns = Nodes.queryChildrenAll(schema, 'column');\n const sort =\n columns\n .filter((v) => v.hasAttribute('order'))\n .map((v) => ({ sorter: v.getAttribute('sorter'), order: v.getAttribute('order') }))[0] ?? null;\n for (var column of columns) {\n const maybeTitleTag = Nodes.queryChildren(column, 'title');\n const sorter = column.getAttribute('sorter');\n const order = column.getAttribute('order');\n const titleNode = maybeTitleTag ?? document.createTextNode(column.getAttribute('title') ?? '');\n maybeTitleTag?.remove();\n column.removeAttribute('sorter');\n column.removeAttribute('order');\n column.removeAttribute('title');\n const wrappedTitleNode =\n !sorter && !order\n ? titleNode\n : (() => {\n const fulSorter = document.createElement('ful-sorter');\n if (sorter) {\n fulSorter.setAttribute('sorter', sorter);\n }\n if (order) {\n fulSorter.setAttribute('order', order);\n }\n fulSorter.append(titleNode);\n return fulSorter;\n })();\n const th = document.createElement('th');\n const td = document.createElement('td');\n for (const attr of column.getAttributeNames()) {\n const value = column.getAttribute(attr);\n th.setAttribute(attr, value ?? '');\n td.setAttribute(attr, value ?? '');\n }\n th.append(wrappedTitleNode);\n td.append(...column.childNodes);\n headersTr.append(th);\n rowsTr.append(td);\n }\n\n return {\n headersTemplate: template\n .withOverlay({ inHeaders: true, inRows: false })\n .withFragment(Fragments.from(headersTr)),\n rowsTemplate: template.withOverlay({ inHeaders: false, inRows: true }).withFragment(Fragments.from(rowsTr)),\n sort: sort,\n length: columns.length,\n };\n }\n}\n\nclass InMemoryTableLoader {\n #data;\n constructor(data) {\n this.#data = data;\n }\n async load(pageRequest, sortRequest, filterRequest) {\n const begin = pageRequest.page * pageRequest.size;\n const end = begin + pageRequest.size;\n const page = this.#data.slice(begin, end);\n const totalElements = this.#data.length;\n return {\n data: page,\n size: totalElements\n };\n }\n update(data) {\n this.#data = data;\n }\n}\n\nclass RemoteTableLoader {\n #http;\n #url;\n #method;\n constructor(http, url, method) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n }\n async load(pageRequest, sortRequest, filterRequest) {\n const filters = Object.entries(filterRequest).filter(([k, v]) => v);\n return await this.#http\n .request(this.#method, this.#url)\n .param('page', pageRequest.page)\n .param('size', pageRequest.size)\n .param('sort', sortRequest ? `${sortRequest.sorter},${sortRequest.order}` : null)\n .param('filters', filters.length > 0 ? JSON.stringify(Object.fromEntries(filters)) : null)\n .fetchJson();\n }\n}\n\nclass TableLoader {\n static create(el, conf) {\n const url = el.getAttribute('src');\n if (url) {\n const http = registry.component('http-client');\n const method = el.getAttribute('method') ?? 'GET';\n return new RemoteTableLoader(http, url, method);\n }\n return new InMemoryTableLoader([]);\n }\n}\n\nclass Table extends ParsedElement {\n static slots = true;\n static l10n = {\n en: {\n initial: 'Start searching to see results.',\n error: 'Error while loading data:',\n nodata: 'No elements found.',\n },\n it: {\n initial: 'Avvia la ricerca per visualizzare i risultati.',\n error: 'Errore nel caricamento dei dati:',\n nodata: 'Nessun elemento trovato.',\n },\n es: {\n initial: 'Inicia la búsqueda para ver los resultados.',\n error: 'Error al cargar los datos:',\n nodata: 'No se encontraron elementos.',\n },\n fr: {\n initial: 'Lancez la recherche pour voir les résultats.',\n error: 'Erreur lors du chargement des données :',\n nodata: 'Aucun élément trouvé.',\n },\n };\n static config = {\n searchIcon: 'bi bi-search',\n };\n static template = `\n <ful-form data-tpl-if=\"slots.filters\">\n {{{{ slots.filters }}}}\n </ful-form>\n <div class=\"table-wrapper\">\n <table class=\"table\">\n <caption data-tpl-if=\"slots.caption\">{{{{ slots.caption }}}}</caption>\n <thead></thead>\n <tbody></tbody>\n <tbody data-ref=\"initial\">\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <div>\n <p data-tpl-if=\"config.searchIcon\"><i data-tpl-class=\"config.searchIcon\"></i></p>\n {{{ #l10n:t('initial') }}}\n </div>\n </td>\n </tr>\n </tbody>\n <tbody data-ref=\"loading\" hidden>\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <ful-spinner class=\"big\"></ful-spinner>\n </td>\n </tr>\n </tbody>\n <tbody data-ref=\"feedback\" hidden>\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <div class=\"alert alert-danger\">\n <p>{{ #l10n:t('error') }}</p>\n <div data-ref=\"feedback-error\"></div>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot data-tpl-if=\"slots.footer\">\n {{{{ slots.footer }}}}\n </tfoot>\n </table>\n </div>\n <ful-pagination current=\"0\" total=\"1\"></ful-pagination>\n `;\n static templates = {\n row: `\n <tr data-tpl-if=\"pageResponse.data.length == 0\">\n <td data-tpl-colspan=\"schema.length\" class=\"text-center align-middle p-4\">\n {{ #l10n:t('nodata') }}\n </td>\n </tr>\n {{{{ schema.rowsTemplate.withOverlay({'rows': pageResponse.data}).render() }}}}\n `,\n };\n #loader;\n #schema;\n #body;\n #loading;\n #noAutoload;\n #feedback;\n #paginator;\n #sorters;\n #latestRequest;\n async render({ slots, observed }) {\n const template = this.template();\n const schema = TableSchemaParser.parse(slots.schema, template);\n const fragment = template.withOverlay({ slots, schema }).render();\n const tableWrapper = /** @type HTMLTableElement */ (Nodes.queryChildren(fragment, '.table-wrapper'));\n const table = /** @type HTMLTableElement */ (tableWrapper.querySelector('table'));\n Attributes.forward('table-', this, table);\n this.#loader = registry.component(this.getAttribute('loader') ?? 'loaders:table').create(this);\n\n this.#schema = schema;\n this.#body = table.querySelector(':scope > tbody');\n this.#loading = table.querySelector(':scope > tbody[data-ref=loading]');\n this.#noAutoload = table.querySelector(':scope > tbody[data-ref=initial]');\n this.#feedback = table.querySelector(':scope > tbody[data-ref=feedback]');\n this.#paginator = Nodes.queryChildren(fragment, 'ful-pagination');\n this.replaceChildren(fragment);\n const thead = /** @type HTMLTableSectionElement */ (this.querySelector('thead'));\n schema.headersTemplate.renderTo(thead);\n this.#sorters = thead.querySelectorAll('ful-sorter');\n await Rendering.waitForChildren(this);\n\n const maybeForm = /** @type any */ (Nodes.queryChildren(this, 'ful-form'));\n this.#latestRequest = {\n pageRequest: {\n page: 0,\n size: this.getAttribute('page-size') ? Number(this.getAttribute('page-size')) : 10,\n },\n sortRequest: schema.sort,\n filterRequest: maybeForm?.values ?? {},\n };\n maybeForm?.addEventListener('submit:success', async (evt) => {\n await this.load(\n {\n page: 0,\n size: this.#latestRequest.pageRequest.size,\n },\n this.#latestRequest.sortRequest,\n evt.detail.request,\n );\n });\n this.addEventListener('page-requested', async (/** @type any */ e) => {\n await this.load(\n {\n page: e.detail.value,\n size: this.#latestRequest.pageRequest.size,\n },\n this.#latestRequest.sortRequest,\n this.#latestRequest.filterRequest,\n );\n });\n this.addEventListener('sort-requested', async (/** @type any */ e) => {\n const sortRequest = e.detail.value.order ? e.detail.value : null;\n await this.load(this.#latestRequest.pageRequest, sortRequest, this.#latestRequest.filterRequest);\n this.#sorters.forEach((s) => {\n s.order = null;\n });\n e.target.order = e.detail.value.order;\n });\n if (this.hasAttribute('autoload')) {\n //not awaited: the first load must not hold up the upgrade, and a loader that\n //fails or never answers must not keep ftl:ready from firing for the page.\n //load renders its own error state and lets the failure reject, so it is reported\n this.reload();\n }\n }\n\n async reload() {\n return await this.load(\n this.#latestRequest.pageRequest,\n this.#latestRequest.sortRequest,\n this.#latestRequest.filterRequest,\n );\n }\n async load(pageRequest, sortRequest, filterRequest) {\n this.#body.replaceChildren();\n this.#loading.removeAttribute('hidden');\n this.#feedback.setAttribute('hidden', '');\n this.#noAutoload.setAttribute('hidden', '');\n try {\n const pageResponse = await this.#loader.load(pageRequest, sortRequest, filterRequest);\n this.#latestRequest = { pageRequest, sortRequest, filterRequest };\n this.#update(pageRequest, sortRequest, filterRequest, pageResponse);\n } catch (/** @type any */ error) {\n this.#loading.setAttribute('hidden', '');\n this.#feedback.removeAttribute('hidden');\n if (!error.problems) {\n this.#feedback.querySelector('[data-ref=feedback-error]').textContent = error;\n } else {\n this.#feedback.querySelector('[data-ref=feedback-error]').textContent = error.problems.map(\n (p) => `${p.reason}`,\n );\n }\n throw error;\n }\n }\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n async resetWithFilter(filterRequest) {\n return await this.load(\n {\n page: 0,\n size: this.#latestRequest.pageRequest.size,\n },\n this.#latestRequest.sortRequest,\n filterRequest,\n );\n }\n #update(pageRequest, sortRequest, filterRequest, pageResponse) {\n this.#loading.setAttribute('hidden', '');\n this.#body.replaceChildren(\n this.template('row')\n .withOverlay({\n schema: this.#schema,\n pageRequest,\n filterRequest,\n pageResponse,\n })\n .render(),\n );\n this.#paginator.current = pageRequest.page;\n this.#paginator.total = Math.ceil(pageResponse.size / pageRequest.size);\n }\n}\n\nexport { TableLoader, SortButton, Table, TableSchemaParser, Pagination };\n","import { Attributes } from '../../ftl/index.mjs';\nimport { Instant } from './temporals.mjs';\nimport { Input } from './input.mjs';\n\nclass InstantFilter extends Input {\n static observed = ['value:json', 'readonly:presence', 'required:presence', 'placeholder'];\n static template = `\n <div class=\"form-label\">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </div>\n <div class=\"input-group\">\n <span data-tpl-if=\"slots.ibefore\" class=\"input-group-text\">{{{{ slots.ibefore }}}}</span>\n {{{{ slots.before }}}}\n <button data-ref=\"operator\" class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\" value=\"LTE\" form=\"\">≼</button>\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" role=\"button\" value=\"EQ\">=</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"NEQ\">≠</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LT\">≺</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GT\">≻</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LTE\">≼</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GTE\">≽</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"BETWEEN\">↔</a></li>\n </ul>\n <input data-ref=\"value1\" type=\"datetime-local\" class=\"form-control\" form=\"\">\n <input data-ref=\"value2\" type=\"datetime-local\" class=\"form-control\" form=\"\" hidden>\n {{{{ slots.after }}}}\n <span data-tpl-if=\"slots.iafter\" class=\"input-group-text\">{{{{ slots.iafter }}}}</span>\n </div>\n <ful-field-error></ful-field-error>\n `;\n #operator;\n #value1;\n #value2;\n render(conf) {\n super.render({ ...conf, skipObservedSetup: true });\n this.#operator = this.querySelector('[data-ref=operator]');\n this.#value1 = this.querySelector('[data-ref=value1]');\n this.#value2 = this.querySelector('[data-ref=value2]');\n //Input.render only re-dispatches changes coming from the first operand\n this.#value2.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this.#notifyChange();\n });\n\n this.disabled = conf.disabled;\n this.readonly = conf.observed.readonly;\n this.required = conf.observed.required;\n this.placeholder = conf.observed.placeholder;\n this.value = conf.observed.value;\n\n this.addEventListener('click', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n if (!target.matches('ul > li > a')) {\n return;\n }\n const btn = /** @type HTMLButtonElement */ (target.closest('ul')?.previousElementSibling);\n const value = /** @type String */ (target.getAttribute('value'));\n const previous = btn.getAttribute('value');\n Attributes.toggle(this.#value2, 'hidden', value !== 'BETWEEN');\n btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\n if (previous !== value) {\n this.#notifyChange();\n }\n });\n }\n\n get value() {\n const operator = this.#operator.getAttribute('value');\n const values = operator === 'BETWEEN' ? [this.#value1.value, this.#value2.value] : [this.#value1.value];\n return values.some((v) => v === '') ? undefined : [operator, ...values.map((v) => new Date(v).toISOString())];\n }\n set value(v) {\n if (v == null) {\n this.#value1.value = '';\n this.#value2.value = '';\n return;\n }\n const [operator, ...values] = v;\n this.#showOperator(operator);\n this.#value1.value = values[0] ? Instant.isoToLocal(values[0]) : values[0];\n this.#value2.value = values[1] ? Instant.isoToLocal(values[1]) : values[1];\n }\n #showOperator(operator) {\n this.#operator.setAttribute('value', operator);\n const items = Array.from(this.#operator.nextElementSibling?.querySelectorAll('li > a[value]') ?? []);\n const item = items.find((a) => a.getAttribute('value') === operator);\n if (item) {\n this.#operator.innerHTML = item.innerHTML;\n }\n Attributes.toggle(this.#value2, 'hidden', operator !== 'BETWEEN');\n }\n #notifyChange() {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value,\n },\n }),\n );\n }\n get readonly() {\n return super.readonly;\n }\n set readonly(v) {\n this.#value2.readOnly = v;\n super.readonly = v;\n }\n get disabled() {\n return super.disabled;\n }\n set disabled(d) {\n Attributes.toggle(this.#value2, 'disabled', d);\n super.disabled = d;\n }\n}\n\nclass LocalDateFilter extends Input {\n static observed = ['value:json', 'readonly:presence', 'required:presence', 'placeholder'];\n static template = `\n <div class=\"form-label\">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </div>\n <div class=\"input-group\">\n <span data-tpl-if=\"slots.ibefore\" class=\"input-group-text\">{{{{ slots.ibefore }}}}</span>\n {{{{ slots.before }}}}\n <button data-ref=\"operator\" class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\" value=\"EQ\" form=\"\">=</button>\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" role=\"button\" value=\"EQ\">=</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"NEQ\">≠</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LT\">≺</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GT\">≻</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LTE\">≼</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GTE\">≽</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"BETWEEN\">↔</a></li>\n </ul>\n <input data-ref=\"value1\" type=\"date\" class=\"form-control\" form=\"\">\n <input data-ref=\"value2\" type=\"date\" class=\"form-control\" form=\"\" hidden>\n {{{{ slots.after }}}}\n <span data-tpl-if=\"slots.iafter\" class=\"input-group-text\">{{{{ slots.iafter }}}}</span>\n </div>\n <ful-field-error></ful-field-error>\n `;\n #operator;\n #value1;\n #value2;\n render(conf) {\n super.render({ ...conf, skipObservedSetup: true });\n\n this.#operator = this.querySelector('[data-ref=operator]');\n this.#value1 = this.querySelector('[data-ref=value1]');\n this.#value2 = this.querySelector('[data-ref=value2]');\n //Input.render only re-dispatches changes coming from the first operand\n this.#value2.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this.#notifyChange();\n });\n\n this.disabled = conf.disabled;\n this.readonly = conf.observed.readonly;\n this.required = conf.observed.required;\n this.placeholder = conf.observed.placeholder;\n this.value = conf.observed.value;\n\n this.addEventListener('click', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n if (!target.matches('ul > li > a')) {\n return;\n }\n const btn = /** @type HTMLButtonElement */ (target.closest('ul')?.previousElementSibling);\n const value = /** @type String */ (target.getAttribute('value'));\n const previous = btn.getAttribute('value');\n Attributes.toggle(this.#value2, 'hidden', value !== 'BETWEEN');\n btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\n if (previous !== value) {\n this.#notifyChange();\n }\n });\n }\n get value() {\n const operator = this.#operator.getAttribute('value');\n const values = operator === 'BETWEEN' ? [this.#value1.value, this.#value2.value] : [this.#value1.value];\n return values.some((v) => v === '') ? undefined : [operator, ...values];\n }\n set value(v) {\n if (v == null) {\n this.#value1.value = '';\n this.#value2.value = '';\n return;\n }\n const [operator, ...values] = v;\n this.#showOperator(operator);\n this.#value1.value = values[0];\n this.#value2.value = values[1];\n }\n #showOperator(operator) {\n this.#operator.setAttribute('value', operator);\n const items = Array.from(this.#operator.nextElementSibling?.querySelectorAll('li > a[value]') ?? []);\n const item = items.find((a) => a.getAttribute('value') === operator);\n if (item) {\n this.#operator.innerHTML = item.innerHTML;\n }\n Attributes.toggle(this.#value2, 'hidden', operator !== 'BETWEEN');\n }\n #notifyChange() {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value,\n },\n }),\n );\n }\n get readonly() {\n return super.readonly;\n }\n set readonly(v) {\n this.#value2.readOnly = v;\n super.readonly = v;\n }\n get disabled() {\n return super.disabled;\n }\n set disabled(d) {\n Attributes.toggle(this.#value2, 'disabled', d);\n super.disabled = d;\n }\n}\n\nclass TextFilter extends Input {\n static observed = ['value:json', 'readonly:presence', 'required:presence', 'placeholder'];\n static template = `\n <div class=\"form-label\">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </div>\n <div class=\"input-group\">\n <span data-tpl-if=\"slots.ibefore\" class=\"input-group-text\">{{{{ slots.ibefore }}}}</span>\n {{{{ slots.before }}}}\n <button data-ref=\"operator\" class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\" value=\"CONTAINS\" form=\"\">…a…</button>\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" role=\"button\" value=\"CONTAINS\">…a…</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"STARTS_WITH\">a…</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"ENDS_WITH\">…a</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"EQ\">=</a></li>\n </ul>\n <input data-ref=\"value\" type=\"text\" class=\"form-control\" form=\"\">\n {{{{ slots.after }}}}\n <span data-tpl-if=\"slots.iafter\" class=\"input-group-text\">{{{{ slots.iafter }}}}</span>\n </div>\n <ful-field-error></ful-field-error>\n `;\n #operator;\n #value;\n //the sensitivity has no control of its own: it is carried through from whoever set the value\n #sensitivity = 'IGNORE_CASE';\n render(conf) {\n super.render({ ...conf, skipObservedSetup: true });\n\n this.#operator = this.querySelector('[data-ref=operator]');\n this.#value = this.querySelector('[data-ref=value]');\n\n this.disabled = conf.disabled;\n this.readonly = conf.observed.readonly;\n this.required = conf.observed.required;\n this.placeholder = conf.observed.placeholder;\n this.value = conf.observed.value;\n\n this.addEventListener('click', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n if (!target.matches('ul > li > a')) {\n return;\n }\n const btn = /** @type HTMLButtonElement */ (target.closest('ul')?.previousElementSibling);\n const value = /** @type String */ (target.getAttribute('value'));\n const previous = btn.getAttribute('value');\n btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\n if (previous !== value) {\n this.#notifyChange();\n }\n });\n }\n get value() {\n const operator = this.#operator.getAttribute('value');\n return this.#value.value === '' ? undefined : [operator, this.#sensitivity, this.#value.value];\n }\n set value(v) {\n if (v == null) {\n this.#value.value = '';\n return;\n }\n const [operator, sensitivity, value] = v;\n this.#showOperator(operator);\n this.#sensitivity = sensitivity ?? 'IGNORE_CASE';\n this.#value.value = value;\n }\n #showOperator(operator) {\n this.#operator.setAttribute('value', operator);\n const items = Array.from(this.#operator.nextElementSibling?.querySelectorAll('li > a[value]') ?? []);\n const item = items.find((a) => a.getAttribute('value') === operator);\n if (item) {\n this.#operator.innerHTML = item.innerHTML;\n }\n }\n #notifyChange() {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value,\n },\n }),\n );\n }\n}\n\nexport { InstantFilter, LocalDateFilter, TextFilter };\n","class LocalizationModule {\n static t(k, ...args) {\n //@ts-expect-error l10n and language come from the element class and the data stack\n const format = this.l10n?.[this.language]?.[k] ?? this.l10n?.en?.[k] ?? k;\n if (args.length === 0) {\n return format;\n }\n return format.replace(/{(\\d+)}/g, (m, is) => {\n return args[Number(is)];\n });\n }\n static tl(k, args = []) {\n return LocalizationModule.t.apply(this, [k, ...args]);\n }\n}\n\nexport { LocalizationModule };\n","import { HttpClient } from '../../httpc/index.mjs';\nimport { Checkbox } from './checkbox.mjs';\nimport { LocalDate, Instant, InputLocalDate, InputLocalTime, InputInstant } from './temporals.mjs';\nimport { InstantFilter, LocalDateFilter, TextFilter } from './filters.mjs';\nimport { FormLoader, Form } from './form.mjs';\nimport { Input } from './input.mjs';\nimport { InputFile } from './files.mjs';\nimport { RadioGroup } from './radio.mjs';\nimport { SelectLoader, Dropdown, Select } from './select.mjs';\nimport { Spinner } from './spinner.mjs';\nimport { TableLoader, Table, Pagination, SortButton } from './table.mjs';\nimport { LocalizationModule } from './l10n.mjs';\n\nclass Plugin {\n configure(registry) {\n const httpClient = HttpClient.builder().withCsrfToken().withRedirectOnUnauthorized('/').build();\n registry\n .defineModule('l10n', LocalizationModule)\n .defineComponent('http-client', httpClient)\n .defineElement('ful-spinner', Spinner)\n .defineElement('ful-form', Form)\n .defineElement('ful-checkbox', Checkbox)\n .defineElement('ful-input', Input)\n .defineElement('ful-input-file', InputFile)\n .defineElement('ful-local-date', LocalDate)\n .defineElement('ful-instant', Instant)\n .defineElement('ful-input-local-date', InputLocalDate)\n .defineElement('ful-input-local-time', InputLocalTime)\n .defineElement('ful-input-instant', InputInstant)\n .defineElement('ful-radio-group', RadioGroup)\n .defineElement('ful-table', Table)\n .defineElement('ful-pagination', Pagination)\n .defineElement('ful-sorter', SortButton)\n .defineElement('ful-filter-instant', InstantFilter)\n .defineElement('ful-filter-local-date', LocalDateFilter)\n .defineElement('ful-filter-text', TextFilter)\n .defineElement('ful-select', Select)\n .defineElement('ful-dropdown', Dropdown)\n .defineComponent('loaders:select', SelectLoader)\n .defineComponent('loaders:form', FormLoader)\n .defineComponent('loaders:table', TableLoader)\n .defineOverlay({\n language: navigator?.language?.split('-')?.[0] ?? 'en',\n });\n }\n}\n\nexport { Plugin };\n","import * as ftl from './ftl/index.mjs';\nimport * as httpc from './httpc/index.mjs';\nimport * as ful from './ful/index.mjs';\n\nif (typeof window !== 'undefined') {\n // biome-ignore-start lint/complexity/useLiteralKeys: checkJs rejects unknown properties on Window\n window['ftl'] = ftl;\n window['httpc'] = httpc;\n window['ful'] = ful;\n // biome-ignore-end lint/complexity/useLiteralKeys: checkJs rejects unknown properties on Window\n}\n\nexport * from './ftl/index.mjs';\nexport * from './httpc/index.mjs';\nexport * from './ful/index.mjs';\n"],"names":["nodes","ter","Symbol","elv","nullc","or","and","eq","cmp","not","access","member","subscript","method","call","tstring","literal","array","dict","function","symbol","templated","ten","teh","tet","tel","dom","t","h","n","peg$f4","c","peg$f12","head","op","rhs","peg$f14","peg$f32","TemplatedRoot","s0","s1","peg$parseTemplatedExpression","peg$FAILED","push","TemplatedExpression","peg$currPos","value","s2","input","substr","peg$c1","peg$silentFails","peg$fail","peg$e0","peg$parseBeginNode","s3","peg$parseExpressionRoot","s4","peg$c2","peg$e1","peg$parseEndNode","type","peg$c3","peg$e2","peg$parseBeginHtml","peg$c4","peg$e3","peg$parseEndHtml","peg$f1","peg$c5","peg$e4","peg$parseBeginText","peg$c6","peg$e5","peg$parseEndText","peg$f2","parts","charAt","peg$r0","test","peg$e6","substring","charCodeAt","peg$c7","peg$e7","length","peg$e8","peg$c9","peg$e9","s5","undefined","join","peg$parseTemplatedText","peg$f3","ExpressionRoot","peg$parse_","r","peg$parseTernaryExpression","TernaryExpression","cond","peg$parseElvisExpression","peg$c13","peg$e10","ifTrue","s7","peg$c15","peg$e11","ifFalse","s9","ElvisExpression","peg$parseNullCoalescingExpression","peg$c17","peg$e12","NullCoalescingExpression","lhs","peg$parseOrExpression","peg$c19","peg$e13","OrExpression","peg$parseAndExpression","tail","peg$c22","peg$e14","result","peg$f10","AndExpression","peg$parseEqExpression","peg$c24","peg$e15","peg$f11","EqExpression","peg$parseRelExpression","peg$parseEqualityOp","element","peg$f13","RelExpression","peg$parseNotExpression","peg$parseRelationalOp","peg$f15","NotExpression","peg$c26","peg$e16","expr","peg$parseGroupingExpression","peg$parseAccessExpression","peg$parseAccess","AccessExpression","peg$c28","peg$e18","peg$c29","peg$e19","peg$parseSymbol","ns","peg$e17","peg$parseAccessMember","peg$c30","peg$e21","s6","peg$c31","peg$e22","peg$e20","peg$parseAccessSubscript","peg$c32","peg$e24","peg$c34","peg$e25","peg$c36","peg$e26","args","peg$e23","peg$parseAccessMethodCall","GroupingExpression","e","fn","peg$c49","peg$e51","module","peg$r5","peg$e52","peg$r6","peg$e53","v","peg$e50","peg$parseModuleFunction","peg$f22","peg$e27","peg$parseModuleFunctionCall","peg$c43","peg$e36","peg$r1","peg$e37","s8","parseFloat","peg$e35","peg$parseNumberLiteral","peg$c39","peg$e29","peg$c40","peg$e30","peg$e28","peg$parseBooleanLiteral","peg$c41","peg$e32","peg$e31","peg$parseNullLiteral","peg$c42","peg$e34","peg$e33","peg$parseUndefinedLiteral","peg$parseStringLiteral","peg$f35","peg$e48","peg$parseArrayLiteral","s11","s13","peg$c47","peg$e45","apply","peg$e49","peg$parseDictLiteral","peg$parseAnyLiteral","StringLiteral","peg$c44","peg$e39","peg$r2","peg$e40","peg$c45","peg$e41","peg$r3","peg$e42","peg$f29","peg$c46","peg$e43","peg$parseTemplateStringExpression","peg$parseTemplateStringLiteral","peg$e38","TemplateStringExpression","peg$e44","TemplateStringLiteral","peg$r4","peg$e47","char","peg$e46","s","peg$e54","EqualityOp","peg$c53","peg$e55","peg$c54","peg$e56","RelationalOp","peg$c55","peg$e57","peg$c56","peg$e58","peg$c57","peg$e59","peg$c58","peg$e60","_","peg$r7","peg$e61","EvaluatingVisitor","modules","dataStack","constructor","this","resolve","prop","i","overlay","cached_resolve_proxy","resolve_proxy","Proxy","get","target","node","visit","Error","fnRef","map","arg","len","evaluated","Object","fromEntries","entry","prev","cur","visitRoot","ast","toString","Expressions","static","Map","parse","expression","mode","key","astCache","has","size","MAX_CACHE_SIZE","oldestKey","keys","next","delete","set","startRule","MODE_TEMPLATED","evaluate","interpret","ExpressionEvaluator","withModule","name","withOverlay","data","evaluateExpression","MODE_EXPRESSION","evaluateTemplated","Fragments","fromHtml","html","el","document","createElement","innerHTML","trim","adoptNode","content","toHtml","fragment","appendChild","isBlank","childElementCount","textContent","from","DocumentFragment","fromChildNodes","firstChild","Attributes","uid","prefix","id","defaultValue","k","hasAttribute","setAttribute","getAttribute","forward","to","getAttributeNames","filter","a","startsWith","forEach","classes","split","classList","add","toggle","attr","removeAttribute","flip","LightSlots","namedSlots","Array","children","matches","remove","slot","slotFromNode","slots","default","append","childNodes","HTMLTemplateElement","HTMLScriptElement","Nodes","isParsed","parentNode","nextSibling","waitParsed","ownerDocument","readyState","Promise","ac","AbortController","clearAndQueue","abort","observer","disconnect","addEventListener","signal","MutationObserver","parent","observe","childList","queryChildren","selector","queryChildrenAll","NodeOperations","forRemoval","Set","removed","replaceChildren","dataset","popData","prepend","ref","insertBefore","replace","cleanup","clear","CommandsHandler","tplIf","ops","tplWith","varName","newNode","Template","render","tplEach","template","iterator","tplWhen","tplVerbatim","cloneNode","tplRemove","toLowerCase","tplText","text","tplHtml","tplClassAppend","cleanClasses","isArray","flatMap","Boolean","tplAttrAppend","attributesAndValues","textNode","createTextNode","attributeCache","toAttr","dataSetKey","cached","fromSelector","templateEl","querySelector","fromTemplate","fromFragment","withContext","withContextFrom","registry","context","withFragment","withModules","withData","evaluator","imported","importNode","nodeType","Node","DOCUMENT_FRAGMENT_NODE","d","createNodeIterator","NodeFilter","SHOW_ELEMENT","SHOW_TEXT","NODE_FILTER","nextNode","TEXT_NODE","nodeValue","ex","RenderError","command","ORDERED_COMMANDS","attributeName","renderTo","appendTo","renderToSelector","appendToSelector","includes","FILTER_ACCEPT","FILTER_REJECT","attributes","FILTER_SKIP","message","nodeOrFragment","cause","super","stringify","child","removeChild","ELEMENT_NODE","UpgradeQueue","q","async","settle","dispatchEvent","CustomEvent","bubbles","cancelable","finished","enqueue","promise","markFinished","withResolvers","then","upgrade","finally","all","values","entries","Registry","tagToClass","configured","mappers","string","unmarshal","str","marshal","String","number","Number","presence","bool","json","JSON","csv","csvm","components","upgradeQueue","defineElement","tag","klass","augmentAndDefineElement","observed","templates","observedNames","attrToMapper","reduce","acc","maybeType","namesAndTemplates","assign","nameToTemplate","BITS","SLOTS","OBSERVED","ATTR_TO_MAPPER","TEMPLATES","customElements","define","defineModule","defineModules","ms","defineComponent","defineData","defineOverlay","defineMapper","plugin","p","configure","upgrades","component","Templates","accept","pending","Rendering","waitFor","contains","waitForChildren","ParsedElement","HTMLElement","observedAttributes","parsed","reflecting","bits","connectedCallback","attributeChangedCallback","oldValue","newValue","disabledBeforeParsed","formDisabledCallback","disabled","Reflect","unclaimFormDisabled","closest","attribute","reflect","reflectTo","Failure","problems","dropping","dropProblemsContext","reason","details","Base64","encode","arrayBuffer","dialect","URL_SAFE","byteLength","view","Uint8Array","res","decode","nbytes","Math","floor","vi","si","v1","indexOf","v2","v3","v4","buffer","STANDARD","Hex","hex","lenInBytes","offset","octet","parseInt","bytes","upper","b","toUpperCase","o","padStart","MediaType","subtype","normalized","ptype","psubtype","HttpClientError","status","of","fromResponse","response","headers","statusText","title","detail","CsrfTokenInterceptor","intercept","url","request","chain","proceed","RedirectOnUnauthorizedInterceptor","redirectUri","window","location","href","HttpClientBuilder","interceptors","withCsrfToken","withRedirectOnUnauthorized","withInterceptors","build","HttpClient","HttpCall","fetch","HttpInterceptorChain","current","interceptor","builder","exchange","uri","options","is","URL","Request","HttpRequestBuilder","create","post","put","patch","rawEntries","source","URLSearchParams","client","params","body","baseUri","queryString","Headers","hs","header","ps","param","vs","multipart","callback","formData","FormData","HttpMultipartRequestCustomizer","kvs","option","opts","ok","fetchText","fetchJson","fetchBlob","fetchArrayBuffer","field","blob","filename","blobs","Blob","LocalStorage","Storage","save","localStorage","setItem","load","got","getItem","removeItem","pop","decoded","SessionStorage","sessionStorage","VersionedLocalStorage","revision","stored","VersionedSessionStorage","AsyncEvents","fireAsync","evt","promises","asyncOn","listener","event","ae","reject","asyncOff","removeEventListener","mixInto","prototype","Timing","sleep","setTimeout","debounce","timeoutMs","func","DEBOUNCE_DEFAULT","tid","previousTimestamp","later","elapsed","performance","now","DEBOUNCE_IMMEDIATE","called","clearTimeout","throttle","THROTTLE_DEFAULT","THROTTLE_NO_LEADING","remaining","THROTTLE_NO_TRAILING","Bindings","flatten","obj","stops","pre","providePath","path","previous","ckey","pkey","isInteger","extract","checked","fulBindType","tagName","extractFrom","form","submitter","elements","mutate","raw","mutateIn","names","flattenedKey","querySelectorAll","CSS","escape","errors","es","scrollOnError","fieldErrors","globalErrors","setCustomValidity","slice","suffix","innerText","sort","getBoundingClientRect","y","focus","RemoteJsonFormLoader","http","requestMapper","responseMapper","prepare","submit","transform","LocalFormLoader","FormLoader","conf","Form","preventDefault","stopPropagation","spinner","loader","se","sre","mapped","exception","console","warn","reset","spinning","spin","max","hidden","hel","wd","Input","_input","_fieldError","internals","attachInternals","role","_type","_fragment","skipObservedSetup","find","requestSubmit","mask","strip","RegExp","before","after","start","selectionStart","caret","setSelectionRange","label","ariaDescribedByElements","ariaLabelledByElements","readonly","required","placeholder","uppercase","uppercased","trimmed","readOnly","error","setValidity","customError","formResetCallback","LocalDate","locale","Intl","DateTimeFormat","resolvedOptions","formatter","year","month","day","m","format","Date","Instant","hour","minute","second","hour12","isoToLocal","iso","pad","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","InputLocalDate","step","min","fromIsoOrOffset","formatLocalDate","date","getTime","getTimezoneOffset","toISOString","match","exec","sign","setHours","setDate","originalDay","setMonth","setFullYear","InputLocalTime","fromNowOrOffset","resolved","setMinutes","snapped","stepSeconds","seconds","hh","mm","InputInstant","InputFile","en","dropzonelabel","unacceptablefiletype","maxfilesizeexceeded","maxtotalsizeexceeded","maxfilesexceeded","it","fr","items","dropzone","warnings","warning","multiple","itemlist","maxfiles","maxfilesize","maxtotalsize","idx","dt","DataTransfer","files","f","click","dropped","dataTransfer","kind","getAsFile","update","formatByteSize","round","ensureAcceptable","ensureFileSizes","ensureTotalSize","ensureFilesCount","unacceptable","file","some","endsWith","oversized","totalsize","useItemlist","useDropzone","RemoteLoader","prefetch","ensureFetched","exact","needle","reconfigureUrl","revisionedData","storageKey","PartialRemoteLoader","InMemoryLoader","SelectLoader","responseMapperFrom","row","Dropdown","menu","optionstemplate","li","change","hide","selected","firstElementChild","acceptSelection","metadata","index","shown","show","moveOrShow","candidate","scrollIntoView","block","behavior","Select","badges","ddmenu","fieldError","token","dload","abortdload","changed","syncBadges","relatedTarget","code","selectionEnd","withLoader","candidates","selection","RadioGroup","fieldset","firstRadio","booleanType","radioEls","inputsAndLabels","inert","Checkbox","container","isSwitch","Spinner","SortButton","order","sorter","orders","nextOrder","Pagination","showing","navigation","prevIcon","nextIcon","reloadIcon","total","page","maxRender","hasPrev","hasNext","enabled","curr","rendered","first","pages","TableSchemaParser","schema","headersTr","rowsTr","columns","column","maybeTitleTag","titleNode","wrappedTitleNode","fulSorter","th","td","headersTemplate","inHeaders","inRows","rowsTemplate","InMemoryTableLoader","pageRequest","sortRequest","filterRequest","begin","end","RemoteTableLoader","filters","TableLoader","Table","initial","nodata","searchIcon","loading","noAutoload","feedback","paginator","sorters","latestRequest","table","thead","maybeForm","reload","pageResponse","resetWithFilter","ceil","InstantFilter","operator","value1","value2","notifyChange","btn","previousElementSibling","showOperator","item","nextElementSibling","LocalDateFilter","TextFilter","sensitivity","LocalizationModule","l10n","language","tl","Plugin","httpClient","navigator","ftl","httpc","ful"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fml.min.mjs","sources":["../src/index.mjs"],"sourcesContent":["import * as ftl from './ftl/index.mjs';\nimport * as httpc from './httpc/index.mjs';\nimport * as ful from './ful/index.mjs';\n\nif (typeof window !== 'undefined') {\n // biome-ignore-start lint/complexity/useLiteralKeys: checkJs rejects unknown properties on Window\n window['ftl'] = ftl;\n window['httpc'] = httpc;\n window['ful'] = ful;\n // biome-ignore-end lint/complexity/useLiteralKeys: checkJs rejects unknown properties on Window\n}\n\nexport * from './ftl/index.mjs';\nexport * from './httpc/index.mjs';\nexport * from './ful/index.mjs';\n"],"names":["window","ftl","httpc","ful"],"mappings":"qLAIsB,oBAAXA,SAEPA,OAAY,IAAIC,EAChBD,OAAc,MAAIE,EAClBF,OAAY,IAAIG"}
|