@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/ful.iife.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ful.iife.js","sources":["../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"],"sourcesContent":["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"],"names":["registry","ParsedElement","Attributes","Failure","Fragments","Templates","Nodes","Rendering","HttpClient"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ful.iife.js","sources":["../src/ful/storage.mjs","../src/ful/events/async.mjs","../src/ful/claims.mjs","../src/ful/timing.mjs","../src/ful/forms/bindings.mjs","../src/ful/forms/field.mjs","../src/ful/forms/form.mjs","../src/ful/forms/input.mjs","../src/ful/forms/temporals.mjs","../src/ful/forms/files.mjs","../src/ful/disclosures/anchors.mjs","../src/ful/forms/select.mjs","../src/ful/forms/radio.mjs","../src/ful/forms/checkbox.mjs","../src/ful/navigation/table.mjs","../src/ful/forms/choice-button.mjs","../src/ful/forms/filters.mjs","../src/ful/events/sections.mjs","../src/ful/disclosures/targets.mjs","../src/ful/disclosures/info.mjs","../src/ful/disclosures/drawer.mjs","../src/ful/disclosures/toast.mjs","../src/ful/navigation/tabs.mjs","../src/ful/disclosures/accordion.mjs","../src/ful/navigation/wizard.mjs","../src/ful/l10n/en.mjs","../src/ful/l10n/it.mjs","../src/ful/l10n/es.mjs","../src/ful/l10n/fr.mjs","../src/ful/plugin.mjs"],"sourcesContent":["/**\n * Builds a json-encoding wrapper over one of the page's storages. The backing\n * is deferred (an accessor, not the storage itself): where storage is denied\n * (blocked cookies, some embedded or private contexts) the accessor itself\n * throws, and must do so per call, never at module load. The methods are bound\n * to nothing: destructuring keeps them working.\n * @param {() => globalThis.Storage} backing\n */\nconst storage = (backing) => {\n const remove = (k) => {\n try {\n backing().removeItem(k);\n } catch {\n //nothing to remove where storage is unreachable\n }\n };\n const load = (k) => {\n let got;\n try {\n got = backing().getItem(k);\n } catch {\n //storage can be unreachable altogether (blocked cookies, embedded or\n //private contexts): a read that cannot reach it is a miss, not a failure\n return undefined;\n }\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 remove(k);\n return undefined;\n }\n };\n const save = (k, v) => {\n backing().setItem(k, JSON.stringify(v));\n };\n const pop = (k) => {\n const decoded = load(k);\n remove(k);\n return decoded;\n };\n return { save, load, remove, pop };\n};\n\n/**\n * Builds a revision-guarded view over a storage wrapper: a load under a\n * revision other than the stored one is a miss that also evicts the entry.\n * @param {ReturnType<typeof storage>} store\n */\nconst versioned = (store) => ({\n save(key, revision, data) {\n store.save(key, { revision, data });\n },\n load(key, revision) {\n const stored = store.load(key);\n if (stored == null || typeof stored !== 'object' || stored.revision !== revision) {\n store.remove(key);\n return undefined;\n }\n return stored.data;\n },\n});\n\nconst LocalStorage = storage(() => localStorage);\nconst SessionStorage = storage(() => sessionStorage);\nconst VersionedLocalStorage = versioned(LocalStorage);\nconst VersionedSessionStorage = versioned(SessionStorage);\n\nexport { LocalStorage, VersionedLocalStorage, SessionStorage, VersionedSessionStorage };\n","/**\n * @typedef {Object} AsyncExtension\n * @property {Promise<any>[]} promises\n * @typedef {Event & { async?: AsyncExtension }} AsyncEvent\n */\n/**\n * Dispatching an event and waiting for what its listeners answer. A listener\n * registered through `asyncOn` attaches its promise to the event, and\n * `fireAsync` resolves once they have all settled: `broadcast` collects every\n * answer, `pipeline` allows at most one, `delegate` requires exactly one.\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) || (mode === 'delegate' && promises.length !== 1)) {\n //the listeners ran under a broken configuration: nothing legitimately\n //awaits their outcome, and their failures are not page errors\n Promise.all(promises).catch(() => {});\n throw new Error(\n mode === 'pipeline'\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 : `[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 * 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","/**\n * @typedef {{ readonly stale: boolean }} Claim\n */\n/**\n * The generations of claims over one contended resource. Every take() starts a\n * new generation, superseding every claim before it, and a holder asks its\n * claim `stale` before painting chrome, storing state or throwing towards a\n * caller: a superseded outcome owns nothing. hold() joins the current\n * generation without superseding it (a fetch that any later reconfiguration\n * must detach), and invalidate() supersedes without claiming (a hide ending\n * every pending show). One Claims per contended resource: a component whose\n * dropdown, value labels and loader configuration contend separately holds one\n * each.\n */\nclass Claims {\n #generation = 0;\n /**\n * Starts a new generation, superseding every earlier claim, and holds it.\n * @returns {Claim}\n */\n take() {\n ++this.#generation;\n return this.hold();\n }\n /**\n * Holds the current generation without superseding anything.\n * @returns {Claim}\n */\n hold() {\n const held = this.#generation;\n const claims = this;\n return {\n /** true once a later take() or invalidate() superseded this claim */\n get stale() {\n return held !== claims.#generation;\n },\n };\n }\n /** Supersedes every claim without holding a new one. */\n invalidate() {\n ++this.#generation;\n }\n}\n\nexport { Claims };\n","/**\n * Sleeping, debouncing and throttling. Debounce and throttle both return the\n * wrapped function together with a cancel function.\n */\nclass Timing {\n /** Resolves after the given milliseconds. @param {number} ms */\n static sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n /**\n * Executes only after a period of inactivity (pause in events).\n * Respond to the \"end\" of a series of events.\n * @param {number} timeoutMs\n * @param {function} func\n * @param {{ immediate?: boolean }} [options] - immediate fires on the leading edge instead of the trailing one\n * @returns {[function, function]}\n */\n static debounce(timeoutMs, func, options) {\n const immediate = options?.immediate ?? false;\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 (!immediate) {\n func(...args);\n }\n //func may have called debounced again, arming a new timer with new args:\n //clearing them then would drop the call that is now pending\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 (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 /**\n * Executes at most once per specified time interval, regardless of ongoing events.\n * @param {number} timeoutMs\n * @param {function} func\n * @param {{ leading?: boolean, trailing?: boolean }} [options] - which edges of the interval call, both by default\n * @returns {[function, function]}\n */\n static throttle(timeoutMs, func, options) {\n const leading = options?.leading ?? true;\n const trailing = options?.trailing ?? true;\n let tid = /** @type {number | null} */ (null);\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n previousTimestamp = leading ? performance.now() : 0;\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 && !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 && 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","/** Field wiring: extracting and filling values, pinning problems to the fields they name. */\nclass Bindings {\n /**\n * Flattens a nested object into dotted keys, stopping wherever `stops` names\n * a key: a field named `address` takes the whole object, while one named\n * `address.city` takes the leaf.\n * @param {{ [x: string]: any; }} obj\n * @param {string} prefix\n * @param {Set<String>} stops - the names the form actually has fields for\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 * Walking a dotted name would otherwise descend into `Object.prototype`:\n * `__proto__` passes the `typeof === 'object'` test below and becomes the\n * walk's target, so `providePath({}, '__proto__.x', v)` would write on every\n * object in the page. A field name reaching here is author markup, but it can\n * be bound from data through `data-tpl-name` and `providePath` is public, so\n * the segments that can reach the prototype chain are refused outright rather\n * than left to the caller to prove unreachable.\n */\n static #FORBIDDEN = new Set(['__proto__', 'prototype', 'constructor']);\n /**\n * Writes a value into an object at a dotted path, creating the intermediate\n * objects and arrays the path implies. A numeric segment makes an array.\n * @param {any} result\n * @param {string} path - a field name, `a.b` or `a[0].b`\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 for (const key of keys) {\n if (Bindings.#FORBIDDEN.has(/** @type any */ (key))) {\n throw new Error(`unsupported name segment '${key}' in '${path}'`);\n }\n }\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 //an undefined value declares the path without filling it: an entry\n //already there is left alone, a missing one is created null\n current[ckey] = value !== undefined ? value : ckey in current ? current[ckey] : null;\n return result;\n }\n //an overlapping name (a before a.b) leaves a scalar or a null here:\n //the later, more specific name rebuilds the container, exactly as the\n //reverse order always replaced the container with the scalar\n if (typeof current[ckey] !== 'object' || current[ckey] === null) {\n current[ckey] = {};\n }\n previous = current;\n current = current[ckey];\n }\n }\n /**\n * Reads one control's value the way its kind demands: an unchecked radio\n * answers undefined so it contributes nothing, a checkbox answers its\n * checked state, a multiple select answers its selected values, and a blank\n * native control answers null rather than an empty string.\n * @param {Element & {dataset?: any} & {checked?: boolean} & {value?: any}} el\n * @returns {any} the value, or undefined where the control contributes none\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 === 'SELECT' && /** @type {HTMLSelectElement} */ (el).multiple) {\n return Array.from(/** @type {HTMLSelectElement} */ (el).selectedOptions).map((o) => o.value);\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 * Reads every named, enabled control of a form into a nested object, the\n * dotted field names deciding its shape.\n * @param {HTMLFormElement} form\n * @param {HTMLElement} [submitter]\n * @returns\n */\n /**\n * Whether a control is one of a form's buttons, whose name travels only when it\n * is the one that submitted.\n * @param {Element & {type?: string}} el\n */\n static #submits(el) {\n return el.type === 'submit' || el.type === 'reset' || el.type === 'button';\n }\n static extractFrom(form, submitter) {\n let result = {};\n for (const el of form.elements) {\n if (!el.hasAttribute('name')) {\n continue;\n }\n //a form submits the name of the button that submitted it and of no other,\n //which is the platform's own rule. It used to fall out of the spinner\n //having disabled every button by the time the values were read, so the\n //affordance was quietly load-bearing for the payload\n if (Bindings.#submits(el) && el !== submitter) {\n continue;\n }\n //the submitter is exempt from the disabled check: a form holds its buttons\n //off while submitting, and its own submitter still names a value\n if (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 * Writes a value into one control, the inverse of `extract`: a radio is\n * checked when its own value matches, a checkbox takes the value as its\n * checked state, and a multiple select selects the options the list names.\n * @param {Element & {dataset?: any} & {checked?: boolean} & {value?: any}} el\n * @param {any} raw the value as it arrived, coerced per control kind\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 if (el.tagName === 'SELECT' && /** @type {HTMLSelectElement} */ (el).multiple) {\n const values = Array.isArray(raw) ? raw.map(String) : raw == null ? [] : [String(raw)];\n Array.from(/** @type {HTMLSelectElement} */ (el).options).forEach((o) => {\n o.selected = values.includes(o.value);\n });\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 //focus management announces the error of the field it lands on through\n //aria-describedby: a live region on top of that would read everything twice,\n //so the polite announcement exists only when nothing takes the focus\n form.querySelectorAll('ful-field-error').forEach((el) => {\n el.setAttribute('aria-live', scrollOnError ? 'off' : 'polite');\n });\n const pinned = (e) => (e.type === 'FIELD_ERROR' || e.type === 'INVALID_FORMAT') && e.context;\n const fieldErrors = es.filter(pinned);\n const globalErrors = es.filter((e) => !pinned(e));\n form.querySelectorAll(`[name]`).forEach((el) => {\n el.setCustomValidity?.('');\n });\n form.querySelectorAll('ful-errors').forEach((el) => {\n el.setAttribute('role', 'alert');\n el.replaceChildren();\n el.setAttribute('hidden', '');\n });\n const unmatched = [];\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 targets = form.querySelectorAll(`[name='${CSS.escape(prefix)}']`);\n if (targets.length === 0) {\n continue;\n }\n //the most specific name wins: the walk exists so a composite field\n //owning a whole subtree catches its inner contexts, not so an outer\n //field doubles a problem an exact one already shows. The remaining\n //path rides along ('' on an exact match), so a composite can route\n //the problem to the inner control it names\n const context = parts.slice(i).join('.');\n targets.forEach((input) => {\n input.setCustomValidity?.(e.reason, context);\n });\n return;\n }\n //a context naming no field must not vanish: it reads in the banner\n unmatched.push(e);\n });\n const bannered = [...globalErrors, ...unmatched];\n form.querySelectorAll('ful-errors').forEach((el) => {\n const hel = /** @type HTMLElement} */ (el);\n if (bannered.length === 0) {\n hel.innerText = '';\n return;\n }\n //revealed before it is filled: a live region mutated while hidden and\n //shown afterwards is announced unreliably, the change having happened\n //where nothing was watching\n el.removeAttribute('hidden');\n hel.innerText = bannered.map((e) => e.reason).join('\\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 } from '../../ftl/index.mjs';\n\n/**\n * The base of every form-associated ful field: a form-associated custom element\n * carrying the validity protocol, the field error live region, focus\n * delegation, the label chrome and the disabled, readonly and required claims.\n *\n * A subclass owns its template, its value semantics and its change events. It\n * implements `_build(conf)`, which builds its dom and returns the pieces the\n * base drives: the control, the error region, the label, and the optional\n * `claims`, `announces`, `freeze` and `also`. The base does the wiring,\n * the mounting and the application of the declared state. Nothing in the base\n * is there to be called from a subclass's build.\n *\n * The pieces are the contract: the claim setters, the validity protocol and\n * the aria wiring all act on them, so a field with no native control returns a\n * focusable piece of its own chrome as the control. The getters and `focus()`\n * are the only members that tolerate a not-yet-rendered element, where page\n * code may read a claim or ask for the focus before the upgrade; the\n * properties go live only after the render, as ParsedElement documents. The\n * base references no ful vocabulary, only what its subclasses return to it.\n */\nclass Field extends ParsedElement {\n static formAssociated = true;\n /**\n * The claim attributes and the value are observed here so every field,\n * including the custom ones, keeps them live after the upgrade: the\n * attribute is a third way to author a claim, beside the markup and the\n * property,\n * exactly as a native input's. The value defaults to the string mapper and\n * every field with its own vocabulary overrides it (`value:bool`,\n * `value:csv`, `value:json`).\n */\n static observed = ['disabled:presence', 'readonly:presence', 'required:presence', 'value'];\n /** the role the element internals carry, 'presentation' unless the control is its own */\n static ROLE = 'presentation';\n #control;\n #fieldError;\n #claims;\n #announces;\n #also = [];\n constructor() {\n super();\n //the base attached the internals: the platform allows one call per element\n this.internals.role = /** @type {typeof Field} */ (this.constructor).ROLE;\n }\n /** every element the claims mirror onto: the claim target, then the extra controls */\n #mirrors() {\n return [this.#claims ?? this.#control, ...this.#also].filter((el) => el);\n }\n /**\n * Takes what the build produced: keeps the pieces the base drives, wires the\n * aria and the label, and mounts the fragment.\n * @param {{fragment: any, control: any, error?: any, label?: any, described?: any,\n * claims?: any, announces?: any, freeze?: any, also?: any[]}} pieces\n */\n #wire({\n fragment,\n control,\n error,\n label = null,\n described = null,\n claims = null,\n announces = control,\n freeze = null,\n also = [],\n }) {\n this.#control = control;\n this.#fieldError = error;\n this.#claims = claims;\n this.#announces = announces;\n this.#also = also;\n if (freeze) {\n //a field with no usable native readOnly freezes by refusing the\n //gesture, not by inerting its subtree: inert takes the whole thing out\n //of the accessibility tree, so a readonly checkbox, radio group, filter\n //or file list was on screen and unreadable. Capturing, so it lands\n //before the control's own handlers and the platform's activation\n freeze.addEventListener(\n 'click',\n (evt) => {\n if (this.readonly) {\n evt.preventDefault();\n }\n },\n true,\n );\n }\n //the error region describes the control, or the host where there is no\n //single control to describe (a radio group's legend names its fieldset)\n if (error) {\n (described ?? control).ariaDescribedByElements = [error];\n }\n if (label) {\n control.ariaLabelledByElements = [label];\n //a label that does not natively target the control still focuses it\n label.addEventListener('click', () => this.focus());\n }\n //the platform's implicit submission, stood in for where the field's own\n //protocol took it away: the inner controls carry form=\"\", so Enter in one\n //of them reaches no form and the platform submits nothing. Listening on the\n //host rather than the control means every listener the control has already\n //ran, so preventDefault is what it says: a ful-select accepting the\n //highlighted entry has consumed the key and no submit follows\n this.addEventListener('keydown', (evt) => {\n if (evt.key !== 'Enter' || evt.defaultPrevented || evt.isComposing) {\n return;\n }\n const target = /** @type {HTMLInputElement} */ (evt.target);\n //only where the platform cannot: a control still associated with the\n //form, an author's own input in a slot among them, submits on its own\n //and would otherwise submit twice\n if (target.form === this.internals.form || !Field.#submitsOnEnter(target)) {\n return;\n }\n this._requestSubmit();\n });\n this.replaceChildren(fragment);\n }\n /**\n * The platform's own rule for which control Enter submits from, measured on\n * Chromium, Firefox and WebKit: every input but the file picker and the\n * button-shaped ones, the checkbox and the radio included. A textarea takes\n * the newline, a select takes the key for its own list, and a button is\n * activated by it.\n */\n static #submitsOnEnter(el) {\n return el instanceof HTMLInputElement && !['file', 'button', 'submit', 'reset', 'image'].includes(el.type);\n }\n focus(options) {\n this.#control?.focus(options);\n }\n /**\n * Clears or reports one validation problem: the text lands on the field's\n * live region and the state on the element internals, driving `:invalid`\n * styling. Validation is the server's: the submit travels regardless, and\n * the problems come back pinned here. The error mapping pins on the most\n * specific field name a problem's context reaches, handing over the\n * remaining path ('' on an exact match): the base ignores it, a composite\n * field owning a whole subtree overrides to route the problem to the inner\n * control it names.\n * @param {string} [error]\n * @param {string} [context] the path below this field's name, '' when exact\n */\n setCustomValidity(error, context) {\n //the state rides the control the reader focuses, not only the element\n //internals: the host's role is presentation for most fields, so a\n //validity set there announces nothing where the caret actually is\n Attributes.set(this.#announces ?? this.#control, 'aria-invalid', error ? 'true' : null);\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 /** Submits the associated form through its first submitter, as Enter on a native control would. */\n _requestSubmit() {\n const form = this.internals.form;\n if (!form) {\n return;\n }\n const candidates = /** @type {NodeListOf<HTMLButtonElement|HTMLInputElement>} */ (\n form.querySelectorAll('button:not(:disabled), input:not(:disabled)')\n );\n form.requestSubmit([...candidates].find((el) => el.type === 'submit' && el.form === form));\n }\n /**\n * Dispatches the field's change event: bubbling, not cancelable, the value\n * in the detail. Every field announces through this one method, and the detail\n * always carries the field's own `value`, so a listener can rely on\n * `el.value === evt.detail.value` whatever the field is. A field with more to\n * say adds keys beside it; none can replace it.\n * @param {Record<string, any>} [extras]\n */\n _notifyChange(extras = {}) {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { value: this.value, ...extras },\n }),\n );\n }\n /**\n * Whether the field's chrome should answer a gesture. Badges, dropzones,\n * menus and labels are not form controls, so their handlers must ask the\n * effective state: matches(':disabled') covers the fieldset ancestry the\n * disabled property deliberately does not reflect, readonly the field's\n * own claim.\n */\n _interactive() {\n return !this.matches(':disabled') && !this.readonly;\n }\n /**\n * The field's value: every concrete field owns its semantics and overrides\n * this pair. The base pair exists so the form integration (the reset\n * protocol among others) has a member to write through; a custom field\n * forgetting its own keeps the base's inert one.\n * @type {any}\n */\n get value() {\n return undefined;\n }\n set value(v) {}\n /**\n * A reset restores the field's declared value, as a native control's reset\n * restores its markup default: the `value` attribute goes back through the\n * element's own mapper and value setter, so every field resets through its\n * own semantics. A field whose value is not attribute backed overrides this.\n */\n formResetCallback() {\n this.value = this.unmarshal('value', this.getAttribute('value'));\n }\n /**\n * The disabled protocol follows the semantics of a native form control:\n *\n * - the `disabled` attribute on the host is the field's own claim, and nothing\n * but its author ever writes or removes it, in markup or through the\n * property. The framework never claims on the form's behalf, so there is\n * nothing to unclaim and nothing to lose: a field declared disabled inside\n * a disabled `<fieldset>` stays disabled when the fieldset comes back,\n * exactly like a native input keeps its attribute.\n * - the effective state is the claim OR a disabled fieldset ancestry, which\n * the platform maintains on its own: `:disabled` matches both, a disabled\n * field is left out of the submitted values, and the inner native controls\n * are reached by the ancestry as descendants of the fieldset.\n * - the property reflects the claim only, like a native input's: a field\n * disabled by its ancestry reads `false` while `matches(':disabled')`\n * tells the effective state. Un-claiming inside a disabled fieldset\n * cannot enable the field.\n * - the inner controls mirror the claim and nothing else: the ancestry state\n * is never written anywhere, so it can never go stale, and the browser\n * composes the two on its own when it disables and re-enables a fieldset's\n * descendants. Subclass setters call super for the claim, then reach their\n * own controls, which mirror the claim like a native input's would.\n *\n * Because of this, formDisabledCallback carries nothing the framework needs\n * to apply, and the protocol does not define it.\n */\n get disabled() {\n //the claim only, like a native input: the effective state, claim or disabled\n //ancestry, is what :disabled matches\n return this.hasAttribute('disabled');\n }\n set disabled(d) {\n //the claim belongs to the author alone, nothing else ever writes it\n this.reflectTo('disabled', d);\n //the adopted pieces mirror the claim as a native input would: a disabled\n //fieldset ancestry is left to the browser, which reaches them as\n //descendants of the fieldset and re-enables them on its own\n for (const el of this.#mirrors()) {\n el.toggleAttribute('disabled', d);\n }\n }\n /**\n * A field is readonly through its control's native readOnly when it has one:\n * the control stays focusable and its text selectable, only editing is off.\n * Fields whose chrome must freeze too (popovers, buttons, label clicks) name\n * a `freeze` piece instead, whose gestures the base refuses while the claim\n * holds; the claim reflects on the host either way.\n */\n get readonly() {\n //the host attribute is the claim, as it is for disabled: every setter\n //reflects it, so one read answers however the field freezes\n return this.hasAttribute('readonly');\n }\n set readonly(v) {\n for (const el of this.#mirrors()) {\n el.readOnly = v;\n }\n //announced on the element whose role accepts it, not on whatever the\n //claims happen to ride: aria-readonly on a fieldset is dropped as invalid\n if (this.#announces) {\n Attributes.set(this.#announces, 'aria-readonly', v ? 'true' : null);\n }\n this.reflectTo('readonly', v);\n }\n /**\n * A field is required through aria: the claim reflects on the host, the\n * announcement lives on the adopted control.\n */\n get required() {\n //the claim, like disabled and readonly: the host attribute rather than\n //the projection, which a field with no role to announce on never carries\n return this.hasAttribute('required');\n }\n set required(d) {\n if (this.#announces) {\n Attributes.set(this.#announces, 'aria-required', d ? 'true' : null);\n }\n this.reflectTo('required', d);\n }\n /**\n * The field's render is the base's: the subclass builds its dom in `_build`\n * and hands back what it built, the base wiring the pieces, mounting the\n * fragment and applying the declared state. Nothing in the base is there to\n * be called from a subclass's build. `_build` may be async (a select\n * awaiting its prefetch); a field that builds synchronously stays so.\n */\n render(conf) {\n const built = /** @type {any} */ (this._build(conf));\n if (built instanceof Promise) {\n return built.then((pieces) => this.#settle(pieces));\n }\n this.#settle(built);\n return undefined;\n }\n #settle(pieces) {\n this.#wire(pieces);\n }\n /**\n * Builds the field's dom and answers the pieces the base drives. The one\n * method a concrete field implements beside its value pair, and the only\n * place its dom is created; the base does the wiring and the mounting.\n *\n * - `fragment` is mounted on the host\n * - `control` is the focusable target: focus, the aria and, by default, all\n * three claims reach it\n * - `error` is the field's live region\n * - `label`, when given, names the control and focuses it on click\n * - `described` moves the error's description off the control and onto\n * another element, the host where no single control can carry it\n * - `claims` moves the three claims onto a wrapper the field disables as a\n * whole, leaving focus and aria on the control\n * - `announces` is the element whose role carries `aria-readonly` and\n * `aria-required`, the host where the widget role lives there; `null` for a\n * field whose control has no role that accepts them\n * - `freeze` is for a field with no usable native readOnly: the readonly\n * claim refuses the gestures inside it, leaving it focusable and readable\n * - `also` are further controls mirroring disabled and readOnly beside the\n * first\n *\n * A subclass extending another field's build spreads the pieces it answered\n * and overrides the keys it owns.\n * @param {{slots: any}} conf\n * @returns {any}\n */\n _build(conf) {\n throw new Error(`${this.constructor.name} must implement _build`);\n }\n}\n\nexport { Field };\n","import { Attributes, Localization, ParsedElement } from '../../ftl/index.mjs';\nimport { Failure } from '../../httpc/index.mjs';\nimport { Bindings } from './bindings.mjs';\nimport { AsyncEvents } from '../events/async.mjs';\n\n/** Submits a form's values as json to a url, mapping the request and the response through the configured mappers. */\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(request, form) {\n return await this.#http.request(this.#method, this.#url).json(request).fetch();\n }\n transform(response, form) {\n return this.#responseMapper(response, form);\n }\n}\n\n/** Submits a form without a request: the request mapper produces the result the response mapper then reads, for a form handled entirely on the page. */\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(request, form, response) {\n //nothing to send: whatever a submit:requested listener answered is the response\n return response;\n }\n async transform(response, form) {\n return await this.#responseMapper(response, form);\n }\n}\n\n/**\n * Builds the form's loader from its attributes: a local one when no action is\n * declared, a json post to it otherwise.\n *\n * A component registered under the `loader` attribute replaces this one and\n * must implement three methods, called in this order:\n *\n * - `prepare(values, form)` turns the extracted values into the request to send\n * - `submit(request, form, response)` performs it and returns the response. The\n * third argument is whatever a `submit:requested` listener already answered,\n * which is how a loader with nothing to send returns it unchanged\n * - `transform(response, form)` turns that response into the detail of the\n * `submit:success` event\n *\n * A rejection from any of the three is reported as a `submit:failure`.\n */\nclass FormLoader {\n static create(el, conf) {\n const http = el.component('http-client');\n const requestMapper = el.declared('request-mapper') ? el.component(el.declared('request-mapper')) : (v) => v;\n const responseMapper = el.declared('response-mapper') ? el.component(el.declared('response-mapper')) : (v) => v;\n const url = el.declared('action');\n if (!url) {\n return new LocalFormLoader(requestMapper, responseMapper);\n }\n const method = el.declared('method') ?? 'POST';\n return new RemoteJsonFormLoader(http, url, method, requestMapper, responseMapper);\n }\n}\n\n/**\n * Wraps its fields in a native form, extracts their values on submit and hands\n * them to a loader (loaders:form, or the action url as a json post),\n * announcing failures through the errors setter.\n */\nclass Form extends ParsedElement {\n //every one of these says how the form is built and submits, not what it holds:\n //the loader is named the same way ful-select and ful-table name theirs\n static attributes = [\n 'action',\n 'method',\n 'loader',\n 'request-mapper',\n 'response-mapper',\n 'clear-invalid-on-change:presence',\n 'scroll-on-error:presence',\n ];\n form;\n render() {\n const form = document.createElement('form');\n this.form = form;\n //the submit must travel regardless of validity: the server is the validation\n //authority, and the browser's own gate would block a resubmit behind\n //internals messages custom elements have no default UI for\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 //an aria-disabled control keeps its focus and its name, so the platform still\n //activates it: the refusal has to be ours, and capturing puts it ahead of\n //every listener the author registered on the button itself\n this.addEventListener(\n 'click',\n (evt) => {\n const target = /** @type Element */ (evt.target);\n if (!target.closest?.('[aria-disabled=\"true\"]')) {\n return;\n }\n evt.preventDefault();\n evt.stopImmediatePropagation();\n },\n true,\n );\n if (this.declared('clear-invalid-on-change')) {\n this.addEventListener('change', (/** @type any */ evt) => {\n evt.target.setCustomValidity?.('');\n });\n }\n this.replaceChildren(form);\n }\n #submitting = false;\n /**\n * Submits once: a submit while one is in flight is dropped before the\n * values are even extracted, so nothing fires and nothing travels; the\n * settled exchange re-arms the form. A write must not double behind a\n * second Enter or a programmatic call racing the first.\n * @param {HTMLElement} [submitter]\n * @returns\n */\n async submit(submitter) {\n if (this.#submitting) {\n return;\n }\n this.#submitting = true;\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 = this.component(this.declared('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.#submitting = false;\n this.spinner(false);\n }\n }\n /** The native reset, routing every field through its own value semantics. */\n reset() {\n this.form.reset();\n }\n #spinning = 0;\n /**\n * Reveals a spinner and gives it something to read. A spinner is a style-only\n * tag: the glyph is its own pseudo-element and the text is the author's, so one\n * carrying no text is a live region with nothing to announce. The label is\n * appended only where the author wrote none, and it is filled after the reveal,\n * a region mutated while hidden being announced unreliably.\n * @param {HTMLElement} el\n */\n #announce(el) {\n Attributes.defaultValue(el, 'role', 'status');\n el.hidden = false;\n if (el.textContent.trim() !== '') {\n return;\n }\n const label = document.createElement('span');\n label.className = 'ful-sr-only';\n label.dataset.ref = 'spinner-label';\n el.append(label);\n label.textContent = Localization.of().t('spinner.loading');\n }\n /** Shows the spinners and holds the submit buttons off, overlapping spins sharing one claim. */\n spinner(spin) {\n //spins can overlap (a caller's own spin may wrap a submit): only the\n //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 //the form is the busy region: the table and the async sections say so the\n //same way, and a form that only dimmed its button said it to no one\n Attributes.set(this, 'aria-busy', spin ? 'true' : null);\n this.querySelectorAll('ful-spinner').forEach((el) => {\n const hel = /** @type HTMLElement */ (el);\n if (spin) {\n this.#announce(hel);\n return;\n }\n hel.hidden = true;\n hel.querySelector(':scope > [data-ref=spinner-label]')?.remove();\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 //aria-disabled, not disabled: the submitter is almost always the\n //focused element when a submit starts, and disabling what holds the\n //focus drops it to the body, losing the user's place mid transaction.\n //The refusal is the capturing handler below, and #submitting is the\n //guard that actually makes a second submit a no-op\n hel.dataset.wd = hel.getAttribute('aria-disabled') ?? '';\n hel.setAttribute('aria-disabled', 'true');\n } else {\n //a button that joined mid-spin was never saved: its authored state stands\n if (hel.dataset.wd === undefined) {\n return;\n }\n Attributes.set(hel, 'aria-disabled', hel.dataset.wd || null);\n delete hel.dataset.wd;\n }\n });\n }\n /** The values of the fields the form contains, extracted and filled back through Bindings. */\n set values(vs) {\n Bindings.mutateIn(this.form, vs);\n }\n get values() {\n return Bindings.extractFrom(this.form);\n }\n /** Pins problems to the fields they name, the banner taking the nameless ones. */\n set errors(es) {\n Bindings.errors(this.form, es, this.declared('scroll-on-error'));\n }\n}\n\nexport { FormLoader, Form };\n","import { Attributes, BoundedCache } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\n//a null entry is a pattern that did not compile: cached like any other so the\n//warning is printed once rather than on every keystroke\nconst patternCache = new BoundedCache(100);\nconst compiled = (attr, pattern) =>\n patternCache.getOrCompute(`${attr}:${pattern}`, () => {\n try {\n return new RegExp(pattern, 'g');\n } catch (/** @type any */ e) {\n console.warn(`invalid ${attr} attribute`, pattern, e);\n return null;\n }\n });\n\n/**\n * The keystroke filter an input declares, as one function of the text.\n *\n * `keep` names the characters that survive and `reject` the ones that do not,\n * which are the same statement from either side: `keep=\"[0-9]\"` and\n * `reject=\"[^0-9]\"` both leave the digits. Keeping is the one worth reaching for,\n * the rejecting spelling of an allowed set being a double negative.\n */\nconst warnedBoth = new WeakSet();\nconst filterOf = (el) => {\n const keep = el.declared('keep');\n const reject = el.declared('reject');\n if (keep !== null && reject !== null && !warnedBoth.has(el)) {\n //the filter is read per keystroke, so the complaint is held per element\n warnedBoth.add(el);\n console.warn('a ful-input declares both keep and reject: keep is applied, reject is ignored', el);\n }\n if (keep !== null) {\n const re = compiled('keep', keep);\n //every match, concatenated: the attribute is a pattern rather than a\n //character class, so the kept text cannot be found by negating it\n return re && ((v) => (v.match(re) ?? []).join(''));\n }\n if (reject !== null) {\n const re = compiled('reject', reject);\n return re && ((v) => v.replace(re, ''));\n }\n return null;\n};\n\n/** A labelled text input over any native type or textarea; the temporal inputs are its subclasses. */\nclass Input extends Field {\n static observed = ['placeholder'];\n //configuration: the control is built from them and the value getter reads them,\n //but none of them is meant to change once the element is up\n static attributes = ['type', 'v-type', 'keep', 'reject', 'uppercase:presence', 'trim:presence'];\n static slots = true;\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <input data-tpl-if=\"type != 'textarea'\" data-tpl-type=\"type\" placeholder=\" \" form=\"\">\n <textarea data-tpl-if=\"type == 'textarea'\" placeholder=\" \" form=\"\"></textarea>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _input;\n _type() {\n //a numeric value wants the numeric widget (decimal normalization, the\n //right keyboard): v-type=number defaults the type, a declared one wins\n return this.declared('type') ?? (this.declared('v-type') === 'number' ? 'number' : 'text');\n }\n _build({ slots }) {\n const type = this._type();\n const fragment = this.template().withOverlay({ type, slots }).render();\n this._input = fragment.querySelector('input,textarea');\n\n Attributes.forward('input-', this, this._input);\n this._input.addEventListener('input', (evt) => {\n const strip = filterOf(this);\n if (!strip) {\n return;\n }\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._notifyChange();\n });\n return {\n fragment,\n control: this._input,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n };\n }\n get value() {\n const uppercase = this.declared('uppercase');\n const trim = this.declared('trim');\n const v = this._input.value;\n const uppercased = uppercase ? v.toUpperCase() : v;\n const trimmed = trim ? uppercased.trim() : uppercased;\n if (trimmed === '') {\n return null;\n }\n if (this.declared('v-type') === 'number') {\n //typed values are an explicit opt in, as the select's k-type: blank\n //stays null, and a value that does not decode is kept as it is\n const n = Number(trimmed);\n return Number.isNaN(n) ? trimmed : n;\n }\n return trimmed;\n }\n set value(value) {\n this._input.value = value === '' || value === undefined ? null : value;\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.reflectTo('placeholder', d);\n }\n}\n\nexport { Input };\n","import { ParsedElement, Localization } from '../../ftl/index.mjs';\nimport { Input } from './input.mjs';\n\n/** Formats the yyyy-mm-dd date in its content in the page's locale, or the one its locale attribute names. */\nclass LocalDate extends ParsedElement {\n static attributes = ['locale', 'default'];\n render() {\n const content = this.textContent.trim();\n const [y, m, d] = content.split('-').map(Number);\n const parsed = content === '' ? null : new Date(y, m - 1, d);\n //content that does not name a date renders like none: formatting an\n //invalid date would throw and fail the upgrade over a template hole\n if (parsed === null || Number.isNaN(parsed.getTime())) {\n this.replaceChildren(this.declared('default') ?? '');\n return;\n }\n //the attribute wins, then the page's locale, then the platform default\n const { date } = Localization.of({ locale: this.declared('locale') ?? undefined });\n this.replaceChildren(date(parsed, { year: 'numeric', month: 'numeric', day: 'numeric' }));\n }\n}\n\n/** Formats the ISO instant in its content in the page's locale and timezone. */\nclass Instant extends ParsedElement {\n static attributes = ['locale', 'default'];\n render() {\n const content = this.textContent.trim();\n const parsed = content === '' ? null : new Date(Instant.isoToLocal(content));\n //content that does not name an instant renders like none, as ful-local-date\n if (parsed === null || Number.isNaN(parsed.getTime())) {\n this.replaceChildren(this.declared('default') ?? '');\n return;\n }\n const { date } = Localization.of({ locale: this.declared('locale') ?? undefined });\n this.replaceChildren(\n date(parsed, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hour12: false,\n }),\n );\n }\n //a date-only value names a calendar day, not a utc midnight: it is read in\n //the page's timezone, so the day it names is the day it lands on\n static #parse(v) {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(v) ? new Date(`${v}T00:00:00`) : new Date(v);\n }\n static isoToLocal(iso) {\n const d = Instant.#parse(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 static localToIso(local) {\n const d = Instant.#parse(local);\n return Number.isNaN(d.getTime()) ? null : d.toISOString();\n }\n}\n\n/** A date input whose bounds accept a date, now, or an offset such as +1d. */\nclass InputLocalDate extends Input {\n //declaration order is the application order: step first, since on a time\n //input min and max are snapped to its grid\n static observed = ['step', 'min', 'max'];\n _type() {\n return 'date';\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 //the offset is subtracted before formatting so the iso date is the local\n //calendar day, which toISOString alone would shift to utc\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\n/** A time input whose bounds accept a time, now, or an hour or minute offset, snapped to the step grid. */\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\n/** A datetime input whose value is read and written as an ISO instant. */\nclass InputInstant extends Input {\n //declaration order is the application order: step first, since on a time\n //input min and max are snapped to its grid\n static observed = ['step', 'min', 'max'];\n _type() {\n return 'datetime-local';\n }\n get value() {\n return Instant.localToIso(this._input.value);\n }\n set value(v) {\n this._input.value = v ? Instant.isoToLocal(v) : '';\n }\n get min() {\n return Instant.localToIso(this._input.min);\n }\n set min(v) {\n this._input.min = v ? Instant.isoToLocal(v) : '';\n }\n get max() {\n return Instant.localToIso(this._input.max);\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 { Fragments, Localization, Templates } from '../../ftl/index.mjs';\nimport { Input } from './input.mjs';\n\n/** A file input with an optional dropzone and item list, enforcing the size and count limits it declares. */\nclass InputFile extends Input {\n /** how long a warning stands before the field retires it, matching the css fade */\n static WARNING_TIMEOUT = 5000;\n /**\n * A FileList holding exactly these files. The platform gives no way to\n * build one but through a DataTransfer, and every place that narrows a\n * selection rebuilt it by hand: five loops and three empty ones.\n * @param {Iterable<File>} [files]\n */\n static list(files = []) {\n const dt = new DataTransfer();\n for (const file of files) {\n dt.items.add(file);\n }\n return dt.files;\n }\n static observed = [\n 'placeholder',\n 'accept:csv',\n 'multiple:presence',\n 'item-list:presence',\n 'dropzone:presence',\n 'max-files:number',\n 'max-file-size:number',\n 'max-total-size:number',\n //re-declared so it lands after the constraints: assigning a value\n //validates the selection against them\n 'value',\n ];\n #accept;\n #items;\n #dropzone;\n #warnings;\n #group;\n _type() {\n return 'file';\n }\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <input data-tpl-type=\"type\" placeholder=\" \" form=\"\">\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\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('files.dropzone-label') }}\n </div>\n <ful-item-list></ful-item-list>\n <ful-field-warnings role=\"status\" aria-live=\"polite\"></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><span>{{ file.name }}</span><span>{{ #l10n:bytes(file.size) }}</span><button type=\"button\" data-tpl-aria-label=\"#l10n:t('files.remove')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button></div>\n </ful-item>\n `,\n warning: `<ful-field-warning>{{ #l10n:t(key, args) }}</ful-field-warning>`,\n };\n #itemstemplate;\n _build(conf) {\n const pieces = super._build(conf);\n const fragment = pieces.fragment;\n this.#items = fragment.querySelector('ful-item-list');\n //a slotted template replaces the stock item, the way a select's does: the\n //overlay is the same, so a custom item still reads the File it renders\n this.#itemstemplate =\n conf.slots?.items && !Fragments.isBlank(conf.slots.items) ? Templates.fromFragment(conf.slots.items) : null;\n this.#dropzone = fragment.querySelector('[data-ref=dropzone]');\n this.#warnings = fragment.querySelector('ful-field-warnings');\n this.#group = fragment.querySelector('ful-control-group');\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 if (!this._interactive()) {\n return;\n }\n const idx = [...this.#items.children].indexOf(e.target.closest('ful-item'));\n if (idx === -1) {\n return;\n }\n this.files = InputFile.list([...this.files].filter((f, i) => i !== idx));\n //the removal is the user's own gesture: it reports through change as the\n //picker's selection does, while the files setter stays silent like a native one\n this._notifyChange();\n });\n this.#dropzone.addEventListener('click', (e) => {\n if (!this._interactive()) {\n return;\n }\n this.querySelector('input')?.click();\n });\n\n this.#dropzone.addEventListener('dragover', (e) => {\n e.preventDefault();\n this.toggleAttribute('dragover', true);\n });\n this.#dropzone.addEventListener('dragleave', () => {\n this.toggleAttribute('dragover', false);\n });\n this.#dropzone.addEventListener('drop', (e) => {\n e.preventDefault();\n this.toggleAttribute('dragover', false);\n //the drop's default stays suppressed whatever the claims say: a\n //disabled field must not turn into a navigation target\n if (!this._interactive()) {\n return;\n }\n const dropped = [...e.dataTransfer.items].filter((i) => i.kind === 'file');\n const files = dropped.map((i) => i.getAsFile()).filter((f) => f !== null);\n if (files.length === 0 || (files.length > 1 && !this.multiple)) {\n return;\n }\n this.files = InputFile.list(files);\n //a drop is the user's own gesture too: a native file input receiving\n //one fires change on its own\n this._notifyChange();\n });\n this._input.addEventListener('change', (e) => {\n this.#update();\n });\n //a file input has no native freeze: readOnly does nothing to it, so the\n //control group is the frozen piece and the base's refusal of the click is\n //what keeps the picker shut. The dropzone and the item removals are\n //guarded on their own handlers\n return { ...pieces, freeze: this.#group };\n }\n /**\n * Re-reads the selection: the constraints run in order over what is there,\n * each dropping what it refuses, and the warnings and the item list are\n * rendered from what survives. Every path that changes the files ends here.\n */\n #update() {\n this.setCustomValidity();\n this.#warnings.replaceChildren();\n this.#ensureAcceptable();\n this.#ensureFileSizes();\n this.#ensureTotalSize();\n this.#ensureFilesCount();\n (this.#itemstemplate ?? this.template('items')).withOverlay({ files: this.files }).renderTo(this.#items);\n }\n warning(key, args) {\n this.template('warning').withOverlay({ key, args }).appendTo(this.#warnings);\n //the field retires its own warnings: the css fade is decoration, and a\n //theme that drops the keyframe, or a host stylesheet disabling animations,\n //used to leave them on screen until the next selection\n const warning = /** @type HTMLElement */ (this.#warnings.lastElementChild);\n setTimeout(() => warning.remove(), InputFile.WARNING_TIMEOUT);\n }\n /**\n * The native accept vocabulary: a dot-prefixed extension matches the file\n * name's suffix, a mime type (parameters stripped) matches the file's type,\n * and image/*, audio/*, video/* match their whole family. Anything else\n * matches nothing, as the native attribute ignores it.\n */\n #acceptable(file) {\n const name = file.name.toLowerCase();\n return this.#accept.some((token) => {\n const t = token.toLowerCase().split(';')[0].trim();\n if (t.startsWith('.')) {\n return name.endsWith(t);\n }\n if (t.endsWith('/*')) {\n return file.type.startsWith(`${t.slice(0, -1)}`);\n }\n return t.includes('/') && file.type === t;\n });\n }\n #ensureAcceptable() {\n if (!this.#accept.length) {\n return;\n }\n const unacceptable = [...this.files].filter((file) => !this.#acceptable(file));\n\n if (unacceptable.length === 0) {\n return;\n }\n this.warning('files.unacceptable-file-type', { types: this.#accept.join(', ') });\n this._input.files = InputFile.list([...this.files].filter((f) => !unacceptable.includes(f)));\n }\n #ensureFilesCount() {\n if (this.#maxFiles === null) {\n return;\n }\n if (this.files.length <= this.#maxFiles) {\n return;\n }\n this.warning('files.max-files-exceeded', { count: this.#maxFiles });\n this._input.files = InputFile.list();\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('files.max-file-size-exceeded', { size: Localization.of().bytes(this.#maxFileSize) });\n this._input.files = InputFile.list([...this.files].filter((f) => !oversized.includes(f)));\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('files.max-total-size-exceeded', { size: Localization.of().bytes(this.#maxTotalSize) });\n this._input.files = InputFile.list();\n }\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.reflectTo('accept', vs);\n }\n get multiple() {\n return this._input.multiple;\n }\n set multiple(v) {\n this._input.multiple = v;\n this.reflectTo('multiple', v);\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 this.files = InputFile.list(v ? [v] : []);\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 = InputFile.list();\n }\n formResetCallback() {\n //a file selection's default is empty, as the platform's own reset: a\n //declared filename cannot be restored programmatically\n this.value = null;\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.reflectTo('max-files', v);\n }\n #maxFileSize;\n get maxFileSize() {\n return this.#maxFileSize;\n }\n set maxFileSize(v) {\n this.#maxFileSize = v;\n this.reflectTo('max-file-size', v);\n }\n #maxTotalSize;\n get maxTotalSize() {\n return this.#maxTotalSize;\n }\n set maxTotalSize(v) {\n this.#maxTotalSize = v;\n this.reflectTo('max-total-size', v);\n }\n #useItemList;\n get itemList() {\n return this.#useItemList;\n }\n set itemList(v) {\n this.#useItemList = v;\n this.reflectTo('item-list', v);\n }\n #useDropzone;\n get dropzone() {\n return this.#useDropzone;\n }\n set dropzone(v) {\n this.#useDropzone = v;\n this.reflectTo('dropzone', v);\n }\n}\n\nexport { InputFile };\n","/**\n * The anchored popovers' fallback: where the platform lacks CSS anchor\n * positioning, the popovers ful wires on an invoker are placed beside it\n * by hand, the geometry the anchor css draws on its own. Where the\n * platform carries the css the wiring is a no-op: the stylesheet does\n * the work alone.\n */\n\nimport { Attributes } from '../../ftl/index.mjs';\n\n/** the viewport's breathing room when clamping, in pixels */\nconst PAD = 8;\nconst open = new Map();\nlet frame = 0;\nlet reflowWired = false;\n\nconst platformAnchors = () =>\n CSS.supports('anchor-name: --ful-probe') &&\n CSS.supports('position-anchor: --ful-probe') &&\n CSS.supports('position-area: bottom') &&\n CSS.supports('top: anchor(bottom)') &&\n CSS.supports('width: anchor-size(width)');\n\nconst clamp = (value, low, high) => Math.min(Math.max(value, low), Math.max(low, high));\n\n/** a note is the popover that draws a callout, and the only one these offsets serve */\nconst isNote = (popover) => popover.matches('ful-note, .ful-note, [placement]');\n\n/**\n * Reports where the invoker's centre falls inside the popover, which is what a\n * callout points at. The two are the same spot until the viewport pushes the\n * popover off its invoker, which the platform's own placement does as readily\n * as the hand placement below, so this is measured in both.\n */\nconst reportCallout = (popover, invoker) => {\n const box = invoker.getBoundingClientRect();\n const here = popover.getBoundingClientRect();\n //against the padding box, which is what a percentage inset resolves against\n popover.style.setProperty('--ful-note-callout-inline', `${box.left + box.width / 2 - here.left - popover.clientLeft}px`);\n popover.style.setProperty('--ful-note-callout-block', `${box.top + box.height / 2 - here.top - popover.clientTop}px`);\n};\n\nconst place = (popover, anchored) => {\n const { invoker, stretch } = anchored;\n const box = invoker.getBoundingClientRect();\n const viewport = document.documentElement;\n const vw = viewport.clientWidth;\n const vh = viewport.clientHeight;\n //the css gap lives in the margins, and the computed style is live: the\n //inline zero a previous placing left behind is dropped first so the numbers\n //read below are the stylesheet's own, not this function's own zero. Reading\n //them afterwards left every popover flush against its invoker\n popover.style.removeProperty('margin');\n const computed = getComputedStyle(popover);\n const gap = {\n top: parseFloat(computed.marginTop) || 0,\n right: parseFloat(computed.marginRight) || 0,\n bottom: parseFloat(computed.marginBottom) || 0,\n left: parseFloat(computed.marginLeft) || 0,\n };\n popover.style.right = 'auto';\n popover.style.bottom = 'auto';\n popover.style.margin = '0';\n if (stretch) {\n const width = Math.min(box.width, vw - 2 * PAD);\n popover.style.width = `${width}px`;\n popover.style.left = `${clamp(box.left, PAD, vw - width - PAD)}px`;\n const height = popover.getBoundingClientRect().height;\n popover.style.top = `${clamp(box.bottom + gap.top, PAD, vh - height - PAD)}px`;\n return;\n }\n //a popover wraps against the spot it lands on: the width is measured\n //wide open, the left clamped so it still fits, the vertical placed\n //against the height that width renders\n const note = isNote(popover);\n const placement = note ? (popover.getAttribute('placement') ?? 'bottom') : 'bottom';\n popover.style.removeProperty('max-width');\n const cap = Math.min(parseFloat(computed.maxWidth) || vw, vw - 2 * PAD);\n popover.style.maxWidth = `${cap}px`;\n popover.style.left = `${PAD}px`;\n const wide = popover.getBoundingClientRect().width;\n let left =\n placement === 'right'\n ? box.right + gap.left\n : placement === 'left'\n ? box.left - gap.right - wide\n : note\n ? box.left + box.width / 2 - wide / 2\n : box.left;\n left = clamp(left, PAD, vw - wide - PAD);\n popover.style.left = `${left}px`;\n popover.style.maxWidth = `${Math.min(cap, vw - PAD - left)}px`;\n const height = popover.getBoundingClientRect().height;\n const top =\n placement === 'top'\n ? box.top - gap.bottom - height\n : placement === 'right' || placement === 'left'\n ? box.top + box.height / 2 - height / 2\n : box.bottom + gap.top;\n popover.style.top = `${clamp(top, PAD, vh - height - PAD)}px`;\n if (note) {\n reportCallout(popover, invoker);\n }\n};\n\nconst unplace = (popover) => {\n for (const property of [\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'margin',\n 'max-width',\n 'width',\n '--ful-note-callout-inline',\n '--ful-note-callout-block',\n ]) {\n popover.style.removeProperty(property);\n }\n};\n\nconst reflow = () => {\n frame = 0;\n for (const [popover, anchored] of open) {\n //the platform hides a popover removed while open without firing the\n //toggle that would have dropped its entry, so the pass that places the\n //open ones is also where a gone one is forgotten: it is the moment\n //anybody cares, and it needs no callback on either element's life\n if (!popover.isConnected || !anchored.invoker.isConnected) {\n open.delete(popover);\n continue;\n }\n place(popover, anchored);\n }\n};\n\nconst schedule = () => {\n if (!frame && open.size > 0) {\n frame = requestAnimationFrame(reflow);\n }\n};\n\n/**\n * Wires an invoker/popover pair ful anchors through css: where the\n * platform lacks anchor positioning the popover is placed beside its\n * invoker whenever it opens, stretched to the invoker's width when\n * asked, and cleaned up when it closes. Where the css works the call\n * is a no-op.\n *\n * `handPlace` takes the placement here on every platform, which a popover\n * asks for when it needs to know where its invoker ended up: the note's\n * callout points at the invoker, and a pseudo-element cannot read an anchor\n * that is not inside its own containing block, so the note is measured rather\n * than placed by the css. Its stylesheet declares no position-area to match.\n */\nconst wireAnchoredPopover = (\n invoker,\n popover,\n { prefix = 'ful-anchor', invoke = false, expanded = false, stretch = false, handPlace = false } = {},\n) => {\n const uid = Attributes.uid(prefix);\n if (invoke) {\n //popovertarget needs a target that can be named\n popover.id = popover.id || uid;\n invoker.setAttribute('popovertarget', popover.id);\n }\n const anchor = `--${uid}`;\n invoker.style.anchorName = anchor;\n popover.style.positionAnchor = anchor;\n if (expanded) {\n invoker.setAttribute('aria-expanded', 'false');\n popover.addEventListener('toggle', (/** @type any */ evt) => {\n invoker.setAttribute('aria-expanded', evt.newState === 'open' ? 'true' : 'false');\n });\n }\n //the naming above is what the stylesheet reads, so it happens either way:\n //only the hand placement below is the fallback, and only for a popover that\n //did not ask to be placed here whatever the platform offers\n if (!handPlace && platformAnchors()) {\n return;\n }\n const anchored = { invoker, stretch };\n popover.addEventListener('beforetoggle', (/** @type any */ evt) => {\n //placed before the showing, refined once laid out: the platform's\n //centered or corner spot never paints\n if (evt.newState === 'open') {\n place(popover, anchored);\n }\n });\n popover.addEventListener('toggle', (/** @type any */ evt) => {\n if (evt.newState === 'open') {\n open.set(popover, anchored);\n place(popover, anchored);\n } else {\n open.delete(popover);\n unplace(popover);\n }\n });\n if (!reflowWired) {\n reflowWired = true;\n document.addEventListener('scroll', schedule, true);\n window.addEventListener('resize', schedule);\n }\n};\n\nexport { wireAnchoredPopover };\n","import { Attributes, Fragments, ParsedElement, Templates } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\nimport { wireAnchoredPopover } from '../disclosures/anchors.mjs';\nimport { Field } from './field.mjs';\nimport { VersionedLocalStorage } from '../storage.mjs';\nimport { Timing } from '../timing.mjs';\n\n/**\n * Fetches a select's whole vocabulary from a url and serves every later read\n * from it. Concurrent callers share one request, the options may be cached in\n * local storage under a revision, and reconfiguring the url discards both.\n */\nclass RemoteLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n #prefetch;\n #revision;\n #data;\n #inFlight;\n #configs = new Claims();\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 this.#inFlight = null;\n }\n async prefetch() {\n if (!this.#prefetch) {\n return;\n }\n await this.#ensureFetched();\n }\n async exact(...keys) {\n const data = await this.#ensureFetched();\n return data.filter(({ key }) => keys.some((r) => r == key));\n }\n async load(needle) {\n const data = await this.#ensureFetched();\n //includes would coerce a nullish needle to the string \"undefined\": no\n //needle means no filter, as the empty search the combobox opens with\n return data.filter(({ label }) => (label ?? '').toLowerCase().includes(needle?.toLowerCase() ?? ''));\n }\n /**\n * Drops the cached vocabulary so the next question refetches it. Any fetch\n * still in flight is detached: its outcome belongs to the configuration that\n * started it and must neither be served nor stored for the new one.\n */\n async invalidate() {\n this.#configs.invalidate();\n this.#data = null;\n this.#inFlight = null;\n }\n async reconfigureUrl(url) {\n await this.invalidate();\n this.#url = url;\n }\n async #ensureFetched() {\n if (this.#data === null) {\n if (this.#inFlight === null) {\n //held, not taken: concurrent fetch users share one configuration,\n //only a reconfiguration supersedes it\n const claim = this.#configs.hold();\n this.#inFlight = RemoteLoader.#revisionedData(this.#http, this.#method, this.#url, this.#revision)\n .then((raw) => {\n if (!claim.stale) {\n this.#data = this.#responseMapper(raw);\n }\n })\n .finally(() => {\n if (!claim.stale) {\n this.#inFlight = null;\n }\n });\n }\n await this.#inFlight;\n }\n if (this.#data === null) {\n throw new Error('superseded by a reconfiguration');\n }\n return this.#data;\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 try {\n VersionedLocalStorage.save(storageKey, revision, data);\n } catch (/** @type any */ e) {\n //the cache write is best effort: the fetched data is the answer,\n //a full quota must not fail the load that already succeeded\n console.warn('failed to cache the select options', e);\n }\n }\n return data;\n }\n}\n\n/** Asks the endpoint per query instead of fetching the vocabulary once, for a list too large to hold in memory. */\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 /**\n * Nothing is held between queries, so there is no cache to drop: the method\n * exists so a caller can invalidate any loader without knowing which it has.\n */\n async invalidate() {}\n async reconfigureUrl(url) {\n this.#url = url;\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\n/** Serves a select's options from an array held in memory, which is what the slotted `<option>` elements become. */\nclass InMemoryLoader {\n #data;\n constructor(data) {\n this.#data = data;\n }\n update(data) {\n this.#data = data;\n }\n /** The vocabulary is the data itself: update replaces it, so there is nothing to drop. */\n async invalidate() {}\n exact(...keys) {\n return this.#data.filter(({ key }) => keys.some((r) => r == key));\n }\n load(needle) {\n //no needle means no filter, as in RemoteLoader\n return this.#data.filter(({ label }) => (label ?? '').toLowerCase().includes(needle?.toLowerCase() ?? ''));\n }\n}\n\n/**\n * Builds the select's loader from its attributes: the slotted options in\n * memory, or a remote or chunked loader over src.\n *\n * A component registered under the `loader` attribute replaces this one and\n * must implement the same three methods, each answering `{ key, label,\n * metadata }` entries:\n *\n * - `prefetch()` warms the vocabulary if it can, and resolves either way\n * - `load(needle)` answers the entries matching the typed text, all of them\n * when the needle is nullish, which is the empty search the list opens with\n * - `exact(...keys)` answers the entries for those keys, used to label a value\n * assigned without going through the list\n */\nclass SelectLoader {\n /**\n * Builds a loader from a plain configuration, reading no dom: `data` alone\n * is the in-memory vocabulary, a `url` is fetched whole or, under\n * `mode: 'chunked'`, per query. A test, or a caller holding its own\n * configuration, builds a loader this way; `create` is the same thing with\n * an element's attributes parsed first.\n * @param {{ data?: any[], http?: any, url?: string, method?: string, mode?: string, prefetch?: boolean, revision?: string|null, responseMapper?: any }} conf\n */\n static from({ data, http, url, method = 'POST', mode, prefetch = false, revision = null, responseMapper }) {\n if (!url) {\n return new InMemoryLoader(data ?? []);\n }\n if ('chunked' === mode) {\n return new PartialRemoteLoader({ http, url, method, responseMapper });\n }\n return new RemoteLoader({ http, url, method, responseMapper, prefetch, revision });\n }\n static create(el, conf) {\n if (!el.declared('src')) {\n const els = Array.from(conf.options?.querySelectorAll('option') ?? []);\n return SelectLoader.from({\n data: els.map((e) => ({\n key: e.getAttribute('value') ?? e.innerText.trim(),\n label: e.innerText.trim(),\n metadata: undefined,\n })),\n });\n }\n return SelectLoader.from({\n http: el.component('http-client'),\n url: el.declared('src'),\n method: el.declared('method') ?? 'POST',\n mode: el.declared('mode'),\n prefetch: el.declared('preload'),\n revision: el.declared('revision'),\n responseMapper: SelectLoader.#responseMapperFrom(el),\n });\n }\n static #responseMapperFrom(el) {\n if (el.declared('k-expr') && el.declared('l-expr')) {\n return (response) => {\n const rows = el._registry\n .evaluator()\n .withOverlay(response)\n .evaluateExpression(el.declared('d-expr') ?? 'self');\n return rows.map((row) => {\n const evaluator = el._registry.evaluator().withOverlay(row);\n return {\n key: evaluator.evaluateExpression(el.declared('k-expr')),\n label: evaluator.evaluateExpression(el.declared('l-expr')),\n metadata: evaluator.evaluateExpression(el.declared('m-expr') ?? 'self'),\n };\n });\n };\n }\n if (el.declared('response-mapper')) {\n return el.component(el.declared('response-mapper'));\n }\n //the wire format servers send is the positional row: the default mapper\n //is what turns it into the entry the element speaks everywhere else\n return (/** @type any[] */ response) => response.map(([key, label, metadata]) => ({ key, label, metadata }));\n }\n}\n\n/** The options popup of a select: listbox semantics, one loading claim per show, a localized empty state. */\nclass Dropdown extends ParsedElement {\n static attributes = ['listbox'];\n static slots = true;\n static template = `\n <ful-spinner class=\"centered\" role=\"status\" hidden><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner>\n <p data-ref=\"empty\" aria-live=\"polite\" hidden>{{ #l10n:t('dropdown.empty') }}</p>\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\">\n {{ label }}\n </li>\n `,\n };\n #spinner;\n #menu;\n #empty;\n #optionstemplate;\n #options = new Map();\n #shows = new Claims();\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.#empty = fragment.querySelector('p[data-ref=empty]');\n this.#menu = fragment.querySelector('menu');\n //the listbox is named so a combobox can point aria-controls and\n //aria-activedescendant at it: a reference to an unnamed element resolves\n //to nothing, and the active option is announced to no one. The name comes\n //from the host when it gave one, since it has to set aria-controls before\n //this element upgrades\n this.#menu.id = this.declared('listbox') || Attributes.uid('ful-listbox');\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 #highlight(li) {\n if (!li) {\n this.#activated(null);\n return;\n }\n for (const el of this.#menu.querySelectorAll('li')) {\n el.toggleAttribute('selected', el === li);\n }\n li.id ||= Attributes.uid('ful-option');\n this.#activated(li.id);\n li.scrollIntoView({\n block: 'nearest',\n behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth',\n });\n }\n acceptSelection() {\n const selected = this.#selected();\n if (!selected) {\n return;\n }\n this.#change(selected);\n }\n update(values, keys = []) {\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((entry, index) => ({ index, ...entry }));\n this.#optionstemplate.withOverlay(data).renderTo(this.#menu);\n for (const [index, li] of [...this.#menu.children].entries()) {\n const picked = keys.some((r) => r == values[index]?.key);\n li.toggleAttribute('picked', picked);\n //what is picked is what aria-selected means for a listbox: a tint alone\n //says it to whoever can see it and to no one else\n li.setAttribute('aria-selected', picked ? 'true' : 'false');\n }\n this.#empty.toggleAttribute('hidden', values.length !== 0);\n this.#menu.toggleAttribute('hidden', values.length === 0);\n const current = values.findIndex(({ key }) => keys.some((r) => r == key));\n this.#highlight(current >= 0 ? this.#menu.children[current] : this.#selected());\n }\n #change(target) {\n const index = target.getAttribute('value');\n const entry = this.#options.get(index);\n this.hide();\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { index, entry },\n }),\n );\n }\n hide() {\n //hiding ends the current claim: a search still in flight must neither\n //repopulate the list nor point the combobox at an option of a hidden dropdown\n this.#shows.invalidate();\n if (this.matches(':popover-open')) {\n this.hidePopover();\n }\n this.#activated(null);\n }\n /**\n * The option the reader is on, announced for whoever owns the combobox: the\n * dropdown is a view, so it names its active option and never reaches into\n * another element's aria to say so.\n */\n #activated(id) {\n this.dispatchEvent(new CustomEvent('activechange', { bubbles: false, cancelable: false, detail: { id } }));\n }\n\n get shown() {\n return this.matches(':popover-open');\n }\n async show(loader, keys = []) {\n //each show claims the dropdown: a search resolving after a newer show has\n //started, or after the dropdown was hidden again, is stale, and neither\n //renders nor highlights, whichever order the searches resolve in\n const claim = this.#shows.take();\n if (!this.matches(':popover-open')) {\n this.showPopover();\n }\n this.#menu.setAttribute('hidden', '');\n this.#spinner.removeAttribute('hidden');\n try {\n const data = await loader();\n if (claim.stale) {\n return;\n }\n this.update(data, keys);\n } catch (/** @type any */ e) {\n if (claim.stale) {\n //the newer show (or the hide that ended this one) owns the dropdown\n //and its outcome: a superseded failure is neither shown nor thrown\n return;\n }\n this.hide();\n throw e;\n } finally {\n if (!claim.stale) {\n this.#spinner.setAttribute('hidden', '');\n }\n }\n }\n async moveOrShow(forward, loader, keys = []) {\n if (this.shown) {\n const selected = this.#selected();\n const candidate = selected?.[`${forward ? 'next' : 'previous'}ElementSibling`];\n if (selected && candidate) {\n this.#highlight(candidate);\n }\n return;\n }\n await this.show(loader, keys);\n }\n jump(first) {\n const target = first ? this.#menu.firstElementChild : this.#menu.lastElementChild;\n if (target) {\n this.#highlight(target);\n }\n }\n page(forward) {\n const selected = this.#selected();\n if (!selected) {\n return;\n }\n const lis = Array.from(this.#menu.children);\n const step = this.#page();\n const target = lis[Math.max(0, Math.min(lis.length - 1, lis.indexOf(selected) + (forward ? step : -step)))];\n this.#highlight(target);\n }\n #page() {\n const first = this.#menu.firstElementChild;\n if (!first || first.offsetHeight === 0) {\n return 1;\n }\n return Math.max(1, Math.trunc(this.#menu.clientHeight / first.offsetHeight));\n }\n}\n\n/** A combobox acting like a select over a loader's vocabulary, single or multiple. */\nclass Select extends Field {\n //the loader's whole vocabulary is configuration, read once at the upgrade:\n //none of it is reactive, and declaring it here is what lets the loader be\n //built from a plain object rather than from an element\n static attributes = [\n 'name',\n 'loader',\n 'k-type',\n 'src',\n 'method',\n 'mode',\n 'preload:presence',\n 'revision',\n 'k-expr',\n 'l-expr',\n 'd-expr',\n 'm-expr',\n 'response-mapper',\n ];\n //the value attribute is a list of keys whether or not the select is multiple:\n //`set value` normalizes a list of one to a single key, and the getter answers a\n //scalar for a single select, so nothing downstream has to know which it was\n static observed = ['multiple:presence', 'item-list:presence', 'value:csv'];\n static slots = true;\n //a manual popover: the combobox keeps the focus on its input and owns\n //the whole lifecycle (typing, arrows, blur, Escape, Tab), so no light\n //dismiss and no popovertarget invoker; it anchors on its control group\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-control>\n <input type=\"text\" form=\"\" autocomplete=\"off\" role=\"combobox\" aria-autocomplete=\"list\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n <ful-dropdown popover=\"manual\">{{{{ slots.dropdown }}}}</ful-dropdown>\n </ful-control-group>\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.key\">\n <div><span>{{ entry.label }}</span><button type=\"button\" data-tpl-aria-label=\"#l10n:t('select.remove')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button></div>\n </ful-item>\n `,\n };\n #loader;\n #control;\n #ddmenu;\n #input;\n #items;\n #itemstemplate;\n #multiple;\n #warnedComma = false;\n #values = new Map();\n #assignments = new Claims();\n #editing = false;\n #dload;\n #abortdload;\n _build({ slots }) {\n const name = this.declared('name');\n this.#loader = this.component(this.declared('loader') ?? 'loaders:select').create(this, {\n options: slots.options,\n });\n\n this.#multiple = this.declared('multiple');\n //the prefetch is the vocabulary's concern, not the field's: the label, the\n //combobox and the error region paint at once and the properties go live with\n //them, where a slow endpoint used to hold up the whole upgrade. The loader\n //shares one in-flight fetch, so a first open during the prefetch joins it\n this.#loader.prefetch?.()?.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 this.#itemstemplate =\n slots.items && !Fragments.isBlank(slots.items) ? Templates.fromFragment(slots.items) : null;\n Attributes.forward('input-', this, this.#input);\n this.#control = fragment.querySelector('ful-control');\n\n this.#ddmenu = fragment.querySelector('ful-dropdown');\n //named before it upgrades, so the combobox can control it from the start\n const listbox = Attributes.uid('ful-listbox');\n this.#ddmenu.setAttribute('listbox', listbox);\n this.#input.setAttribute('aria-controls', listbox);\n //one writer for the combobox's state: the dropdown says when it opens and\n //which option is active, the input's aria is the select's to keep\n this.#ddmenu.addEventListener('beforetoggle', (/** @type any */ e) => {\n const open = e.newState === 'open';\n this.#input.setAttribute('aria-expanded', open ? 'true' : 'false');\n if (!open) {\n this.#input.removeAttribute('aria-activedescendant');\n }\n });\n this.#ddmenu.addEventListener('activechange', (/** @type any */ e) => {\n Attributes.set(this.#input, 'aria-activedescendant', e.detail.id);\n });\n //each pair carries its own anchor: two selects on a page must not share one\n const group = fragment.querySelector('ful-control-group');\n wireAnchoredPopover(group, this.#ddmenu, { prefix: 'ful-select', stretch: true });\n [this.#dload, this.#abortdload] = Timing.throttle(400, () => this.#open());\n this.#wireChrome();\n this.#wireChips();\n this.#wireInput();\n this.#wireSelection();\n return {\n fragment,\n control: this.#input,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n };\n }\n /**\n * Pointer interaction: the element toggles the dropdown, the item list's\n * remove buttons and the control's badges drop their entry.\n */\n #wireChrome() {\n this.addEventListener('click', (/** @type any */ e) => {\n if (!this._interactive()) {\n return;\n }\n if (this.#ddmenu.shown) {\n this.#close();\n return;\n }\n this.#input.focus();\n this.#dload();\n });\n this.#items.addEventListener('click', (e) => {\n e.stopPropagation();\n if (!e.target.closest('button')) {\n return;\n }\n if (!this._interactive()) {\n return;\n }\n this.#removeKeyAt([...this.#items.children].indexOf(e.target.closest('ful-item')));\n });\n this.#control.addEventListener('click', (e) => {\n const badge = e.target instanceof Element ? e.target.closest('ful-badge') : null;\n if (!badge) {\n return;\n }\n e.stopPropagation();\n this.#removeBadge(badge);\n });\n }\n /**\n * Keyboard interaction over the chips: Enter/Space/Backspace/Delete remove,\n * arrows move between badges and the input, Escape returns to the input.\n */\n #wireChips() {\n this.addEventListener('keydown', (/** @type any */ e) => {\n const badge = e.target instanceof Element ? e.target.closest('ful-badge') : null;\n if (badge) {\n this.#chipKeydown(e, badge);\n return;\n }\n //the caret cannot move further left: hand the focus over to the chips,\n //as the backspace at the same spot already hands over the last entry\n if (\n 'ArrowLeft' === e.code &&\n e.target === this.#input &&\n this.#input.selectionStart === 0 &&\n this.#input.selectionEnd === 0\n ) {\n this.#badges().at(-1)?.focus();\n }\n });\n }\n #wireInput() {\n this.#input.addEventListener('change', (e) => {\n e.stopPropagation();\n });\n this.#input.addEventListener('focus', () => {\n if (this.#editing) {\n return;\n }\n this.#input.select();\n });\n this.#input.addEventListener('blur', (e) => {\n e.stopPropagation();\n if (e.relatedTarget && this.contains(e.relatedTarget)) {\n return;\n }\n this.#abortdload();\n this.#close();\n });\n this.#input.addEventListener('keydown', (e) => {\n if (!this._interactive()) {\n return;\n }\n this.#comboboxKeydown(e);\n });\n this.#input.addEventListener('input', (e) => {\n e.stopPropagation();\n if (!this._interactive()) {\n return;\n }\n this.#editing = true;\n this.#dload();\n });\n }\n #wireSelection() {\n this.#ddmenu.addEventListener('change', (e) => {\n e.stopPropagation();\n //a claim landing while the dropdown is open must not accept a pick:\n //disabled closes the list on its own (the focused input blurs), readonly\n //leaves it open, so the guard lives here\n if (!this._interactive()) {\n this.#close();\n return;\n }\n if (!this.#multiple) {\n this.#values.clear();\n }\n this.#editing = false;\n this.#values.set(this.#coerceKey(e.detail.entry.key), e.detail.entry);\n this.#changed();\n this.#syncBadges();\n this.#input.focus();\n this.#ddmenu.hide();\n if (!this.#multiple) {\n this.#input.select();\n }\n });\n }\n /** Hands the loader to the callback, for runtime reconfigurations. */\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n /**\n * Drops whatever the loader is holding and asks it about the current selection\n * again, which is what a select whose vocabulary depends on another control\n * needs when that control changes. A key the loader no longer knows is dropped\n * from the selection, so a value invalidated by the change does not survive it,\n * and one it still knows keeps its place with a fresh label.\n *\n * Pass a url first where the vocabulary lives at a different address:\n *\n * citta.addEventListener('change', async () => {\n * await cap.withLoader((l) => l.reconfigureUrl(`/api/cap?citta=${citta.value}`));\n * await cap.reload();\n * });\n */\n async reload() {\n await this.#loader.invalidate?.();\n //the prefetch is a warm-up: a select configured to preload warms the new\n //vocabulary now rather than on the next open, as it did at the upgrade\n await this.#loader.prefetch?.();\n const keys = [...this.#values.keys()];\n if (keys.length === 0) {\n return;\n }\n await this.#resolve(keys, this.#assignments.take());\n }\n #badges() {\n return Array.from(this.#control.querySelectorAll(':scope > ful-badge'));\n }\n #removeBadge(badge) {\n if (!this._interactive()) {\n return;\n }\n this.#removeKeyAt(this.#badges().indexOf(badge));\n }\n /**\n * Drops the entry at the given index, if any: badges and item list entries\n * share the value map's ordering.\n */\n #removeKeyAt(index) {\n const key = Array.from(this.#values.keys())[index];\n if (key === undefined) {\n return;\n }\n this.#values.delete(key);\n this.#changed();\n this.#syncBadges();\n }\n #chipKeydown(e, badge) {\n switch (e.code) {\n case 'NumpadEnter':\n case 'Enter':\n case 'Space':\n case 'Backspace':\n case 'Delete': {\n e.preventDefault();\n this.#removeBadge(badge);\n this.#input.focus();\n break;\n }\n case 'ArrowLeft': {\n e.preventDefault();\n (this.#badges()[this.#badges().indexOf(badge) - 1] ?? this.#input).focus();\n break;\n }\n case 'ArrowRight': {\n e.preventDefault();\n (this.#badges()[this.#badges().indexOf(badge) + 1] ?? this.#input).focus();\n break;\n }\n case 'Escape': {\n this.#input.focus();\n break;\n }\n }\n }\n /**\n * The combobox keyboard contract: arrows browse and move, Home/End and\n * PageUp/PageDown navigate the open list, Enter accepts or submits,\n * Escape/Tab close, Backspace at the caret's leftmost spot drops the last\n * entry.\n */\n #comboboxKeydown(e) {\n switch (e.code) {\n case 'ArrowUp':\n case 'ArrowDown': {\n e.preventDefault();\n this.#arrowKeydown(e);\n break;\n }\n case 'Home': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.jump(true);\n }\n break;\n }\n case 'End': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.jump(false);\n }\n break;\n }\n case 'PageDown':\n case 'PageUp': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.page('PageDown' === e.code);\n }\n break;\n }\n case 'Escape': {\n this.#abortdload();\n this.#close();\n break;\n }\n //both physical Enter keys: the switch reads e.code, which tells the\n //numpad's apart, and the base submits from either one\n case 'NumpadEnter':\n case 'Enter': {\n if (!this.#ddmenu.shown) {\n //nothing to accept: the key is left alone and the base submits\n //the form, as it does for every field whose control is detached\n return;\n }\n e.preventDefault();\n this.#editing = false;\n this.#display();\n this.#ddmenu.acceptSelection();\n break;\n }\n case 'Backspace': {\n //only where there is no text to delete first, and nothing selected:\n //backspace belongs to the search until the caret runs out of it\n if (this.#input.selectionStart === 0 && this.#input.selectionEnd === 0) {\n this.#removeKeyAt(this.#values.size - 1);\n }\n break;\n }\n case 'Tab': {\n this.#abortdload();\n this.#close();\n break;\n }\n }\n }\n #arrowKeydown(e) {\n const forward = 'ArrowDown' === e.code;\n //alt-down opens, alt-up closes\n if (e.altKey) {\n if (forward && !this.#ddmenu.shown) {\n this.#open();\n } else if (!forward && this.#ddmenu.shown) {\n this.#close();\n }\n return;\n }\n this.#browse();\n this.#ddmenu.moveOrShow(forward, () => this.#loader.load(this.#input.value), [...this.#values.keys()]);\n }\n #close() {\n this.#ddmenu.hide();\n this.#editing = false;\n this.#display();\n }\n /**\n * Opens the dropdown over the entries matching the input: typing filters,\n * browsing starts from the whole vocabulary, the selected keys are always\n * highlighted.\n */\n #open() {\n this.#browse();\n return this.#ddmenu.show(() => this.#loader.load(this.#input.value), [...this.#values.keys()]);\n }\n #browse() {\n if (this.#editing) {\n return;\n }\n this.#input.value = '';\n }\n #display() {\n const entry = this.#values.values().next().value;\n this.#input.value = this.#multiple ? '' : (entry?.label ?? '');\n }\n /** The selection in its one vocabulary: the change detail and the items overlay both speak it. */\n #selection() {\n return [...this.#values.values()];\n }\n #changed() {\n //the detail carries the keys the value property answers with, as every\n //other field's does, and the labeled selection beside them\n this._notifyChange({ entry: this.entry });\n }\n #syncBadges() {\n const badges = this.#multiple\n ? Array.from(this.#values.entries()).map(([k, entry], index) => {\n const b = document.createElement('ful-badge');\n b.setAttribute('role', 'button');\n //a roving tab stop: without one the chips are reachable only from\n //the input's caret, so Tab never finds them\n b.setAttribute('tabindex', index === 0 ? '0' : '-1');\n b.setAttribute('value', k);\n b.innerText = entry.label;\n return b;\n })\n : [];\n for (const b of this.#control.querySelectorAll(':scope > ful-badge')) {\n b.remove();\n }\n this.#input.before(...badges);\n if (!this.#editing) {\n this.#display();\n }\n this.#items.replaceChildren();\n (this.#itemstemplate ?? this.template('items'))\n .withOverlay({ entries: this.#selection() })\n .renderTo(this.#items);\n }\n /**\n * Coerces a key to the type declared by `k-type`. Keys reach the element from\n * both worlds: the `value` attribute is text, a loader returns whatever its\n * endpoint carries. One canonical type keeps the internal Map, which compares\n * keys strictly, consistent. A key that does not decode is left as it is.\n */\n #coerceKey(k) {\n switch (this.declared('k-type')) {\n case 'number': {\n const n = k === '' ? Number.NaN : Number(k);\n return Number.isNaN(n) ? k : n;\n }\n case 'boolean': {\n if (k === true || k === 'true') {\n return true;\n }\n if (k === false || k === 'false') {\n return false;\n }\n return k;\n }\n default:\n return String(k);\n }\n }\n\n set value(vs) {\n //the csv mapper yields [] for an absent attribute; an empty string assigned\n //through the property is left alone, being a usable key for an <option value=\"\">\n const keys = (vs == null ? [] : Array.isArray(vs) ? vs : [vs]).map((k) => this.#coerceKey(k));\n //a key is what the value attribute carries, and that attribute is a comma\n //separated list: a key holding a comma cannot be written back into markup, so\n //a server rendered page could never preselect it. Said once and kept, rather\n //than split here, where splitting would quietly truncate a single select\n if (!this.#warnedComma && keys.some((k) => typeof k === 'string' && k.includes(','))) {\n //once per element, not once per page: a loop assigning bad keys to one\n //select is one mistake, where fifty selects holding one each are fifty\n this.#warnedComma = true;\n console.warn('a ful-select key cannot contain a comma: it is unexpressible in the value attribute', this);\n }\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, { key: k, label: k, metadata: undefined }]));\n const claim = this.#assignments.take();\n if (!this.#control) {\n return;\n }\n this.#syncBadges();\n if (keys.length === 0) {\n return;\n }\n this.#resolve(keys, claim);\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, claim) {\n const entries = await this.#loader.exact(...keys);\n if (claim.stale) {\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 //the loader keys are coerced too, so they line up with the assigned ones\n const resolved = new Map(entries.map((e) => [this.#coerceKey(e.key), e]));\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 /** The selection as {key, label, metadata} entries, the change detail's vocabulary: the only one for a single select, every one when multiple. */\n get entry() {\n const selection = this.#selection();\n if (this.#multiple) {\n return selection;\n }\n return selection[0] ?? null;\n }\n #useItemList;\n get multiple() {\n return this.#multiple;\n }\n set multiple(v) {\n this.#multiple = v;\n this.reflectTo('multiple', v);\n }\n get itemList() {\n return this.#useItemList;\n }\n set itemList(v) {\n this.#useItemList = v;\n this.reflectTo('item-list', v);\n }\n}\n\nexport { Dropdown, Select, SelectLoader };\n","import { Attributes, Fragments } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\n/** A group of radios declared as ful-radio children, a fieldset carrying the group semantics. */\nclass RadioGroup extends Field {\n static attributes = ['name', 'type'];\n static slots = true;\n static ROLE = 'radiogroup';\n static template = `\n <fieldset>\n <legend>\n {{{{ slots.default }}}}\n </legend>\n <header data-tpl-if=\"slots.header\">\n {{{{ slots.header }}}}\n </header>\n <ful-radio-list>\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 </ful-radio-list>\n <ful-field-error></ful-field-error>\n <footer data-tpl-if=\"slots.footer\">\n {{{{ slots.footer }}}}\n </footer>\n </fieldset>\n `;\n #fieldset;\n #firstRadio;\n #booleanType;\n /**\n * @param {{slots: any}} conf\n * @returns {any}\n */\n _build({ slots }) {\n const name = this.declared('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 this._notifyChange();\n });\n const label = Fragments.fromChildNodes(el);\n return [input, label];\n });\n\n radioEls.forEach((el) => {\n el.remove();\n });\n const fragment = this.template().withOverlay({ name, slots, inputsAndLabels }).render();\n this.#fieldset = /** @type HTMLElement */ (fragment.firstElementChild);\n this.#firstRadio = fragment.querySelector('input[type=radio]');\n this.#booleanType = this.declared('type') === 'boolean';\n //the group claims through its own fieldset, which carries disabled like a\n //native control, is the piece readonly freezes (radios have no editable\n //text to preserve) and announces the requirement; focus stays on the first radio,\n //and the host itself is described, there being no single control to name\n //and the legend being a fieldset's own label\n return {\n fragment,\n control: this.#firstRadio,\n error: fragment.querySelector('ful-field-error'),\n described: this,\n claims: this.#fieldset,\n //the radiogroup role is the host's, so the claims announce there: a\n //fieldset is a group, which accepts neither aria-readonly nor\n //aria-required\n announces: this,\n freeze: this.#fieldset,\n };\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 const radios = this.querySelectorAll(`input[type=radio]`);\n const clear = () => {\n radios.forEach((el) => {\n /** @type {HTMLInputElement} */ (el).checked = false;\n });\n };\n if (value === null) {\n clear();\n return;\n }\n /** @type {HTMLInputElement|null} */\n const el = this.querySelector(`input[type=radio][value=${CSS.escape(String(value))}]`);\n //an unknown key clears, like a null assignment and like the select's\n //unknown keys: a stale radio must not keep answering for it\n if (el === null) {\n clear();\n return;\n }\n el.checked = true;\n }\n}\n\nexport { RadioGroup };\n","import { Attributes } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\n/** A checkbox, or a switch under the type=switch claim. */\nclass Checkbox extends Field {\n static attributes = ['type'];\n static observed = ['value:bool'];\n static slots = true;\n static template = `\n <ful-choice data-tpl-switch=\"isSwitch\">\n <input type=\"checkbox\" data-tpl-role=\"isSwitch ? 'switch' : false\" form=\"\" placeholder=\" \">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </ful-choice>\n <ful-field-error></ful-field-error>\n `;\n #container;\n #input;\n _build({ slots }) {\n const isSwitch = this.declared('type') === 'switch';\n const fragment = this.template().withOverlay({ slots, isSwitch }).render();\n this.#container = fragment.firstElementChild;\n this.#input = fragment.querySelector('input');\n Attributes.forward('input-', this, this.#input);\n this.#input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this._notifyChange();\n });\n const label = fragment.querySelector('label');\n //the label neither wraps the input nor targets it, so the toggle is the\n //field's; the base adds the focus\n label.addEventListener('click', () => {\n if (!this._interactive()) {\n return;\n }\n this.value = !this.value;\n this._notifyChange();\n });\n //a checkbox has no editable text to preserve, so readonly freezes the\n //whole choice, label click included: the container is the frozen piece\n return {\n fragment,\n control: this.#input,\n error: fragment.querySelector('ful-field-error'),\n label,\n freeze: this.#container,\n };\n }\n get value() {\n return this.#input.checked;\n }\n set value(value) {\n this.#input.checked = value;\n }\n}\n\nexport { Checkbox };\n","import { Attributes, Fragments, Nodes, ParsedElement, Rendering } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\nimport { Failure } from '../../httpc/index.mjs';\n\n/** The sort control of a table header: focusable, keyboard-activated, walking asc, desc, unsorted. */\nclass SortButton extends ParsedElement {\n static attributes = ['sorter'];\n static observed = ['order'];\n #order;\n render() {\n const sorter = this.declared('sorter');\n const orders = ['asc', 'desc', null];\n this.setAttribute('role', 'button');\n this.setAttribute('tabindex', '0');\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 this.addEventListener('keydown', (/** @type any */ evt) => {\n if (evt.code !== 'Enter' && evt.code !== 'Space') {\n return;\n }\n evt.preventDefault();\n this.click();\n });\n }\n\n get order() {\n return this.#order || null;\n }\n\n set order(value) {\n this.#order = value || null;\n this.reflectTo('order', this.#order);\n //the column announces the sort, not this button: an attribute on another\n //element is not a reflection and has no business inside the guard\n const th = this.closest('th');\n if (!th) {\n return;\n }\n Attributes.set(th, 'aria-sort', this.#order ? ('asc' === this.#order ? 'ascending' : 'descending') : null);\n }\n}\n\n/** The pager: a window of page links around the current one, and the reload control. */\nclass Pagination extends ParsedElement {\n static observed = ['total:number', 'current:number'];\n static attributes = ['pages:number'];\n static config = {\n prevIcon: 'chevron-left',\n nextIcon: 'chevron-right',\n reloadIcon: 'arrow-clockwise',\n };\n static template = `\n <ful-pagination-bar role=\"navigation\" data-tpl-aria-label=\"#l10n:t('pagination.navigation')\">\n <ul>\n <li data-ref=\"index\"> {{ #l10n:t('pagination.showing', { 'current': curr.label, 'total': total }) }}</li>\n <li data-ref=\"reload\"><button type=\"button\" data-tpl-aria-label=\"#l10n:t('pagination.reload')\"><ful-icon data-tpl-name=\"config.reloadIcon\" aria-hidden=\"true\"></ful-icon></button></li>\n <li data-ref=\"prev\">\n <button type=\"button\" data-tpl-disabled=\"prev.enabled ? false : true\" data-tpl-aria-label=\"#l10n:t('pagination.previous')\" data-tpl-data-page=\"prev.index\">\n <ful-icon data-tpl-name=\"config.prevIcon\" aria-hidden=\"true\"></ful-icon>\n </button>\n </li>\n <li data-ref=\"page\" data-tpl-each=\"pages\" data-tpl-var=\"page\">\n <button type=\"button\" data-tpl-aria-current=\"curr.index == page.index ? 'page' : false\" data-tpl-data-page=\"page.index\" >\n {{ page.label }}\n </button>\n </li>\n <li data-ref=\"next\">\n <button type=\"button\" data-tpl-disabled=\"next.enabled ? false : true\" data-tpl-aria-label=\"#l10n:t('pagination.next')\" data-tpl-data-page=\"next.index\">\n <ful-icon data-tpl-name=\"config.nextIcon\" aria-hidden=\"true\"></ful-icon>\n </button>\n </li>\n </ul>\n </ful-pagination-bar>\n `;\n #total = 0;\n #current = 0;\n render() {\n this.addEventListener('click', (/** @type any */ evt) => {\n const el = evt.target.closest('button');\n if (!el || el.hasAttribute('disabled')) {\n //a disabled button leads nowhere: the page it would ask for does not exist\n return;\n }\n if (el.getAttribute('aria-current') === 'page') {\n //the page already shown stays focusable and announced, so it is a\n //real control: it just has nothing to ask for\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 /**\n * Moves the pager to a page, a page count, or both, and repaints once. The\n * two are one state: writing them one at a time repainted the bar twice per\n * load, the first pass drawing the new page against the old count.\n * @param {{ current?: number|null, total?: number|null }} [state]\n */\n update({ current: toCurrent, total: toTotal } = {}) {\n if (toCurrent !== undefined) {\n this.#current = toCurrent ?? 0;\n }\n if (toTotal !== undefined) {\n this.#total = toTotal ?? 0;\n }\n this.reflectTo('current', this.#current);\n this.reflectTo('total', this.#total);\n const current = this.#current;\n const total = this.#total;\n const maxRender = this.declared('pages') ?? 5;\n //an empty table is one empty page: everything downstream renders it like\n //any single page result\n const pageCount = Math.max(total, 1);\n const hasPrev = current > 0;\n const hasNext = current + 1 < pageCount;\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, pageCount));\n const first = Math.max(0, Math.min(current - Math.floor((rendered - 1) / 2), pageCount - rendered));\n const pages = Array.from({ length: rendered }, (_, offset) => ({\n index: first + offset,\n label: first + offset + 1,\n }));\n //the whole bar is replaced, so the control the reader activated is gone\n //by the time the new one paints: the focus follows it to its equivalent\n const focused = this.contains(document.activeElement)\n ? /** @type HTMLElement */ (document.activeElement).closest('li')?.getAttribute('data-ref')\n : null;\n const page = focused === 'page' ? /** @type any */ (document.activeElement).dataset.page : null;\n this.template().withOverlay({ total: pageCount, prev, curr, next, pages }).renderTo(this);\n if (!focused) {\n return;\n }\n const back =\n (page === null ? null : this.querySelector(`li[data-ref=page] button[data-page=\"${page}\"]`)) ??\n this.querySelector(`li[data-ref=${focused}] button:not(:disabled)`) ??\n this.querySelector('li[data-ref=page] button[aria-current=page]');\n /** @type HTMLElement */ (back)?.focus();\n }\n get total() {\n return this.#total;\n }\n set total(value) {\n //an absent attribute declares no pages, not a NaN one\n this.update({ total: value });\n }\n get current() {\n return this.#current;\n }\n set current(value) {\n this.update({ current: value });\n }\n}\n\n/** Reads the schema declaration into the header and row templates a table renders from. */\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 //only a sortable column carries the initial sort: an order without its\n //sorter would ask the backend for a \"null\" property\n const sort =\n columns\n .filter((v) => v.hasAttribute('order') && v.hasAttribute('sorter'))\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 //a column's attributes land on both cells, so a `data-tpl-*` written\n //once applies to the header and the body alike. `inHeaders` and\n //`inRows` are how an author tells them apart when that is not what\n //they meant: both templates carry the pair, so a column can say\n //`data-tpl-if=\"inRows\"` and appear in the body only\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\n/** Serves a table's rows from an array held in memory, applying the sort and the paging itself. */\nclass InMemoryTableLoader {\n #data;\n constructor(data) {\n this.#data = data;\n }\n async load(pageRequest, sortRequest, filterRequest) {\n //the header renders a sorter per sortable column whatever the loader is,\n //so the local one answers it rather than leaving it inert\n const rows = this.#sorted(sortRequest);\n const begin = pageRequest.page * pageRequest.size;\n const end = begin + pageRequest.size;\n const page = rows.slice(begin, end);\n const totalElements = rows.length;\n return {\n data: page,\n size: totalElements,\n };\n }\n #sorted(sortRequest) {\n if (!sortRequest?.sorter) {\n return this.#data;\n }\n const { sorter, order } = sortRequest;\n const sign = order === 'desc' ? -1 : 1;\n return [...this.#data].sort((l, r) => {\n const a = l?.[sorter];\n const b = r?.[sorter];\n if (a === b) {\n return 0;\n }\n //a missing value sorts last whichever way the column points\n if (a == null) {\n return 1;\n }\n if (b == null) {\n return -1;\n }\n return (a < b ? -1 : 1) * sign;\n });\n }\n update(data) {\n this.#data = data;\n }\n}\n\n/** Requests one page of rows from a url, passing the page, the sort and the filters to the endpoint. */\nclass RemoteTableLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n constructor(http, url, method, responseMapper = (response) => response) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\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 .then((response) => this.#responseMapper(response));\n }\n}\n\n/**\n * Builds the table's loader from its attributes: an in-memory one, or the\n * remote loader over src.\n *\n * A component registered under the `loader` attribute replaces this one and\n * must implement `load(pageRequest, sortRequest, filterRequest)`, answering\n * `{ data, page, size }` for the requested page. `pageRequest` carries the page\n * index and its size, `sortRequest` the column and direction, and\n * `filterRequest` the values of the filters in the slot.\n */\nclass TableLoader {\n static create(el, conf) {\n const url = el.getAttribute('src');\n if (url) {\n const http = el.component('http-client');\n const method = el.getAttribute('method') ?? 'GET';\n const responseMapper = el.hasAttribute('response-mapper')\n ? el.component(el.getAttribute('response-mapper'))\n : (/** @type any */ response) => response;\n return new RemoteTableLoader(http, url, method, responseMapper);\n }\n return new InMemoryTableLoader([]);\n }\n}\n\n/** A table loading its rows from a loader, with sorting, pagination and an optional filter form. */\nclass Table extends ParsedElement {\n static attributes = ['loader', 'autoload:presence'];\n /**\n * The page size stays live: a rows-per-page control is a normal thing to\n * put next to a table, and the size is the one piece of the request an\n * author changes after the table is up. The rest of the request is the\n * table's own state, moved by the pager, the sorters and the filter form.\n */\n static observed = ['page-size:number'];\n static slots = true;\n static config = {\n searchIcon: 'search',\n };\n static template = `\n <ful-form data-tpl-if=\"slots.filters\">\n {{{{ slots.filters }}}}\n </ful-form>\n <ful-table-wrapper>\n <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\"><ful-icon data-tpl-name=\"config.searchIcon\" aria-hidden=\"true\"></ful-icon></p>\n {{ #l10n:t('table.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\" role=\"status\"><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></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 role=\"alert\">\n <p>{{ #l10n:t('table.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 </ful-table-wrapper>\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\">\n {{ #l10n:t('table.no-data') }}\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 //initialised before the render so the size can be read and written on an\n //element the page has only just created\n /** @type {{ pageRequest: { page: number, size: number }, sortRequest: any, filterRequest: any }} */\n #latestRequest = { pageRequest: { page: 0, size: 10 }, sortRequest: null, filterRequest: {} };\n /** whether a load has been asked for, by autoload or by a caller */\n #loadRequested = false;\n #loads = new Claims();\n /** How many rows a page asks the loader for: the size the next load will carry. */\n get pageSize() {\n return this.#latestRequest.pageRequest.size;\n }\n /**\n * Changes the page size and reloads from the first page, the current index\n * meaning nothing under a new size. A table that has not loaded yet only\n * records it: writing the size is not a request to start loading, which is\n * what `autoload` and `reload()` are for.\n *\n * Absent or null is the default of ten, so removing the attribute restores\n * it rather than asking the loader for NaN rows.\n */\n set pageSize(value) {\n const size = value ?? 10;\n if (size === this.#latestRequest.pageRequest.size) {\n return;\n }\n this.#latestRequest = { ...this.#latestRequest, pageRequest: { page: 0, size } };\n if (!this.#loadRequested) {\n return;\n }\n //the rejection escapes on purpose, as it does for the page, sort and\n //filter listeners: load renders its own error state and the unhandled\n //rejection is what reports the failure\n this.reload();\n }\n async render({ slots }) {\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, 'ful-table-wrapper'));\n const table = /** @type HTMLTableElement */ (tableWrapper.querySelector('table'));\n Attributes.forward('table-', this, table);\n this.#loader = this.component(this.declared('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 //the declared size lands here rather than through the setter: the base\n //applies the observed values after the render returns, and by then the\n //autoload below has already asked for the first page\n this.#latestRequest = {\n pageRequest: {\n page: 0,\n size: this.declared('page-size') ?? 10,\n },\n sortRequest: schema.sort,\n filterRequest: maybeForm?.values ?? {},\n };\n //the page, sort and filter listeners let load's rejection escape on purpose:\n //load renders its own error state, and the unhandled rejection is what\n //reports the failure (the autoload below reports the same way)\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 //only the load that still owns the table commits the header: a superseded\n //sort must not wipe the arrows of the one that won, and a failed one\n //leaves them where they were\n if (this.#latestRequest.sortRequest !== sortRequest) {\n return;\n }\n this.#sorters.forEach((s) => {\n s.order = null;\n });\n e.target.order = e.detail.value.order;\n });\n if (this.declared('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 //marked before the await, not when a response comes back: a size written\n //while the first load is still in flight has to reload rather than be\n //overwritten by the answer to the request it replaced\n this.#loadRequested = true;\n //each load claims the table: a response resolving after a newer load has\n //started is stale, and neither renders nor updates the request a later\n //reload replays, whichever order the responses arrive in\n const claim = this.#loads.take();\n this.#body.replaceChildren();\n this.#loading.removeAttribute('hidden');\n this.#feedback.setAttribute('hidden', '');\n this.#noAutoload.setAttribute('hidden', '');\n this.setAttribute('aria-busy', 'true');\n try {\n const pageResponse = await this.#loader.load(pageRequest, sortRequest, filterRequest);\n if (claim.stale) {\n return;\n }\n this.#latestRequest = { pageRequest, sortRequest, filterRequest };\n this.#update(pageRequest, sortRequest, filterRequest, pageResponse);\n } catch (/** @type any */ error) {\n if (claim.stale) {\n //the newer load owns the table and its outcome: a superseded\n //failure is neither shown nor thrown\n return;\n }\n this.#loading.setAttribute('hidden', '');\n this.#feedback.removeAttribute('hidden');\n this.#feedback.querySelector('[data-ref=feedback-error]').textContent = Failure.problemsText(\n error,\n `${error}`,\n );\n throw error;\n } finally {\n //a superseded load owns nothing, the newer one's busy state included\n if (!claim.stale) {\n this.removeAttribute('aria-busy');\n }\n }\n }\n /** Hands the loader to the callback, for runtime reconfigurations. */\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 const pages = Math.ceil(pageResponse.size / pageRequest.size);\n const lastPage = Math.max(0, pages - 1);\n if (pageRequest.page > lastPage) {\n //the data shrank behind the page being answered: the last page that\n //still exists is loaded instead of an out-of-range empty one\n this.load({ page: lastPage, size: pageRequest.size }, sortRequest, filterRequest);\n return;\n }\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 //one move, one repaint: the page and the count are the same state\n this.#paginator.update({ current: pageRequest.page, total: pages });\n }\n}\n\nexport { TableLoader, SortButton, Table, TableSchemaParser, Pagination };\n","import { Attributes } from '../../ftl/index.mjs';\nimport { wireAnchoredPopover } from '../disclosures/anchors.mjs';\n\n/**\n * An invoker button paired with the `ul[popover][role=menu]` that follows it:\n * the chrome behind every filter's operator, sensitivity and boolean value.\n *\n * It fills the menu from a vocabulary, wires it the first time more than one\n * choice survives the whitelist, pins the button to a static glyph when a\n * single one does, owns the roving focus and the Escape/Enter handling, and\n * keeps the button's value, glyph and aria-label in step. A pick that changes\n * the value calls back; the host decides what that means.\n *\n * The button's `value` attribute is the store, as it is for a native control:\n * the menu protocol finds the current item by it, and nothing mirrors it.\n */\nclass ChoiceButton {\n /** The declared choices narrowed to a vocabulary; an empty or unknown set means all of it. */\n static narrow(declared, vocabulary) {\n const narrowed = (declared ?? []).filter((choice) => vocabulary.includes(choice));\n return narrowed.length > 0 ? narrowed : [...vocabulary];\n }\n #button;\n #menu;\n #vocabulary;\n #glyphs;\n #labelFor;\n #display;\n #interactive;\n #onPick;\n #allowed;\n #claimed = false;\n #wired = false;\n /**\n * @param {HTMLElement} button the invoker, whose next sibling is its menu\n * @param {{vocabulary: string[], glyphs?: Record<string,string>, labelFor?: (v: string) => string,\n * display?: ((v: string) => string)|null, interactive?: () => boolean, onPick?: (v: string) => void}} conf\n */\n constructor(\n button,\n { vocabulary, glyphs = {}, labelFor = (v) => v, display = null, interactive = () => true, onPick = () => {} },\n ) {\n this.#button = button;\n this.#menu = /** @type HTMLElement */ (button.nextElementSibling);\n this.#vocabulary = vocabulary;\n this.#glyphs = glyphs;\n this.#labelFor = labelFor;\n //the button shows the compact glyph by default; a menu whose choices have\n //no glyph shows the word instead\n this.#display = display ?? ((choice) => glyphs[choice] ?? choice);\n this.#interactive = interactive;\n this.#onPick = onPick;\n this.#allowed = [...vocabulary];\n this.#menu.addEventListener('click', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n const item = /** @type HTMLElement | null */ (target.closest('li > a'));\n if (!item || !this.#interactive()) {\n return;\n }\n const picked = /** @type string */ (item.getAttribute('value'));\n const previous = this.value;\n this.value = picked;\n /** @type any */ (this.#menu).hidePopover?.();\n if (previous !== picked) {\n this.#onPick(picked);\n }\n });\n }\n /** The choices the host declared, narrowed to the vocabulary; an empty or unknown set means all of it. */\n get allowed() {\n return this.#allowed;\n }\n set allowed(declared) {\n this.#allowed = ChoiceButton.narrow(declared, this.#vocabulary);\n this.#fill();\n if (!this.#wired && this.#allowed.length > 1) {\n this.#wire();\n this.#wired = true;\n }\n this.#sync();\n if (this.pinned) {\n this.value = this.#allowed[0];\n }\n }\n /** A single surviving choice pins the button: a static glyph, no popup, and every read answers it. */\n get pinned() {\n return this.#allowed.length < 2;\n }\n get value() {\n return this.#button.getAttribute('value');\n }\n set value(choice) {\n this.#button.setAttribute('value', choice);\n //the button carries the compact glyph, announced through its label: the\n //menu is where the localized words live\n this.#button.textContent = this.#display(choice);\n Attributes.set(this.#button, 'aria-label', this.#labelFor(choice));\n }\n /** The host's disabled claim, composed with the pin: lifting one cannot lift the other. */\n set claimed(claimed) {\n this.#claimed = claimed;\n this.#sync();\n }\n #fill() {\n this.#menu.replaceChildren(\n ...this.#allowed.map((choice) => {\n const li = document.createElement('li');\n li.setAttribute('role', 'none');\n const a = document.createElement('a');\n a.setAttribute('role', 'menuitem');\n a.setAttribute('tabindex', '-1');\n a.setAttribute('value', choice);\n const word = this.#labelFor(choice);\n const glyph = this.#glyphs[choice] ?? choice;\n if (word === choice && glyph === choice) {\n a.innerText = choice;\n } else {\n const glyphSpan = document.createElement('span');\n glyphSpan.innerText = glyph;\n const wordSpan = document.createElement('span');\n wordSpan.innerText = word;\n a.append(glyphSpan, wordSpan);\n }\n li.append(a);\n return li;\n }),\n );\n }\n #sync() {\n const pinned = this.pinned;\n this.#button.toggleAttribute('disabled', pinned || this.#claimed);\n Attributes.set(this.#button, 'aria-haspopup', pinned ? null : 'true');\n Attributes.set(this.#button, 'aria-expanded', pinned ? null : 'false');\n if (pinned) {\n this.#button.removeAttribute('popovertarget');\n } else if (this.#menu.id) {\n //the menu is wired once, its link is what a pin may break: lifting the\n //pin re-links the invoker to the menu it already owns\n this.#button.setAttribute('popovertarget', this.#menu.id);\n }\n }\n #items() {\n return Array.from(this.#menu.querySelectorAll('li > a'), (a) => /** @type HTMLAnchorElement */ (a));\n }\n #wire() {\n const button = this.#button;\n const menu = this.#menu;\n wireAnchoredPopover(button, menu, { prefix: 'ful-filter-menu', invoke: true, expanded: true });\n menu.addEventListener('toggle', (/** @type any */ evt) => {\n if (evt.newState !== 'open') {\n //give the invoker back the focus the menu had borrowed, without\n //stealing it from wherever else the close came from\n if (menu.contains(document.activeElement)) {\n button.focus();\n }\n return;\n }\n const items = this.#items();\n (items.find((a) => a.getAttribute('value') === this.value) ?? items[0])?.focus();\n });\n menu.addEventListener('keydown', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n const item = /** @type HTMLAnchorElement | null */ (target.closest('li > a'));\n if (!item) {\n return;\n }\n const items = this.#items();\n const at = items.indexOf(item);\n switch (evt.code) {\n case 'ArrowDown': {\n evt.preventDefault();\n items[(at + 1) % items.length]?.focus();\n break;\n }\n case 'ArrowUp': {\n evt.preventDefault();\n items[(at - 1 + items.length) % items.length]?.focus();\n break;\n }\n case 'Home': {\n evt.preventDefault();\n items[0]?.focus();\n break;\n }\n case 'End': {\n evt.preventDefault();\n items[items.length - 1]?.focus();\n break;\n }\n case 'Enter':\n case 'Space': {\n evt.preventDefault();\n item.click();\n button.focus();\n break;\n }\n case 'Escape': {\n //the platform's close request hides the menu, the focus is placed\n //on the invoker before the focused item is detached from it\n button.focus();\n break;\n }\n }\n });\n }\n}\n\nexport { ChoiceButton };\n","import { Localization } from '../../ftl/index.mjs';\nimport { ChoiceButton } from './choice-button.mjs';\nimport { Field } from './field.mjs';\nimport { Instant } from './temporals.mjs';\nimport { Input } from './input.mjs';\n\nconst GLYPHS = {\n EQ: '=',\n NEQ: '≠',\n LT: '<',\n GT: '>',\n LTE: '≤',\n GTE: '≥',\n BETWEEN: '↔',\n CONTAINS: '…a…',\n STARTS_WITH: 'a…',\n ENDS_WITH: '…a',\n};\nconst COMPARE_OPERATORS = ['EQ', 'NEQ', 'LT', 'GT', 'LTE', 'GTE', 'BETWEEN'];\nconst TEXT_OPERATORS = [...COMPARE_OPERATORS, 'CONTAINS', 'STARTS_WITH', 'ENDS_WITH'];\nconst SENSITIVITIES = ['IGNORE_CASE', 'CASE_SENSITIVE'];\n\nconst SENSITIVITY_GLYPHS = {\n IGNORE_CASE: 'aa',\n CASE_SENSITIVE: 'Aa',\n};\n\n/** the labels live in the built-in translations, resolved through the same localization every template uses */\nconst { t } = Localization.of();\nconst operatorLabel = (op) => t(`filters.op.${op}`);\nconst sensitivityLabel = (sensitivity) => t(`filters.sensitivity.${sensitivity}`);\nconst booleanValueLabel = (token) => t(token === '' ? 'filters.boolean.any' : `filters.boolean.${token}`);\n\n/**\n * The shared shape of every operator-and-operands filter: an operator menu, one\n * or two operands of the type the subclass declares, and a tuple that mirrors\n * the data-jpa compare annotations.\n */\nclass CompareFilter extends Input {\n static observed = ['value:json', 'operators:csv'];\n static OPERATORS = COMPARE_OPERATORS;\n static DEFAULT_OPERATOR = 'EQ';\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <ful-control>\n <input data-ref=\"value1\" data-tpl-type=\"type\" form=\"\">\n <input data-ref=\"value2\" data-tpl-type=\"type\" form=\"\" hidden>\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _operator;\n _container;\n _value1;\n _value2;\n _build(conf) {\n const pieces = super._build(conf);\n const fragment = pieces.fragment;\n this._container = fragment.querySelector('ful-control-group');\n this._value1 = fragment.querySelector('[data-ref=value1]');\n this._value2 = fragment.querySelector('[data-ref=value2]');\n this._operator = new ChoiceButton(/** @type HTMLElement */ (fragment.querySelector('[data-ref=operator]')), {\n vocabulary: this._vocabulary(),\n glyphs: GLYPHS,\n labelFor: operatorLabel,\n interactive: () => this._interactive(),\n onPick: () => {\n this._syncBetween();\n this._notifyChange();\n },\n });\n //the default operator below reads the whitelist, so it is resolved here\n //rather than waiting for the base's declared pass\n this.operators = this.declared('operators');\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 if (this._operator.value === null) {\n this._showDefaultOperator();\n }\n //the second operand mirrors the claims like the first one does, and the\n //freeze reaches the operator and sensitivity buttons, whose popovers an\n //input's readOnly cannot touch\n return { ...pieces, freeze: this._container, also: [this._value2] };\n }\n _showDefaultOperator() {\n const preferred = this._defaultOperator();\n const allowed = this._operator.allowed;\n this._showOperator(allowed.includes(preferred) ? preferred : allowed[0]);\n }\n formResetCallback() {\n //a declared tuple restores its operator through the base's assignment; a\n //valueless reset also brings the operator back to the default it rendered with\n super.formResetCallback();\n if (!this.hasAttribute('value')) {\n this._showDefaultOperator();\n }\n }\n _type() {\n return 'text';\n }\n _serialize(v) {\n return v;\n }\n _deserialize(v) {\n return v;\n }\n _defaultOperator() {\n return 'EQ';\n }\n _vocabulary() {\n return COMPARE_OPERATORS;\n }\n _declaredOperators;\n get operators() {\n //a page may whitelist before the upgrade: the narrowed set is held until\n //the button exists, and the declared attribute lands over it when the\n //base applies the declared state\n return this._operator ? this._operator.allowed : this._declaredOperators;\n }\n set operators(declared) {\n if (!this._operator) {\n this._declaredOperators = ChoiceButton.narrow(declared, this._vocabulary());\n return;\n }\n this._operator.allowed = declared;\n this._syncBetween();\n }\n get value() {\n return this._tuple();\n }\n set value(v) {\n this._applyTuple(v);\n }\n _tuple() {\n const operator = this._operator.value;\n const values = operator === 'BETWEEN' ? [this._value1.value, this._value2.value] : [this._value1.value];\n return values.some((v) => v === '') ? null : [operator, ...values.map((v) => this._serialize(v))];\n }\n _applyTuple(v) {\n if (v == null) {\n this._value1.value = '';\n this._value2.value = '';\n return;\n }\n const [declared, ...values] = v;\n //a pinned operator wins over whatever the tuple carries\n const operator = this._operator.pinned ? this._operator.allowed[0] : declared;\n this._showOperator(operator);\n //a tuple shorter than the operands leaves the missing ones empty: the DOM\n //would stringify a nullish assignment to \"undefined\"\n this._value1.value = values[0] ? this._deserialize(values[0]) : (values[0] ?? '');\n this._value2.value = values[1] ? this._deserialize(values[1]) : (values[1] ?? '');\n }\n _showOperator(operator) {\n this._operator.value = operator;\n this._syncBetween();\n }\n /** only a BETWEEN carries a second operand */\n _syncBetween() {\n this._value2.toggleAttribute('hidden', this._operator.value !== 'BETWEEN');\n }\n get disabled() {\n return super.disabled;\n }\n set disabled(d) {\n //the claim and both operands are the base's; the chrome buttons are not,\n //frozen by a pin, disabled by the claim, or both\n super.disabled = d;\n for (const choice of this._choices()) {\n choice.claimed = d;\n }\n }\n /** every menu button the filter composes, so one claim reaches them all */\n _choices() {\n return [this._operator].filter((c) => c);\n }\n}\n\n/** The compare filter over ISO instants, defaulting to LTE. */\nclass InstantFilter extends CompareFilter {\n _defaultOperator() {\n return 'LTE';\n }\n _type() {\n return 'datetime-local';\n }\n _serialize(v) {\n return Instant.localToIso(v);\n }\n _deserialize(v) {\n return Instant.isoToLocal(v);\n }\n}\n\n/** The compare filter over dates. */\nclass LocalDateFilter extends CompareFilter {\n _type() {\n return 'date';\n }\n}\n\n/** The compare filter over numbers. */\nclass NumberFilter extends CompareFilter {\n _type() {\n return 'number';\n }\n}\n\n/** The compare filter over text, carrying a case sensitivity beside the operator. */\nclass TextFilter extends CompareFilter {\n static observed = ['sensitivities:csv'];\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n <button data-ref=\"sensitivity\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <ful-control>\n <input data-ref=\"value1\" data-tpl-type=\"type\" form=\"\">\n <input data-ref=\"value2\" data-tpl-type=\"type\" form=\"\" hidden>\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _defaultOperator() {\n return 'CONTAINS';\n }\n _vocabulary() {\n return TEXT_OPERATORS;\n }\n //the sensitivity is carried through from whoever set the value, switched\n //through its own menu, or pinned to the single mode the sensitivities\n //attribute whitelists\n _sensitivityButton;\n _build(conf) {\n const pieces = super._build(conf);\n this._sensitivityButton = new ChoiceButton(\n /** @type HTMLElement */ (pieces.fragment.querySelector('[data-ref=sensitivity]')),\n {\n vocabulary: SENSITIVITIES,\n glyphs: SENSITIVITY_GLYPHS,\n labelFor: sensitivityLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n },\n );\n this._sensitivityButton.allowed = null;\n this._sensitivityButton.value = SENSITIVITIES[0];\n return pieces;\n }\n _choices() {\n return [...super._choices(), this._sensitivityButton].filter((c) => c);\n }\n get _sensitivity() {\n return this._sensitivityButton.value;\n }\n _declaredSensitivities;\n get sensitivities() {\n return this._sensitivityButton ? this._sensitivityButton.allowed : this._declaredSensitivities;\n }\n set sensitivities(declared) {\n if (!this._sensitivityButton) {\n this._declaredSensitivities = ChoiceButton.narrow(declared, SENSITIVITIES);\n return;\n }\n const previous = this._sensitivityButton.value;\n this._sensitivityButton.allowed = declared;\n if (!this._sensitivityButton.allowed.includes(previous)) {\n this._sensitivityButton.value = this._sensitivityButton.allowed[0];\n }\n }\n get value() {\n const tuple = this._tuple();\n return tuple == null ? null : [tuple[0], this._sensitivity, ...tuple.slice(1)];\n }\n set value(v) {\n if (v == null) {\n this._applyTuple(v);\n return;\n }\n if (this._sensitivityButton.allowed.includes(v[1])) {\n this._sensitivityButton.value = v[1];\n }\n this._applyTuple([v[0], ...v.slice(2)]);\n }\n formResetCallback() {\n //a declared tuple restores its sensitivity through the value assignment;\n //a valueless reset brings it back to the default it rendered with, the\n //class default normalized against the whitelist\n super.formResetCallback();\n if (!this.hasAttribute('value')) {\n const allowed = this._sensitivityButton.allowed;\n this._sensitivityButton.value = allowed.includes('IGNORE_CASE') ? 'IGNORE_CASE' : allowed[0];\n }\n }\n}\n\nconst BOOLEAN_VALUES = ['', 'true', 'false'];\nconst BOOLEAN_VALUE_GLYPHS = { true: '✓', false: '✗' };\n\n/** The boolean filter: an EQ or NEQ operator and an any/yes/no menu. */\nclass BooleanFilter extends Field {\n static observed = ['value:json', 'operators:csv'];\n static slots = true;\n static OPERATORS = ['EQ', 'NEQ'];\n static DEFAULT_OPERATOR = 'EQ';\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <button data-ref=\"value\" type=\"button\" form=\"\"></button>\n <ul popover role=\"menu\"></ul>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _operator;\n _value;\n _container;\n _build({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this._container = fragment.querySelector('ful-control-group');\n const valueButton = fragment.querySelector('[data-ref=value]');\n this._operator = new ChoiceButton(fragment.querySelector('[data-ref=operator]'), {\n vocabulary: BooleanFilter.OPERATORS,\n glyphs: GLYPHS,\n labelFor: operatorLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n });\n //the value button carries the word rather than a glyph: 'any' has none\n this._value = new ChoiceButton(valueButton, {\n vocabulary: BOOLEAN_VALUES,\n glyphs: BOOLEAN_VALUE_GLYPHS,\n labelFor: booleanValueLabel,\n display: booleanValueLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n });\n this.operators = this.declared('operators');\n const allowed = this._operator.allowed;\n this._operator.value = allowed.includes(BooleanFilter.DEFAULT_OPERATOR)\n ? BooleanFilter.DEFAULT_OPERATOR\n : allowed[0];\n this._value.allowed = null;\n this._value.value = '';\n return {\n fragment,\n control: valueButton,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n //a button accepts neither aria-readonly nor aria-required\n announces: null,\n freeze: this._container,\n };\n }\n _declaredOperators;\n get operators() {\n //a page may whitelist before the upgrade: the narrowed set is held until\n //the button exists, and the declared attribute lands over it when the\n //base applies the declared state\n return this._operator ? this._operator.allowed : this._declaredOperators;\n }\n set operators(declared) {\n if (!this._operator) {\n this._declaredOperators = ChoiceButton.narrow(declared, this._vocabulary());\n return;\n }\n this._operator.allowed = declared;\n }\n _vocabulary() {\n return BooleanFilter.OPERATORS;\n }\n get value() {\n return this._value.value === '' ? null : [this._operator.value, this._value.value];\n }\n set value(v) {\n if (v == null) {\n this._value.value = '';\n return;\n }\n //a pinned operator wins over whatever the tuple carries\n this._operator.value = this._operator.pinned ? this._operator.allowed[0] : v[0];\n this._value.value = v[1] ?? '';\n }\n get disabled() {\n return super.disabled;\n }\n set disabled(d) {\n super.disabled = d;\n //the menu buttons are frozen by a pin, disabled by the claim, or both\n for (const choice of [this._operator, this._value].filter((c) => c)) {\n choice.claimed = d;\n }\n }\n}\n\nexport { BooleanFilter, CompareFilter, InstantFilter, LocalDateFilter, NumberFilter, TextFilter };\n","import { Failure } from '../../httpc/index.mjs';\nimport { Claims } from '../claims.mjs';\n\n/**\n * The async section machinery shared by ful-tabs, ful-wizard, ful-dialog and\n * ful-drawer: every activation of a section fires the section:requested family\n * on the host component (bubbling: the generic type, the #index type, and the\n * data-step name when present) and awaits the union of the answers, wherever\n * they were registered. The event's target is the component, whose local name\n * telling the family, e.target === e.currentTarget separating a host's own\n * sections from a nested component's, while detail.section stays the write\n * target. No listener is a plain pass-through, and the first-entry flag is not\n * even spent, so a listener attached later still sees the first activation. A\n * pending answer shows the loading chrome a frame late (answers that never\n * pend never flash) and declares the section aria-busy; a delivery superseded\n * by a newer activation of the same section owns no chrome; a rejection paints\n * the section's error chrome, replacing whatever a previous answer had\n * painted, and travels to the caller.\n */\nclass SectionRequests {\n #entered = new WeakSet();\n /** one generation of claims per section: the sections contend separately */\n #claims = new WeakMap();\n\n /**\n * @param {Element} host\n * @param {Element} section\n * @param {string|null} name\n * @param {number|null} index\n * @returns {Promise<any[]|undefined>} the union of the answers, or undefined when nobody listened\n */\n async request(host, section, name, index) {\n const first = !this.#entered.has(section);\n const detail = { name, section, index, first };\n const types = [\n 'section:requested',\n ...(index !== null && index !== undefined ? [`section:requested:#${index}`] : []),\n ...(name ? [`section:requested:${name}`] : []),\n ];\n const promises = [];\n for (const type of types) {\n const evt = /** @type {CustomEvent & { async?: { promises: Promise<any>[] } }} */ (\n new CustomEvent(type, { bubbles: true, detail })\n );\n host.dispatchEvent(evt);\n promises.push(...(evt.async?.promises ?? []));\n }\n if (promises.length === 0) {\n return undefined;\n }\n this.#entered.add(section);\n let claims = this.#claims.get(section);\n if (!claims) {\n claims = new Claims();\n this.#claims.set(section, claims);\n }\n const claim = claims.take();\n const owned = () => !claim.stale;\n section.querySelector(':scope > .ful-section-error')?.remove();\n const frame = requestAnimationFrame(() => {\n if (owned()) {\n section.toggleAttribute('loading', true);\n section.setAttribute('aria-busy', 'true');\n }\n });\n try {\n return await Promise.all(promises);\n } catch (cause) {\n if (owned()) {\n this.#paintError(section, cause);\n }\n throw cause;\n } finally {\n cancelAnimationFrame(frame);\n if (owned()) {\n section.toggleAttribute('loading', false);\n section.removeAttribute('aria-busy');\n }\n }\n }\n\n #paintError(section, cause) {\n section.querySelector(':scope > .ful-section-error')?.remove();\n const error = document.createElement('div');\n error.className = 'ful-section-error';\n error.setAttribute('role', 'alert');\n error.textContent = Failure.problemsText(cause);\n section.prepend(error);\n }\n}\n\nexport { SectionRequests };\n","/**\n * The dialog-target delegation, shared by the dialog and the drawer: any\n * element carrying dialog-target set to a dialog-bearing ful element's id\n * opens it, clones included. Wired once per document.\n */\nlet targetsWired = false;\nconst wireTargets = () => {\n if (targetsWired) {\n return;\n }\n targetsWired = true;\n document.addEventListener('click', (/** @type any */ e) => {\n const trigger = e.target.closest?.('[dialog-target]');\n if (!trigger) {\n return;\n }\n /** @type {any} */ (document.getElementById(trigger.getAttribute('dialog-target')))?.open?.();\n });\n};\n\nexport { wireTargets };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\nimport { wireAnchoredPopover } from './anchors.mjs';\nimport { wireTargets } from './targets.mjs';\n\n/** An info icon button toggling a popover with a short explanation. */\nclass Tooltip extends ParsedElement {\n static slots = true;\n static attributes = ['placement'];\n static config = {\n icon: 'info-circle-fill',\n };\n static template = `\n <button type=\"button\" class=\"ful-tip\" data-ref=\"trigger\" data-tpl-aria-label=\"#l10n:t('info.tooltip')\"><ful-icon data-tpl-name=\"config.icon\" aria-hidden=\"true\"></ful-icon></button>\n <ful-note popover data-ref=\"content\">{{{{ slots.default }}}}</ful-note>\n `;\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n const trigger = fragment.querySelector('[data-ref=trigger]');\n const content = fragment.querySelector('[data-ref=content]');\n //placed here rather than by the anchor css: the note draws a callout that\n //has to point at the trigger wherever the viewport left room for the note,\n //which is a measurement the stylesheet cannot make for a pseudo-element\n wireAnchoredPopover(trigger, content, { prefix: 'ful-tooltip', invoke: true, expanded: true, handPlace: true });\n const placement = this.declared('placement');\n if (placement) {\n content.setAttribute('placement', placement);\n }\n this.replaceChildren(fragment);\n }\n}\n\n/** A modal dialog on the native platform, open()/ask() resolving with the closer's data-result. */\nclass Dialog extends ParsedElement {\n static attributes = ['header'];\n static slots = true;\n static template = `\n <dialog data-ref=\"dialog\" class=\"ful-dialog\">\n <header data-tpl-if=\"header\"><h2>{{ header }}</h2></header>\n <div data-ref=\"body\">{{{{ slots.default }}}}</div>\n <footer>\n <button type=\"button\" data-ref=\"acknowledge\" data-result=\"acknowledged\" data-tpl-if=\"!slots.buttons\" data-tpl-aria-label=\"#l10n:t('dialog.acknowledge')\">{{ #l10n:t('dialog.acknowledge') }}</button>\n {{{{ slots.buttons }}}}\n </footer>\n </dialog>\n `;\n #dialog;\n #body;\n #requests = new SectionRequests();\n #resolvers = [];\n render({ slots }) {\n const fragment = this.template()\n .withOverlay({ slots, header: this.declared('header') ?? '' })\n .render();\n this.#dialog = fragment.querySelector('[data-ref=dialog]');\n this.#body = fragment.querySelector('[data-ref=body]');\n this.#dialog.addEventListener('close', () => {\n this.dispatchEvent(\n new CustomEvent('close', {\n detail: { result: this.#dialog.returnValue === '' ? null : this.#dialog.returnValue },\n }),\n );\n this.#settle();\n });\n this.#dialog.addEventListener('click', (/** @type any */ e) => {\n const result = e.target.closest('button[data-result]')?.dataset.result;\n if (result !== undefined) {\n this.#dialog.close(result);\n }\n });\n this.replaceChildren(fragment);\n wireTargets();\n }\n //answers every waiter with the dialog's own answer: null while still open\n //or closed without a result, which is also the unanswered answer a dialog\n //leaving the document owes its waiters instead of hanging them\n #settle() {\n const resolvers = this.#resolvers;\n this.#resolvers = [];\n for (const resolve of resolvers) {\n resolve(this.#dialog.returnValue === '' ? null : this.#dialog.returnValue);\n }\n }\n disconnectedCallback() {\n this.#settle();\n }\n open() {\n return this.ask();\n }\n ask() {\n if (!this.#dialog.open) {\n this.#dialog.returnValue = '';\n this.#dialog.showModal();\n this.#request();\n }\n return new Promise((resolve) => {\n this.#resolvers.push(resolve);\n });\n }\n #request() {\n this.#requests.request(this, this.#body, null, null)?.catch(() => undefined);\n }\n /**\n * Re-fires section:requested on the body, open or closed: the explicit\n * request for a body that wants refreshing. A failed refresh paints its\n * problems, nothing rejects: there is no caller to reject towards.\n */\n refresh() {\n return this.#requests.request(this, this.#body, null, null)?.then(undefined, () => undefined);\n }\n close(result) {\n this.#dialog.close(result ?? '');\n }\n}\n\nexport { Tooltip, Dialog };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\nimport { Failure } from '../../httpc/index.mjs';\nimport { wireTargets } from './targets.mjs';\n\n/** A side panel drawer on the native dialog platform, update() owning its open-deliver cycle. */\nclass Drawer extends ParsedElement {\n static attributes = ['title', 'placement'];\n static slots = true;\n static template = `\n <dialog data-ref=\"dialog\" class=\"ful-drawer\">\n <header>\n <h2 data-ref=\"title\">{{ title }}</h2>\n <button type=\"button\" data-ref=\"close\" data-tpl-aria-label=\"#l10n:t('drawer.close')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button>\n </header>\n <section data-ref=\"loading\" hidden><ful-spinner class=\"centered\" role=\"status\"><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner></section>\n <section data-ref=\"error\" role=\"alert\" hidden></section>\n <section data-ref=\"content\">{{{{ slots.default }}}}</section>\n </dialog>\n `;\n #dialog;\n #title;\n #loading;\n #error;\n #content;\n #requests = new SectionRequests();\n #updates = new Claims();\n render({ slots }) {\n const fragment = this.template()\n .withOverlay({ slots, title: this.declared('title') ?? '' })\n .render();\n this.#dialog = fragment.querySelector('[data-ref=dialog]');\n this.#title = fragment.querySelector('[data-ref=title]');\n this.#loading = fragment.querySelector('[data-ref=loading]');\n this.#error = fragment.querySelector('[data-ref=error]');\n this.#content = fragment.querySelector('[data-ref=content]');\n const placement = this.declared('placement');\n if (placement) {\n this.#dialog.setAttribute('placement', placement);\n }\n fragment.querySelector('[data-ref=close]').addEventListener('click', () => this.close());\n this.#dialog.addEventListener('close', () => {\n this.dispatchEvent(new CustomEvent('close'));\n });\n this.replaceChildren(fragment);\n wireTargets();\n }\n get title() {\n return this.#title.textContent;\n }\n set title(v) {\n this.#title.textContent = v ?? '';\n }\n /**\n * Opens the drawer under the given title and waits for the callback: a\n * resolved value paints the content section (which is returned), a\n * rejection paints the problems and travels to the caller, and an update\n * superseded by a newer one paints nothing.\n */\n async update(title, cb) {\n //the claim detaches any update still in flight: its outcome belongs to\n //an abandoned opening and must neither be painted nor own the drawer\n const claim = this.#updates.take();\n this.title = title;\n this.#content.replaceChildren();\n this.#restChrome();\n this.#loading.removeAttribute('hidden');\n this.#content.setAttribute('hidden', '');\n //update owns its own open-answer-deliver cycle, so it shows the dialog\n //without going through open(): a user reopen during the wait is a\n //real open and goes through open()\n this.#show();\n try {\n const delivered = await cb();\n if (claim.stale) {\n return this.#content;\n }\n this.#content.replaceChildren(delivered);\n this.#loading.setAttribute('hidden', '');\n this.#content.removeAttribute('hidden');\n return this.#content;\n } catch (/** @type any */ e) {\n if (!claim.stale) {\n //revealed before it is filled, so the live region announces the\n //change rather than being revealed already holding it\n this.#error.removeAttribute('hidden');\n this.#error.textContent = Failure.problemsText(e);\n this.#loading.setAttribute('hidden', '');\n this.#content.setAttribute('hidden', '');\n }\n throw e;\n }\n }\n /**\n * Re-fires section:requested on the content, open or closed: the explicit\n * request for a body that wants refreshing. A failed refresh paints its\n * problems, nothing rejects: update() stays the rejecting call.\n */\n refresh() {\n return this.#requests.request(this, this.#content, null, null)?.then(undefined, () => undefined);\n }\n open() {\n if (!this.#show()) {\n return;\n }\n this.#restChrome();\n this.#requests.request(this, this.#content, null, null)?.catch(() => undefined);\n }\n close() {\n this.#dialog.close();\n }\n /** Shows the modal, answering whether this call is the one that opened it. */\n #show() {\n if (this.#dialog.open) {\n return false;\n }\n this.#dialog.showModal();\n return true;\n }\n #restChrome() {\n this.#error.replaceChildren();\n this.#error.setAttribute('hidden', '');\n this.#loading.setAttribute('hidden', '');\n this.#content.removeAttribute('hidden');\n }\n}\n\nexport { Drawer };\n","import { Localization, ParsedElement } from '../../ftl/index.mjs';\nimport { Failure } from '../../httpc/index.mjs';\n\nconst SEVERITIES = ['info', 'success', 'warning', 'error'];\n\n//the regions alive in the document: the show-toast listener is wired once and\n//forwards to each of them, so a re-hosted or second region never doubles a toast\nconst REGIONS = new Set();\nlet listenerWired = false;\n\n/** A transient feedback region: each show() stacks a toast that retires on its own timer. */\nclass Toasts extends ParsedElement {\n static attributes = ['timeout:number'];\n #timeout;\n connectedCallback() {\n super.connectedCallback();\n if (this.rendered) {\n REGIONS.add(this);\n }\n }\n disconnectedCallback() {\n REGIONS.delete(this);\n }\n render() {\n this.#timeout = this.declared('timeout') || 5000;\n this.setAttribute('role', 'region');\n //focusable only programmatically, so a retiring toast can hand its focus back\n this.setAttribute('tabindex', '-1');\n this.setAttribute('aria-label', Localization.of().t('toast.region'));\n if (!listenerWired) {\n listenerWired = true;\n document.addEventListener('show-toast', (/** @type any */ e) => {\n for (const region of REGIONS) {\n region.show(e.detail.message, e.detail);\n }\n });\n }\n REGIONS.add(this);\n }\n /**\n * Appends a toast carrying the message (a Failure shows its problems'\n * reasons, one per line), severity picking the theme and the announcement,\n * the toast retiring through its own timer or its dismiss button.\n * @param {any} message\n * @param {any} [options] severity and timeout\n * @returns {HTMLElement}\n */\n show(message, options = {}) {\n const severity = SEVERITIES.includes(options.severity) ? options.severity : 'info';\n const item = document.createElement('ful-toast');\n item.classList.add(severity);\n item.setAttribute('role', severity === 'error' ? 'alert' : 'status');\n const body = document.createElement('div');\n body.textContent = Failure.problemsText(message, `${message ?? ''}`);\n const dismiss = document.createElement('button');\n dismiss.type = 'button';\n dismiss.setAttribute('aria-label', Localization.of().t('toast.dismiss'));\n const icon = document.createElement('ful-icon');\n icon.setAttribute('name', 'x-lg');\n icon.setAttribute('aria-hidden', 'true');\n dismiss.append(icon);\n item.append(body, dismiss);\n item.addEventListener('animationend', () => {\n if (item.classList.contains('ful-toast-out')) {\n item.remove();\n }\n });\n const retire = () => {\n //the toast may hold the focus, on its own dismiss button: handing it\n //back to the region keeps the reader somewhere rather than on <body>\n if (item.contains(document.activeElement)) {\n /** @type HTMLElement */ (this).focus();\n }\n if (matchMedia('(prefers-reduced-motion: reduce)').matches) {\n item.remove();\n return;\n }\n item.classList.add('ful-toast-out');\n if (item.getAnimations().length === 0) {\n item.remove();\n }\n };\n dismiss.addEventListener('click', retire);\n this.append(item);\n setTimeout(retire, options.timeout ?? this.#timeout);\n return item;\n }\n}\n\nexport { Toasts };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\n\n/**\n * A tab panel: one visible panel at a time, announced through the tab pattern\n * (a tablist of tab buttons, each panel a tabpanel named by its tab). The tabs\n * are declared as <tab> elements in the tabs slot, the panels as the slotless\n * children, paired in order. Entering a panel fires the section:requested\n * family on it (generic and #index, panels being nameless) and awaits the\n * answers, so a panel can deliver itself asynchronously.\n */\nclass Tabs extends ParsedElement {\n static slots = true;\n static observed = ['active:number'];\n static template = `\n <ful-tablist role=\"tablist\">{{{{ slots.tabs }}}}</ful-tablist>\n {{{{ slots.default }}}}\n `;\n #tablist;\n #tabs = [];\n #panels = [];\n #requests = new SectionRequests();\n #active = 0;\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this.#tablist = fragment.querySelector('ful-tablist');\n const declared = [...this.#tablist.children];\n this.#panels = [...fragment.children].filter((el) => el !== this.#tablist);\n if (declared.length !== this.#panels.length) {\n console.warn(\n `ful-tabs: ${declared.length} tabs declared for ${this.#panels.length} panels, the surplus is left alone`,\n );\n }\n const count = Math.min(declared.length, this.#panels.length);\n this.#tabs = [];\n for (let i = 0; i !== count; ++i) {\n const panel = this.#panels[i];\n const tab = document.createElement('button');\n tab.type = 'button';\n tab.role = 'tab';\n tab.id = Attributes.uid('ful-tab');\n //an author-named panel keeps its name: the wiring adopts it\n if (!panel.id) {\n panel.id = Attributes.uid('ful-tabpanel');\n }\n tab.setAttribute('aria-controls', panel.id);\n panel.role = 'tabpanel';\n panel.setAttribute('aria-labelledby', tab.id);\n //the visible panel joins the tab order: keyboard and reader users\n //reach its content right after its tab, hidden ones stay out\n panel.tabIndex = 0;\n tab.append(...declared[i].childNodes);\n tab.addEventListener('click', () => {\n this.active = i;\n });\n declared[i].replaceWith(tab);\n this.#tabs.push(tab);\n }\n this.#tablist.addEventListener('keydown', (e) => {\n const current = this.#active;\n /** @type {number|null} */\n let target = null;\n if (e.key === 'ArrowRight') {\n target = (current + 1) % this.#tabs.length;\n } else if (e.key === 'ArrowLeft') {\n target = (current - 1 + this.#tabs.length) % this.#tabs.length;\n } else if (e.key === 'Home') {\n target = 0;\n } else if (e.key === 'End') {\n target = this.#tabs.length - 1;\n }\n if (target === null || target === current) {\n return;\n }\n e.preventDefault();\n this.active = target;\n this.#tabs[target].focus();\n });\n this.replaceChildren(fragment);\n }\n get active() {\n return this.#active;\n }\n /**\n * Re-fires the section:requested family on the panel (by index or the\n * panel element itself), whether active or not: the explicit request for a\n * content that wants refreshing. A failed refresh paints its problems,\n * nothing rejects: there is no caller to reject towards.\n */\n refresh(ref) {\n const index = ref instanceof Element ? this.#panels.indexOf(ref) : Number.isInteger(ref) ? ref : NaN;\n const panel = this.#panels[index];\n if (!panel) {\n console.warn(`ful-tabs: no panel answers to \"${ref}\"`);\n return undefined;\n }\n return this.#requests.request(this, panel, null, index)?.then(undefined, () => undefined);\n }\n set active(v) {\n const index = Math.min(Math.max(0, Number(v) || 0), Math.max(0, this.#tabs.length - 1));\n const previous = this.#active;\n for (const [i, tab] of this.#tabs.entries()) {\n tab.setAttribute('aria-selected', i === index ? 'true' : 'false');\n tab.tabIndex = i === index ? 0 : -1;\n this.#panels[i].hidden = i !== index;\n }\n this.#active = index;\n this.reflectTo('active', index);\n if (this.rendered && index !== previous) {\n this.dispatchEvent(new CustomEvent('change', { detail: { active: index, previous } }));\n }\n if (this.#panels.length > 0 && (index !== previous || !this.rendered)) {\n //the activation is the reader's own gesture: the chrome reports a\n //failed delivery, there is no caller to reject towards\n this.#requests.request(this, this.#panels[index], null, index)?.catch(() => undefined);\n }\n }\n}\n\nexport { Tabs };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\n\n/**\n * An accordion over native details/summary disclosures: the platform carries\n * the semantics, the keyboard and the toggling, the chrome paints the group.\n * With the exclusive claim the render assigns one shared name to every panel,\n * which is the platform's own exclusive grouping: opening one closes the others.\n */\nclass Accordion extends ParsedElement {\n static slots = true;\n static observed = ['exclusive:presence'];\n static template = `\n <ful-accordion-group>{{{{ slots.default }}}}</ful-accordion-group>\n `;\n #group;\n #exclusive = false;\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this.#group = fragment.querySelector('ful-accordion-group');\n this.replaceChildren(fragment);\n }\n get exclusive() {\n return this.#exclusive;\n }\n set exclusive(v) {\n this.#exclusive = v === true;\n this.reflectTo('exclusive', this.#exclusive);\n const name = this.#exclusive ? Attributes.uid('ful-accordion') : null;\n for (const details of this.#group.querySelectorAll(':scope > details')) {\n if (name === null) {\n details.removeAttribute('name');\n } else {\n details.setAttribute('name', name);\n }\n }\n }\n}\n\nexport { Accordion };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\n\n/**\n * A wizard: a progress of steps over one-of-N sections, the homeinsurance\n * layout distilled. The steps are declared as <step> elements in the steps\n * slot, the sections as the slotless children, paired in order; each section\n * may carry a data-step name, which is what move() answers to. The current\n * step is the aria-current=step claim, carried in lockstep by the step and\n * its section: the chrome (including which section is shown) follows the\n * claim alone, so the markup state and the style can never disagree. The\n * progress chrome shows the current step alone by default; the progress\n * attribute picks another shape over the same claims (timeline, dots, none).\n * Entering a section\n * fires the section:requested family on it and awaits the answers, so a\n * section can deliver itself asynchronously; move() resolves when the entered\n * section is painted, and rejects when its delivery fails.\n */\nclass Wizard extends ParsedElement {\n static slots = true;\n static observed = ['progress'];\n static template = `\n <ful-steps><ol data-tpl-aria-label=\"#l10n:t('wizard.progress')\">{{{{ slots.steps }}}}</ol></ful-steps>\n {{{{ slots.default }}}}\n `;\n #steps = [];\n #sections = [];\n #requests = new SectionRequests();\n #index = 0;\n #progress;\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n const list = fragment.querySelector('ful-steps ol');\n const declared = [...list.children];\n this.#sections = [...fragment.children].filter((el) => el.localName !== 'ful-steps');\n if (declared.length !== this.#sections.length) {\n console.warn(\n `ful-wizard: ${declared.length} steps declared for ${this.#sections.length} sections, the surplus is left alone`,\n );\n }\n const count = Math.min(declared.length, this.#sections.length);\n this.#steps = [];\n for (let i = 0; i !== count; ++i) {\n const li = document.createElement('li');\n li.append(...declared[i].childNodes);\n declared[i].replaceWith(li);\n this.#steps.push(li);\n //the section is the focus target of a move: the step that just\n //became current must receive it, the button that moved it having\n //left the document with its own section\n this.#sections[i].tabIndex = -1;\n }\n this.replaceChildren(fragment);\n if (count > 0) {\n //a section already carrying the claim keeps it: server-rendered state wins\n const claimed = this.#sections.findIndex((s) => s.getAttribute('aria-current') === 'step');\n this.#apply(claimed === -1 ? 0 : Math.min(claimed, count - 1));\n this.#enter(this.#index)?.catch(() => undefined);\n }\n }\n get index() {\n return this.#index;\n }\n get step() {\n return this.#sections[this.#index]?.getAttribute('data-step') ?? null;\n }\n get progress() {\n return this.#progress;\n }\n set progress(v) {\n this.#progress = v;\n this.reflectTo('progress', v);\n }\n next() {\n return this.#move(this.#index + 1);\n }\n prev() {\n return this.#move(this.#index - 1);\n }\n move(ref) {\n const index = this.#sections.findIndex((s) => s.getAttribute('data-step') === ref);\n if (index === -1) {\n console.warn(`ful-wizard: no section carries data-step=\"${ref}\"`);\n return undefined;\n }\n return this.#move(index);\n }\n /**\n * Re-fires the section:requested family on the named section (or the\n * section element itself), whether active or not: the explicit request for a\n * content that wants refreshing. A failed refresh paints its problems,\n * nothing rejects: move() stays the rejecting call.\n */\n refresh(ref) {\n const section =\n ref instanceof Element\n ? ref\n : typeof ref === 'string'\n ? this.#sections.find((s) => s.getAttribute('data-step') === ref)\n : undefined;\n const index = this.#sections.indexOf(section);\n if (index === -1) {\n console.warn(`ful-wizard: no section answers to \"${ref}\"`);\n return undefined;\n }\n return this.#enter(index)?.then(undefined, () => undefined);\n }\n #enter(index) {\n return this.#requests.request(\n this,\n this.#sections[index],\n this.#sections[index].getAttribute('data-step'),\n index,\n );\n }\n #move(index) {\n const clamped = Math.min(Math.max(0, index), Math.max(0, this.#steps.length - 1));\n if (clamped === this.#index) {\n return undefined;\n }\n this.#apply(clamped);\n //the moving control lived in the section that just hid: focus follows\n //the step, or the reader lands on the body knowing nothing happened\n this.#sections[this.#index].focus();\n if (this.rendered) {\n this.dispatchEvent(new CustomEvent('change', { detail: { index: this.#index, step: this.step } }));\n }\n return this.#enter(clamped);\n }\n #apply(index) {\n for (const [i, step] of this.#steps.entries()) {\n if (i === index) {\n step.setAttribute('aria-current', 'step');\n this.#sections[i].setAttribute('aria-current', 'step');\n } else {\n step.removeAttribute('aria-current');\n this.#sections[i].removeAttribute('aria-current');\n }\n }\n this.#index = index;\n }\n}\n\nexport { Wizard };\n","export default {\n 'pagination.showing': 'Page {current} of {total}',\n 'pagination.navigation': 'Page navigation',\n 'pagination.previous': 'Previous',\n 'pagination.next': 'Next',\n 'pagination.reload': 'Reload',\n 'table.initial': 'Start searching to see results.',\n 'table.error': 'Error while loading data:',\n 'table.no-data': 'No elements found.',\n 'dropdown.empty': 'No results',\n 'select.remove': 'Remove',\n 'files.dropzone-label': 'Click or drop your files here',\n 'files.remove': 'Remove',\n 'files.unacceptable-file-type': 'Only files of type {types} are supported',\n 'files.max-file-size-exceeded': 'Maximum supported file size is {size}',\n 'files.max-total-size-exceeded': 'Maximum supported total file size is {size}',\n 'files.max-files-exceeded': { one: 'Maximum of {count} file exceeded', other: 'Maximum of {count} files exceeded' },\n 'filters.op.EQ': 'Equals',\n 'filters.op.NEQ': 'Not equal',\n 'filters.op.LT': 'Less than',\n 'filters.op.GT': 'Greater than',\n 'filters.op.LTE': 'At most',\n 'filters.op.GTE': 'At least',\n 'filters.op.BETWEEN': 'Between',\n 'filters.op.CONTAINS': 'Contains',\n 'filters.op.STARTS_WITH': 'Starts with',\n 'filters.op.ENDS_WITH': 'Ends with',\n 'filters.sensitivity.IGNORE_CASE': 'Ignore case',\n 'filters.sensitivity.CASE_SENSITIVE': 'Case sensitive',\n 'filters.boolean.any': 'Any',\n 'filters.boolean.true': 'Yes',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'More information',\n 'dialog.acknowledge': 'Got it',\n 'drawer.close': 'Close',\n 'spinner.loading': 'Loading…',\n 'toast.region': 'Notifications',\n 'toast.dismiss': 'Dismiss',\n 'wizard.progress': 'Progress',\n};\n","export default {\n 'pagination.showing': 'Pagina {current} di {total}',\n 'pagination.navigation': 'Navigazione pagine',\n 'pagination.previous': 'Precedente',\n 'pagination.next': 'Successivo',\n 'pagination.reload': 'Ricarica',\n 'table.initial': 'Avvia la ricerca per visualizzare i risultati.',\n 'table.error': 'Errore nel caricamento dei dati:',\n 'table.no-data': 'Nessun elemento trovato.',\n 'dropdown.empty': 'Nessun risultato',\n 'select.remove': 'Rimuovi',\n 'files.dropzone-label': 'Clicca o trascina i file qui',\n 'files.remove': 'Rimuovi',\n 'files.unacceptable-file-type': 'Solo i file di tipo {types} sono supportati',\n 'files.max-file-size-exceeded': 'La dimensione massima di un file è di {size}',\n 'files.max-total-size-exceeded': 'La dimensione massima complessiva dei file è di {size}',\n 'files.max-files-exceeded': { other: 'Superato il numero massimo di {count} file' },\n 'filters.op.EQ': 'Uguale',\n 'filters.op.NEQ': 'Diverso',\n 'filters.op.LT': 'Minore',\n 'filters.op.GT': 'Maggiore',\n 'filters.op.LTE': 'Al massimo',\n 'filters.op.GTE': 'Almeno',\n 'filters.op.BETWEEN': 'Tra',\n 'filters.op.CONTAINS': 'Contiene',\n 'filters.op.STARTS_WITH': 'Inizia con',\n 'filters.op.ENDS_WITH': 'Termina con',\n 'filters.sensitivity.IGNORE_CASE': 'Ignora maiuscole',\n 'filters.sensitivity.CASE_SENSITIVE': 'Distingui maiuscole',\n 'filters.boolean.any': 'Qualsiasi',\n 'filters.boolean.true': 'Sì',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'Maggiori informazioni',\n 'dialog.acknowledge': 'Ho capito',\n 'drawer.close': 'Chiudi',\n 'spinner.loading': 'Caricamento…',\n 'toast.region': 'Notifiche',\n 'toast.dismiss': 'Chiudi',\n 'wizard.progress': 'Avanzamento',\n};\n","export default {\n 'pagination.showing': 'Página {current} de {total}',\n 'pagination.navigation': 'Navegación de páginas',\n 'pagination.previous': 'Anterior',\n 'pagination.next': 'Siguiente',\n 'pagination.reload': 'Recargar',\n 'table.initial': 'Inicia la búsqueda para ver los resultados.',\n 'table.error': 'Error al cargar los datos:',\n 'table.no-data': 'No se encontraron elementos.',\n 'dropdown.empty': 'Sin resultados',\n 'select.remove': 'Eliminar',\n 'files.dropzone-label': 'Haz clic o arrastra tus archivos aquí',\n 'files.remove': 'Eliminar',\n 'files.unacceptable-file-type': 'Solo se admiten archivos de tipo {types}',\n 'files.max-file-size-exceeded': 'El tamaño máximo de archivo admitido es {size}',\n 'files.max-total-size-exceeded': 'El tamaño total máximo admitido es {size}',\n 'files.max-files-exceeded': { other: 'Se ha superado el número máximo de {count} archivos' },\n 'filters.op.EQ': 'Igual',\n 'filters.op.NEQ': 'Distinto',\n 'filters.op.LT': 'Menor',\n 'filters.op.GT': 'Mayor',\n 'filters.op.LTE': 'Como máximo',\n 'filters.op.GTE': 'Al menos',\n 'filters.op.BETWEEN': 'Entre',\n 'filters.op.CONTAINS': 'Contiene',\n 'filters.op.STARTS_WITH': 'Empieza por',\n 'filters.op.ENDS_WITH': 'Termina por',\n 'filters.sensitivity.IGNORE_CASE': 'Ignorar mayúsculas',\n 'filters.sensitivity.CASE_SENSITIVE': 'Distinguir mayúsculas',\n 'filters.boolean.any': 'Cualquiera',\n 'filters.boolean.true': 'Sí',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'Más información',\n 'dialog.acknowledge': 'Entendido',\n 'drawer.close': 'Cerrar',\n 'spinner.loading': 'Cargando…',\n 'toast.region': 'Notificaciones',\n 'toast.dismiss': 'Cerrar',\n 'wizard.progress': 'Progreso',\n};\n","export default {\n 'pagination.showing': 'Page {current} sur {total}',\n 'pagination.navigation': 'Navigation des pages',\n 'pagination.previous': 'Précédent',\n 'pagination.next': 'Suivant',\n 'pagination.reload': 'Recharger',\n 'table.initial': 'Lancez la recherche pour voir les résultats.',\n 'table.error': 'Erreur lors du chargement des données :',\n 'table.no-data': 'Aucun élément trouvé.',\n 'dropdown.empty': 'Aucun résultat',\n 'select.remove': 'Retirer',\n 'files.dropzone-label': 'Cliquez ou déposez vos fichiers ici',\n 'files.remove': 'Retirer',\n 'files.unacceptable-file-type': 'Seuls les fichiers de type {types} sont pris en charge',\n 'files.max-file-size-exceeded': 'La taille maximale de fichier prise en charge est {size}',\n 'files.max-total-size-exceeded': 'La taille totale maximale prise en charge est {size}',\n 'files.max-files-exceeded': {\n one: 'Nombre maximal de {count} fichier dépassé',\n other: 'Nombre maximal de {count} fichiers dépassé',\n },\n 'filters.op.EQ': 'Égal',\n 'filters.op.NEQ': 'Différent',\n 'filters.op.LT': 'Inférieur',\n 'filters.op.GT': 'Supérieur',\n 'filters.op.LTE': 'Au plus',\n 'filters.op.GTE': 'Au moins',\n 'filters.op.BETWEEN': 'Entre',\n 'filters.op.CONTAINS': 'Contient',\n 'filters.op.STARTS_WITH': 'Commence par',\n 'filters.op.ENDS_WITH': 'Finit par',\n 'filters.sensitivity.IGNORE_CASE': 'Ignorer la casse',\n 'filters.sensitivity.CASE_SENSITIVE': 'Respecter la casse',\n 'filters.boolean.any': 'Indifférent',\n 'filters.boolean.true': 'Oui',\n 'filters.boolean.false': 'Non',\n 'info.tooltip': 'Plus d’informations',\n 'dialog.acknowledge': 'J’ai compris',\n 'drawer.close': 'Fermer',\n 'spinner.loading': 'Chargement…',\n 'toast.region': 'Notifications',\n 'toast.dismiss': 'Fermer',\n 'wizard.progress': 'Progression',\n};\n","import { HttpClient } from '../httpc/index.mjs';\nimport { Localization } from '../ftl/index.mjs';\nimport { Checkbox } from './forms/checkbox.mjs';\nimport { LocalDate, Instant, InputLocalDate, InputLocalTime, InputInstant } from './forms/temporals.mjs';\nimport { BooleanFilter, InstantFilter, LocalDateFilter, NumberFilter, TextFilter } from './forms/filters.mjs';\nimport { FormLoader, Form } from './forms/form.mjs';\nimport { Input } from './forms/input.mjs';\nimport { InputFile } from './forms/files.mjs';\nimport { RadioGroup } from './forms/radio.mjs';\nimport { SelectLoader, Dropdown, Select } from './forms/select.mjs';\nimport { Tooltip, Dialog } from './disclosures/info.mjs';\nimport { Drawer } from './disclosures/drawer.mjs';\nimport { Toasts } from './disclosures/toast.mjs';\nimport { Tabs } from './navigation/tabs.mjs';\nimport { Accordion } from './disclosures/accordion.mjs';\nimport { Wizard } from './navigation/wizard.mjs';\nimport { TableLoader, Table, Pagination, SortButton } from './navigation/table.mjs';\nimport en from './l10n/en.mjs';\nimport it from './l10n/it.mjs';\nimport es from './l10n/es.mjs';\nimport fr from './l10n/fr.mjs';\n\nconst BUILTIN = { en, it, es, fr };\n\n/**\n * Registers everything ful provides on a registry: the elements, the loader\n * components, an http client, and the translations for the configured\n * language. A page calls `registry.plugin(new Plugin({…})).configure()` once.\n */\nclass Plugin {\n #language;\n #translations;\n #httpClient;\n\n /**\n * @param {{ language?: string, translations?: Record<string, any>, httpClient?: any }} [options]\n * `language` is fixed for the page: a full BCP-47 tag or a primary subtag,\n * defaulting to the browser's language. `translations` is a flat\n * active-language map applied over the built-in translations: reword built-in\n * keys ('pagination.showing', …) or add your own ('checkout.total', …).\n * `httpClient` is the client every ful component fetches through, registered\n * as the `http-client` component: where an unauthorized session goes is an\n * application decision, so a page that does not want the default's redirect\n * to '/' builds its own.\n */\n constructor(options = {}) {\n this.#language = options.language ?? navigator?.language ?? 'en';\n this.#translations = options.translations ?? {};\n this.#httpClient = options.httpClient ?? null;\n }\n\n configure(registry) {\n const httpClient =\n this.#httpClient ?? HttpClient.builder().withCsrfToken().withRedirectOnUnauthorized('/').build();\n //the fallback chain is baked here: en, the active language, the consumer's own strings\n const language = this.#language.split('-')[0];\n const l10n = { ...BUILTIN.en, ...BUILTIN[language], ...this.#translations };\n registry\n .defineModule('l10n', Localization)\n .defineComponent('http-client', httpClient)\n .defineElement('ful-tooltip', Tooltip)\n .defineElement('ful-dialog', Dialog)\n .defineElement('ful-drawer', Drawer)\n .defineElement('ful-toasts', Toasts)\n .defineElement('ful-tabs', Tabs)\n .defineElement('ful-accordion', Accordion)\n .defineElement('ful-wizard', Wizard)\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-number', NumberFilter)\n .defineElement('ful-filter-boolean', BooleanFilter)\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 //the two names a template and the l10n facade resolve: the messages,\n //and the locale every formatter needs. The primary subtag is not a\n //third: it exists to pick the built-in bundle above, and publishing\n //it put a bare name nothing reads into the scope of every template\n .defineOverlay({\n l10n,\n locale: this.#language,\n });\n }\n}\n\nexport { Plugin };\n"],"names":["ParsedElement","Attributes","Failure","Localization","BoundedCache","Fragments","Templates","Nodes","Rendering","HttpClient"],"mappings":"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"}
|