@optionfactory/fml 9.0.0-rc13 → 9.0.0-rc15

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/README.md CHANGED
@@ -86,7 +86,7 @@ fml targets evergreen browsers from spring 2024. The hard floor is Chrome/Edge 1
86
86
  One feature degrades instead of breaking under a newer floor of its own, and another carries its own fallback:
87
87
 
88
88
  - the flash guard that keeps a field invisible until it has rendered is a custom state matched with `:state()`, Baseline since May 2024: Chrome/Edge 125, Firefox 126, Safari and iOS 17.4, so Safari is already below the hard floor and only Chrome 123-124 and Firefox 125 are affected. There the rule is dropped and a field shows for the moment between being parsed and being rendered
89
- - anchored popovers (the tooltip's note, the select's dropdown, the filter and boolean-value menus) need CSS anchor positioning: Chrome/Edge 129 (September 2024), Safari 26 (September 2025), Firefox 147 (January 2026; Firefox's support is partial against the full specification, but covers the subset fml uses, `anchor-name`, `position-anchor`, `position-area` (Baseline since January 2026), `anchor()` and `anchor-size()`). Below these a hand-placed fallback keeps the popovers anchored beside their invoker, and never runs where the css works
89
+ - anchored popovers (the tooltip's note, the select's dropdown, the filter and boolean-value menus) need CSS anchor positioning: Chrome/Edge 129 (September 2024), Safari 26 (September 2025), Firefox 147 (January 2026; Firefox's support is partial against the full specification, but covers the subset fml uses, `anchor-name`, `position-anchor`, `position-area` (Baseline since January 2026), `anchor()` and `anchor-size()`). Below these a hand-placed fallback keeps the popovers anchored beside their invoker, and never runs where the css works. The dropdown's flip above its control additionally needs `position-try-fallbacks`, which Firefox does not carry yet: there the flip alone degrades away, the hand-placed fallback and every other placement keeping it
90
90
 
91
91
  On iOS every browser runs the system WebKit, so the floor reads in iOS versions: iOS 17.5 (May 2024) or newer, which every iPhone from the XS/XR (2018) onward can reach; the anchored popovers fall back to hand placing below iOS 26 (September 2025).
92
92
 
@@ -55,26 +55,21 @@
55
55
  * @returns {string|undefined} The extracted error message string, or undefined.
56
56
  */
57
57
  function message() {
58
- if (evt.message) {
59
- return evt.message;
60
- }
61
58
  const thrown = evt.reason ?? evt.error;
62
- if (!thrown?.message) {
59
+ const head = evt.message ?? thrown?.message;
60
+ if (!head) {
63
61
  return undefined;
64
62
  }
65
- // a thrown error carries its context on `cause`, which neither the message
66
- // nor the stack includes: without walking it the report says where the
67
- // failure surfaced and never what caused it
68
- const parts = [];
63
+ const parts = [head];
69
64
  const seen = [];
70
- for (let e = thrown; e && parts.length < 6 && seen.indexOf(e) === -1; e = e.cause) {
65
+ for (let e = thrown?.cause; e && parts.length < 6 && seen.indexOf(e) === -1; e = e.cause) {
71
66
  seen.push(e);
72
67
  if (!e.message) {
73
68
  break;
74
69
  }
75
- parts.push(parts.length === 0 ? e.message : `Caused by: ${e.message}`);
70
+ parts.push(`Caused by: ${e.message}`);
76
71
  }
77
- if (thrown.truncated) {
72
+ if (thrown?.truncated) {
78
73
  parts.push('Caused by: … outer frames omitted');
79
74
  }
80
75
  return parts.join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"client-errors.iife.js","sources":["../src/client-errors/client-errors.mjs"],"sourcesContent":["/**\n * Global error and unhandled promise rejection report handler.\n * @param {any} evt - The triggered event instance (ErrorEvent or PromiseRejectionEvent).\n */\nvar complained_missing_uri = false;\nfunction ful_report_error(evt) {\n /**\n * Extracts the content value of a specified meta tag.\n * @param {string} name - The name attribute of the meta tag.\n * @returns {string|undefined} The content of the meta tag, or undefined if not found.\n */\n function meta_content(name) {\n var cleanName = name.replace(/[\"\\\\]/g, '\\\\$&');\n /** @type {HTMLMetaElement | null} */\n var metaEl = document.querySelector(`meta[name=\"${cleanName}\"]`);\n return metaEl ? metaEl.content : undefined;\n }\n\n /**\n * Resolves the configured reporting URI from the DOM script element attribute.\n * @returns {string|null} The reporting URI string, or null if missing.\n */\n function configured_report_uri() {\n /** @type {HTMLScriptElement | null} */\n var scriptEl = document.querySelector('script[data-report-client-errors-uri]');\n if (!scriptEl) {\n if (!complained_missing_uri) {\n complained_missing_uri = true;\n console?.error?.('missing attribute data-report-client-errors-uri');\n }\n return null;\n }\n return scriptEl.getAttribute('data-report-client-errors-uri');\n }\n\n /**\n * Extracts and splits the error stack trace into an array of lines.\n * @returns {string[]|undefined} An array of stack trace lines, or undefined if unavailable.\n */\n function split_stack() {\n if (evt.error?.stack?.split) {\n return evt.error.stack.split('\\n');\n }\n if (evt.reason?.stack?.split) {\n return evt.reason.stack.split('\\n');\n }\n return undefined;\n }\n\n /**\n * Extracts the error message from the event properties.\n * @returns {string|undefined} The extracted error message string, or undefined.\n */\n function message() {\n if (evt.message) {\n return evt.message;\n }\n const thrown = evt.reason ?? evt.error;\n if (!thrown?.message) {\n return undefined;\n }\n // a thrown error carries its context on `cause`, which neither the message\n // nor the stack includes: without walking it the report says where the\n // failure surfaced and never what caused it\n const parts = [];\n const seen = [];\n for (let e = thrown; e && parts.length < 6 && seen.indexOf(e) === -1; e = e.cause) {\n seen.push(e);\n if (!e.message) {\n break;\n }\n parts.push(parts.length === 0 ? e.message : `Caused by: ${e.message}`);\n }\n if (thrown.truncated) {\n parts.push('Caused by: … outer frames omitted');\n }\n return parts.join('\\n');\n }\n\n var uri = configured_report_uri();\n if (!uri) {\n return;\n }\n\n /** @type {Record<string, any>} */\n var headers = {\n 'Content-Type': 'application/json',\n };\n\n var csrfHeader = meta_content('_csrf_header');\n var csrfToken = meta_content('_csrf');\n //a half configured pair would send a literal \"undefined\" token, failing the\n //server's check on every report\n if (csrfHeader && csrfToken) {\n headers[csrfHeader] = csrfToken;\n }\n\n try {\n fetch(uri, {\n method: 'POST',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n keepalive: true,\n headers: headers,\n redirect: 'error',\n referrerPolicy: 'no-referrer-when-downgrade',\n body: JSON.stringify({\n page: window.location?.href ? window.location.href : 'unknown',\n filename: evt.filename,\n line: evt.lineno,\n col: evt.colno,\n message: message(),\n stack: split_stack(),\n }),\n }).catch(() => {\n // the endpoint is unreachable: swallowing the rejection keeps it from being\n // reported as an unhandled rejection, which would call this handler again\n });\n } catch {\n //the reporter must never become the failure it reports: a throw while\n //building or sending the report is dropped rather than re-entering here\n }\n}\n\nwindow.addEventListener('error', ful_report_error);\nwindow.addEventListener('unhandledrejection', ful_report_error);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client-errors.iife.js","sources":["../src/client-errors/client-errors.mjs"],"sourcesContent":["/**\n * Global error and unhandled promise rejection report handler.\n * @param {any} evt - The triggered event instance (ErrorEvent or PromiseRejectionEvent).\n */\nvar complained_missing_uri = false;\nfunction ful_report_error(evt) {\n /**\n * Extracts the content value of a specified meta tag.\n * @param {string} name - The name attribute of the meta tag.\n * @returns {string|undefined} The content of the meta tag, or undefined if not found.\n */\n function meta_content(name) {\n var cleanName = name.replace(/[\"\\\\]/g, '\\\\$&');\n /** @type {HTMLMetaElement | null} */\n var metaEl = document.querySelector(`meta[name=\"${cleanName}\"]`);\n return metaEl ? metaEl.content : undefined;\n }\n\n /**\n * Resolves the configured reporting URI from the DOM script element attribute.\n * @returns {string|null} The reporting URI string, or null if missing.\n */\n function configured_report_uri() {\n /** @type {HTMLScriptElement | null} */\n var scriptEl = document.querySelector('script[data-report-client-errors-uri]');\n if (!scriptEl) {\n if (!complained_missing_uri) {\n complained_missing_uri = true;\n console?.error?.('missing attribute data-report-client-errors-uri');\n }\n return null;\n }\n return scriptEl.getAttribute('data-report-client-errors-uri');\n }\n\n /**\n * Extracts and splits the error stack trace into an array of lines.\n * @returns {string[]|undefined} An array of stack trace lines, or undefined if unavailable.\n */\n function split_stack() {\n if (evt.error?.stack?.split) {\n return evt.error.stack.split('\\n');\n }\n if (evt.reason?.stack?.split) {\n return evt.reason.stack.split('\\n');\n }\n return undefined;\n }\n\n /**\n * Extracts the error message from the event properties.\n * @returns {string|undefined} The extracted error message string, or undefined.\n */\n function message() {\n const thrown = evt.reason ?? evt.error;\n const head = evt.message ?? thrown?.message;\n if (!head) {\n return undefined;\n }\n const parts = [head];\n const seen = [];\n for (let e = thrown?.cause; e && parts.length < 6 && seen.indexOf(e) === -1; e = e.cause) {\n seen.push(e);\n if (!e.message) {\n break;\n }\n parts.push(`Caused by: ${e.message}`);\n }\n if (thrown?.truncated) {\n parts.push('Caused by: … outer frames omitted');\n }\n return parts.join('\\n');\n }\n\n var uri = configured_report_uri();\n if (!uri) {\n return;\n }\n\n /** @type {Record<string, any>} */\n var headers = {\n 'Content-Type': 'application/json',\n };\n\n var csrfHeader = meta_content('_csrf_header');\n var csrfToken = meta_content('_csrf');\n //a half configured pair would send a literal \"undefined\" token, failing the\n //server's check on every report\n if (csrfHeader && csrfToken) {\n headers[csrfHeader] = csrfToken;\n }\n\n try {\n fetch(uri, {\n method: 'POST',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n keepalive: true,\n headers: headers,\n redirect: 'error',\n referrerPolicy: 'no-referrer-when-downgrade',\n body: JSON.stringify({\n page: window.location?.href ? window.location.href : 'unknown',\n filename: evt.filename,\n line: evt.lineno,\n col: evt.colno,\n message: message(),\n stack: split_stack(),\n }),\n }).catch(() => {\n // the endpoint is unreachable: swallowing the rejection keeps it from being\n // reported as an unhandled rejection, which would call this handler again\n });\n } catch {\n //the reporter must never become the failure it reports: a throw while\n //building or sending the report is dropped rather than re-entering here\n }\n}\n\nwindow.addEventListener('error', ful_report_error);\nwindow.addEventListener('unhandledrejection', ful_report_error);\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(){"use strict";var e=!1;function r(r){function t(e){var r=e.replace(/["\\]/g,"\\$&"),t=document.querySelector(`meta[name="${r}"]`);return t?t.content:void 0}var n,o=(n=document.querySelector("script[data-report-client-errors-uri]"))?n.getAttribute("data-report-client-errors-uri"):(e||(e=!0,console?.error?.("missing attribute data-report-client-errors-uri")),null);if(o){var a={"Content-Type":"application/json"},s=t("_csrf_header"),i=t("_csrf");s&&i&&(a[s]=i);try{fetch(o,{method:"POST",mode:"same-origin",cache:"no-cache",credentials:"same-origin",keepalive:!0,headers:a,redirect:"error",referrerPolicy:"no-referrer-when-downgrade",body:JSON.stringify({page:window.location?.href?window.location.href:"unknown",filename:r.filename,line:r.lineno,col:r.colno,message:function(){if(r.message)return r.message;const e=r.reason??r.error;if(!e?.message)return;const t=[],n=[];for(let r=e;r&&t.length<6&&-1===n.indexOf(r)&&(n.push(r),r.message);r=r.cause)t.push(0===t.length?r.message:`Caused by: ${r.message}`);return e.truncated&&t.push("Caused by: … outer frames omitted"),t.join("\n")}(),stack:r.error?.stack?.split?r.error.stack.split("\n"):r.reason?.stack?.split?r.reason.stack.split("\n"):void 0})}).catch(()=>{})}catch{}}}window.addEventListener("error",r),window.addEventListener("unhandledrejection",r)}();
1
+ !function(){"use strict";var e=!1;function r(r){function t(e){var r=e.replace(/["\\]/g,"\\$&"),t=document.querySelector(`meta[name="${r}"]`);return t?t.content:void 0}var n,o=(n=document.querySelector("script[data-report-client-errors-uri]"))?n.getAttribute("data-report-client-errors-uri"):(e||(e=!0,console?.error?.("missing attribute data-report-client-errors-uri")),null);if(o){var a={"Content-Type":"application/json"},i=t("_csrf_header"),s=t("_csrf");i&&s&&(a[i]=s);try{fetch(o,{method:"POST",mode:"same-origin",cache:"no-cache",credentials:"same-origin",keepalive:!0,headers:a,redirect:"error",referrerPolicy:"no-referrer-when-downgrade",body:JSON.stringify({page:window.location?.href?window.location.href:"unknown",filename:r.filename,line:r.lineno,col:r.colno,message:function(){const e=r.reason??r.error,t=r.message??e?.message;if(!t)return;const n=[t],o=[];for(let r=e?.cause;r&&n.length<6&&-1===o.indexOf(r)&&(o.push(r),r.message);r=r.cause)n.push(`Caused by: ${r.message}`);return e?.truncated&&n.push("Caused by: … outer frames omitted"),n.join("\n")}(),stack:r.error?.stack?.split?r.error.stack.split("\n"):r.reason?.stack?.split?r.reason.stack.split("\n"):void 0})}).catch(()=>{})}catch{}}}window.addEventListener("error",r),window.addEventListener("unhandledrejection",r)}();
2
2
  //# sourceMappingURL=client-errors.iife.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-errors.iife.min.js","sources":["../src/client-errors/client-errors.mjs"],"sourcesContent":["/**\n * Global error and unhandled promise rejection report handler.\n * @param {any} evt - The triggered event instance (ErrorEvent or PromiseRejectionEvent).\n */\nvar complained_missing_uri = false;\nfunction ful_report_error(evt) {\n /**\n * Extracts the content value of a specified meta tag.\n * @param {string} name - The name attribute of the meta tag.\n * @returns {string|undefined} The content of the meta tag, or undefined if not found.\n */\n function meta_content(name) {\n var cleanName = name.replace(/[\"\\\\]/g, '\\\\$&');\n /** @type {HTMLMetaElement | null} */\n var metaEl = document.querySelector(`meta[name=\"${cleanName}\"]`);\n return metaEl ? metaEl.content : undefined;\n }\n\n /**\n * Resolves the configured reporting URI from the DOM script element attribute.\n * @returns {string|null} The reporting URI string, or null if missing.\n */\n function configured_report_uri() {\n /** @type {HTMLScriptElement | null} */\n var scriptEl = document.querySelector('script[data-report-client-errors-uri]');\n if (!scriptEl) {\n if (!complained_missing_uri) {\n complained_missing_uri = true;\n console?.error?.('missing attribute data-report-client-errors-uri');\n }\n return null;\n }\n return scriptEl.getAttribute('data-report-client-errors-uri');\n }\n\n /**\n * Extracts and splits the error stack trace into an array of lines.\n * @returns {string[]|undefined} An array of stack trace lines, or undefined if unavailable.\n */\n function split_stack() {\n if (evt.error?.stack?.split) {\n return evt.error.stack.split('\\n');\n }\n if (evt.reason?.stack?.split) {\n return evt.reason.stack.split('\\n');\n }\n return undefined;\n }\n\n /**\n * Extracts the error message from the event properties.\n * @returns {string|undefined} The extracted error message string, or undefined.\n */\n function message() {\n if (evt.message) {\n return evt.message;\n }\n const thrown = evt.reason ?? evt.error;\n if (!thrown?.message) {\n return undefined;\n }\n // a thrown error carries its context on `cause`, which neither the message\n // nor the stack includes: without walking it the report says where the\n // failure surfaced and never what caused it\n const parts = [];\n const seen = [];\n for (let e = thrown; e && parts.length < 6 && seen.indexOf(e) === -1; e = e.cause) {\n seen.push(e);\n if (!e.message) {\n break;\n }\n parts.push(parts.length === 0 ? e.message : `Caused by: ${e.message}`);\n }\n if (thrown.truncated) {\n parts.push('Caused by: … outer frames omitted');\n }\n return parts.join('\\n');\n }\n\n var uri = configured_report_uri();\n if (!uri) {\n return;\n }\n\n /** @type {Record<string, any>} */\n var headers = {\n 'Content-Type': 'application/json',\n };\n\n var csrfHeader = meta_content('_csrf_header');\n var csrfToken = meta_content('_csrf');\n //a half configured pair would send a literal \"undefined\" token, failing the\n //server's check on every report\n if (csrfHeader && csrfToken) {\n headers[csrfHeader] = csrfToken;\n }\n\n try {\n fetch(uri, {\n method: 'POST',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n keepalive: true,\n headers: headers,\n redirect: 'error',\n referrerPolicy: 'no-referrer-when-downgrade',\n body: JSON.stringify({\n page: window.location?.href ? window.location.href : 'unknown',\n filename: evt.filename,\n line: evt.lineno,\n col: evt.colno,\n message: message(),\n stack: split_stack(),\n }),\n }).catch(() => {\n // the endpoint is unreachable: swallowing the rejection keeps it from being\n // reported as an unhandled rejection, which would call this handler again\n });\n } catch {\n //the reporter must never become the failure it reports: a throw while\n //building or sending the report is dropped rather than re-entering here\n }\n}\n\nwindow.addEventListener('error', ful_report_error);\nwindow.addEventListener('unhandledrejection', ful_report_error);\n"],"names":["complained_missing_uri","ful_report_error","evt","meta_content","name","cleanName","replace","metaEl","document","querySelector","content","undefined","scriptEl","uri","getAttribute","console","error","headers","csrfHeader","csrfToken","fetch","method","mode","cache","credentials","keepalive","redirect","referrerPolicy","body","JSON","stringify","page","window","location","href","filename","line","lineno","col","colno","message","thrown","reason","parts","seen","e","length","indexOf","push","cause","truncated","join","stack","split","catch","addEventListener"],"mappings":"yBAIA,IAAIA,GAAyB,EAC7B,SAASC,EAAiBC,GAMtB,SAASC,EAAaC,GAClB,IAAIC,EAAYD,EAAKE,QAAQ,SAAU,QAEnCC,EAASC,SAASC,cAAc,cAAcJ,OAClD,OAAOE,EAASA,EAAOG,aAAUC,CACrC,CA+DA,IAvDQC,EAuDJC,GAvDID,EAAWJ,SAASC,cAAc,0CAQ/BG,EAASE,aAAa,kCANpBd,IACDA,GAAyB,EACzBe,SAASC,QAAQ,oDAEd,MAkDf,GAAKH,EAAL,CAKA,IAAII,EAAU,CACV,eAAgB,oBAGhBC,EAAaf,EAAa,gBAC1BgB,EAAYhB,EAAa,SAGzBe,GAAcC,IACdF,EAAQC,GAAcC,GAG1B,IACIC,MAAMP,EAAK,CACPQ,OAAQ,OACRC,KAAM,cACNC,MAAO,WACPC,YAAa,cACbC,WAAW,EACXR,QAASA,EACTS,SAAU,QACVC,eAAgB,6BAChBC,KAAMC,KAAKC,UAAU,CACjBC,KAAMC,OAAOC,UAAUC,KAAOF,OAAOC,SAASC,KAAO,UACrDC,SAAUjC,EAAIiC,SACdC,KAAMlC,EAAImC,OACVC,IAAKpC,EAAIqC,MACTC,QA3DZ,WACI,GAAItC,EAAIsC,QACJ,OAAOtC,EAAIsC,QAEf,MAAMC,EAASvC,EAAIwC,QAAUxC,EAAIc,MACjC,IAAKyB,GAAQD,QACT,OAKJ,MAAMG,EAAQ,GACRC,EAAO,GACb,IAAK,IAAIC,EAAIJ,EAAQI,GAAKF,EAAMG,OAAS,IAAyB,IAApBF,EAAKG,QAAQF,KACvDD,EAAKI,KAAKH,GACLA,EAAEL,SAF2DK,EAAIA,EAAEI,MAKxEN,EAAMK,KAAsB,IAAjBL,EAAMG,OAAeD,EAAEL,QAAU,cAAcK,EAAEL,WAKhE,OAHIC,EAAOS,WACPP,EAAMK,KAAK,qCAERL,EAAMQ,KAAK,KACtB,CAmCqBX,GACTY,MAzEJlD,EAAIc,OAAOoC,OAAOC,MACXnD,EAAIc,MAAMoC,MAAMC,MAAM,MAE7BnD,EAAIwC,QAAQU,OAAOC,MACZnD,EAAIwC,OAAOU,MAAMC,MAAM,WADlC,MAwEGC,MAAM,OAIb,CAAE,MAGF,CAxCA,CAyCJ,CAEAtB,OAAOuB,iBAAiB,QAAStD,GACjC+B,OAAOuB,iBAAiB,qBAAsBtD"}
1
+ {"version":3,"file":"client-errors.iife.min.js","sources":["../src/client-errors/client-errors.mjs"],"sourcesContent":["/**\n * Global error and unhandled promise rejection report handler.\n * @param {any} evt - The triggered event instance (ErrorEvent or PromiseRejectionEvent).\n */\nvar complained_missing_uri = false;\nfunction ful_report_error(evt) {\n /**\n * Extracts the content value of a specified meta tag.\n * @param {string} name - The name attribute of the meta tag.\n * @returns {string|undefined} The content of the meta tag, or undefined if not found.\n */\n function meta_content(name) {\n var cleanName = name.replace(/[\"\\\\]/g, '\\\\$&');\n /** @type {HTMLMetaElement | null} */\n var metaEl = document.querySelector(`meta[name=\"${cleanName}\"]`);\n return metaEl ? metaEl.content : undefined;\n }\n\n /**\n * Resolves the configured reporting URI from the DOM script element attribute.\n * @returns {string|null} The reporting URI string, or null if missing.\n */\n function configured_report_uri() {\n /** @type {HTMLScriptElement | null} */\n var scriptEl = document.querySelector('script[data-report-client-errors-uri]');\n if (!scriptEl) {\n if (!complained_missing_uri) {\n complained_missing_uri = true;\n console?.error?.('missing attribute data-report-client-errors-uri');\n }\n return null;\n }\n return scriptEl.getAttribute('data-report-client-errors-uri');\n }\n\n /**\n * Extracts and splits the error stack trace into an array of lines.\n * @returns {string[]|undefined} An array of stack trace lines, or undefined if unavailable.\n */\n function split_stack() {\n if (evt.error?.stack?.split) {\n return evt.error.stack.split('\\n');\n }\n if (evt.reason?.stack?.split) {\n return evt.reason.stack.split('\\n');\n }\n return undefined;\n }\n\n /**\n * Extracts the error message from the event properties.\n * @returns {string|undefined} The extracted error message string, or undefined.\n */\n function message() {\n const thrown = evt.reason ?? evt.error;\n const head = evt.message ?? thrown?.message;\n if (!head) {\n return undefined;\n }\n const parts = [head];\n const seen = [];\n for (let e = thrown?.cause; e && parts.length < 6 && seen.indexOf(e) === -1; e = e.cause) {\n seen.push(e);\n if (!e.message) {\n break;\n }\n parts.push(`Caused by: ${e.message}`);\n }\n if (thrown?.truncated) {\n parts.push('Caused by: … outer frames omitted');\n }\n return parts.join('\\n');\n }\n\n var uri = configured_report_uri();\n if (!uri) {\n return;\n }\n\n /** @type {Record<string, any>} */\n var headers = {\n 'Content-Type': 'application/json',\n };\n\n var csrfHeader = meta_content('_csrf_header');\n var csrfToken = meta_content('_csrf');\n //a half configured pair would send a literal \"undefined\" token, failing the\n //server's check on every report\n if (csrfHeader && csrfToken) {\n headers[csrfHeader] = csrfToken;\n }\n\n try {\n fetch(uri, {\n method: 'POST',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n keepalive: true,\n headers: headers,\n redirect: 'error',\n referrerPolicy: 'no-referrer-when-downgrade',\n body: JSON.stringify({\n page: window.location?.href ? window.location.href : 'unknown',\n filename: evt.filename,\n line: evt.lineno,\n col: evt.colno,\n message: message(),\n stack: split_stack(),\n }),\n }).catch(() => {\n // the endpoint is unreachable: swallowing the rejection keeps it from being\n // reported as an unhandled rejection, which would call this handler again\n });\n } catch {\n //the reporter must never become the failure it reports: a throw while\n //building or sending the report is dropped rather than re-entering here\n }\n}\n\nwindow.addEventListener('error', ful_report_error);\nwindow.addEventListener('unhandledrejection', ful_report_error);\n"],"names":["complained_missing_uri","ful_report_error","evt","meta_content","name","cleanName","replace","metaEl","document","querySelector","content","undefined","scriptEl","uri","getAttribute","console","error","headers","csrfHeader","csrfToken","fetch","method","mode","cache","credentials","keepalive","redirect","referrerPolicy","body","JSON","stringify","page","window","location","href","filename","line","lineno","col","colno","message","thrown","reason","head","parts","seen","e","cause","length","indexOf","push","truncated","join","stack","split","catch","addEventListener"],"mappings":"yBAIA,IAAIA,GAAyB,EAC7B,SAASC,EAAiBC,GAMtB,SAASC,EAAaC,GAClB,IAAIC,EAAYD,EAAKE,QAAQ,SAAU,QAEnCC,EAASC,SAASC,cAAc,cAAcJ,OAClD,OAAOE,EAASA,EAAOG,aAAUC,CACrC,CA0DA,IAlDQC,EAkDJC,GAlDID,EAAWJ,SAASC,cAAc,0CAQ/BG,EAASE,aAAa,kCANpBd,IACDA,GAAyB,EACzBe,SAASC,QAAQ,oDAEd,MA6Cf,GAAKH,EAAL,CAKA,IAAII,EAAU,CACV,eAAgB,oBAGhBC,EAAaf,EAAa,gBAC1BgB,EAAYhB,EAAa,SAGzBe,GAAcC,IACdF,EAAQC,GAAcC,GAG1B,IACIC,MAAMP,EAAK,CACPQ,OAAQ,OACRC,KAAM,cACNC,MAAO,WACPC,YAAa,cACbC,WAAW,EACXR,QAASA,EACTS,SAAU,QACVC,eAAgB,6BAChBC,KAAMC,KAAKC,UAAU,CACjBC,KAAMC,OAAOC,UAAUC,KAAOF,OAAOC,SAASC,KAAO,UACrDC,SAAUjC,EAAIiC,SACdC,KAAMlC,EAAImC,OACVC,IAAKpC,EAAIqC,MACTC,QAtDZ,WACI,MAAMC,EAASvC,EAAIwC,QAAUxC,EAAIc,MAC3B2B,EAAOzC,EAAIsC,SAAWC,GAAQD,QACpC,IAAKG,EACD,OAEJ,MAAMC,EAAQ,CAACD,GACTE,EAAO,GACb,IAAK,IAAIC,EAAIL,GAAQM,MAAOD,GAAKF,EAAMI,OAAS,IAAyB,IAApBH,EAAKI,QAAQH,KAC9DD,EAAKK,KAAKJ,GACLA,EAAEN,SAFkEM,EAAIA,EAAEC,MAK/EH,EAAMM,KAAK,cAAcJ,EAAEN,WAK/B,OAHIC,GAAQU,WACRP,EAAMM,KAAK,qCAERN,EAAMQ,KAAK,KACtB,CAmCqBZ,GACTa,MApEJnD,EAAIc,OAAOqC,OAAOC,MACXpD,EAAIc,MAAMqC,MAAMC,MAAM,MAE7BpD,EAAIwC,QAAQW,OAAOC,MACZpD,EAAIwC,OAAOW,MAAMC,MAAM,WADlC,MAmEGC,MAAM,OAIb,CAAE,MAGF,CAxCA,CAyCJ,CAEAvB,OAAOwB,iBAAiB,QAASvD,GACjC+B,OAAOwB,iBAAiB,qBAAsBvD"}
@@ -48,7 +48,7 @@
48
48
  "name": "Dialog",
49
49
  "tagName": "ful-dialog",
50
50
  "customElement": true,
51
- "description": "A modal dialog on the native platform: header, body and buttons, the header attribute naming its heading, opened by any element carrying dialog-target set to its id, or programmatically through open()/ask(), which answer with how the dialog ended, or through update(callback), which opens it on a loading state and then shows either what the callback delivered or the problems of a rejection. Longer explanations belong here, shorter ones in ful-tooltip.",
51
+ "description": "A modal dialog on the native platform: header, body and buttons, the header attribute naming its heading, opened by any element carrying dialog-target set to its id, or programmatically through open()/ask(), which answer with how the dialog ended, or through update(callback), which opens it on a loading state and then shows either what the callback delivered or the problems of a rejection. Longer explanations belong here, shorter ones in ful-tooltip. Dialog.ask(header, body, buttons) and Dialog.confirm(header, body, labels) ask a question in a transient one, building, showing, answering and removing the element themselves; a confirm's cancel, close and Escape all answer the negative.",
52
52
  "attributes": [
53
53
  {
54
54
  "name": "header",
@@ -108,10 +108,10 @@
108
108
  "name": "Drawer",
109
109
  "tagName": "ful-drawer",
110
110
  "customElement": true,
111
- "description": "A side panel drawer on the native dialog platform: a header with its title (the title attribute, or update()'s own) and close button, and a body that opens in a loading state, then shows either the content delivered by update(title, callback) (or the slotted one, when it is never updated) or the error a rejecting callback carries. placement picks the side, end by default, start its mirror. Any element carrying dialog-target set to its id opens it too.",
111
+ "description": "A side panel drawer on the native dialog platform: a header with its title (the header attribute, or update()'s own) and close button, and a body that opens in a loading state, then shows either the content delivered by update(header, callback) (or the slotted one, when it is never updated) or the error a rejecting callback carries. placement picks the side, end by default, start its mirror. Any element carrying dialog-target set to its id opens it too.",
112
112
  "attributes": [
113
113
  {
114
- "name": "title",
114
+ "name": "header",
115
115
  "description": "The drawer's title, shown in its header. Text only, and also what update() re-titles the panel with.",
116
116
  "type": {
117
117
  "text": "string"
@@ -159,12 +159,30 @@
159
159
  }
160
160
  ]
161
161
  },
162
+ {
163
+ "kind": "class",
164
+ "name": "Menu",
165
+ "tagName": "ful-menu",
166
+ "customElement": true,
167
+ "description": "A menu of commands on the native popover platform: the invoker named by for toggles it, light dismiss and Escape come from the browser, and the element adds the menu semantics and the keyboard protocol (roving focus with the arrows, Home and End, type-ahead, Enter and Space to activate, Escape and every close handing the focus back to the invoker). The items are the buttons and links written inside it, kept as they are and given their menuitem role; activation is the item's own click, which the menu only follows by closing.",
168
+ "attributes": [
169
+ {
170
+ "name": "for",
171
+ "description": "The id of the invoker the menu belongs to: it toggles the menu, carries aria-haspopup and aria-expanded, and takes the focus back when the menu closes. Read once at the upgrade, so the invoker must already be in the page by then.",
172
+ "type": {
173
+ "text": "string"
174
+ }
175
+ }
176
+ ],
177
+ "slots": [],
178
+ "events": []
179
+ },
162
180
  {
163
181
  "kind": "class",
164
182
  "name": "Toasts",
165
183
  "tagName": "ful-toasts",
166
184
  "customElement": true,
167
- "description": "A transient feedback region, one per page: each show() (or a show-toast document event carrying the same detail) appends a toast that dismisses itself after its timeout, the element's timeout attribute or five seconds by default, and carries its own dismiss button. severity picks the theme and the announcement, info by default, success, warning and error, the error one announced as an alert; a Failure message shows its problems' reasons.",
185
+ "description": "A transient feedback region, one per page: each show() (or a show-toast document event carrying the same detail) appends a toast that dismisses itself after its timeout, the element's timeout attribute or five seconds by default, and carries its own dismiss button. severity picks the theme and the announcement, info by default, success, warning and error, the error one announced as an alert; a Failure message shows its problems' reasons. The timer holds while the toast is hovered or holds the focus, and action: { label, onClick } renders a button beside the message whose click answers and retires the toast, the same option travelling in the event detail.",
168
186
  "attributes": [
169
187
  {
170
188
  "name": "timeout",
@@ -186,7 +204,7 @@
186
204
  "attributes": [
187
205
  {
188
206
  "name": "active",
189
- "description": "The index of the visible panel, zero based, reflected as the active attribute. Clicks, the arrow keys and the property all move it, each move answering with a change event.",
207
+ "description": "The index of the visible panel, zero based, reflected as the active attribute. Clicks, the arrow keys and the property all move it, each move answering with a tabs:change event.",
190
208
  "type": {
191
209
  "text": "number"
192
210
  }
@@ -204,8 +222,8 @@
204
222
  ],
205
223
  "events": [
206
224
  {
207
- "name": "change",
208
- "description": "Fired with the active index and the previous one whenever the visible panel moves.",
225
+ "name": "tabs:change",
226
+ "description": "Fired with the active index and the previous one whenever the visible panel moves. A name of its own rather than the fields' change: the panels are the host's children, so every native change of a field inside them bubbles through the host under that name.",
209
227
  "type": {
210
228
  "text": "CustomEvent"
211
229
  }
@@ -1358,7 +1376,7 @@
1358
1376
  },
1359
1377
  {
1360
1378
  "name": "empty",
1361
- "description": "Shown in place of the rows when a load returns none, replacing the localized default message."
1379
+ "description": "Shown in place of the rows when a load returns none, replacing the localized default message. Rendered per load in the rows' own scope, so its expressions read schema, pageRequest, filterRequest and pageResponse: an empty state can tell nothing-there from a filter that matched nothing."
1362
1380
  },
1363
1381
  {
1364
1382
  "name": "footer",
@@ -1518,6 +1536,13 @@
1518
1536
  "text": "string"
1519
1537
  }
1520
1538
  },
1539
+ {
1540
+ "name": "operator",
1541
+ "description": "Fixes the operator for the element's life: no menu and no button render, and every tuple carries it. The plural is the menu's whitelist; declaring both warns, the singular winning, and an unknown name warns and pins the filter's default.",
1542
+ "type": {
1543
+ "text": "string"
1544
+ }
1545
+ },
1521
1546
  {
1522
1547
  "name": "disabled",
1523
1548
  "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state.",
@@ -1652,6 +1677,13 @@
1652
1677
  "text": "string"
1653
1678
  }
1654
1679
  },
1680
+ {
1681
+ "name": "operator",
1682
+ "description": "Fixes the operator for the element's life: no menu and no button render, and every tuple carries it. The plural is the menu's whitelist; declaring both warns, the singular winning, and an unknown name warns and pins the filter's default.",
1683
+ "type": {
1684
+ "text": "string"
1685
+ }
1686
+ },
1655
1687
  {
1656
1688
  "name": "disabled",
1657
1689
  "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state.",
@@ -1786,6 +1818,13 @@
1786
1818
  "text": "string"
1787
1819
  }
1788
1820
  },
1821
+ {
1822
+ "name": "operator",
1823
+ "description": "Fixes the operator for the element's life: no menu and no button render, and every tuple carries it. The plural is the menu's whitelist; declaring both warns, the singular winning, and an unknown name warns and pins the filter's default.",
1824
+ "type": {
1825
+ "text": "string"
1826
+ }
1827
+ },
1789
1828
  {
1790
1829
  "name": "disabled",
1791
1830
  "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state.",
@@ -1991,6 +2030,20 @@
1991
2030
  "text": "string"
1992
2031
  }
1993
2032
  },
2033
+ {
2034
+ "name": "operator",
2035
+ "description": "Fixes the operator for the element's life: no menu and no button render, and every tuple carries it. The plural is the menu's whitelist; declaring both warns, the singular winning, and an unknown name warns and pins the filter's default.",
2036
+ "type": {
2037
+ "text": "string"
2038
+ }
2039
+ },
2040
+ {
2041
+ "name": "sensitivity",
2042
+ "description": "Fixes the case sensitivity for the element's life, on the operator's terms: the button leaves and every tuple carries it.",
2043
+ "type": {
2044
+ "text": "string"
2045
+ }
2046
+ },
1994
2047
  {
1995
2048
  "name": "disabled",
1996
2049
  "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state.",
@@ -2370,7 +2423,7 @@
2370
2423
  },
2371
2424
  {
2372
2425
  "name": "value",
2373
- "description": "The selected keys, comma separated, whether or not the select is multiple. A key given here is trimmed and cannot contain a comma; assign such a key through the property instead. The property answers a key for a single select and an array for a multiple one.",
2426
+ "description": "The selected keys, comma separated, whether or not the select is multiple. A key given here is trimmed and cannot contain a comma; assign such a key through the property instead. The property answers a key for a single select and an array for a multiple one. A single select reads a present but empty attribute as the empty key, the one an <option value=\"\"> carries, where an absent attribute means no selection; a multiple select reads it as no keys.",
2374
2427
  "type": {
2375
2428
  "text": "string"
2376
2429
  }
@@ -2427,7 +2480,7 @@
2427
2480
  "name": "Dropdown",
2428
2481
  "tagName": "ful-dropdown",
2429
2482
  "customElement": true,
2430
- "description": "The options popup of a ful-select, with a localized no-results message when the search matches nothing. Rarely used on its own.",
2483
+ "description": "The options popup of a ful-select, with a localized no-results message when the search matches nothing. An entry whose metadata.disabled is truthy is refused: its row carries aria-disabled and metadata.reason as its title, the arrows and Home/End walk past it, and a click on it changes nothing. Rarely used on its own.",
2431
2484
  "attributes": [
2432
2485
  {
2433
2486
  "name": "listbox",
@@ -2481,6 +2534,14 @@
2481
2534
  "module": "dist/fml.mjs"
2482
2535
  }
2483
2536
  },
2537
+ {
2538
+ "kind": "custom-element-definition",
2539
+ "name": "ful-menu",
2540
+ "declaration": {
2541
+ "name": "Menu",
2542
+ "module": "dist/fml.mjs"
2543
+ }
2544
+ },
2484
2545
  {
2485
2546
  "kind": "custom-element-definition",
2486
2547
  "name": "ful-toasts",
package/dist/fml.css CHANGED
@@ -1,4 +1,4 @@
1
- @layer ful.theme, ful.components, ful.hidden;@layer ful.theme{@property --ful-border-width{syntax:"<length>";inherits:true;initial-value:1px}@property --ful-border-radius{syntax:"<length>";inherits:true;initial-value:.375rem}@property --ful-scrollbar-width{syntax:"<length>";inherits:true;initial-value:12px}@property --ful-scrollbar-border-width{syntax:"<length>";inherits:true;initial-value:1px}:root{--ful-color:light-dark(#212529, #dee2e6);--ful-bg:light-dark(#fff, #212529);--ful-muted-color:light-dark(#495057, #adb5bd);--ful-border-width:1px;--ful-border-radius:0.375rem;--ful-border-color:light-dark(#dee2e6, #495057);--ful-disabled-bg:light-dark(#e9ecef, #343a40);--ful-selected-bg:light-dark(#f8f9fa, #343a40);--ful-active-color:#fff;--ful-active-bg:#007376;--ful-accent-ink:light-dark(var(--ful-active-bg), color-mix(in srgb, var(--ful-active-bg) 55%, #fff));--ful-focus-border-color:color-mix(in srgb, var(--ful-active-bg) 75%, #fff);--ful-focus-box-shadow:0 0 0 0.25rem color-mix(in srgb, var(--ful-active-bg) 25%, transparent);--ful-backdrop-color:rgba(0,0,0,.5);--ful-invalid-color:light-dark(#dc3545, #ea868f);--ful-invalid-border-color:var(--ful-invalid-color);--ful-invalid-box-shadow:0 0 0 0.25rem color-mix(in srgb, var(--ful-invalid-color) 25%, transparent);--ful-error-color:#58151c;--ful-error-bg:#f8d7da;--ful-error-border-color:#f1aeb5;--ful-warning-color:#664d03;--ful-warning-bg:#fff3cd;--ful-warning-border-color:#ffe69c;--ful-scrollbar-bg:var(--ful-disabled-bg);--ful-scrollbar-thumb-bg:var(--ful-active-bg);--ful-scrollbar-width:12px;--ful-scrollbar-border-width:1px;--ful-controls-bg:var(--ful-bg);--ful-controls-border-width:var(--ful-border-width);--ful-controls-border-radius:var(--ful-border-radius);--ful-controls-border-color:var(--ful-border-color);--ful-controls-height:calc(1.5em + .75rem + 2px);--ful-spinner-icon-width:1rem;--ful-spinner-icon-height:1rem;--ful-spinner-icon-border-width:0.2em;--ful-spinner-icon-animation-speed:0.75s;--ful-spinner-icon-animation-name:spinner-border;--ful-spinner-icon-color:currentcolor}}
1
+ @layer ful.theme, ful.components, ful.hidden;@layer ful.theme{@property --ful-border-width{syntax:"<length>";inherits:true;initial-value:1px}@property --ful-border-radius{syntax:"<length>";inherits:true;initial-value:.375rem}@property --ful-scrollbar-width{syntax:"<length>";inherits:true;initial-value:12px}@property --ful-scrollbar-border-width{syntax:"<length>";inherits:true;initial-value:1px}:root{--ful-color:light-dark(#212529, #dee2e6);--ful-bg:light-dark(#fff, #212529);--ful-muted-color:light-dark(#495057, #adb5bd);--ful-border-width:1px;--ful-border-radius:0.375rem;--ful-border-color:light-dark(#dee2e6, #495057);--ful-disabled-bg:light-dark(#e9ecef, #343a40);--ful-selected-bg:light-dark(#f8f9fa, #343a40);--ful-active-color:#fff;--ful-active-bg:#007376;--ful-accent-ink:light-dark(var(--ful-active-bg), color-mix(in srgb, var(--ful-active-bg) 55%, #fff));--ful-focus-border-color:color-mix(in srgb, var(--ful-active-bg) 75%, #fff);--ful-focus-box-shadow:0 0 0 0.25rem color-mix(in srgb, var(--ful-active-bg) 25%, transparent);--ful-backdrop-color:rgba(0,0,0,.5);--ful-invalid-color:light-dark(#dc3545, #ea868f);--ful-invalid-border-color:var(--ful-invalid-color);--ful-invalid-box-shadow:0 0 0 0.25rem color-mix(in srgb, var(--ful-invalid-color) 25%, transparent);--ful-error-color:light-dark(#58151c, #ea868f);--ful-error-bg:light-dark(#f8d7da, #2c0b0e);--ful-error-border-color:light-dark(#f1aeb5, #842029);--ful-warning-color:light-dark(#664d03, #ffda6a);--ful-warning-bg:light-dark(#fff3cd, #332701);--ful-warning-border-color:light-dark(#ffe69c, #997404);--ful-scrollbar-bg:var(--ful-disabled-bg);--ful-scrollbar-thumb-bg:var(--ful-active-bg);--ful-scrollbar-width:12px;--ful-scrollbar-border-width:1px;--ful-controls-bg:var(--ful-bg);--ful-controls-border-width:var(--ful-border-width);--ful-controls-border-radius:var(--ful-border-radius);--ful-controls-border-color:var(--ful-border-color);--ful-controls-height:calc(1.5em + .75rem + 2px);--ful-spinner-icon-width:1rem;--ful-spinner-icon-height:1rem;--ful-spinner-icon-border-width:0.2em;--ful-spinner-icon-animation-speed:0.75s;--ful-spinner-icon-animation-name:spinner-border;--ful-spinner-icon-color:currentcolor}}
2
2
  @layer ful.components{ful-errors{--ful-errors-color:var(--ful-error-color);--ful-errors-bg:var(--ful-error-bg);--ful-errors-border-color:var(--ful-error-border-color);display:block;padding:1rem;margin-bottom:1rem;color:var(--ful-errors-color);background-color:var(--ful-errors-bg);border:1px solid var(--ful-errors-border-color);border-radius:var(--ful-border-radius)}ful-field-error{--ful-field-error-invalid-color:var(--ful-invalid-color);display:none;font-size:.875rem;:invalid &{display:block;margin-top:.25rem;color:var(--ful-field-error-invalid-color)}}ful-field-warnings{display:none;&:not(:empty){display:block}}ful-field-warning{display:block;margin:.5rem 0;padding:15px;color:var(--ful-warning-color);background-color:var(--ful-warning-bg);border-color:var(--ful-warning-border-color);border-radius:8px;animation:show-and-hide 5s ease forwards;animation-composition:initial}@keyframes show-and-hide{0%{opacity:0;display:block}3%{opacity:1}90%{opacity:1}to{opacity:0;display:none}}}
3
3
  @layer ful.components{*,:after,:before{box-sizing:border-box}ful-form{display:block}ful-form>form{display:contents}:has(>ful-control-group){display:block}:has(>fieldset>ful-radio-list)>fieldset>legend,:has(>ful-control-group)>label{display:inline-block;margin:0 .25rem .5rem 0;color:var(--ful-color)}:has(>fieldset>ful-radio-list)[required]>fieldset>legend:before,:has(>ful-choice)[required]>ful-choice>label:before,:has(>ful-control-group)[required]>label:before{content:"* ";display:inline;font-weight:700;color:var(--ful-color)}ful-control-group{position:relative;display:flex;flex-wrap:nowrap;width:100%;color:var(--ful-color);background-color:var(--ful-controls-bg);border:var(--ful-controls-border-width) solid var(--ful-controls-border-color);border-radius:var(--ful-controls-border-radius);&:has(:focus-visible):not(:has([popover] :focus-visible)){border-color:var(--ful-focus-border-color);box-shadow:var(--ful-focus-box-shadow)}&>input,&>textarea{flex:1 1 auto;width:1%;min-width:0;min-height:var(--ful-controls-height);padding:.375rem .75rem;font:inherit;line-height:1.5;color:inherit;background-color:transparent;border:0;border-radius:0;&:focus{outline:0}}&>ful-affix:first-child{border-top-left-radius:calc(var(--ful-controls-border-radius) - var(--ful-controls-border-width));border-bottom-left-radius:calc(var(--ful-controls-border-radius) - var(--ful-controls-border-width))}&>ful-affix:has(+ful-dropdown),&>ful-affix:last-child{border-top-right-radius:calc(var(--ful-controls-border-radius) - var(--ful-controls-border-width));border-bottom-right-radius:calc(var(--ful-controls-border-radius) - var(--ful-controls-border-width))}}ful-affix{display:flex;flex:0 0 auto;align-items:center;justify-content:center;min-width:var(--ful-controls-height);padding:.375rem .75rem;line-height:1.5;color:var(--ful-color);white-space:nowrap;background-color:var(--ful-selected-bg);border:0;border-radius:0}ful-affix:has(>button){padding:0;overflow:hidden}ful-affix>button{display:flex;flex:1 1 auto;align-self:stretch;align-items:center;justify-content:center;padding:.375rem .75rem;font:inherit;line-height:1.5;color:var(--ful-color);white-space:nowrap;background-color:transparent;cursor:pointer}ful-affix>button,ful-affix>button.ful-button,ful-control{border:0;border-radius:0}ful-control{position:relative;display:flex;flex:1 1 auto;align-items:center;min-width:0;min-height:var(--ful-controls-height);cursor:text}:invalid>ful-control-group{border-color:var(--ful-invalid-border-color);&:has(:focus-visible):not(:has([popover] :focus-visible)){border-color:var(--ful-invalid-border-color);box-shadow:var(--ful-invalid-box-shadow)}}:disabled>ful-control-group{background-color:var(--ful-disabled-bg)}ful-form [aria-disabled=true]{opacity:.65;cursor:default}ful-badge{display:flex;flex:0 0 auto;align-items:center;margin:5px 0;padding:5px 7px;line-height:1em;color:var(--ful-color);white-space:nowrap;cursor:pointer;background-color:var(--ful-selected-bg);border:var(--ful-border-width) solid var(--ful-border-color);border-radius:var(--ful-border-radius);&:hover{background-color:var(--ful-disabled-bg)}&:focus-visible{border-color:var(--ful-focus-border-color);outline:0}}ful-choice{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.25rem 0;&>label{margin:0;cursor:pointer;flex:1 1 0;min-width:0}& input[type=checkbox]{width:1em;height:1em;margin:0;font-size:inherit;accent-color:var(--ful-active-bg);&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}&[switch] input[type=checkbox]{appearance:none;position:relative;width:2em;height:1em;margin:0;cursor:pointer;background-color:var(--ful-border-color);border-radius:1em;transition:background-color .15s ease-in-out;&:before{content:"";display:block;width:1em;height:1em;background-color:#fff;border-radius:50%;box-shadow:0 0 0 1px rgba(0,0,0,.15);transition:translate .15s ease-in-out}&:checked{background-color:var(--ful-active-bg);&:before{translate:1em 0}}@media (prefers-reduced-motion:reduce){&,&:before{transition:none}}}}:has(>ful-choice):invalid ful-choice input[type=checkbox]{outline:1px solid var(--ful-invalid-border-color);outline-offset:2px}ful-icon,ful-sorter:before{background-color:currentcolor;mask-repeat:no-repeat;mask-position:center;mask-size:contain}ful-icon{display:inline-block;width:1em;height:1em;vertical-align:-.125em;&[name=search]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0"/></svg>')}&[name=chevron-left]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0"/></svg>')}&[name=chevron-right]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708"/></svg>')}&[name=chevron-down]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708"/></svg>')}&[name=arrow-clockwise]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2z"/><path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466"/></svg>')}&[name=x-lg]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z"/></svg>')}&[name=info-circle]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/><path d="m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0"/></svg>')}&[name=info-circle-fill]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2"/></svg>')}&[name=upload]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5"/><path d="M7.646 1.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 2.707V11.5a.5.5 0 0 1-1 0V2.707L5.354 4.854a.5.5 0 1 1-.708-.708z"/></svg>')}&[name=arrow-down]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 1a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L7.5 13.293V1.5A.5.5 0 0 1 8 1"/></svg>')}&[name=arrow-up]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L7.5 2.707V14.5a.5.5 0 0 0 .5.5"/></svg>')}&[name=inbox]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M4.98 4a.5.5 0 0 0-.39.188L1.54 8H6a.5.5 0 0 1 .5.5 1.5 1.5 0 1 0 3 0A.5.5 0 0 1 10 8h4.46l-3.05-3.812A.5.5 0 0 0 11.02 4zm9.954 5H10.45a2.5 2.5 0 0 1-4.9 0H1.066l.32 2.562a.5.5 0 0 0 .497.438h12.234a.5.5 0 0 0 .496-.438zM3.809 3.563A1.5 1.5 0 0 1 4.981 3h6.038a1.5 1.5 0 0 1 1.172.563l3.7 4.625a.5.5 0 0 1 .105.374l-.39 3.124A1.5 1.5 0 0 1 14.117 13H1.883a1.5 1.5 0 0 1-1.489-1.314l-.39-3.124a.5.5 0 0 1 .106-.374z"/></svg>')}&[name=star]{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z"/></svg>')}}:has(>ful-pagination-bar){display:block;margin-top:auto}ful-pagination-bar{display:block;user-select:none;& ul{display:flex;align-items:center;gap:.25rem;margin:.5rem 0 0;padding:0;list-style:none}& li[data-ref=index]{margin-left:0;margin-right:auto;color:var(--ful-color)}& li[data-ref=reload] button{border:0;font-size:1.25rem}& button{display:flex;align-items:center;justify-content:center;min-width:2.25rem;height:2.25rem;padding:0 .5rem;font-size:inherit;font-family:inherit;line-height:1.5;color:var(--ful-color);text-decoration:none;background-color:transparent;border:var(--ful-border-width) solid var(--ful-border-color);border-radius:var(--ful-border-radius);cursor:pointer}& button:hover{background-color:var(--ful-selected-bg)}& button:disabled{opacity:.5;pointer-events:none}& button:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}& button[aria-current=page]{color:var(--ful-active-color);background-color:var(--ful-active-bg);border-color:var(--ful-active-bg)}}ful-table-wrapper{& table{width:100%;margin-bottom:1rem;border-collapse:collapse}& caption,& table{color:var(--ful-color)}& caption{padding:.5rem 0;text-align:left;caption-side:bottom}& :is(th,td){padding:.5rem;vertical-align:top;border-bottom:var(--ful-border-width) solid var(--ful-border-color)}& thead th{border-bottom-width:calc(2 * var(--ful-border-width))}& td[colspan]{padding:1.5rem;text-align:center;vertical-align:middle}& tbody[data-ref=feedback]{&>tr>td>div{padding:1rem;color:var(--ful-error-color);background-color:var(--ful-error-bg);border:var(--ful-border-width) solid var(--ful-error-border-color);border-radius:var(--ful-border-radius)}& p{margin:0 0 .5rem;font-weight:600}}}ful-sorter{&:before{content:"";display:inline-block;flex:0 0 auto;width:1em;height:1em;mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 1a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L7.5 13.293V1.5A.5.5 0 0 1 8 1"/></svg>')}&:not([order]):before{opacity:.35}&[order=desc]:before{mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L7.5 2.707V14.5a.5.5 0 0 0 .5.5"/></svg>')}}}
4
4
  @layer ful.components{.ful-button{--ful-button-height:var(--ful-controls-height);--ful-button-border-width:var(--ful-controls-border-width);--ful-button-border-radius:var(--ful-controls-border-radius);--ful-button-color:var(--ful-active-color);--ful-button-bg:var(--ful-active-bg);--ful-button-border-color:var(--ful-button-bg);--ful-button-hover-bg:color-mix(in srgb, var(--ful-active-bg) 85%, #000);--ful-button-hover-color:var(--ful-button-color);display:inline-flex;align-items:center;justify-content:center;gap:.375rem;min-height:var(--ful-button-height);padding:.375rem .75rem;font:inherit;line-height:1.5;text-decoration:none;color:var(--ful-button-color);background-color:var(--ful-button-bg);border:var(--ful-button-border-width) solid var(--ful-button-border-color);border-radius:var(--ful-button-border-radius);cursor:pointer;&:hover{color:var(--ful-button-hover-color);background-color:var(--ful-button-hover-bg)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}&:disabled,&[aria-disabled=true]{opacity:.5;pointer-events:none}&.ghost{--ful-button-color:var(--ful-accent-ink);--ful-button-bg:transparent;--ful-button-border-color:var(--ful-accent-ink)}&.ghost,&.soft{--ful-button-hover-color:var(--ful-active-color);--ful-button-hover-bg:var(--ful-active-bg)}&.soft{--ful-button-color:var(--ful-color);--ful-button-bg:var(--ful-selected-bg);--ful-button-border-color:var(--ful-controls-border-color)}&.small{--ful-button-height:calc(1.25em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem}}}
@@ -6,16 +6,17 @@
6
6
  @layer ful.components{:is(ful-input,.ful-input,ful-input-file,ful-input-local-date,ful-input-local-time,ful-input-instant,ful-checkbox,ful-radio-group,ful-select,ful-filter-text,ful-filter-number,ful-filter-boolean,ful-filter-local-date,ful-filter-instant,ful-filter-in,ful-tabs,ful-wizard,ful-tooltip,ful-dialog,ful-drawer,ful-table,ful-pagination):not(:state(rendered)){visibility:hidden}}
7
7
  @layer ful.components{:has(>ful-control-group>input,>ful-control-group>textarea){&[uppercase] input,&[uppercase] textarea{text-transform:uppercase}}:has(>ful-item-list):is([readonly],:disabled){&>ful-item-list button{display:none}&>ful-item-list>ful-item>div{padding-right:.5rem}}ful-item-list{--ful-item-list-item-color:var(--ful-active-color);--ful-item-list-item-border-radius:var(--ful-border-radius);--ful-item-list-item-bg:var(--ful-active-bg);display:grid;grid-template-columns:minmax(0,1fr);gap:.5rem;&>ful-item:first-child{margin-top:.5rem}&>ful-item:last-child{margin-bottom:.5rem}&>ful-item>div{display:flex;align-items:center;gap:.5rem;min-width:0;min-height:calc(var(--ful-controls-height) + 2 * var(--ful-controls-border-width));padding:5px .25rem 5px .5rem;color:var(--ful-item-list-item-color);border-radius:var(--ful-item-list-item-border-radius);background-color:var(--ful-item-list-item-bg);&:has(:focus-visible){outline:2px solid var(--ful-active-bg);outline-offset:2px}&>span{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}&>span+span{flex:0 0 auto;font-size:.875em;opacity:.75}&>button{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:calc(-.625rem + var(--ful-controls-height));height:calc(-.625rem + var(--ful-controls-height));padding:0;font-size:inherit;font-family:inherit;color:inherit;background-color:transparent;border:0;border-radius:calc(-.1875rem + var(--ful-item-list-item-border-radius));cursor:pointer;& ful-icon{width:1em;height:1em}&:hover{background-color:color-mix(in srgb,var(--ful-invalid-color) 25%,transparent)}&:focus-visible{outline:0}}}}}
8
8
  @layer ful.components{:has(>ful-control-group>input[type=file]){&>ful-control-group>input[type=file]{padding-left:0}&>ful-control-group>input[type=file]::file-selector-button{margin:-.375rem .75rem -.375rem 0;padding:.375rem .75rem;height:var(--ful-controls-height);font-size:inherit;font-family:inherit;line-height:1.5;color:var(--ful-color);background-color:var(--ful-selected-bg);border:0;cursor:pointer}&>ful-control-group>input[type=file]:first-child::file-selector-button{border-start-start-radius:calc(var(--ful-controls-border-radius) - var(--ful-controls-border-width));border-end-start-radius:calc(var(--ful-controls-border-radius) - var(--ful-controls-border-width))}&>ful-control-group>input[type=file]::file-selector-button:hover{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&>ful-control-group>input[type=file]:focus::file-selector-button{outline:0}&[readonly]>ful-control-group>input[type=file]::file-selector-button{display:none}&[readonly]>ful-control-group>input[type=file]{padding-left:.75rem}&:disabled>ful-control-group>input[type=file]::file-selector-button{opacity:.5;cursor:default}&>.default-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.25rem;min-height:100px;margin-top:.5rem;padding:1.5rem;color:var(--ful-color);text-align:center;background-color:var(--ful-bg);border:var(--ful-controls-border-width) dashed var(--ful-controls-border-color);border-radius:var(--ful-controls-border-radius)}&>.default-dropzone,&>.dropzone{cursor:pointer}&>.default-dropzone:hover{border-color:var(--ful-focus-border-color);box-shadow:var(--ful-focus-box-shadow)}&[dragover]>.default-dropzone{color:var(--ful-active-color);background-color:var(--ful-active-bg);border-color:var(--ful-active-bg);box-shadow:none}&:disabled>.default-dropzone,&:disabled>.dropzone,&:not([dropzone])>.default-dropzone,&:not([dropzone])>.dropzone,&:not([item-list])>ful-item-list,&[noinput]>ful-control-group,&[readonly]>.default-dropzone,&[readonly]>.dropzone{display:none}&[readonly]{&>ful-control-group>input,&>ful-item-list{pointer-events:none}}&:disabled>ful-item-list{pointer-events:none}&[item-list][readonly]{&>ful-control-group{display:none}&>ful-item-list>ful-item:first-child{margin-top:0}&>ful-item-list>ful-item:last-child{margin-bottom:0}}}}
9
- @layer ful.components{:has(>ful-control-group>ful-dropdown){cursor:pointer;&:not([item-list])>ful-item-list,&[item-list] ful-control-group ful-badge{display:none}&>ful-control-group>ful-control{cursor:pointer;padding-left:5px;padding-right:2.25rem;overflow:hidden;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23343a40%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22m2%205%206%206%206-6%22%2F%3E%3C%2Fsvg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;&>ful-badge+ful-badge{margin-left:3px}}&[item-list][readonly]{&>ful-control-group{display:none}&>ful-item-list>ful-item:first-child{margin-top:0}&>ful-item-list>ful-item:last-child{margin-bottom:0}}&:disabled,&[readonly]{cursor:default}&:disabled>ful-control-group>ful-control,&[readonly]>ful-control-group>ful-control{background-size:0;cursor:default;padding-right:5px}&>ful-control-group>ful-control>input{flex:1 1 auto;width:1em;min-width:1em;margin:0;padding:.375rem 0 .375rem 7px;font-size:inherit;font-family:inherit;line-height:1.5;color:var(--ful-color);background-color:transparent;border:0;outline:0}}ful-dropdown{--ful-dropdown-color:var(--ful-color);--ful-dropdown-selected-bg:var(--ful-selected-bg);--ful-dropdown-active-bg:var(--ful-active-bg);--ful-dropdown-border-width:var(--ful-border-width);--ful-dropdown-border-radius:var(--ful-border-radius);--ful-dropdown-border-color:var(--ful-border-color);--ful-dropdown-background-color:var(--ful-bg);--ful-dropdown-scrollbar-width:var(--ful-scrollbar-width);--ful-dropdown-scrollbar-border-width:var(--ful-scrollbar-border-width);--ful-dropdown-scrollbar-bg:var(--ful-scrollbar-bg);--ful-dropdown-scrollbar-thumb-bg:var(--ful-scrollbar-thumb-bg);padding:.5rem 0;margin:.3rem 0 0;background-color:var(--ful-dropdown-background-color);background-clip:padding-box;border:var(--ful-dropdown-border-width) solid var(--ful-dropdown-border-color);border-radius:var(--ful-dropdown-border-radius);&:popover-open{display:block;top:anchor(bottom);left:anchor(left);width:anchor-size(width)}ful-empty{padding:.5rem .75rem;color:var(--ful-dropdown-color);text-align:start}menu{height:auto;max-height:200px;overflow-y:auto;padding:0;margin:0;&::-webkit-scrollbar{width:12px}&::-webkit-scrollbar-track{background-color:var(--ful-dropdown-scrollbar-bg);border-radius:var(--ful-dropdown-scrollbar-width)}&::-webkit-scrollbar-thumb{border-radius:var(--ful-dropdown-scrollbar-width);background-color:var(--ful-dropdown-active-bg);border:var(--ful-dropdown-scrollbar-border-width) solid var(--ful-dropdown-scrollbar-bg)}}li{padding:.5rem .751rem;display:block;border:0;cursor:pointer}li,li:hover,li[selected]{color:var(--ful-dropdown-color)}li:hover,li[selected]{background-color:var(--ful-dropdown-selected-bg)}li[picked]{background-color:color-mix(in srgb,var(--ful-dropdown-active-bg) 12%,transparent);box-shadow:inset .2rem 0 0 var(--ful-dropdown-active-bg)}li:active{color:#fff;background-color:var(--ful-dropdown-active-bg)}}}
9
+ @layer ful.components{:has(>ful-control-group>ful-dropdown){cursor:pointer;&:not([item-list])>ful-item-list,&[item-list] ful-control-group ful-badge{display:none}&>ful-control-group>ful-control{cursor:pointer;padding-left:5px;padding-right:2.25rem;overflow:hidden;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23343a40%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22m2%205%206%206%206-6%22%2F%3E%3C%2Fsvg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;&>ful-badge+ful-badge{margin-left:3px}}&[item-list][readonly]{&>ful-control-group{display:none}&>ful-item-list>ful-item:first-child{margin-top:0}&>ful-item-list>ful-item:last-child{margin-bottom:0}}&:disabled,&[readonly]{cursor:default}&:disabled>ful-control-group>ful-control,&[readonly]>ful-control-group>ful-control{background-size:0;cursor:default;padding-right:5px}&>ful-control-group>ful-control>input{flex:1 1 auto;width:1em;min-width:1em;margin:0;padding:.375rem 0 .375rem 7px;font-size:inherit;font-family:inherit;line-height:1.5;color:var(--ful-color);background-color:transparent;border:0;outline:0}}ful-dropdown{--ful-dropdown-color:var(--ful-color);--ful-dropdown-selected-bg:var(--ful-selected-bg);--ful-dropdown-active-bg:var(--ful-active-bg);--ful-dropdown-border-width:var(--ful-border-width);--ful-dropdown-border-radius:var(--ful-border-radius);--ful-dropdown-border-color:var(--ful-border-color);--ful-dropdown-background-color:var(--ful-bg);--ful-dropdown-scrollbar-width:var(--ful-scrollbar-width);--ful-dropdown-scrollbar-border-width:var(--ful-scrollbar-border-width);--ful-dropdown-scrollbar-bg:var(--ful-scrollbar-bg);--ful-dropdown-scrollbar-thumb-bg:var(--ful-scrollbar-thumb-bg);--ful-dropdown-max-width:30rem;padding:.5rem 0;margin:.3rem 0 0;background-color:var(--ful-dropdown-background-color);background-clip:padding-box;border:var(--ful-dropdown-border-width) solid var(--ful-dropdown-border-color);border-radius:var(--ful-dropdown-border-radius);&:popover-open{display:block;top:anchor(bottom);left:anchor(left);position-try-fallbacks:flip-block;min-width:anchor-size(width);max-width:var(--ful-dropdown-max-width)}ful-empty{padding:.5rem .75rem;color:var(--ful-dropdown-color);text-align:start}menu{height:auto;max-height:200px;overflow-y:auto;padding:0;margin:0;&::-webkit-scrollbar{width:12px}&::-webkit-scrollbar-track{background-color:var(--ful-dropdown-scrollbar-bg);border-radius:var(--ful-dropdown-scrollbar-width)}&::-webkit-scrollbar-thumb{border-radius:var(--ful-dropdown-scrollbar-width);background-color:var(--ful-dropdown-active-bg);border:var(--ful-dropdown-scrollbar-border-width) solid var(--ful-dropdown-scrollbar-bg)}}li{padding:.5rem .751rem;color:var(--ful-dropdown-color);display:block;border:0;cursor:pointer}li[aria-disabled=true]{color:var(--ful-muted-color);cursor:default}li:not([aria-disabled=true]):hover,li[selected]{color:var(--ful-dropdown-color);background-color:var(--ful-dropdown-selected-bg)}li[picked]{background-color:color-mix(in srgb,var(--ful-dropdown-active-bg) 12%,transparent);box-shadow:inset .2rem 0 0 var(--ful-dropdown-active-bg)}li:not([aria-disabled=true]):active{color:#fff;background-color:var(--ful-dropdown-active-bg)}}}
10
10
  @layer ful.components{:has(>fieldset>ful-radio-list){--ful-radio-group-label-border-color:var(--ful-border-color);--ful-radio-group-label-bg:inherit;--ful-radio-group-label-checked-border-color:var(--ful-accent-ink);--ful-radio-group-label-checked-bg:light-dark(#eefbfb, var(--ful-selected-bg));--ful-radio-group-label-disabled-border-color:var(--ful-border-color);--ful-radio-group-label-disabled-bg:var(--ful-disabled-bg);--ful-radio-group-active-bg:var(--ful-active-bg);display:block;&[required]>fieldset>legend:before{content:"* ";display:inline;font-weight:700;color:var(--ful-color)}&>fieldset{display:block;min-width:0;width:100%;margin:0;padding:0;border:0;&>legend{font-size:16px;width:100%;padding:0;line-height:inherit}}&.horizontal>fieldset>ful-radio-list{gap:16px;grid-template-columns:1fr 1fr}&:invalid>fieldset>ful-radio-list label{border-color:var(--ful-invalid-border-color)}}ful-radio-list{display:grid;gap:10px;grid-template-columns:1fr;& label{display:flex;align-items:center;border:1px solid var(--ful-radio-group-label-border-color);background-color:var(--ful-radio-group-label-bg);border-radius:4px;padding:8px 10px;height:100%;cursor:pointer;&>div{flex:1}}& label:has(input[type=radio]:checked){background-color:var(--ful-radio-group-label-checked-bg);border-color:var(--ful-radio-group-label-checked-border-color)}& label:has(input[type=radio]:disabled){background-color:var(--ful-radio-group-label-disabled-bg);border-color:var(--ful-radio-group-label-disabled-border-color)}& input[type=radio]{margin-left:8px;margin-right:12px;height:16px;width:16px;vertical-align:text-bottom;accent-color:var(--ful-accent-ink)}& input[type=radio]:focus-visible{outline:0}& label:has(input[type=radio]:focus-visible){border-color:var(--ful-focus-border-color);box-shadow:var(--ful-focus-box-shadow)}}ful-radio{display:none}}
11
11
  @layer ful.components{:has(>ful-choice){display:block}.ful-stacked>ful-choice{display:grid;grid-template-columns:max-content auto;grid-template-rows:auto minmax(calc(var(--ful-controls-height) + 2 * var(--ful-controls-border-width)),auto);justify-content:start;align-items:center;column-gap:.5rem;row-gap:0;padding:0;&>label{grid-row:1;grid-column:1;display:inline-block;flex:none;margin:0 .25rem .5rem 0;color:var(--ful-color)}&>input[type=checkbox]{grid-row:2;grid-column:1/-1;justify-self:start;font-size:1.25em}}}
12
12
  @layer ful.components{ful-spinner>.ful-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}ful-spinner{display:inline-flex;align-items:center;gap:.375rem;&:after{content:"";flex:0 0 auto;display:inline-block;width:var(--ful-spinner-icon-width);height:var(--ful-spinner-icon-height);border-radius:50%;border:var(--ful-spinner-icon-border-width) solid var(--ful-spinner-icon-color);border-right-color:transparent;animation:var(--ful-spinner-icon-animation-speed) linear infinite var(--ful-spinner-icon-animation-name)}@media (prefers-reduced-motion:reduce){&:after{animation:none}}&.centered{display:flex;align-items:center;justify-content:center}&.big{--ful-spinner-icon-width:2rem;--ful-spinner-icon-height:2rem;--ful-spinner-icon-border-width:0.25rem}&.bigger{--ful-spinner-icon-width:4rem;--ful-spinner-icon-height:4rem;--ful-spinner-icon-border-width:0.5rem}&.backdrop{--ful-spinner-icon-width:4rem;--ful-spinner-icon-height:4rem;--ful-spinner-icon-border-width:0.5rem;z-index:2000;position:fixed;inset:0;display:grid;place-items:center;background-color:hsla(0,0%,65.5%,.8);&:before{content:"";width:calc(4rem + var(--ful-spinner-icon-width));height:calc(4rem + var(--ful-spinner-icon-height));background-color:var(--ful-bg);border-radius:1rem}&:after,&:before{grid-area:1/1}}}body:has(ful-spinner.backdrop:not([hidden])){overflow:hidden}@keyframes spinner-border{to{transform:rotate(1turn)}}}
13
13
  @layer ful.components{ful-empty{display:block;padding:2rem 1rem;color:var(--ful-color);text-align:center;opacity:.65;&>ful-icon{display:block;width:2rem;height:2rem;margin:0 auto .5rem}&>:first-child{margin-block-start:0}&>:last-child{margin-block-end:0}}}
14
14
  @layer ful.components{:has(>ful-table-wrapper){display:block;& th{text-align:start}&[aria-busy=true] tbody:not([data-ref]){opacity:.6;pointer-events:none}& tbody[data-ref=empty],& tbody[data-ref=feedback],& tbody[data-ref=initial],& tbody[data-ref=loading]{height:360px;& td{& p{margin-top:1rem}}}& td[colspan]:has(>ful-empty){padding:0}}ful-sorter{display:inline-flex;align-items:baseline;gap:.25em;&:not(:state(rendered)){visibility:hidden}cursor:pointer;&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}}
15
- @layer ful.components{ful-affix:has(>button[data-ref=operator],>button[data-ref=sensitivity]){min-width:4rem;&>button[data-ref=operator]{min-width:4rem}&>button[data-ref=sensitivity]{min-width:2.5rem}&>button[data-ref=operator]:hover,&>button[data-ref=sensitivity]:hover{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&>button[data-ref=operator]:focus,&>button[data-ref=sensitivity]:focus{outline:0}&>button[data-ref=operator]:focus-visible,&>button[data-ref=sensitivity]:focus-visible{background-color:color-mix(in srgb,var(--ful-active-bg) 20%,transparent)}&>button[data-ref=operator]:disabled,&>button[data-ref=sensitivity]:disabled{cursor:default;opacity:.5}}ful-control-group>ful-control>input{flex:1 1 auto;width:1%;min-width:0;min-height:var(--ful-controls-height);padding:.375rem .75rem;font:inherit;line-height:1.5;color:var(--ful-color);background-color:transparent;border:0;border-radius:0}ful-control-group>ful-control>input:focus{outline:0}ful-control-group>button[data-ref=value]{display:flex;align-items:center;justify-content:flex-start;flex:1 1 auto;min-width:0;padding:.375rem 2rem .375rem .75rem;font-size:inherit;font-family:inherit;line-height:1.5;color:var(--ful-color);white-space:nowrap;text-align:left;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23343a40%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22m2%205%206%206%206-6%22%2F%3E%3C%2Fsvg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;border:0;border-radius:0;cursor:pointer}ful-control-group>button[data-ref=value]:focus{outline:0}ful-control-group>button[data-ref=value]:disabled{cursor:default;opacity:.5;background-size:0}ful-affix:has(>button[data-ref=operator],>button[data-ref=sensitivity])>ul[popover],ful-control-group>button[data-ref=value]+ul[popover]{top:anchor(bottom);left:anchor(left);margin:.3rem 0 0;min-width:6rem;padding:.5rem 0;list-style:none;color:var(--ful-color);background-color:var(--ful-bg);background-clip:padding-box;border:var(--ful-border-width) solid var(--ful-border-color);border-radius:var(--ful-border-radius);&:popover-open{display:block}&>li>a{display:flex;align-items:center;gap:.5rem;padding:.25rem 1rem;color:var(--ful-color);text-decoration:none;cursor:pointer;&>span:first-child{flex:0 0 2.25em;text-align:center}}&>li>a[aria-checked=true]{background-color:color-mix(in srgb,var(--ful-active-bg) 12%,transparent);box-shadow:inset .2rem 0 0 var(--ful-active-bg)}&>li>a:hover{background-color:var(--ful-selected-bg)}&>li>a:focus-visible{background-color:var(--ful-selected-bg);outline:0}&>li>a:active{color:var(--ful-active-color);background-color:var(--ful-active-bg)}}}
15
+ @layer ful.components{ful-affix:has(>button[data-ref=operator],>button[data-ref=sensitivity]){min-width:4rem;&>button[data-ref=operator]{min-width:4rem}&>button[data-ref=sensitivity]{min-width:2.5rem}&>button[data-ref=operator]:hover,&>button[data-ref=sensitivity]:hover{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&>button[data-ref=operator]:focus,&>button[data-ref=sensitivity]:focus{outline:0}&>button[data-ref=operator]:focus-visible,&>button[data-ref=sensitivity]:focus-visible{background-color:color-mix(in srgb,var(--ful-active-bg) 20%,transparent)}&>button[data-ref=operator]:disabled,&>button[data-ref=sensitivity]:disabled{cursor:default;opacity:.5}}ful-affix:has(>button[hidden]){display:none}ful-control-group>ful-control>input{flex:1 1 auto;width:1%;min-width:0;min-height:var(--ful-controls-height);padding:.375rem .75rem;font:inherit;line-height:1.5;color:var(--ful-color);background-color:transparent;border:0;border-radius:0}ful-control-group>ful-control>input:focus{outline:0}ful-control-group>button[data-ref=value]{display:flex;align-items:center;justify-content:flex-start;flex:1 1 auto;min-width:0;padding:.375rem 2rem .375rem .75rem;font-size:inherit;font-family:inherit;line-height:1.5;color:var(--ful-color);white-space:nowrap;text-align:left;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23343a40%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22m2%205%206%206%206-6%22%2F%3E%3C%2Fsvg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;border:0;border-radius:0;cursor:pointer}ful-control-group>button[data-ref=value]:focus{outline:0}ful-control-group>button[data-ref=value]:disabled{cursor:default;opacity:.5;background-size:0}ful-affix:has(>button[data-ref=operator],>button[data-ref=sensitivity])>ul[popover],ful-control-group>button[data-ref=value]+ul[popover]{top:anchor(bottom);left:anchor(left);margin:.3rem 0 0;min-width:6rem;padding:.5rem 0;list-style:none;color:var(--ful-color);background-color:var(--ful-bg);background-clip:padding-box;border:var(--ful-border-width) solid var(--ful-border-color);border-radius:var(--ful-border-radius);&:popover-open{display:block}&>li>a{display:flex;align-items:center;gap:.5rem;padding:.25rem 1rem;color:var(--ful-color);text-decoration:none;cursor:pointer;&>span:first-child{flex:0 0 2.25em;text-align:center}}&>li>a[aria-checked=true]{background-color:color-mix(in srgb,var(--ful-active-bg) 12%,transparent);box-shadow:inset .2rem 0 0 var(--ful-active-bg)}&>li>a:hover{background-color:var(--ful-selected-bg)}&>li>a:focus-visible{background-color:var(--ful-selected-bg);outline:0}&>li>a:active{color:var(--ful-active-color);background-color:var(--ful-active-bg)}}}
16
16
  @layer ful.components{.ful-tip,button:has(+ful-note){display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;font:inherit;position:relative;top:calc(.5ex - .5cap);width:1.5rem;height:1.5rem;padding:0;border:0;border-radius:50%;background:none;color:var(--ful-muted-color,var(--ful-color));cursor:pointer;& ful-icon{width:1rem;height:1rem}&:hover{color:var(--ful-accent-ink);background-color:color-mix(in srgb,var(--ful-active-bg) 12%,transparent)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}.ful-note,ful-note{--ful-note-gap:0.5rem;--ful-note-callout-size:0.5rem;--ful-note-callout-edge:calc(var(--ful-border-radius) + var(--ful-note-callout-size));display:none;max-width:20rem;padding:.5rem .75rem;color:var(--ful-color);background-color:var(--ful-bg);background-clip:padding-box;border:var(--ful-border-width) solid var(--ful-border-color);border-radius:var(--ful-border-radius);font-size:.875rem;font-weight:400;font-style:normal;text-align:start;margin:var(--ful-note-gap) 0 0;&>:first-child{margin-block-start:0}&>:last-child{margin-block-end:0}&:popover-open{display:block;overflow:visible}&:popover-open:after{content:"";position:absolute;width:var(--ful-note-callout-size);height:var(--ful-note-callout-size);background-color:inherit;border:0 solid var(--ful-border-color);rotate:45deg}&:popover-open:after{top:calc(-.5 * var(--ful-note-callout-size) - .5 * var(--ful-border-width));left:clamp(var(--ful-note-callout-edge),var(--ful-note-callout-inline,50%),100% - var(--ful-note-callout-edge));translate:-50% 0;border-block-start-width:var(--ful-border-width);border-inline-start-width:var(--ful-border-width)}&[placement=top]:popover-open{margin:0 0 var(--ful-note-gap);&:after{top:auto;bottom:calc(-.5 * var(--ful-note-callout-size) - .5 * var(--ful-border-width));border-block-start-width:0;border-inline-start-width:0;border-block-end-width:var(--ful-border-width);border-inline-end-width:var(--ful-border-width)}}&[placement=right]:popover-open{margin:0 0 0 var(--ful-note-gap);&:after{top:clamp(var(--ful-note-callout-edge),var(--ful-note-callout-block,50%),100% - var(--ful-note-callout-edge));left:calc(-.5 * var(--ful-note-callout-size) - .5 * var(--ful-border-width));translate:0 -50%;border-block-start-width:0;border-inline-start-width:var(--ful-border-width);border-block-end-width:var(--ful-border-width)}}&[placement=left]:popover-open{margin:0 var(--ful-note-gap) 0 0;&:after{top:clamp(var(--ful-note-callout-edge),var(--ful-note-callout-block,50%),100% - var(--ful-note-callout-edge));left:auto;right:calc(-.5 * var(--ful-note-callout-size) - .5 * var(--ful-border-width));translate:0 -50%;border-block-start-width:var(--ful-border-width);border-inline-end-width:var(--ful-border-width);border-inline-start-width:0}}}dialog.ful-dialog{--ful-dialog-width:min(90vw, 32rem);width:var(--ful-dialog-width);padding:0;border:var(--ful-border-width) solid var(--ful-border-color);border-radius:var(--ful-border-radius);background-color:var(--ful-bg);color:var(--ful-color);&::backdrop{background-color:var(--ful-backdrop-color)}& .ful-dialog-header,&>header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:1rem 1.25rem .5rem;& h2{margin:0;font-size:1.125rem;margin-inline-end:auto}&>:not(h2,button[data-ref=close]){flex:0 0 auto}&>button[data-ref=close]{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:0;border:0;border-radius:var(--ful-border-radius);background:none;color:var(--ful-muted-color,var(--ful-color));cursor:pointer;& ful-icon{width:1em;height:1em}&:hover{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}&>button[data-ref=close]:only-child{margin-inline-start:auto}}& .ful-dialog-body,&>[data-ref=body]{padding:.5rem 1.25rem}&>[data-ref=loading]{display:grid;place-items:center;padding:2rem 1.25rem}&>[data-ref=error]{margin:.5rem 1.25rem;padding:1rem;white-space:pre-line;color:var(--ful-error-color);background-color:var(--ful-error-bg);border:var(--ful-border-width) solid var(--ful-error-border-color);border-radius:var(--ful-border-radius)}&>footer.ful-dialog-footer:empty{display:none}& .ful-dialog-body :is(.ful-dialog-header,.ful-dialog-footer){padding-inline:0}& .ful-dialog-footer,&>footer{display:flex;justify-content:flex-end;gap:.5rem;padding:.5rem 1.25rem 1rem;&>button:not(.ful-button){padding:.375rem .75rem;height:var(--ful-controls-height);border:var(--ful-controls-border-width) solid var(--ful-controls-border-color);border-radius:var(--ful-controls-border-radius);background-color:var(--ful-selected-bg);color:var(--ful-color);cursor:pointer;&:hover{background-color:var(--ful-active-bg);color:var(--ful-active-color)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}}}}
17
- @layer ful.components{dialog.ful-drawer{--ful-drawer-width:min(90vw, 28rem);@media (max-width:30rem){--ful-drawer-width:100vw;border-radius:0}position:fixed;inset-block:0;inset-inline-start:auto;inset-inline-end:0;width:var(--ful-drawer-width);max-width:100vw;height:100dvh;max-height:100dvh;margin:0;padding:0;border:var(--ful-border-width) solid var(--ful-border-color);border-start-start-radius:var(--ful-border-radius);border-end-start-radius:var(--ful-border-radius);background-color:var(--ful-bg);color:var(--ful-color);&::backdrop{background-color:var(--ful-backdrop-color)}&[open]{display:flex;flex-direction:column;animation:ful-drawer-slide-in .2s ease-out}&>header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:1rem 1.25rem .5rem;& h2{margin:0;font-size:1.125rem}&>button{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:0;border:0;border-radius:var(--ful-border-radius);background:none;color:var(--ful-muted-color,var(--ful-color));cursor:pointer;& ful-icon{width:1em;height:1em}&:hover{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}}&>section{padding:.5rem 1.25rem 1rem;overflow-y:auto;&[data-ref=content]{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;&>footer:last-child{margin-block-start:auto}}&[data-ref=loading]{display:grid;place-items:center;flex-grow:1}&[data-ref=error]{margin:0 1.25rem;padding:1rem;white-space:pre-line;color:var(--ful-error-color);background-color:var(--ful-error-bg);border:var(--ful-border-width) solid var(--ful-error-border-color);border-radius:var(--ful-border-radius)}}&[placement=start]{inset-inline-end:auto;inset-inline-start:0;border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:var(--ful-border-radius);border-end-end-radius:var(--ful-border-radius);&[open]{animation-name:ful-drawer-slide-in-start}}&:dir(rtl)[open]{animation-name:ful-drawer-slide-in-start}&[placement=start]:dir(rtl)[open]{animation-name:ful-drawer-slide-in}}@keyframes ful-drawer-slide-in{0%{transform:translateX(1rem);opacity:0}}@keyframes ful-drawer-slide-in-start{0%{transform:translateX(-1rem);opacity:0}}@media (prefers-reduced-motion:reduce){dialog.ful-drawer[open]{animation:none}}}
18
- @layer ful.components{ful-toasts:not(:has(>ful-toast)){display:none}:has(>ful-toast){--ful-toasts-max-width:min(90vw, 24rem);position:fixed;top:1rem;inset-inline-end:1rem;z-index:1200;display:flex;flex-direction:column;align-items:flex-end;gap:.5rem;max-width:var(--ful-toasts-max-width);&>ful-toast{display:flex;align-items:flex-start;gap:.5rem;padding:.625rem .75rem;border:var(--ful-controls-border-width) solid var(--ful-border-color);border-radius:var(--ful-controls-border-radius);background-color:var(--ful-bg);color:var(--ful-color);white-space:pre-line;animation:ful-toast-in .2s ease-out;&>div:first-child{flex-grow:1}&>button{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.25rem;height:1.25rem;padding:0;border:0;border-radius:var(--ful-border-radius);background:none;color:inherit;cursor:pointer;& ful-icon{width:1em;height:1em}&:hover{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}&.success{border-color:var(--ful-accent-ink);color:var(--ful-accent-ink)}&.warning{border-color:var(--ful-warning-border-color);background-color:var(--ful-warning-bg);color:var(--ful-warning-color)}&.error{border-color:var(--ful-error-border-color);background-color:var(--ful-error-bg);color:var(--ful-error-color)}&.ful-toast-out{animation:ful-toast-out .2s ease-in forwards}}}@keyframes ful-toast-in{0%{transform:translateY(-.5rem);opacity:0}}@keyframes ful-toast-out{to{transform:translateY(-.5rem);opacity:0}}}
17
+ @layer ful.components{dialog.ful-drawer{--ful-drawer-width:min(90vw, 28rem);@media (max-width:30rem){--ful-drawer-width:100vw;border-radius:0}position:fixed;inset-block:0;inset-inline-start:auto;inset-inline-end:0;width:var(--ful-drawer-width);max-width:100vw;height:100dvh;max-height:100dvh;margin:0;padding:0;border:var(--ful-border-width) solid var(--ful-border-color);border-start-start-radius:var(--ful-border-radius);border-end-start-radius:var(--ful-border-radius);background-color:var(--ful-bg);color:var(--ful-color);&::backdrop{background-color:var(--ful-backdrop-color)}&[open]{display:flex;flex-direction:column;animation:ful-drawer-slide-in .2s ease-out;&[closing]{animation:ful-drawer-slide-out .2s ease-in forwards}}&>header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:1rem 1.25rem .5rem;& h2{margin:0;font-size:1.125rem}&>button{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:0;border:0;border-radius:var(--ful-border-radius);background:none;color:var(--ful-muted-color,var(--ful-color));cursor:pointer;& ful-icon{width:1em;height:1em}&:hover{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}}&>section{padding:.5rem 1.25rem 1rem;overflow-y:auto;&[data-ref=content]{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;&>footer:last-child{margin-block-start:auto}}&[data-ref=loading]{display:grid;place-items:center;flex-grow:1}&[data-ref=error]{margin:0 1.25rem;padding:1rem;white-space:pre-line;color:var(--ful-error-color);background-color:var(--ful-error-bg);border:var(--ful-border-width) solid var(--ful-error-border-color);border-radius:var(--ful-border-radius)}}&[placement=start]{inset-inline-end:auto;inset-inline-start:0;border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:var(--ful-border-radius);border-end-end-radius:var(--ful-border-radius);&[open]{animation-name:ful-drawer-slide-in-start;&[closing]{animation-name:ful-drawer-slide-out-start}}}&:dir(rtl)[open]{animation-name:ful-drawer-slide-in-start;&[closing]{animation-name:ful-drawer-slide-out-start}}&[placement=start]:dir(rtl)[open]{animation-name:ful-drawer-slide-in;&[closing]{animation-name:ful-drawer-slide-out}}}@keyframes ful-drawer-slide-in{0%{transform:translateX(1rem);opacity:0}}@keyframes ful-drawer-slide-in-start{0%{transform:translateX(-1rem);opacity:0}}@keyframes ful-drawer-slide-out{to{transform:translateX(1rem);opacity:0}}@keyframes ful-drawer-slide-out-start{to{transform:translateX(-1rem);opacity:0}}@media (prefers-reduced-motion:reduce){dialog.ful-drawer[open]{animation:none}}}
18
+ @layer ful.components{ful-menu[popover]{top:anchor(bottom);left:anchor(left);margin:.3rem 0 0;min-width:8rem;padding:.5rem 0;color:var(--ful-color);background-color:var(--ful-bg);background-clip:padding-box;border:var(--ful-border-width) solid var(--ful-border-color);border-radius:var(--ful-border-radius);&:popover-open{display:block}&>a,&>button{display:flex;align-items:center;gap:.5rem;width:100%;padding:.25rem 1rem;font:inherit;color:var(--ful-color);text-align:start;text-decoration:none;cursor:pointer;background:none;border:0}&>a:focus,&>a:hover,&>button:focus,&>button:hover{background-color:var(--ful-selected-bg);outline:0}&>a:active,&>button:active{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&>button:disabled{cursor:default;opacity:.5;background:none}&>hr{margin:.5rem 0;border:0;border-top:var(--ful-border-width) solid var(--ful-border-color)}}}
19
+ @layer ful.components{ful-toasts:not(:has(>ful-toast)){display:none}:has(>ful-toast){--ful-toasts-max-width:min(90vw, 24rem);position:fixed;top:1rem;inset-inline-end:1rem;z-index:1200;display:flex;flex-direction:column;align-items:flex-end;gap:.5rem;max-width:var(--ful-toasts-max-width);&>ful-toast{display:flex;align-items:flex-start;gap:.5rem;padding:.625rem .75rem;border:var(--ful-controls-border-width) solid var(--ful-border-color);border-radius:var(--ful-controls-border-radius);background-color:var(--ful-bg);color:var(--ful-color);white-space:pre-line;animation:ful-toast-in .2s ease-out;&>div:first-child{flex-grow:1}&>button{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.25rem;height:1.25rem;padding:0;border:0;border-radius:var(--ful-border-radius);background:none;color:inherit;cursor:pointer;& ful-icon{width:1em;height:1em}&:hover{color:var(--ful-active-color);background-color:var(--ful-active-bg)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}}&>button.ful-toast-action{width:auto;align-self:center;padding:0 .375rem;font-weight:600;color:var(--ful-accent-ink)}&.success{border-color:var(--ful-accent-ink);color:var(--ful-accent-ink)}&.warning{border-color:var(--ful-warning-border-color);background-color:var(--ful-warning-bg);color:var(--ful-warning-color)}&.error{border-color:var(--ful-error-border-color);background-color:var(--ful-error-bg);color:var(--ful-error-color)}&.ful-toast-out{animation:ful-toast-out .2s ease-in forwards}}}@keyframes ful-toast-in{0%{transform:translateY(-.5rem);opacity:0}}@keyframes ful-toast-out{to{transform:translateY(-.5rem);opacity:0}}}
19
20
  @layer ful.components{:has(>ful-tablist){display:block;&>[role=tabpanel]{padding-block-start:1rem}}ful-tablist{display:flex;flex-wrap:wrap;gap:.25rem;border-block-end:var(--ful-border-width) solid var(--ful-border-color);&>button{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;min-height:var(--ful-controls-height);padding:.375rem .75rem;font:inherit;line-height:1.5;color:var(--ful-muted-color,var(--ful-color));background:none;border:var(--ful-border-width) solid transparent;border-start-start-radius:var(--ful-border-radius);border-start-end-radius:var(--ful-border-radius);cursor:pointer;&:hover{color:var(--ful-color);background-color:var(--ful-selected-bg)}&:focus-visible{outline:0;box-shadow:var(--ful-focus-box-shadow)}&[aria-selected=true]{color:var(--ful-color);background-color:var(--ful-bg);border-color:var(--ful-border-color) var(--ful-border-color) transparent;font-weight:600}}}}
20
21
  @layer ful.components{:has(>ful-accordion-group){display:block}ful-accordion-group{display:block;&>details{color:var(--ful-color);background-color:var(--ful-bg);border:var(--ful-border-width) solid var(--ful-border-color);border-radius:var(--ful-border-radius);&+details{margin-top:.5rem}&:has(>summary:focus-visible){border-color:var(--ful-focus-border-color);box-shadow:var(--ful-focus-box-shadow)}&>summary{display:flex;align-items:center;gap:.5rem;min-height:var(--ful-controls-height);padding:.375rem .75rem;font:inherit;line-height:1.5;cursor:pointer;list-style:none;outline:0;&::-webkit-details-marker{display:none}&:after{content:"";margin-inline-start:auto;flex:0 0 auto;width:1em;height:1em;background-color:currentcolor;mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708"/></svg>');mask-repeat:no-repeat;mask-position:center;mask-size:contain;transition:rotate .2s ease-out;@media (prefers-reduced-motion:reduce){transition:none}}}&[open]>summary:after{rotate:180deg}&>:not(summary){padding:.5rem .75rem .75rem}}}}
21
22
  @layer ful.components{:has(>ful-steps){display:flex;flex-direction:column;&>section:not([aria-current=step]){display:none}}ful-steps{display:block;& ol{display:flex;flex-wrap:wrap;margin:0 0 1rem;padding:0;list-style:none}& li:not([aria-current=step]){display:none}& li[aria-current=step]{display:flex;align-items:center;flex:0 1 auto;min-height:var(--ful-controls-height);padding:.375rem .5rem;font-weight:700;color:var(--ful-accent-ink)}}ful-wizard{&[progress=timeline]{& ful-steps li{display:flex;justify-content:center;flex:1 1 auto;min-width:min(100%,8rem);text-align:center;color:var(--ful-accent-ink);border-block-end:calc(2 * var(--ful-border-width)) solid var(--ful-accent-ink)}& ful-steps li[aria-current=step]~li{color:color-mix(in srgb,var(--ful-color) 65%,var(--ful-bg));border-block-end-color:var(--ful-border-color)}}&[progress=dots]{& ful-steps ol{gap:.375rem;margin-block-end:1rem}& ful-steps li{display:block;flex:0 0 auto;min-width:0;min-height:0;width:.5rem;height:.5rem;padding:0;font-size:0;border-radius:50%;background-color:var(--ful-accent-ink)}& ful-steps li[aria-current=step]{background-color:var(--ful-active-bg);box-shadow:0 0 0 .125rem color-mix(in srgb,var(--ful-active-bg) 35%,transparent)}& ful-steps li[aria-current=step]~li{background-color:var(--ful-border-color)}}&[progress=none]{& ful-steps{display:none}}}}