@optionfactory/ful 6.0.6 → 6.0.8

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/dist/ful.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ful.mjs","sources":["../src/encodings.mjs","../src/failure.mjs","../src/http-client.mjs","../src/storage.mjs","../src/oauth-authorization-code.mjs","../src/events/async.mjs","../src/timing.mjs","../src/elements/bindings.mjs","../src/elements/form.mjs","../src/elements/input.mjs","../src/elements/temporals.mjs","../src/elements/files.mjs","../src/elements/select.mjs","../src/elements/radio.mjs","../src/elements/checkbox.mjs","../src/elements/spinner.mjs","../src/elements/table.mjs","../src/elements/filters.mjs","../src/elements/l10n.mjs","../src/elements/plugin.mjs"],"sourcesContent":["\n\nclass Base64 {\n static encode(arrayBuffer, dialect) {\n const d = dialect || Base64.URL_SAFE;\n const len = arrayBuffer.byteLength;\n const view = new Uint8Array(arrayBuffer);\n let res = '';\n for (let i = 0; i < len; i += 3) {\n const v1 = d[view[i] >> 2];\n const v2 = d[((view[i] & 3) << 4) | (view[i + 1] >> 4)];\n const v3 = d[((view[i + 1] & 15) << 2) | (view[i + 2] >> 6)];\n const v4 = d[view[i + 2] & 63];\n res += v1 + v2 + v3 + v4;\n }\n if (len % 3 === 2) {\n res = res.substring(0, res.length - 1);\n } else if (len % 3 === 1) {\n res = res.substring(0, res.length - 2);\n }\n return res;\n }\n static decode(str, dialect) {\n const d = dialect || Base64.URL_SAFE;\n let nbytes = Math.floor(str.length * 0.75);\n for (let i = 0; i !== str.length; ++i) {\n if (str[str.length - i - 1] !== '=') {\n break;\n }\n --nbytes;\n }\n const view = new Uint8Array(nbytes);\n\n let vi = 0;\n let si = 0;\n while (vi < str.length * 0.75) {\n const v1 = d.indexOf(str.charAt(si++));\n const v2 = d.indexOf(str.charAt(si++));\n const v3 = d.indexOf(str.charAt(si++));\n const v4 = d.indexOf(str.charAt(si++));\n view[vi++] = (v1 << 2) | (v2 >> 4);\n view[vi++] = ((v2 & 15) << 4) | (v3 >> 2);\n view[vi++] = ((v3 & 3) << 6) | v4;\n }\n\n return view.buffer;\n }\n}\n\nBase64.STANDARD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nBase64.URL_SAFE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n\nclass Hex {\n static decode(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(\"invalid length\");\n }\n const lenInBytes = hex.length / 2;\n return new Uint8Array(lenInBytes).map((e, i) => {\n const offset = i * 2;\n const octet = hex.substring(offset, offset + 2);\n return parseInt(octet, 16);\n });\n }\n static encode(bytes, upper) {\n return Array.from(bytes)\n .map(b => b.toString(16))\n .map(b => upper ? b.toUpperCase() : b)\n .map(o => o.padStart(2, 0))\n .join('');\n }\n}\n\nexport { Base64, Hex };","\n\n/**\n * @typedef {{ type: string; context: string?; reason: string; details: any?; }} Problem\n */\nclass Failure extends Error {\n /**\n * \n * @param {string} message \n * @param {Problem[]} problems \n * @param {*} cause\n */\n constructor(message, problems, cause) {\n super(message, { cause });\n this.name = 'Failure';\n this.problems = problems;\n }\n dropping(prefix){\n return new Failure(this.message, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n static dropProblemsContext(problems, prefix){\n return problems.map(({type, context, reason, details}) => {\n const nctx = context?.startsWith(prefix) ? context.substring(prefix.length) : context;\n return {type, context: nctx, reason, details};\n })\n }\n\n}\n\nexport { Failure };","import { Failure } from \"./failure.mjs\";\n\nclass MediaType {\n #type;\n #subtype;\n constructor(type, subtype) {\n this.#type = type;\n this.#subtype = subtype;\n }\n get normalized() {\n return `${this.#type}/${this.#subtype}`;\n }\n get type() {\n return this.#type;\n }\n get subtype() {\n return this.#subtype;\n }\n /**\n * \n * @param {string|null|undefined} v \n * @returns \n */\n static parse(v) {\n if (!v) {\n return new MediaType(\"unknown\", \"unknown\");\n }\n const [prefix, _] = v.split(\";\");\n const [ptype, psubtype] = prefix.trim().split(\"/\");\n return new MediaType(ptype.toLowerCase(), psubtype?.toLowerCase());\n }\n}\n\n/**\n * @typedef {Int8Array| Uint8Array| Uint8ClampedArray| Int16Array| Uint16Array| Int32Array| Uint32Array| Float32Array| Float64Array| BigInt64Array| BigUint64Array} TypedArray\n */\n/**\n * @typedef HttpInterceptor\n * @property {function(URL,RequestInit|undefined,HttpInterceptorChain):Promise<Response>} intercept \n */\n\nclass HttpClientError extends Failure {\n /**\n * @param {string} message\n * @param {number} status\n * @param {{ type: string; context: string?; reason: string; details: any?; }[]} problems\n * @param {Error|undefined} [cause]\n */\n constructor(message, status, problems, cause) {\n super(message, problems, cause);\n this.name = 'HttpClientError';\n this.status = status;\n }\n dropping(prefix){\n return new HttpClientError(this.message, this.status, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n /**\n * \n * @param {string} type \n * @param {any} cause \n * @returns \n */\n static of(type, cause) {\n return new HttpClientError(cause.message, 0, [{\n type,\n context: null,\n reason: cause.message,\n details: null\n }], cause);\n }\n /**\n * Creates an HttpClientError from a Response.\n * @param {Response} response \n * @returns an HttpClientError\n */\n static async fromResponse(response) {\n switch (MediaType.parse(response.headers.get(\"Content-Type\")).normalized) {\n case 'application/failures+json': {\n const data = await response.json();\n const message = `${response.status} ${response.statusText}: ${data.length} failures`;\n return new HttpClientError(message, response.status, data);\n }\n case 'application/problem+json': {\n const data = await response.json();\n const message = `${response.status} ${response.statusText}: ${data.title} ${data.detail}`;\n return new HttpClientError(message, response.status, data.problems || [{\n type: \"GENERIC_PROBLEM\",\n context: null,\n reason: message,\n details: null\n }]);\n }\n default: {\n const text = await response.text();\n const message = `${response.status} ${response.statusText}: ${text}`;\n return new HttpClientError(message, response.status, [{\n type: \"GENERIC_PROBLEM\",\n context: null,\n reason: message,\n details: null\n }]);\n }\n }\n }\n}\n\n/**\n * @implements {HttpInterceptor}\n */\nclass CsrfTokenInterceptor {\n #k; #v;\n constructor() {\n this.#k = document.querySelector(\"meta[name='_csrf_header']\")?.getAttribute(\"content\");\n this.#v = document.querySelector(\"meta[name='_csrf']\")?.getAttribute(\"content\");\n }\n async intercept(url, request, chain) {\n if (this.#k && this.#v) {\n request.headers.set(this.#k, this.#v);\n }\n return await chain.proceed(url, request);\n }\n}\n/**\n * @implements {HttpInterceptor}\n */\nclass RedirectOnUnauthorizedInterceptor {\n #redirectUri;\n /**\n * @param {string} redirectUri\n */\n constructor(redirectUri) {\n this.#redirectUri = redirectUri;\n }\n async intercept(url, request, chain) {\n const response = await chain.proceed(url, request);\n if (response.status === 401) {\n window.location.href = this.#redirectUri;\n }\n return response;\n }\n}\n\nclass HttpClientBuilder {\n /**\n * @type {HttpInterceptor[]}\n */\n #interceptors;\n constructor() {\n this.#interceptors = [];\n }\n withCsrfToken() {\n this.#interceptors.push(new CsrfTokenInterceptor());\n return this;\n }\n withRedirectOnUnauthorized(redirectUri) {\n this.#interceptors.push(new RedirectOnUnauthorizedInterceptor(redirectUri));\n return this;\n }\n /**\n * @param {...HttpInterceptor} interceptors\n */\n withInterceptors(...interceptors) {\n this.#interceptors.push(...interceptors);\n return this;\n }\n build() {\n return new HttpClient(this.#interceptors);\n }\n}\n\n/**\n * @implements {HttpInterceptor}\n */\nclass HttpCall {\n async intercept(url, request, chain) {\n return await fetch(new Request(url, request));\n }\n}\n\nclass HttpInterceptorChain {\n #interceptors;\n #current;\n /**\n * \n * @param {HttpInterceptor[]} interceptors \n * @param {number} current \n */\n constructor(interceptors, current) {\n this.#interceptors = interceptors;\n this.#current = current;\n }\n /**\n * \n * @param {URL} url\n * @param {RequestInit} request \n * @returns {Promise<Response>} the response\n */\n async proceed(url, request) {\n const interceptor = this.#interceptors[this.#current];\n return await interceptor.intercept(url, request, new HttpInterceptorChain(this.#interceptors, this.#current + 1));\n }\n}\n\nclass HttpClient {\n #interceptors;\n /**\n * Creates a builder for an HttpClient.\n * @returns {HttpClientBuilder} the client builder\n */\n static builder() {\n return new HttpClientBuilder();\n }\n /**\n * Creates an HttpClient.\n * @param {HttpInterceptor[]|undefined} interceptors - a list of interceptors to be registered for every request performed by the created client. \n */\n constructor(interceptors) {\n this.#interceptors = interceptors || [];\n }\n /**\n * Performs an HTTP exchange.\n * @async\n * @param {string} uri - the (possibly relative) request url\n * @param {RequestInit|undefined} options - fetch options\n * @param {HttpInterceptor[]|undefined} interceptors - the HttpInterceptors to be registered for this exchange.\n * @returns {Promise<Response>} the response\n */\n async exchange(uri, options, interceptors) {\n const is = [...this.#interceptors, ...interceptors || [], new HttpCall()];\n const chain = new HttpInterceptorChain(is, 0);\n const url = new URL(new Request(uri).url);\n return await chain.proceed(url, options ?? {});\n }\n /**\n * Creates a request builder.\n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n request(method, uri) {\n return HttpRequestBuilder.create(this, method, uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url \n * @returns {HttpRequestBuilder} the request builder\n */\n get(uri) {\n return HttpRequestBuilder.create(this, 'GET', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n head(uri) {\n return HttpRequestBuilder.create(this, 'HEAD', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n post(uri) {\n return HttpRequestBuilder.create(this, 'POST', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n put(uri) {\n return HttpRequestBuilder.create(this, 'PUT', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n patch(uri) {\n return HttpRequestBuilder.create(this, 'PATCH', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n delete(uri) {\n return HttpRequestBuilder.create(this, 'DELETE', uri);\n }\n}\n\n/**\n * \n * @param {Response} response \n * @param {'text'|'json'|'blob'|'arrayBuffer'} type \n * @returns \n */\nconst unmarshal = async (response, type) => {\n try {\n return await response[type]();\n } catch (ex) {\n throw HttpClientError.of(\"UNMARSHALING_PROBLEM\", ex);\n }\n}\n\nclass HttpRequestBuilder {\n #client;\n #method;\n #uri;\n #params;\n #headers;\n #body;\n #options;\n #interceptors;\n /**\n * Creates an HttpRequestBuilder.\n * @param {HttpClient} client \n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the builder\n */\n static create(client, method, uri) {\n const [baseUri, queryString = ''] = uri.split('?');\n return new HttpRequestBuilder(\n client,\n method,\n baseUri,\n new URLSearchParams(queryString),\n new Headers(),\n undefined,\n {},\n []\n );\n }\n /**\n * Creates an HttpRequestBuilder.\n * @param {HttpClient} client \n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @param {URLSearchParams} params \n * @param {Headers} headers \n * @param {any} body \n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} options \n * @param {HttpInterceptor[]} interceptors \n */\n constructor(client, method, uri, params, headers, body, options, interceptors) {\n this.#client = client;\n this.#method = method;\n this.#uri = uri;\n this.#params = params;\n this.#body = body;\n this.#headers = headers;\n this.#options = options;\n this.#interceptors = interceptors;\n }\n /**\n * Add all passed headers to the request, overriding existing ones if that key already exists. Null and undefined values cause the key to be removed.\n * @param {HeadersInit} hs \n * @returns {HttpRequestBuilder} this builder\n */\n headers(hs) {\n for (const [k, v] of new Headers(hs).entries()) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n }\n return this;\n }\n /**\n * Adds an header to the request, overriding it if it already exists. Null and undefined values cause the key to be removed\n * @param {string} k \n * @param {string} v \n * @returns {HttpRequestBuilder} this builder\n */\n header(k, v) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n return this;\n }\n /**\n * Add all query parameters to the request, overriding existing ones if that key already exists. Null and undefined values cause the key to be removed\n * @param {URLSearchParams|Record<string,string>|string[][]|string} ps \n * @returns {HttpRequestBuilder} this builder\n */\n params(ps) {\n for (const [k, v] of new URLSearchParams(ps).entries()) {\n if (v == null) {\n this.#params.delete(k);\n } else {\n this.#params.set(k, v);\n }\n }\n return this;\n }\n /**\n * Adds a query parameter to the request, overriding it if it already exists. Empty vs, or a single null or undefined value cause the key to be removed.\n * @param {string} k \n * @param {...string} vs\n * @returns {HttpRequestBuilder} this builder\n */\n param(k, ...vs) {\n if (vs.length === 0 || vs[0] == null) {\n this.#params.delete(k);\n return this;\n }\n for (const v of vs) {\n this.#params.append(k, v);\n }\n return this;\n }\n /**\n * Sets the request body. \n * `Content-Type: multipart/form-data` header is automatically added by fetch when data is a FormData instance if not explicitly set.\n * `Content-Type: application/x-www-form-urlencoded` header is automatically added by fetch when data is an URLSearchParams instance if not explicitly set.\n * `Content-Type: text/plain` header is automatically added by fetch when data is a string instance if not explicitly set.\n * @param {string|ArrayBuffer|Blob|DataView|File|FormData|TypedArray|URLSearchParams|ReadableStream} data \n * @returns {HttpRequestBuilder} this builder\n */\n body(data) {\n this.#body = data;\n return this;\n }\n /**\n * Sets the request body that will be serialized as json. Calling this method adds the `Content-Type application/json` header for the request.\n * @param {any} body - the body to be serialized as json\n * @returns {HttpRequestBuilder} this builder\n */\n json(body) {\n this.#headers.set(\"Content-Type\", \"application/json\");\n this.#body = JSON.stringify(body);\n return this;\n }\n /**\n * Sets the request body as a FormData configured using the callback.\n * `Content-Type: multipart/form-data` header is automatically added by fetch if not explicitly set.\n * @param {function(HttpMultipartRequestCustomizer):void} callback\n */\n multipart(callback) {\n const formData = new FormData();\n const builder = new HttpMultipartRequestCustomizer(formData);\n callback(builder);\n this.#body = formData;\n return this;\n }\n /**\n * Sets a fetch options for the request.\n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} kvs\n * @returns {HttpRequestBuilder} this builder\n */\n options(kvs) {\n for (const [k, v] of Object.entries(kvs)) {\n this.#options[k] = v;\n }\n return this;\n }\n /**\n * Sets a fetch option for the request.\n * @param {keyof Omit<RequestInit,\"headers\"|\"method\"|\"body\">} k \n * @param {*} v \n * @returns {HttpRequestBuilder} this builder\n */\n option(k, v) {\n this.#options[k] = v;\n return this;\n }\n /**\n * Adds interceptors to the request.\n * @param {[HttpInterceptor]} is - the interceptor to be regisered\n * @returns {HttpRequestBuilder} this builder\n */\n interceptors(is) {\n for (const i of is) {\n this.#interceptors.push(i);\n }\n return this;\n }\n /**\n * Adds an interceptor to the request.\n * @param {HttpInterceptor} i - the interceptor to be regisered\n * @returns {HttpRequestBuilder} this builder\n */\n interceptor(i) {\n this.#interceptors.push(i);\n return this;\n }\n /**\n * Performs an HTTP exchange using the configured client, request and interceptors.\n * @returns {Promise<Response>} the response\n */\n async exchange() {\n const uri = this.#params.size ? `${this.#uri}?${this.#params}` : this.#uri;\n const opts = {\n ...this.#options,\n headers: this.#headers,\n method: this.#method,\n body: this.#body,\n };\n return await this.#client.exchange(uri, opts, this.#interceptors);\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<Response>} the response\n */\n async fetch() {\n const uri = this.#params.size ? `${this.#uri}?${this.#params}` : this.#uri;\n const opts = {\n ...this.#options,\n headers: this.#headers,\n method: this.#method,\n body: this.#body,\n };\n try {\n const response = await this.#client.exchange(uri, opts, this.#interceptors);\n if (!response.ok) {\n throw await HttpClientError.fromResponse(response);\n }\n return response;\n } catch (ex) {\n if (ex instanceof Failure) {\n throw ex;\n }\n throw HttpClientError.of(\"CONNECTION_PROBLEM\", ex);\n }\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<string>} the response body, as text\n */\n async fetchText() {\n const response = await this.fetch();\n return await unmarshal(response, 'text');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<any>} the response body, deserialized as JSON\n */\n async fetchJson() {\n const response = await this.fetch();\n return await unmarshal(response, 'json');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<Blob>} the response body, as a Blob\n */\n async fetchBlob() {\n const response = await this.fetch();\n return await unmarshal(response, 'blob');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<ArrayBuffer>} the response body, as an ArrayBuffer\n */\n async fetchArrayBuffer() {\n const response = await this.fetch();\n return await unmarshal(response, 'arrayBuffer');\n }\n}\n\nclass HttpMultipartRequestCustomizer {\n #formData;\n /**\n * \n * @param {FormData} formData \n */\n constructor(formData) {\n this.#formData = formData;\n }\n /**\n * Appends a value to the FormData.\n * @param {string} name \n * @param {*} value \n * @returns this builder\n */\n field(name, value) {\n this.#formData.append(name, value);\n return this;\n }\n /**\n * Appends a Blob to the FormData. \n * If `filename` is omitted, FormData defaults are applied:\n * The default filename for Blob objects is \"blob\"; \n * The default filename for File objects is the file's filename.\n * @param {string} name \n * @param {Blob} value \n * @param {string|undefined} filename \n * @returns this builder\n */\n blob(name, value, filename) {\n this.#formData.append(name, value, filename);\n return this;\n }\n /**\n * Appends multiple Blobs to the FormData with the same name. \n * The default filename for Blob objects is \"blob\"; \n * The default filename for File objects is the file's filename.\n * @param {string} name \n * @param {Blob[]} values\n * @returns this builder\n */\n blobs(name, values) {\n for (let v of values) {\n this.#formData.append(name, v);\n }\n return this;\n }\n /**\n * Appends a JSON serialized blob to the FormData.\n * @param {string} name \n * @param {any} value \n * @param {string|undefined} filename \n * @returns this builder\n */\n json(name, value, filename) {\n const blob = new Blob([JSON.stringify(value)], { type: 'application/json' });\n this.#formData.append(name, blob, filename);\n return this;\n }\n}\n\nexport { MediaType, HttpClient, HttpClientError };\n","\nclass 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 return got === null ? undefined : JSON.parse(got);\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}\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 return got === null ? undefined : JSON.parse(got);\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.removeItem(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 localStorage.removeItem(key);\n return undefined;\n }\n return stored.data;\n }\n}\n\n\nexport { LocalStorage, VersionedLocalStorage, SessionStorage, VersionedSessionStorage };","import { Base64 } from \"./encodings.mjs\";\nimport { SessionStorage } from \"./storage.mjs\";\n\n\nclass AuthorizationCodeFlow {\n static forKeycloak(clientId, realmBaseUrl, redirectUri, maybeScope) {\n const scope = maybeScope ?? \"openid profile\";\n return new AuthorizationCodeFlow(clientId, scope, {\n auth: new URL(\"protocol/openid-connect/auth\", realmBaseUrl),\n token: new URL(\"protocol/openid-connect/token\", realmBaseUrl),\n logout: new URL(\"protocol/openid-connect/logout\", realmBaseUrl),\n registration: new URL(\"protocol/openid-connect/registrations\", realmBaseUrl),\n redirect: redirectUri\n });\n }\n constructor(clientId, scope, { auth, token, registration, logout, redirect }) {\n this.clientId = clientId;\n this.scope = scope;\n this.uri = { auth, token, registration, logout, redirect };\n }\n async action(uri, additionalParams) {\n const pkceVerifier = Base64.encode(crypto.getRandomValues(new Uint8Array(32)).buffer);\n const pkceChallenge = Base64.encode(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(pkceVerifier)));\n const state = this.clientId + Base64.encode(crypto.getRandomValues(new Uint8Array(16)).buffer);\n SessionStorage.save(`${AuthorizationCodeFlow.PKCE_AND_STATE_KEY}-${this.clientId}`, {\n state: state,\n verifier: pkceVerifier\n });\n const url = new URL(uri);\n url.searchParams.set(\"client_id\", this.clientId);\n url.searchParams.set(\"redirect_uri\", this.uri.redirect);\n url.searchParams.set(\"response_type\", 'code');\n url.searchParams.set(\"scope\", this.scope);\n url.searchParams.set(\"state\", state);\n url.searchParams.set(\"code_challenge\", pkceChallenge);\n url.searchParams.set(\"code_challenge_method\", 'S256');\n Object.entries(additionalParams || {}).forEach(kv => {\n url.searchParams.set(kv[0], kv[1]);\n });\n window.location.href = url.toString();\n }\n async registration(additionalParams) {\n await this.action(this.uri.registration, additionalParams);\n }\n async applicationInitiatedAction(kcAction, additionalParams) {\n await this.action(this.uri.auth, {\n ...additionalParams,\n kc_action: kcAction,\n });\n }\n async #tokenExchange(code, state) {\n window.history.replaceState('', \"\", this.uri.redirect);\n const stateAndVerifier = SessionStorage.pop(`${AuthorizationCodeFlow.PKCE_AND_STATE_KEY}-${this.clientId}`);\n if (stateAndVerifier.state !== state) {\n throw new Error(\"State mismatch\");\n }\n const response = await fetch(this.uri.token, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"code\", code],\n [\"grant_type\", \"authorization_code\"],\n [\"code_verifier\", stateAndVerifier.verifier],\n [\"state\", stateAndVerifier.state],\n [\"redirect_uri\", this.uri.redirect]\n ])\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\"Error:\" + response.status + \": \" + text);\n }\n const token = await response.json();\n return new AuthorizationCodeFlowSession(this.clientId, token, this.uri);\n }\n async ensureLoggedIn() {\n const url = new URL(window.location.href);\n const code = url.searchParams.get(\"code\");\n if (code && SessionStorage.load(`${AuthorizationCodeFlow.PKCE_AND_STATE_KEY}-${this.clientId}`)) {\n //if callback from keycloak and we have our state still stored\n const state = url.searchParams.get(\"state\");\n return await this.#tokenExchange(code, state);\n }\n //if not authorized\n await this.action(this.uri.auth, {});\n return null;\n }\n}\nAuthorizationCodeFlow.PKCE_AND_STATE_KEY = \"state-and-verifier\";\n\nclass AuthorizationCodeFlowSession {\n static parseToken(token) {\n const [rawHeader, rawPayload, signature] = token.split(\".\");\n const utf8decoder = new TextDecoder(\"utf-8\");\n return {\n header: JSON.parse(utf8decoder.decode(Base64.decode(rawHeader, Base64.STANDARD))),\n payload: JSON.parse(utf8decoder.decode(Base64.decode(rawPayload, Base64.STANDARD))),\n signature: signature\n };\n }\n constructor(clientId, t, { token, logout, redirect }) {\n this.clientId = clientId;\n this.token = t;\n this.idToken = AuthorizationCodeFlowSession.parseToken(t.id_token);\n this.accessToken = AuthorizationCodeFlowSession.parseToken(t.access_token);\n this.refreshToken = AuthorizationCodeFlowSession.parseToken(t.refresh_token);\n this.uri = { token, logout, redirect }\n this.refreshCallback = null;\n }\n onRefresh(callback) {\n this.refreshCallback = callback;\n }\n async refresh() {\n const response = await fetch(this.uri.token, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"grant_type\", \"refresh_token\"],\n [\"refresh_token\", this.token.refresh_token]\n ])\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\"Error:\" + response.status + \": \" + text);\n }\n const token = await response.json();\n this.token = token;\n this.idToken = AuthorizationCodeFlowSession.parseToken(token.id_token);\n this.accessToken = AuthorizationCodeFlowSession.parseToken(token.access_token);\n this.refreshToken = AuthorizationCodeFlowSession.parseToken(token.refresh_token);\n if (this.refreshCallback) {\n this.refreshCallback(this.token, this.accessToken, this.refreshToken);\n }\n }\n shouldBeRefreshed(gracePeriod) {\n const now = new Date().getTime();\n const refreshTokenExpiresAt = this.refreshToken.payload.exp * 1000;\n const expired = now > refreshTokenExpiresAt;\n const shouldRefresh = now - gracePeriod > refreshTokenExpiresAt;\n return !expired && shouldRefresh;\n }\n async refreshIf(gracePeriod) {\n if (!this.shouldBeRefreshed(gracePeriod)) {\n return;\n }\n await this.refresh();\n }\n logout() {\n const url = new URL(this.uri.logout);\n url.searchParams.set(\"post_logout_redirect_uri\", this.uri.redirect);\n url.searchParams.set(\"id_token_hint\", this.token.id_token);\n window.location.href = url.toString();\n }\n\n bearerToken() {\n return `Bearer ${this.token.access_token}`;\n }\n\n interceptor(gracePeriodBefore, gracePeriodAfter) {\n return new AuthorizationCodeFlowInterceptor(this, gracePeriodBefore, gracePeriodAfter);\n }\n}\n\nclass AuthorizationCodeFlowInterceptor {\n #session;\n #gracePeriodBefore;\n #gracePeriodAfter;\n constructor(session, gracePeriodBefore, gracePeriodAfter) {\n this.#session = session;\n this.#gracePeriodBefore = gracePeriodBefore || 2000;\n this.#gracePeriodAfter = gracePeriodAfter || 30000;\n }\n async intercept(url, request, chain) {\n await this.#session.refreshIf(this.#gracePeriodBefore);\n request.headers.set(\"Authorization\", this.#session.bearerToken());\n const response = await chain.proceed(url, request);\n await this.#session.refreshIf(this.#gracePeriodAfter);\n return response;\n }\n}\n\nexport { AuthorizationCodeFlow, AuthorizationCodeFlowSession, AuthorizationCodeFlowInterceptor };","class AsyncEvents {\n static async fireAsync(el, evt) {\n el.dispatchEvent(evt);\n return await evt.async?.promise;\n }\n /**\n * \n * @param {*} el \n * @param {*} type \n * @param {*} fn returning the result\n * @param {*} options \n * @returns \n */\n static asyncOn(el, type, fn, options) {\n const listener = async (event) => {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n event.async = { promise };\n try {\n //@ts-ignore\n resolve(await fn(event));\n } catch (e) {\n //@ts-ignore\n reject(e);\n }\n };\n el.addEventListener(type, listener, options);\n return listener;\n }\n /**\n * \n * @param {*} el \n * @param {*} type \n * @param {*} listener the listener returned by asyncOn\n * @param {*} options \n */ \n static asyncOff(el, type, listener, options) {\n el.removeEventListener(type, listener, options);\n }\n static mixInto(...classes) {\n for (const k of classes) {\n Object.assign(k.prototype, {\n async fireAsync(evt) {\n return await AsyncEvents.fireAsync(this, evt);\n },\n asyncOn(type, fn, options) {\n return AsyncEvents.asyncOn(this, type, fn, options);\n },\n asyncOff(type, listener, options) {\n return AsyncEvents.asyncOff(this, type, listener, options);\n }\n });\n }\n }\n}\n\nexport { AsyncEvents }","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 = null;\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n const elapsed = new Date().getTime() - 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 = function () {\n args = [...arguments];\n previousTimestamp = new Date().getTime();\n if (tid === null) {\n tid = setTimeout(later, timeoutMs);\n if (opts === Timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n }\n };\n const abort = () => clearTimeout(tid);\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 = null;\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n previousTimestamp = (opts & Timing.THROTTLE_NO_LEADING) ? 0 : new Date().getTime();\n tid = null;\n func(...args);\n if (tid === null) {\n args = [];\n }\n };\n const throttled = function () {\n const now = new Date().getTime();\n if (!previousTimestamp && (opts & Timing.THROTTLE_NO_LEADING)) {\n previousTimestamp = now;\n }\n const remaining = timeoutMs - (now - previousTimestamp);\n args = [...arguments];\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 = () => clearTimeout(tid);\n return [throttled, abort];\n }\n}\n\nexport { Timing };","\nclass Bindings {\n\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 = 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') {\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(result, /** @type {string} */(el.getAttribute('name')), Bindings.extract(el))\n }\n return result;\n }\n \n /**\n * \n * @param {Element & {checked?: boolean} & {value?: any}} el \n * @returns \n */ \n static mutate(el, raw) {\n if (el.getAttribute('type') === 'radio') {\n el.checked = el.getAttribute('value') === 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\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 => el.setCustomValidity?.(\"\"));\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(\"[\", \".\").replace(\"].\", \".\").replace(\"]\", \"\");\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 => input.setCustomValidity?.(e.reason, suffix));\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`)).sort((a,b) => a.getBoundingClientRect().y - b.getBoundingClientRect().y)[0]?.focus();\n }\n}\n\n\nexport { Bindings }\n","import { Attributes, ParsedElement, registry } from \"@optionfactory/ftl\"\nimport { Failure } from \"../failure.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)\n .json(values)\n .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\") ? registry.component(el.getAttribute(\"request-mapper\")) : v => v;\n const responseMapper = el.hasAttribute(\"response-mapper\") ? registry.component(el.getAttribute(\"response-mapper\")) : 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 = this.form = document.createElement('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 try {\n const loader = registry.component(this.getAttribute(\"loader\") ?? 'loaders:form').create(this);\n const values = Bindings.extractFrom(this.form, submitter);\n let request = await loader.prepare(values, this)\n try {\n const se = new CustomEvent('submit', { bubbles: true, cancelable: true, detail: { submitter, values, request } });\n if (!this.dispatchEvent(se)) {\n return;\n }\n this.errors = [];\n const sre = new CustomEvent('submit:requested', { bubbles: true, cancelable: false, detail: { submitter, values: se.detail.values, request: se.detail.request} })\n let response = await AsyncEvents.fireAsync(this, sre);\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(new CustomEvent('submit:success', { bubbles: true, cancelable: false, detail: { submitter, values, request, response: mapped } }))\n } catch (e) {\n this.dispatchEvent(new CustomEvent('submit:failure', { bubbles: true, cancelable: false, detail: { submitter, values, request, exception: e } }));\n if (e instanceof Failure) {\n this.errors = e.problems;\n }\n console.warn(\"failed to submit form\", this, \"reason:\", e);\n }\n } finally {\n this.spinner(false);\n }\n }\n reset(){\n this.form.reset();\n }\n spinner(spin) {\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 hel.disabled = spin\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 \"@optionfactory/ftl\"\n\nclass Input extends ParsedElement {\n static observed = ['value', 'readonly:presence', 'required: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\">\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 if (!skipObservedSetup) {\n this.disabled = disabled;\n this.readonly = observed.readonly;\n this.required = observed.required;\n this.value = observed.value;\n }\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] */ (Array.from(form.querySelectorAll(\n '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 re = this.getAttribute('mask');\n if (!re) {\n return;\n }\n const before = evt.target.value;\n const after = before.replace(new RegExp(re, 'g'), '');\n if (before === after) {\n return;\n }\n const start = evt.target.selectionStart;\n const offset = before.length - after.length;\n evt.target.value = after;\n evt.target.setSelectionRange(start - offset, start - offset);\n });\n this._input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value\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 }\n get value() {\n return this._input.value === '' ? null : this._input.value;\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 //@ts-ignore\n get disabled() {\n return this._input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this._input, '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 formResetCallback() {\n this.value = this.unmarshal('value', this.getAttribute(\"value\"));\n }\n}\n\nexport { Input };\n","import { ParsedElement } from \"@optionfactory/ftl\";\nimport { Input } from \"./input.mjs\";\n\n\n\n\nclass LocalDate extends ParsedElement {\n render() {\n const content = this.innerHTML.trim();\n if (content === '') {\n this.innerHTML = 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.innerHTML = formatter.format(new Date(y, m - 1, d));\n }\n}\n\nclass Instant extends ParsedElement {\n render() {\n const content = this.innerHTML.trim();\n if (content === '') {\n this.innerHTML = 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.innerHTML = 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\n\nclass InputLocalDate extends Input {\n static observed = ['value', 'readonly:presence', 'required:presence', 'min', 'max', 'step'];\n _type() {\n return 'date';\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 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 if (v === 'now') {\n return new Date().toISOString().split(\"T\")[0];\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 switch (match[3]) {\n case 'd':\n r.setDate(r.getDate() + offset * sign);\n break;\n case 'm':\n r.setMonth(r.getMonth() + offset * sign);\n break;\n case 'y':\n r.setFullYear(r.getFullYear() + offset * sign);\n break;\n }\n return r.toISOString().split(\"T\")[0];\n }\n}\n\nclass InputLocalTime extends InputLocalDate {\n _type() {\n return 'time';\n }\n}\n\n\nclass InputInstant extends Input {\n static observed = ['value', 'readonly:presence', 'required:presence', '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.min;\n this.step = observed.min;\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\n\n\n\nexport { Instant, LocalDate, InputLocalDate, InputLocalTime, InputInstant }","import { Attributes } from \"@optionfactory/ftl\";\nimport { Input } from \"./input.mjs\";\n\n\n\nclass InputFile extends Input {\n static l10n = {\n en: {\n 'dropzonelabel': 'Click or drop your files here',\n 'unaccepptablefiletype': \"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 'unaccepptablefiletype': \"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 }\n static observed = ['value', 'readonly:presence', 'required:presence', \"accept:csv\", 'multiple:presence', \"itemlist:presence\", \"dropzone:presence\", \"maxfiles:number\", \"maxfilesize:number\", \"maxtotalsize:number\"];\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\"></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);\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 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 fileName = e.target.closest(\"ful-item\").dataset.name;\n const dt = new DataTransfer();\n [...this.files].filter(f => f.name !== fileName).forEach(f => dt.items.add(f));\n this.files = dt.files;\n this.#update();\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 dt = new DataTransfer();\n [...e.dataTransfer.items].filter(i => i.kind === 'file').forEach(i => dt.items.add(i.getAsFile()));\n this.files = dt.files;\n this.#update();\n });\n this._input.addEventListener(\"change\", (e) => {\n this.#update();\n });\n }\n #formatByteSize(v) {\n return (v > 1024 * 1024) ? `${Math.round(v / 1024 / 1024 * 100) / 100}MiB` : (v > 1024 ? `${Math.round(v / 1024 * 100) / 100}KiB` : `${v}B`);\n }\n #update() {\n this.setCustomValidity();\n this.#ensureAcceptable();\n this.#ensureFileSizes();\n this.#ensureTotalSize();\n this.#ensureFilesCount();\n this.template('items').withOverlay({ files: this.files }).withModule('bytes', { format: this.#formatByteSize }).renderTo(this.#items);\n }\n warning(key, args) {\n this.template('warning').withOverlay({ key, args }).renderTo(this.#warnings);\n }\n #ensureAcceptable() {\n if (!this.#accept.length) {\n return;\n }\n const unacceptable = [...this.files]\n .filter(file => !this.#accept.some(type => file.name.toLowerCase().endsWith(type.toLowerCase())));\n\n if (unacceptable.length === 0) {\n return;\n }\n this.warning('unaccepptablefiletype', this.#accept.join(\", \"));\n const dt = new DataTransfer();\n [...this.files].filter(f => !unacceptable.includes(f)).forEach(f => dt.items.add(f));\n this.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 const dt = new DataTransfer();\n this.files = dt.files;\n }\n\n #ensureFileSizes() {\n if (this.#maxfilesize === null) {\n return;\n }\n const oversized = [...this.files]\n .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].filter(f => !oversized.includes(f)).forEach(f => dt.items.add(f));\n this.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.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 }\n get file() {\n return this.files[0] ?? null;\n }\n set file(v) {\n const dt = new DataTransfer();\n dt.items.add(v);\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 //TODO:\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 }","import { Attributes, Fragments, ParsedElement, registry, Templates } from \"@optionfactory/ftl\"\nimport { Timing } from \"../timing.mjs\";\nimport { VersionedLocalStorage } from \"../storage.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 storageKey = `${this.#method}@${this.#url}`;\n if (this.#revision !== null) {\n const data = VersionedLocalStorage.load(storageKey, this.#revision);\n if (data !== undefined) {\n this.#data = data;\n return;\n }\n }\n const data = await this.#http.request(this.#method, this.#url)\n .fetchJson()\n this.#data = this.#responseMapper(data);\n if (this.#revision !== null) {\n VersionedLocalStorage.save(storageKey, this.#revision, this.#data);\n }\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.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)\n .param(\"s\", needle)\n .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\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.evaluator().withOverlay(response).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\" hidden></menu>\n `;\n static templates = {\n options: `\n <li data-tpl-each=\"self\" data-tpl-selected=\"index == 0\" data-tpl-value=\"index\">\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) ? this.template('options') : 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 if (!evt.target.matches('li')) {\n this.hide();\n return;\n }\n this.#change(evt.target);\n });\n this.replaceChildren(fragment);\n }\n acceptSelection() {\n const selected = this.#menu.querySelector('[selected]') ?? this.#menu.firstElementChild;\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(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { index, data }\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 } 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.#menu.querySelector('[selected]') ?? this.#menu.firstElementChild;\n const candidate = selected[`${forward ? 'next' : 'previous'}ElementSibling`];\n if (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=\"\">\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 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.component(this.getAttribute(\"loader\") ?? 'loaders:select').create(this, { options: slots.options });\n\n this.#multiple = this.hasAttribute(\"multiple\");\n await this.#loader.prefetch?.();\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\n const self = this;\n const [dload, abortdload] = Timing.throttle(400, () => self.#ddmenu.show(() => self.#loader.load(self.#input.value)));\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.#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.#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.#ddmenu.moveOrShow(false, () => self.#loader.load(self.#input.value));\n break;\n }\n case 'ArrowDown': {\n e.preventDefault();\n this.#ddmenu.moveOrShow(true, () => self.#loader.load(self.#input.value));\n break;\n }\n case 'Escape': {\n this.#ddmenu.hide();\n break;\n }\n case 'Enter': {\n e.preventDefault();\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.#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.#ddmenu.hide();\n this.#input.value = '';\n });\n this.replaceChildren(fragment);\n }\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n #changed() {\n const selection = [...this.#values.entries()].map(e => ({ key: e[0], label: e[1][0], metadata: e[1].slice(1) }))\n const value = this.#multiple ? selection : (selection[0] ?? null);\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { value }\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 if (vs === null) {\n this.#values = new Map();\n this.#syncBadges();\n return;\n }\n (async () => {\n const entries = await (this.#multiple ? this.#loader.exact(...vs) : this.#loader.exact(vs));\n this.#values = new Map(entries.map(e => [e[0], e.slice(1)]));\n this.#syncBadges();\n })();\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 //@ts-ignore\n get disabled() {\n return this.#input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this.#input, '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 { SelectLoader, Select, Dropdown };","import { Attributes, Fragments, ParsedElement } from \"@optionfactory/ftl\"\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(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value\n }\n }));\n });\n const label = Fragments.fromChildNodes(el);\n return [input, label];\n });\n\n radioEls.forEach(el => el.remove());\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 //@ts-ignore\n get disabled(){\n return this.#fieldset.hasAttribute('disabled');\n }\n set disabled(d){\n Attributes.toggle(this.#fieldset, '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 };","import { Attributes, ParsedElement } from \"@optionfactory/ftl\";\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(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value\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 });\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 //@ts-ignore\n get disabled() {\n return this.#input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this.#input, '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 }","import { ParsedElement } from \"@optionfactory/ftl\"\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 };","import { Attributes, Fragments, Nodes, ParsedElement, registry, Rendering } from \"@optionfactory/ftl\"\n\nclass SortButton extends ParsedElement {\n static observed = [\"order\"];\n #order;\n render() {\n const sorter = this.getAttribute(\"sorter\");\n const orders = [\"asc\", \"desc\", null];\n this.addEventListener('click', () => {\n const nextOrder = orders[(orders.indexOf(this.order) + 1) % 3];\n this.dispatchEvent(new CustomEvent('sort-requested', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: { sorter, order: nextOrder }\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 }\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.update(observed.current ?? 0, observed.total ?? 0);\n this.addEventListener('click', (/** @type any */evt) => {\n const el = evt.target.closest('a');\n if (!el) {\n return;\n }\n this.dispatchEvent(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 prev = { index: Math.max(0, current - 1), enabled: current > 0 };\n const curr = { index: current, label: current + 1 };\n const next = { index: Math.min(total, current + 1), enabled: current + 1 < total };\n const pages = [{\n index: current,\n label: current + 1\n }];\n for (let mid = current, offset = 1; offset !== maxRender && pages.length != maxRender; ++offset) {\n const p = mid - offset;\n if (p >= 0) {\n pages.unshift({ index: p, label: p + 1 });\n }\n const n = mid + offset;\n if (n < total) {\n pages.push({ index: n, label: n + 1 })\n }\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 const schema = Nodes.queryChildren(nodeOrFragment, \"schema\");\n if (!schema) {\n throw new Error(`missing expected <schema> in ${nodeOrFragment}`);\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 = columns.filter(v => v.hasAttribute('order')).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 = (!sorter && !order) ? titleNode : (() => {\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.withOverlay({ inHeaders: true, inRows: false }).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\n\nclass InMemoryTableLoader {\n #data\n constructor(data) {\n this.#data = data;\n }\n async load(pageRequest, sortRequest, filterRequest) {\n return { \n page: this.#data, \n size: this.#data.length \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.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\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 }\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.#sorters = table.querySelectorAll(':scope > thead ful-sorter') ?? [];\n this.replaceChildren(fragment);\n schema.headersTemplate.renderTo(this.querySelector('thead'));\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 page: 0,\n size: this.#latestRequest.pageRequest.size\n }, this.#latestRequest.sortRequest, evt.detail.request);\n })\n this.addEventListener('page-requested', async (/** @type any */e) => {\n await this.load({\n page: e.detail.value,\n size: this.#latestRequest.pageRequest.size\n }, this.#latestRequest.sortRequest, this.#latestRequest.filterRequest);\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 => s.order = null);\n e.target.order = e.detail.value.order;\n })\n if (this.hasAttribute('autoload')) {\n await this.reload();\n }\n }\n\n async reload() {\n return await this.load(this.#latestRequest.pageRequest, this.#latestRequest.sortRequest, this.#latestRequest.filterRequest);\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(p => `${p.reason}`);\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 page: 0,\n size: this.#latestRequest.pageRequest.size\n }, this.#latestRequest.sortRequest, filterRequest);\n }\n #update(pageRequest, sortRequest, filterRequest, pageResponse) {\n this.#loading.setAttribute(\"hidden\", \"\");\n this.#body.replaceChildren(this.template('row').withOverlay({\n schema: this.#schema,\n pageRequest,\n filterRequest,\n pageResponse\n }).render());\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 }","import { Attributes } from \"@optionfactory/ftl\";\nimport { Instant } from \"./temporals.mjs\";\nimport { Input } from \"./input.mjs\";\n\nclass InstantFilter extends Input {\n static observed = ['value:json', 'readonly:presence', 'required:presence'];\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=\"\">&PrecedesSlantEqual;</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\">&ne;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LT\">&prec;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GT\">&succ;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LTE\">&PrecedesSlantEqual;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GTE\">&SucceedsSlantEqual;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"BETWEEN\">&LeftRightArrow;</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\n this.disabled = conf.disabled;\n this.readonly = conf.observed.readonly;\n this.required = conf.observed.required;\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 Attributes.toggle(this.#value2, 'hidden', value !== 'BETWEEN');\n btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\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.#operator.setAttribute('value', 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 set readonly(v) {\n this.#value2.readOnly = v;\n super.readonly = v;\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'];\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\">&ne;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LT\">&prec;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GT\">&succ;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LTE\">&PrecedesSlantEqual;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GTE\">&SucceedsSlantEqual;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"BETWEEN\">&LeftRightArrow;</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\n this.disabled = conf.disabled;\n this.readonly = conf.observed.readonly;\n this.required = conf.observed.required;\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 Attributes.toggle(this.#value2, 'hidden', value !== 'BETWEEN');\n btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\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.#operator.setAttibute('value', operator);\n this.#value1.value = values[0];\n this.#value2.value = values[1];\n }\n set readonly(v) {\n this.#value2.readOnly = v;\n super.readonly = v;\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'];\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=\"\">&mldr;a&mldr;</button>\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" role=\"button\" value=\"CONTAINS\">&mldr;a&mldr;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"STARTS_WITH\">a&mldr;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"ENDS_WITH\">&mldr;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 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.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 btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\n })\n }\n get value() {\n const operator = this.#operator.getAttribute('value');\n return this.#value.value === '' ? undefined : [operator, 'IGNORE_CASE', 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.#operator.setAttribute('value', operator);\n this.#value.value = value;\n }\n}\n\nexport { InstantFilter, LocalDateFilter, TextFilter }","\nclass LocalizationModule {\n static t(k, ...args) {\n //@ts-ignore\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(k, ...args);\n }\n\n}\n\n\nexport { LocalizationModule }","import { HttpClient } from \"../http-client.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\n\nclass Plugin {\n configure(registry) {\n const httpClient = HttpClient.builder()\n .withCsrfToken()\n .withRedirectOnUnauthorized(\"/\")\n .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\n\n\nexport { Plugin }"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ful.mjs","sources":["../src/encodings.mjs","../src/failure.mjs","../src/http-client.mjs","../src/storage.mjs","../src/oauth-authorization-code.mjs","../src/events/async.mjs","../src/timing.mjs","../src/elements/bindings.mjs","../src/elements/form.mjs","../src/elements/input.mjs","../src/elements/temporals.mjs","../src/elements/files.mjs","../src/elements/select.mjs","../src/elements/radio.mjs","../src/elements/checkbox.mjs","../src/elements/spinner.mjs","../src/elements/table.mjs","../src/elements/filters.mjs","../src/elements/l10n.mjs","../src/elements/plugin.mjs"],"sourcesContent":["\n\nclass Base64 {\n static encode(arrayBuffer, dialect) {\n const d = dialect || Base64.URL_SAFE;\n const len = arrayBuffer.byteLength;\n const view = new Uint8Array(arrayBuffer);\n let res = '';\n for (let i = 0; i < len; i += 3) {\n const v1 = d[view[i] >> 2];\n const v2 = d[((view[i] & 3) << 4) | (view[i + 1] >> 4)];\n const v3 = d[((view[i + 1] & 15) << 2) | (view[i + 2] >> 6)];\n const v4 = d[view[i + 2] & 63];\n res += v1 + v2 + v3 + v4;\n }\n if (len % 3 === 2) {\n res = res.substring(0, res.length - 1);\n } else if (len % 3 === 1) {\n res = res.substring(0, res.length - 2);\n }\n return res;\n }\n static decode(str, dialect) {\n const d = dialect || Base64.URL_SAFE;\n let nbytes = Math.floor(str.length * 0.75);\n for (let i = 0; i !== str.length; ++i) {\n if (str[str.length - i - 1] !== '=') {\n break;\n }\n --nbytes;\n }\n const view = new Uint8Array(nbytes);\n\n let vi = 0;\n let si = 0;\n while (vi < str.length * 0.75) {\n const v1 = d.indexOf(str.charAt(si++));\n const v2 = d.indexOf(str.charAt(si++));\n const v3 = d.indexOf(str.charAt(si++));\n const v4 = d.indexOf(str.charAt(si++));\n view[vi++] = (v1 << 2) | (v2 >> 4);\n view[vi++] = ((v2 & 15) << 4) | (v3 >> 2);\n view[vi++] = ((v3 & 3) << 6) | v4;\n }\n\n return view.buffer;\n }\n}\n\nBase64.STANDARD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nBase64.URL_SAFE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n\nclass Hex {\n static decode(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(\"invalid length\");\n }\n const lenInBytes = hex.length / 2;\n return new Uint8Array(lenInBytes).map((e, i) => {\n const offset = i * 2;\n const octet = hex.substring(offset, offset + 2);\n return parseInt(octet, 16);\n });\n }\n static encode(bytes, upper) {\n return Array.from(bytes)\n .map(b => b.toString(16))\n .map(b => upper ? b.toUpperCase() : b)\n .map(o => o.padStart(2, 0))\n .join('');\n }\n}\n\nexport { Base64, Hex };","\n\n/**\n * @typedef {{ type: string; context: string?; reason: string; details: any?; }} Problem\n */\nclass Failure extends Error {\n /**\n * \n * @param {string} message \n * @param {Problem[]} problems \n * @param {*} cause\n */\n constructor(message, problems, cause) {\n super(message, { cause });\n this.name = 'Failure';\n this.problems = problems;\n }\n dropping(prefix){\n return new Failure(this.message, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n static dropProblemsContext(problems, prefix){\n return problems.map(({type, context, reason, details}) => {\n const nctx = context?.startsWith(prefix) ? context.substring(prefix.length) : context;\n return {type, context: nctx, reason, details};\n })\n }\n\n}\n\nexport { Failure };","import { Failure } from \"./failure.mjs\";\n\nclass MediaType {\n #type;\n #subtype;\n constructor(type, subtype) {\n this.#type = type;\n this.#subtype = subtype;\n }\n get normalized() {\n return `${this.#type}/${this.#subtype}`;\n }\n get type() {\n return this.#type;\n }\n get subtype() {\n return this.#subtype;\n }\n /**\n * \n * @param {string|null|undefined} v \n * @returns \n */\n static parse(v) {\n if (!v) {\n return new MediaType(\"unknown\", \"unknown\");\n }\n const [prefix, _] = v.split(\";\");\n const [ptype, psubtype] = prefix.trim().split(\"/\");\n return new MediaType(ptype.toLowerCase(), psubtype?.toLowerCase());\n }\n}\n\n/**\n * @typedef {Int8Array| Uint8Array| Uint8ClampedArray| Int16Array| Uint16Array| Int32Array| Uint32Array| Float32Array| Float64Array| BigInt64Array| BigUint64Array} TypedArray\n */\n/**\n * @typedef HttpInterceptor\n * @property {function(URL,RequestInit|undefined,HttpInterceptorChain):Promise<Response>} intercept \n */\n\nclass HttpClientError extends Failure {\n /**\n * @param {string} message\n * @param {number} status\n * @param {{ type: string; context: string?; reason: string; details: any?; }[]} problems\n * @param {Error|undefined} [cause]\n */\n constructor(message, status, problems, cause) {\n super(message, problems, cause);\n this.name = 'HttpClientError';\n this.status = status;\n }\n dropping(prefix){\n return new HttpClientError(this.message, this.status, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n /**\n * \n * @param {string} type \n * @param {any} cause \n * @returns \n */\n static of(type, cause) {\n return new HttpClientError(cause.message, 0, [{\n type,\n context: null,\n reason: cause.message,\n details: null\n }], cause);\n }\n /**\n * Creates an HttpClientError from a Response.\n * @param {Response} response \n * @returns an HttpClientError\n */\n static async fromResponse(response) {\n switch (MediaType.parse(response.headers.get(\"Content-Type\")).normalized) {\n case 'application/failures+json': {\n const data = await response.json();\n const message = `${response.status} ${response.statusText}: ${data.length} failures`;\n return new HttpClientError(message, response.status, data);\n }\n case 'application/problem+json': {\n const data = await response.json();\n const message = `${response.status} ${response.statusText}: ${data.title} ${data.detail}`;\n return new HttpClientError(message, response.status, data.problems || [{\n type: \"GENERIC_PROBLEM\",\n context: null,\n reason: message,\n details: null\n }]);\n }\n default: {\n const text = await response.text();\n const message = `${response.status} ${response.statusText}: ${text}`;\n return new HttpClientError(message, response.status, [{\n type: \"GENERIC_PROBLEM\",\n context: null,\n reason: message,\n details: null\n }]);\n }\n }\n }\n}\n\n/**\n * @implements {HttpInterceptor}\n */\nclass CsrfTokenInterceptor {\n #k; #v;\n constructor() {\n this.#k = document.querySelector(\"meta[name='_csrf_header']\")?.getAttribute(\"content\");\n this.#v = document.querySelector(\"meta[name='_csrf']\")?.getAttribute(\"content\");\n }\n async intercept(url, request, chain) {\n if (this.#k && this.#v) {\n request.headers.set(this.#k, this.#v);\n }\n return await chain.proceed(url, request);\n }\n}\n/**\n * @implements {HttpInterceptor}\n */\nclass RedirectOnUnauthorizedInterceptor {\n #redirectUri;\n /**\n * @param {string} redirectUri\n */\n constructor(redirectUri) {\n this.#redirectUri = redirectUri;\n }\n async intercept(url, request, chain) {\n const response = await chain.proceed(url, request);\n if (response.status === 401) {\n window.location.href = this.#redirectUri;\n }\n return response;\n }\n}\n\nclass HttpClientBuilder {\n /**\n * @type {HttpInterceptor[]}\n */\n #interceptors;\n constructor() {\n this.#interceptors = [];\n }\n withCsrfToken() {\n this.#interceptors.push(new CsrfTokenInterceptor());\n return this;\n }\n withRedirectOnUnauthorized(redirectUri) {\n this.#interceptors.push(new RedirectOnUnauthorizedInterceptor(redirectUri));\n return this;\n }\n /**\n * @param {...HttpInterceptor} interceptors\n */\n withInterceptors(...interceptors) {\n this.#interceptors.push(...interceptors);\n return this;\n }\n build() {\n return new HttpClient(this.#interceptors);\n }\n}\n\n/**\n * @implements {HttpInterceptor}\n */\nclass HttpCall {\n async intercept(url, request, chain) {\n return await fetch(new Request(url, request));\n }\n}\n\nclass HttpInterceptorChain {\n #interceptors;\n #current;\n /**\n * \n * @param {HttpInterceptor[]} interceptors \n * @param {number} current \n */\n constructor(interceptors, current) {\n this.#interceptors = interceptors;\n this.#current = current;\n }\n /**\n * \n * @param {URL} url\n * @param {RequestInit} request \n * @returns {Promise<Response>} the response\n */\n async proceed(url, request) {\n const interceptor = this.#interceptors[this.#current];\n return await interceptor.intercept(url, request, new HttpInterceptorChain(this.#interceptors, this.#current + 1));\n }\n}\n\nclass HttpClient {\n #interceptors;\n /**\n * Creates a builder for an HttpClient.\n * @returns {HttpClientBuilder} the client builder\n */\n static builder() {\n return new HttpClientBuilder();\n }\n /**\n * Creates an HttpClient.\n * @param {HttpInterceptor[]|undefined} interceptors - a list of interceptors to be registered for every request performed by the created client. \n */\n constructor(interceptors) {\n this.#interceptors = interceptors || [];\n }\n /**\n * Performs an HTTP exchange.\n * @async\n * @param {string} uri - the (possibly relative) request url\n * @param {RequestInit|undefined} options - fetch options\n * @param {HttpInterceptor[]|undefined} interceptors - the HttpInterceptors to be registered for this exchange.\n * @returns {Promise<Response>} the response\n */\n async exchange(uri, options, interceptors) {\n const is = [...this.#interceptors, ...interceptors || [], new HttpCall()];\n const chain = new HttpInterceptorChain(is, 0);\n const url = new URL(new Request(uri).url);\n return await chain.proceed(url, options ?? {});\n }\n /**\n * Creates a request builder.\n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n request(method, uri) {\n return HttpRequestBuilder.create(this, method, uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url \n * @returns {HttpRequestBuilder} the request builder\n */\n get(uri) {\n return HttpRequestBuilder.create(this, 'GET', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n head(uri) {\n return HttpRequestBuilder.create(this, 'HEAD', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n post(uri) {\n return HttpRequestBuilder.create(this, 'POST', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n put(uri) {\n return HttpRequestBuilder.create(this, 'PUT', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n patch(uri) {\n return HttpRequestBuilder.create(this, 'PATCH', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n delete(uri) {\n return HttpRequestBuilder.create(this, 'DELETE', uri);\n }\n}\n\n/**\n * \n * @param {Response} response \n * @param {'text'|'json'|'blob'|'arrayBuffer'} type \n * @returns \n */\nconst unmarshal = async (response, type) => {\n try {\n return await response[type]();\n } catch (ex) {\n throw HttpClientError.of(\"UNMARSHALING_PROBLEM\", ex);\n }\n}\n\nclass HttpRequestBuilder {\n #client;\n #method;\n #uri;\n #params;\n #headers;\n #body;\n #options;\n #interceptors;\n /**\n * Creates an HttpRequestBuilder.\n * @param {HttpClient} client \n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the builder\n */\n static create(client, method, uri) {\n const [baseUri, queryString = ''] = uri.split('?');\n return new HttpRequestBuilder(\n client,\n method,\n baseUri,\n new URLSearchParams(queryString),\n new Headers(),\n undefined,\n {},\n []\n );\n }\n /**\n * Creates an HttpRequestBuilder.\n * @param {HttpClient} client \n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @param {URLSearchParams} params \n * @param {Headers} headers \n * @param {any} body \n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} options \n * @param {HttpInterceptor[]} interceptors \n */\n constructor(client, method, uri, params, headers, body, options, interceptors) {\n this.#client = client;\n this.#method = method;\n this.#uri = uri;\n this.#params = params;\n this.#body = body;\n this.#headers = headers;\n this.#options = options;\n this.#interceptors = interceptors;\n }\n /**\n * Add all passed headers to the request, overriding existing ones if that key already exists. Null and undefined values cause the key to be removed.\n * @param {HeadersInit} hs \n * @returns {HttpRequestBuilder} this builder\n */\n headers(hs) {\n for (const [k, v] of new Headers(hs).entries()) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n }\n return this;\n }\n /**\n * Adds an header to the request, overriding it if it already exists. Null and undefined values cause the key to be removed\n * @param {string} k \n * @param {string} v \n * @returns {HttpRequestBuilder} this builder\n */\n header(k, v) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n return this;\n }\n /**\n * Add all query parameters to the request, overriding existing ones if that key already exists. Null and undefined values cause the key to be removed\n * @param {URLSearchParams|Record<string,string>|string[][]|string} ps \n * @returns {HttpRequestBuilder} this builder\n */\n params(ps) {\n for (const [k, v] of new URLSearchParams(ps).entries()) {\n if (v == null) {\n this.#params.delete(k);\n } else {\n this.#params.set(k, v);\n }\n }\n return this;\n }\n /**\n * Adds a query parameter to the request, overriding it if it already exists. Empty vs, or a single null or undefined value cause the key to be removed.\n * @param {string} k \n * @param {...string} vs\n * @returns {HttpRequestBuilder} this builder\n */\n param(k, ...vs) {\n if (vs.length === 0 || vs[0] == null) {\n this.#params.delete(k);\n return this;\n }\n for (const v of vs) {\n this.#params.append(k, v);\n }\n return this;\n }\n /**\n * Sets the request body. \n * `Content-Type: multipart/form-data` header is automatically added by fetch when data is a FormData instance if not explicitly set.\n * `Content-Type: application/x-www-form-urlencoded` header is automatically added by fetch when data is an URLSearchParams instance if not explicitly set.\n * `Content-Type: text/plain` header is automatically added by fetch when data is a string instance if not explicitly set.\n * @param {string|ArrayBuffer|Blob|DataView|File|FormData|TypedArray|URLSearchParams|ReadableStream} data \n * @returns {HttpRequestBuilder} this builder\n */\n body(data) {\n this.#body = data;\n return this;\n }\n /**\n * Sets the request body that will be serialized as json. Calling this method adds the `Content-Type application/json` header for the request.\n * @param {any} body - the body to be serialized as json\n * @returns {HttpRequestBuilder} this builder\n */\n json(body) {\n this.#headers.set(\"Content-Type\", \"application/json\");\n this.#body = JSON.stringify(body);\n return this;\n }\n /**\n * Sets the request body as a FormData configured using the callback.\n * `Content-Type: multipart/form-data` header is automatically added by fetch if not explicitly set.\n * @param {function(HttpMultipartRequestCustomizer):void} callback\n */\n multipart(callback) {\n const formData = new FormData();\n const builder = new HttpMultipartRequestCustomizer(formData);\n callback(builder);\n this.#body = formData;\n return this;\n }\n /**\n * Sets a fetch options for the request.\n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} kvs\n * @returns {HttpRequestBuilder} this builder\n */\n options(kvs) {\n for (const [k, v] of Object.entries(kvs)) {\n this.#options[k] = v;\n }\n return this;\n }\n /**\n * Sets a fetch option for the request.\n * @param {keyof Omit<RequestInit,\"headers\"|\"method\"|\"body\">} k \n * @param {*} v \n * @returns {HttpRequestBuilder} this builder\n */\n option(k, v) {\n this.#options[k] = v;\n return this;\n }\n /**\n * Adds interceptors to the request.\n * @param {[HttpInterceptor]} is - the interceptor to be regisered\n * @returns {HttpRequestBuilder} this builder\n */\n interceptors(is) {\n for (const i of is) {\n this.#interceptors.push(i);\n }\n return this;\n }\n /**\n * Adds an interceptor to the request.\n * @param {HttpInterceptor} i - the interceptor to be regisered\n * @returns {HttpRequestBuilder} this builder\n */\n interceptor(i) {\n this.#interceptors.push(i);\n return this;\n }\n /**\n * Performs an HTTP exchange using the configured client, request and interceptors.\n * @returns {Promise<Response>} the response\n */\n async exchange() {\n const uri = this.#params.size ? `${this.#uri}?${this.#params}` : this.#uri;\n const opts = {\n ...this.#options,\n headers: this.#headers,\n method: this.#method,\n body: this.#body,\n };\n return await this.#client.exchange(uri, opts, this.#interceptors);\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<Response>} the response\n */\n async fetch() {\n const uri = this.#params.size ? `${this.#uri}?${this.#params}` : this.#uri;\n const opts = {\n ...this.#options,\n headers: this.#headers,\n method: this.#method,\n body: this.#body,\n };\n try {\n const response = await this.#client.exchange(uri, opts, this.#interceptors);\n if (!response.ok) {\n throw await HttpClientError.fromResponse(response);\n }\n return response;\n } catch (ex) {\n if (ex instanceof Failure) {\n throw ex;\n }\n throw HttpClientError.of(\"CONNECTION_PROBLEM\", ex);\n }\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<string>} the response body, as text\n */\n async fetchText() {\n const response = await this.fetch();\n return await unmarshal(response, 'text');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<any>} the response body, deserialized as JSON\n */\n async fetchJson() {\n const response = await this.fetch();\n return await unmarshal(response, 'json');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<Blob>} the response body, as a Blob\n */\n async fetchBlob() {\n const response = await this.fetch();\n return await unmarshal(response, 'blob');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptos throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<ArrayBuffer>} the response body, as an ArrayBuffer\n */\n async fetchArrayBuffer() {\n const response = await this.fetch();\n return await unmarshal(response, 'arrayBuffer');\n }\n}\n\nclass HttpMultipartRequestCustomizer {\n #formData;\n /**\n * \n * @param {FormData} formData \n */\n constructor(formData) {\n this.#formData = formData;\n }\n /**\n * Appends a value to the FormData.\n * @param {string} name \n * @param {*} value \n * @returns this builder\n */\n field(name, value) {\n this.#formData.append(name, value);\n return this;\n }\n /**\n * Appends a Blob to the FormData. \n * If `filename` is omitted, FormData defaults are applied:\n * The default filename for Blob objects is \"blob\"; \n * The default filename for File objects is the file's filename.\n * @param {string} name \n * @param {Blob} value \n * @param {string|undefined} filename \n * @returns this builder\n */\n blob(name, value, filename) {\n this.#formData.append(name, value, filename);\n return this;\n }\n /**\n * Appends multiple Blobs to the FormData with the same name. \n * The default filename for Blob objects is \"blob\"; \n * The default filename for File objects is the file's filename.\n * @param {string} name \n * @param {Blob[]} values\n * @returns this builder\n */\n blobs(name, values) {\n for (let v of values) {\n this.#formData.append(name, v);\n }\n return this;\n }\n /**\n * Appends a JSON serialized blob to the FormData.\n * @param {string} name \n * @param {any} value \n * @param {string|undefined} filename \n * @returns this builder\n */\n json(name, value, filename) {\n const blob = new Blob([JSON.stringify(value)], { type: 'application/json' });\n this.#formData.append(name, blob, filename);\n return this;\n }\n}\n\nexport { MediaType, HttpClient, HttpClientError };\n","\nclass 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 return got === null ? undefined : JSON.parse(got);\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}\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 return got === null ? undefined : JSON.parse(got);\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.removeItem(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 localStorage.removeItem(key);\n return undefined;\n }\n return stored.data;\n }\n}\n\n\nexport { LocalStorage, VersionedLocalStorage, SessionStorage, VersionedSessionStorage };","import { Base64 } from \"./encodings.mjs\";\nimport { SessionStorage } from \"./storage.mjs\";\n\n\nclass AuthorizationCodeFlow {\n static forKeycloak(clientId, realmBaseUrl, redirectUri, maybeScope) {\n const scope = maybeScope ?? \"openid profile\";\n return new AuthorizationCodeFlow(clientId, scope, {\n auth: new URL(\"protocol/openid-connect/auth\", realmBaseUrl),\n token: new URL(\"protocol/openid-connect/token\", realmBaseUrl),\n logout: new URL(\"protocol/openid-connect/logout\", realmBaseUrl),\n registration: new URL(\"protocol/openid-connect/registrations\", realmBaseUrl),\n redirect: redirectUri\n });\n }\n constructor(clientId, scope, { auth, token, registration, logout, redirect }) {\n this.clientId = clientId;\n this.scope = scope;\n this.uri = { auth, token, registration, logout, redirect };\n }\n async action(uri, additionalParams) {\n const pkceVerifier = Base64.encode(crypto.getRandomValues(new Uint8Array(32)).buffer);\n const pkceChallenge = Base64.encode(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(pkceVerifier)));\n const state = this.clientId + Base64.encode(crypto.getRandomValues(new Uint8Array(16)).buffer);\n SessionStorage.save(`${AuthorizationCodeFlow.PKCE_AND_STATE_KEY}-${this.clientId}`, {\n state: state,\n verifier: pkceVerifier\n });\n const url = new URL(uri);\n url.searchParams.set(\"client_id\", this.clientId);\n url.searchParams.set(\"redirect_uri\", this.uri.redirect);\n url.searchParams.set(\"response_type\", 'code');\n url.searchParams.set(\"scope\", this.scope);\n url.searchParams.set(\"state\", state);\n url.searchParams.set(\"code_challenge\", pkceChallenge);\n url.searchParams.set(\"code_challenge_method\", 'S256');\n Object.entries(additionalParams || {}).forEach(kv => {\n url.searchParams.set(kv[0], kv[1]);\n });\n window.location.href = url.toString();\n }\n async registration(additionalParams) {\n await this.action(this.uri.registration, additionalParams);\n }\n async applicationInitiatedAction(kcAction, additionalParams) {\n await this.action(this.uri.auth, {\n ...additionalParams,\n kc_action: kcAction,\n });\n }\n async #tokenExchange(code, state) {\n window.history.replaceState('', \"\", this.uri.redirect);\n const stateAndVerifier = SessionStorage.pop(`${AuthorizationCodeFlow.PKCE_AND_STATE_KEY}-${this.clientId}`);\n if (stateAndVerifier.state !== state) {\n throw new Error(\"State mismatch\");\n }\n const response = await fetch(this.uri.token, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"code\", code],\n [\"grant_type\", \"authorization_code\"],\n [\"code_verifier\", stateAndVerifier.verifier],\n [\"state\", stateAndVerifier.state],\n [\"redirect_uri\", this.uri.redirect]\n ])\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\"Error:\" + response.status + \": \" + text);\n }\n const token = await response.json();\n return new AuthorizationCodeFlowSession(this.clientId, token, this.uri);\n }\n async ensureLoggedIn() {\n const url = new URL(window.location.href);\n const code = url.searchParams.get(\"code\");\n if (code && SessionStorage.load(`${AuthorizationCodeFlow.PKCE_AND_STATE_KEY}-${this.clientId}`)) {\n //if callback from keycloak and we have our state still stored\n const state = url.searchParams.get(\"state\");\n return await this.#tokenExchange(code, state);\n }\n //if not authorized\n await this.action(this.uri.auth, {});\n return null;\n }\n}\nAuthorizationCodeFlow.PKCE_AND_STATE_KEY = \"state-and-verifier\";\n\nclass AuthorizationCodeFlowSession {\n static parseToken(token) {\n const [rawHeader, rawPayload, signature] = token.split(\".\");\n const utf8decoder = new TextDecoder(\"utf-8\");\n return {\n header: JSON.parse(utf8decoder.decode(Base64.decode(rawHeader, Base64.STANDARD))),\n payload: JSON.parse(utf8decoder.decode(Base64.decode(rawPayload, Base64.STANDARD))),\n signature: signature\n };\n }\n constructor(clientId, t, { token, logout, redirect }) {\n this.clientId = clientId;\n this.token = t;\n this.idToken = AuthorizationCodeFlowSession.parseToken(t.id_token);\n this.accessToken = AuthorizationCodeFlowSession.parseToken(t.access_token);\n this.refreshToken = AuthorizationCodeFlowSession.parseToken(t.refresh_token);\n this.uri = { token, logout, redirect }\n this.refreshCallback = null;\n }\n onRefresh(callback) {\n this.refreshCallback = callback;\n }\n async refresh() {\n const response = await fetch(this.uri.token, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"grant_type\", \"refresh_token\"],\n [\"refresh_token\", this.token.refresh_token]\n ])\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\"Error:\" + response.status + \": \" + text);\n }\n const token = await response.json();\n this.token = token;\n this.idToken = AuthorizationCodeFlowSession.parseToken(token.id_token);\n this.accessToken = AuthorizationCodeFlowSession.parseToken(token.access_token);\n this.refreshToken = AuthorizationCodeFlowSession.parseToken(token.refresh_token);\n if (this.refreshCallback) {\n this.refreshCallback(this.token, this.accessToken, this.refreshToken);\n }\n }\n shouldBeRefreshed(gracePeriod) {\n const now = new Date().getTime();\n const refreshTokenExpiresAt = this.refreshToken.payload.exp * 1000;\n const expired = now > refreshTokenExpiresAt;\n const shouldRefresh = now - gracePeriod > refreshTokenExpiresAt;\n return !expired && shouldRefresh;\n }\n async refreshIf(gracePeriod) {\n if (!this.shouldBeRefreshed(gracePeriod)) {\n return;\n }\n await this.refresh();\n }\n logout() {\n const url = new URL(this.uri.logout);\n url.searchParams.set(\"post_logout_redirect_uri\", this.uri.redirect);\n url.searchParams.set(\"id_token_hint\", this.token.id_token);\n window.location.href = url.toString();\n }\n\n bearerToken() {\n return `Bearer ${this.token.access_token}`;\n }\n\n interceptor(gracePeriodBefore, gracePeriodAfter) {\n return new AuthorizationCodeFlowInterceptor(this, gracePeriodBefore, gracePeriodAfter);\n }\n}\n\nclass AuthorizationCodeFlowInterceptor {\n #session;\n #gracePeriodBefore;\n #gracePeriodAfter;\n constructor(session, gracePeriodBefore, gracePeriodAfter) {\n this.#session = session;\n this.#gracePeriodBefore = gracePeriodBefore || 2000;\n this.#gracePeriodAfter = gracePeriodAfter || 30000;\n }\n async intercept(url, request, chain) {\n await this.#session.refreshIf(this.#gracePeriodBefore);\n request.headers.set(\"Authorization\", this.#session.bearerToken());\n const response = await chain.proceed(url, request);\n await this.#session.refreshIf(this.#gracePeriodAfter);\n return response;\n }\n}\n\nexport { AuthorizationCodeFlow, AuthorizationCodeFlowSession, AuthorizationCodeFlowInterceptor };","class AsyncEvents {\n static async fireAsync(el, evt) {\n el.dispatchEvent(evt);\n return await evt.async?.promise;\n }\n /**\n * \n * @param {*} el \n * @param {*} type \n * @param {*} fn returning the result\n * @param {*} options \n * @returns \n */\n static asyncOn(el, type, fn, options) {\n const listener = async (event) => {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n event.async = { promise };\n try {\n //@ts-ignore\n resolve(await fn(event));\n } catch (e) {\n //@ts-ignore\n reject(e);\n }\n };\n el.addEventListener(type, listener, options);\n return listener;\n }\n /**\n * \n * @param {*} el \n * @param {*} type \n * @param {*} listener the listener returned by asyncOn\n * @param {*} options \n */ \n static asyncOff(el, type, listener, options) {\n el.removeEventListener(type, listener, options);\n }\n static mixInto(...classes) {\n for (const k of classes) {\n Object.assign(k.prototype, {\n async fireAsync(evt) {\n return await AsyncEvents.fireAsync(this, evt);\n },\n asyncOn(type, fn, options) {\n return AsyncEvents.asyncOn(this, type, fn, options);\n },\n asyncOff(type, listener, options) {\n return AsyncEvents.asyncOff(this, type, listener, options);\n }\n });\n }\n }\n}\n\nexport { AsyncEvents }","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 = null;\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n const elapsed = new Date().getTime() - 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 = function () {\n args = [...arguments];\n previousTimestamp = new Date().getTime();\n if (tid === null) {\n tid = setTimeout(later, timeoutMs);\n if (opts === Timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n }\n };\n const abort = () => clearTimeout(tid);\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 = null;\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n previousTimestamp = (opts & Timing.THROTTLE_NO_LEADING) ? 0 : new Date().getTime();\n tid = null;\n func(...args);\n if (tid === null) {\n args = [];\n }\n };\n const throttled = function () {\n const now = new Date().getTime();\n if (!previousTimestamp && (opts & Timing.THROTTLE_NO_LEADING)) {\n previousTimestamp = now;\n }\n const remaining = timeoutMs - (now - previousTimestamp);\n args = [...arguments];\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 = () => clearTimeout(tid);\n return [throttled, abort];\n }\n}\n\nexport { Timing };","\nclass Bindings {\n\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 = 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') {\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(result, /** @type {string} */(el.getAttribute('name')), Bindings.extract(el))\n }\n return result;\n }\n \n /**\n * \n * @param {Element & {checked?: boolean} & {value?: any}} el \n * @returns \n */ \n static mutate(el, raw) {\n if (el.getAttribute('type') === 'radio') {\n el.checked = el.getAttribute('value') === 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\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 => el.setCustomValidity?.(\"\"));\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(\"[\", \".\").replace(\"].\", \".\").replace(\"]\", \"\");\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 => input.setCustomValidity?.(e.reason, suffix));\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`)).sort((a,b) => a.getBoundingClientRect().y - b.getBoundingClientRect().y)[0]?.focus();\n }\n}\n\n\nexport { Bindings }\n","import { Attributes, ParsedElement, registry } from \"@optionfactory/ftl\"\nimport { Failure } from \"../failure.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)\n .json(values)\n .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\") ? registry.component(el.getAttribute(\"request-mapper\")) : v => v;\n const responseMapper = el.hasAttribute(\"response-mapper\") ? registry.component(el.getAttribute(\"response-mapper\")) : 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 = this.form = document.createElement('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 try {\n const loader = registry.component(this.getAttribute(\"loader\") ?? 'loaders:form').create(this);\n const values = Bindings.extractFrom(this.form, submitter);\n let request = await loader.prepare(values, this)\n try {\n const se = new CustomEvent('submit', { bubbles: true, cancelable: true, detail: { submitter, values, request } });\n if (!this.dispatchEvent(se)) {\n return;\n }\n this.errors = [];\n const sre = new CustomEvent('submit:requested', { bubbles: true, cancelable: false, detail: { submitter, values: se.detail.values, request: se.detail.request} })\n let response = await AsyncEvents.fireAsync(this, sre);\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(new CustomEvent('submit:success', { bubbles: true, cancelable: false, detail: { submitter, values, request, response: mapped } }))\n } catch (e) {\n this.dispatchEvent(new CustomEvent('submit:failure', { bubbles: true, cancelable: false, detail: { submitter, values, request, exception: e } }));\n if (e instanceof Failure) {\n this.errors = e.problems;\n }\n console.warn(\"failed to submit form\", this, \"reason:\", e);\n }\n } finally {\n this.spinner(false);\n }\n }\n reset(){\n this.form.reset();\n }\n spinner(spin) {\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 hel.disabled = spin\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 \"@optionfactory/ftl\"\n\nclass Input extends ParsedElement {\n static observed = ['value', 'readonly:presence', 'required: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\">\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 if (!skipObservedSetup) {\n this.disabled = disabled;\n this.readonly = observed.readonly;\n this.required = observed.required;\n this.value = observed.value;\n }\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] */ (Array.from(form.querySelectorAll(\n '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 re = this.getAttribute('mask');\n if (!re) {\n return;\n }\n const before = evt.target.value;\n const after = before.replace(new RegExp(re, 'g'), '');\n if (before === after) {\n return;\n }\n const start = evt.target.selectionStart;\n const offset = before.length - after.length;\n evt.target.value = after;\n evt.target.setSelectionRange(start - offset, start - offset);\n });\n this._input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value\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 }\n get value() {\n return this._input.value === '' ? null : this._input.value;\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 //@ts-ignore\n get disabled() {\n return this._input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this._input, '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 formResetCallback() {\n this.value = this.unmarshal('value', this.getAttribute(\"value\"));\n }\n}\n\nexport { Input };\n","import { ParsedElement } from \"@optionfactory/ftl\";\nimport { Input } from \"./input.mjs\";\n\n\n\n\nclass LocalDate extends ParsedElement {\n render() {\n const content = this.innerHTML.trim();\n if (content === '') {\n this.innerHTML = 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.innerHTML = formatter.format(new Date(y, m - 1, d));\n }\n}\n\nclass Instant extends ParsedElement {\n render() {\n const content = this.innerHTML.trim();\n if (content === '') {\n this.innerHTML = 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.innerHTML = 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\n\nclass InputLocalDate extends Input {\n static observed = ['value', 'readonly:presence', 'required:presence', 'min', 'max', 'step'];\n _type() {\n return 'date';\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 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 if (v === 'now') {\n return new Date().toISOString().split(\"T\")[0];\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 switch (match[3]) {\n case 'd':\n r.setDate(r.getDate() + offset * sign);\n break;\n case 'm':\n r.setMonth(r.getMonth() + offset * sign);\n break;\n case 'y':\n r.setFullYear(r.getFullYear() + offset * sign);\n break;\n }\n return r.toISOString().split(\"T\")[0];\n }\n}\n\nclass InputLocalTime extends InputLocalDate {\n _type() {\n return 'time';\n }\n}\n\n\nclass InputInstant extends Input {\n static observed = ['value', 'readonly:presence', 'required:presence', '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.min;\n this.step = observed.min;\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\n\n\n\nexport { Instant, LocalDate, InputLocalDate, InputLocalTime, InputInstant }","import { Attributes } from \"@optionfactory/ftl\";\nimport { Input } from \"./input.mjs\";\n\n\n\nclass InputFile extends Input {\n static l10n = {\n en: {\n 'dropzonelabel': 'Click or drop your files here',\n 'unaccepptablefiletype': \"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 'unaccepptablefiletype': \"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 }\n static observed = ['value', 'readonly:presence', 'required:presence', \"accept:csv\", 'multiple:presence', \"itemlist:presence\", \"dropzone:presence\", \"maxfiles:number\", \"maxfilesize:number\", \"maxtotalsize:number\"];\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);\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 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 fileName = e.target.closest(\"ful-item\").dataset.name;\n const dt = new DataTransfer();\n [...this.files].filter(f => f.name !== fileName).forEach(f => dt.items.add(f));\n this.files = dt.files;\n this.#update();\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 dt = new DataTransfer();\n [...e.dataTransfer.items].filter(i => i.kind === 'file').forEach(i => dt.items.add(i.getAsFile()));\n this.files = dt.files;\n this.#update();\n });\n this._input.addEventListener(\"change\", (e) => {\n this.#update();\n });\n }\n #formatByteSize(v) {\n return (v > 1024 * 1024) ? `${Math.round(v / 1024 / 1024 * 100) / 100}MiB` : (v > 1024 ? `${Math.round(v / 1024 * 100) / 100}KiB` : `${v}B`);\n }\n #update() {\n this.setCustomValidity();\n this.#ensureAcceptable();\n this.#ensureFileSizes();\n this.#ensureTotalSize();\n this.#ensureFilesCount();\n this.template('items').withOverlay({ files: this.files }).withModule('bytes', { format: this.#formatByteSize }).renderTo(this.#items);\n }\n warning(key, args) {\n this.template('warning').withOverlay({ key, args }).renderTo(this.#warnings);\n }\n #ensureAcceptable() {\n if (!this.#accept.length) {\n return;\n }\n const unacceptable = [...this.files]\n .filter(file => !this.#accept.some(type => file.name.toLowerCase().endsWith(type.toLowerCase())));\n\n if (unacceptable.length === 0) {\n return;\n }\n this.warning('unaccepptablefiletype', this.#accept.join(\", \"));\n const dt = new DataTransfer();\n [...this.files].filter(f => !unacceptable.includes(f)).forEach(f => dt.items.add(f));\n this.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 const dt = new DataTransfer();\n this.files = dt.files;\n }\n\n #ensureFileSizes() {\n if (this.#maxfilesize === null) {\n return;\n }\n const oversized = [...this.files]\n .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].filter(f => !oversized.includes(f)).forEach(f => dt.items.add(f));\n this.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.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 }\n get file() {\n return this.files[0] ?? null;\n }\n set file(v) {\n const dt = new DataTransfer();\n dt.items.add(v);\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 //TODO:\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 }","import { Attributes, Fragments, ParsedElement, registry, Templates } from \"@optionfactory/ftl\";\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.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)\n .param(\"s\", needle)\n .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\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.evaluator().withOverlay(response).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\" hidden></menu>\n `;\n static templates = {\n options: `\n <li data-tpl-each=\"self\" data-tpl-selected=\"index == 0\" data-tpl-value=\"index\">\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) ? this.template('options') : 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 if (!evt.target.matches('li')) {\n this.hide();\n return;\n }\n this.#change(evt.target);\n });\n this.replaceChildren(fragment);\n }\n acceptSelection() {\n const selected = this.#menu.querySelector('[selected]') ?? this.#menu.firstElementChild;\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(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { index, data }\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 } 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.#menu.querySelector('[selected]') ?? this.#menu.firstElementChild;\n const candidate = selected[`${forward ? 'next' : 'previous'}ElementSibling`];\n if (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=\"\">\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 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.component(this.getAttribute(\"loader\") ?? 'loaders:select').create(this, { options: slots.options });\n\n this.#multiple = this.hasAttribute(\"multiple\");\n await this.#loader.prefetch?.();\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\n const self = this;\n const [dload, abortdload] = Timing.throttle(400, () => self.#ddmenu.show(() => self.#loader.load(self.#input.value)));\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.#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.#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.#ddmenu.moveOrShow(false, () => self.#loader.load(self.#input.value));\n break;\n }\n case 'ArrowDown': {\n e.preventDefault();\n this.#ddmenu.moveOrShow(true, () => self.#loader.load(self.#input.value));\n break;\n }\n case 'Escape': {\n this.#ddmenu.hide();\n break;\n }\n case 'Enter': {\n e.preventDefault();\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.#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.#ddmenu.hide();\n this.#input.value = '';\n });\n this.replaceChildren(fragment);\n }\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n #changed() {\n const selection = [...this.#values.entries()].map(e => ({ key: e[0], label: e[1][0], metadata: e[1].slice(1) }))\n const value = this.#multiple ? selection : (selection[0] ?? null);\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { value }\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 if (vs === null) {\n this.#values = new Map();\n this.#syncBadges();\n return;\n }\n (async () => {\n const entries = await (this.#multiple ? this.#loader.exact(...vs) : this.#loader.exact(vs));\n this.#values = new Map(entries.map(e => [e[0], e.slice(1)]));\n this.#syncBadges();\n })();\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 //@ts-ignore\n get disabled() {\n return this.#input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this.#input, '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 \"@optionfactory/ftl\"\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(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value\n }\n }));\n });\n const label = Fragments.fromChildNodes(el);\n return [input, label];\n });\n\n radioEls.forEach(el => el.remove());\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 //@ts-ignore\n get disabled(){\n return this.#fieldset.hasAttribute('disabled');\n }\n set disabled(d){\n Attributes.toggle(this.#fieldset, '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 };","import { Attributes, ParsedElement } from \"@optionfactory/ftl\";\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(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value\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(new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: this.value\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 //@ts-ignore\n get disabled() {\n return this.#input.hasAttribute('disabled');\n }\n set disabled(d) {\n Attributes.toggle(this.#input, '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 }","import { ParsedElement } from \"@optionfactory/ftl\"\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 };","import { Attributes, Fragments, Nodes, ParsedElement, registry, Rendering } from \"@optionfactory/ftl\"\n\nclass SortButton extends ParsedElement {\n static observed = [\"order\"];\n #order;\n render() {\n const sorter = this.getAttribute(\"sorter\");\n const orders = [\"asc\", \"desc\", null];\n this.addEventListener('click', () => {\n const nextOrder = orders[(orders.indexOf(this.order) + 1) % 3];\n this.dispatchEvent(new CustomEvent('sort-requested', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: { sorter, order: nextOrder }\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 }\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.update(observed.current ?? 0, observed.total ?? 0);\n this.addEventListener('click', (/** @type any */evt) => {\n const el = evt.target.closest('a');\n if (!el) {\n return;\n }\n this.dispatchEvent(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 prev = { index: Math.max(0, current - 1), enabled: current > 0 };\n const curr = { index: current, label: current + 1 };\n const next = { index: Math.min(total, current + 1), enabled: current + 1 < total };\n const pages = [{\n index: current,\n label: current + 1\n }];\n for (let mid = current, offset = 1; offset !== maxRender && pages.length != maxRender; ++offset) {\n const p = mid - offset;\n if (p >= 0) {\n pages.unshift({ index: p, label: p + 1 });\n }\n const n = mid + offset;\n if (n < total) {\n pages.push({ index: n, label: n + 1 })\n }\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 const schema = Nodes.queryChildren(nodeOrFragment, \"schema\");\n if (!schema) {\n throw new Error(`missing expected <schema> in ${nodeOrFragment}`);\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 = columns.filter(v => v.hasAttribute('order')).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 = (!sorter && !order) ? titleNode : (() => {\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.withOverlay({ inHeaders: true, inRows: false }).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\n\nclass InMemoryTableLoader {\n #data\n constructor(data) {\n this.#data = data;\n }\n async load(pageRequest, sortRequest, filterRequest) {\n return { \n page: this.#data, \n size: this.#data.length \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.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\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 }\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.#sorters = table.querySelectorAll(':scope > thead ful-sorter') ?? [];\n this.replaceChildren(fragment);\n schema.headersTemplate.renderTo(this.querySelector('thead'));\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 page: 0,\n size: this.#latestRequest.pageRequest.size\n }, this.#latestRequest.sortRequest, evt.detail.request);\n })\n this.addEventListener('page-requested', async (/** @type any */e) => {\n await this.load({\n page: e.detail.value,\n size: this.#latestRequest.pageRequest.size\n }, this.#latestRequest.sortRequest, this.#latestRequest.filterRequest);\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 => s.order = null);\n e.target.order = e.detail.value.order;\n })\n if (this.hasAttribute('autoload')) {\n await this.reload();\n }\n }\n\n async reload() {\n return await this.load(this.#latestRequest.pageRequest, this.#latestRequest.sortRequest, this.#latestRequest.filterRequest);\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(p => `${p.reason}`);\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 page: 0,\n size: this.#latestRequest.pageRequest.size\n }, this.#latestRequest.sortRequest, filterRequest);\n }\n #update(pageRequest, sortRequest, filterRequest, pageResponse) {\n this.#loading.setAttribute(\"hidden\", \"\");\n this.#body.replaceChildren(this.template('row').withOverlay({\n schema: this.#schema,\n pageRequest,\n filterRequest,\n pageResponse\n }).render());\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 }","import { Attributes } from \"@optionfactory/ftl\";\nimport { Instant } from \"./temporals.mjs\";\nimport { Input } from \"./input.mjs\";\n\nclass InstantFilter extends Input {\n static observed = ['value:json', 'readonly:presence', 'required:presence'];\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=\"\">&PrecedesSlantEqual;</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\">&ne;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LT\">&prec;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GT\">&succ;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LTE\">&PrecedesSlantEqual;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GTE\">&SucceedsSlantEqual;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"BETWEEN\">&LeftRightArrow;</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\n this.disabled = conf.disabled;\n this.readonly = conf.observed.readonly;\n this.required = conf.observed.required;\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 Attributes.toggle(this.#value2, 'hidden', value !== 'BETWEEN');\n btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\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.#operator.setAttribute('value', 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 set readonly(v) {\n this.#value2.readOnly = v;\n super.readonly = v;\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'];\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\">&ne;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LT\">&prec;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GT\">&succ;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"LTE\">&PrecedesSlantEqual;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"GTE\">&SucceedsSlantEqual;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"BETWEEN\">&LeftRightArrow;</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\n this.disabled = conf.disabled;\n this.readonly = conf.observed.readonly;\n this.required = conf.observed.required;\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 Attributes.toggle(this.#value2, 'hidden', value !== 'BETWEEN');\n btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\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.#operator.setAttibute('value', operator);\n this.#value1.value = values[0];\n this.#value2.value = values[1];\n }\n set readonly(v) {\n this.#value2.readOnly = v;\n super.readonly = v;\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'];\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=\"\">&mldr;a&mldr;</button>\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" role=\"button\" value=\"CONTAINS\">&mldr;a&mldr;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"STARTS_WITH\">a&mldr;</a></li>\n <li><a class=\"dropdown-item\" role=\"button\" value=\"ENDS_WITH\">&mldr;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 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.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 btn.setAttribute('value', value);\n btn.innerHTML = target.innerHTML;\n })\n }\n get value() {\n const operator = this.#operator.getAttribute('value');\n return this.#value.value === '' ? undefined : [operator, 'IGNORE_CASE', 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.#operator.setAttribute('value', operator);\n this.#value.value = value;\n }\n}\n\nexport { InstantFilter, LocalDateFilter, TextFilter }","\nclass LocalizationModule {\n static t(k, ...args) {\n //@ts-ignore\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(k, ...args);\n }\n\n}\n\n\nexport { LocalizationModule }","import { HttpClient } from \"../http-client.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\n\nclass Plugin {\n configure(registry) {\n const httpClient = HttpClient.builder()\n .withCsrfToken()\n .withRedirectOnUnauthorized(\"/\")\n .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\n\n\nexport { Plugin }"],"names":[],"mappings":"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"}