mithril-materialized 3.15.0 → 3.17.0

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.
Files changed (47) hide show
  1. package/README.md +32 -2
  2. package/dist/advanced.css +109 -4
  3. package/dist/button.d.ts +3 -1
  4. package/dist/circular-progress.d.ts +2 -2
  5. package/dist/combobox.d.ts +35 -0
  6. package/dist/components.css +144 -17
  7. package/dist/core.css +278 -3
  8. package/dist/floating-action-button.d.ts +2 -1
  9. package/dist/form-section.d.ts +35 -0
  10. package/dist/forms.css +280 -5
  11. package/dist/index.css +357 -22
  12. package/dist/index.d.ts +3 -2
  13. package/dist/index.esm.js +728 -299
  14. package/dist/index.esm.js.map +1 -0
  15. package/dist/index.js +741 -298
  16. package/dist/index.js.map +1 -0
  17. package/dist/index.min.css +2 -2
  18. package/dist/index.umd.js +741 -298
  19. package/dist/index.umd.js.map +1 -0
  20. package/dist/input-options.d.ts +4 -1
  21. package/dist/likert-scale.d.ts +2 -1
  22. package/dist/linear-progress.d.ts +2 -2
  23. package/dist/material-icon.d.ts +2 -1
  24. package/dist/radio.d.ts +9 -0
  25. package/dist/range-slider.d.ts +3 -2
  26. package/dist/rating.d.ts +2 -1
  27. package/dist/search-select.d.ts +15 -2
  28. package/dist/select.d.ts +14 -1
  29. package/dist/sidenav.d.ts +11 -1
  30. package/dist/treeview.d.ts +2 -2
  31. package/dist/types.d.ts +5 -0
  32. package/dist/utilities.css +93 -2
  33. package/dist/utils.d.ts +30 -1
  34. package/package.json +20 -20
  35. package/sass/components/_badge-component.scss +8 -0
  36. package/sass/components/_buttons.scss +9 -9
  37. package/sass/components/_global.scss +93 -0
  38. package/sass/components/_likert-scale.scss +24 -0
  39. package/sass/components/_sidenav.scss +21 -3
  40. package/sass/components/_theme-variables.scss +22 -1
  41. package/sass/components/_toggle-group.scss +3 -0
  42. package/sass/components/forms/_form-groups.scss +1 -1
  43. package/sass/components/forms/_form-section.scss +63 -0
  44. package/sass/components/forms/_forms.scss +1 -0
  45. package/sass/components/forms/_input-fields.scss +55 -0
  46. package/sass/components/forms/_range-enhanced.scss +3 -3
  47. package/sass/components/forms/_select.scss +85 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../../../node_modules/.pnpm/@rollup+plugin-typescript@12.3.0_rollup@4.62.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js","../src/label.ts","../src/utils.ts","../src/autocomplete.ts","../src/badge.ts","../src/icon.ts","../src/waves.ts","../src/button.ts","../src/carousel.ts","../src/material-icon.ts","../src/chip.ts","../src/code-block.ts","../src/collapsible.ts","../src/combobox.ts","../src/collection.ts","../src/datepicker.ts","../src/range-slider.ts","../src/input.ts","../src/option.ts","../src/datatable.ts","../src/dropdown.ts","../src/floating-action-button.ts","../src/material-box.ts","../src/modal.ts","../src/pagination.ts","../src/parallax.ts","../src/time-utils.ts","../src/digital-clock.ts","../src/analog-clock.ts","../src/timepicker.ts","../src/pushpin.ts","../src/radio.ts","../src/select.ts","../src/switch.ts","../src/tabs.ts","../src/search-select.ts","../src/time-range-picker.ts","../src/toast.ts","../src/tooltip.ts","../src/theme-switcher.ts","../src/file-upload.ts","../src/form-section.ts","../src/sidenav.ts","../src/breadcrumb.ts","../src/wizard.ts","../src/treeview.ts","../src/timeline.ts","../src/masonry.ts","../src/image-list.ts","../src/rating.ts","../src/likert-scale.ts","../src/toggle-button.ts","../src/toggle-group.ts","../src/circular-progress.ts","../src/linear-progress.ts","../src/types.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import m, { FactoryComponent, Component, Attributes } from 'mithril';\n// import './styles/input.css';\n\nexport const Mandatory: Component = { view: ({ attrs }) => m('span.mandatory', { ...attrs }, '*') };\n\nexport interface LabelAttrs extends Attributes {\n /** Optional title/label */\n label?: string;\n /** Optional ID */\n id?: string;\n /** If true, add a mandatory '*' after the label */\n isMandatory?: boolean;\n /** Add the active class to the label */\n isActive?: boolean | string;\n /** Determines the initial value of its active state, only used during oncreate */\n initialValue?: boolean;\n}\n\n/** Simple label element, used for most components. */\nexport const Label: FactoryComponent<LabelAttrs> = () => {\n return {\n view: ({ attrs: { label, id, isMandatory, isActive, className, initialValue, ...params } }) =>\n label\n ? m(\n 'label',\n {\n ...params,\n className: [className, isActive ? 'active' : ''].filter(Boolean).join(' ').trim() || undefined,\n for: id,\n oncreate: ({ dom }) => {\n if (!initialValue) return;\n const labelEl = dom as HTMLLabelElement;\n labelEl.classList.add('active');\n },\n },\n [m.trust(label), isMandatory ? m(Mandatory) : undefined]\n )\n : undefined,\n };\n};\n\nexport interface HelperTextOptions extends Attributes {\n helperText?: string;\n dataError?: string;\n dataSuccess?: string;\n}\n\n/** Create a helper text, often used for displaying a small help text. May be replaced by the validation message. */\nexport const HelperText: FactoryComponent<HelperTextOptions> = () => {\n return {\n view: ({ attrs: { helperText, dataError, dataSuccess, className } }) => {\n return helperText || dataError || dataSuccess\n ? m(\n 'span.helper-text.left',\n { className, 'data-error': dataError, 'data-success': dataSuccess },\n dataError ? m.trust(dataError) : dataSuccess ? m.trust(dataSuccess) : helperText ? m.trust(helperText) : ''\n )\n : undefined;\n },\n };\n};\n","// Utility functions for the library\nimport m from 'mithril';\nimport { HelperText, Label } from './label';\nimport { SortSelected } from './select';\nimport { InputOption } from '.';\n\n/**\n * Create a unique ID\n * @see https://stackoverflow.com/a/2117523/319711\n *\n * @returns id followed by 8 hexadecimal characters.\n */\nexport const uniqueId = () => {\n // tslint:disable-next-line:no-bitwise\n return 'idxxxxxxxx'.replace(/[x]/g, () => ((Math.random() * 16) | 0).toString(16));\n};\n\n/**\n * Create a GUID\n * @see https://stackoverflow.com/a/2117523/319711\n *\n * @returns RFC4122 version 4 compliant GUID\n */\nexport const uuid4 = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n // tslint:disable-next-line:no-bitwise\n const r = (Math.random() * 16) | 0;\n // tslint:disable-next-line:no-bitwise\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\n/** Check if a string or number is numeric. @see https://stackoverflow.com/a/9716488/319711 */\nexport const isNumeric = (n: string | number) => !isNaN(parseFloat(n as string)) && isFinite(n as number);\n\n/**\n * Sort options array based on sorting configuration\n * @param options - Array of options to sort\n * @param sortConfig - Sort configuration: 'asc', 'desc', 'none', or custom comparator function\n * @returns Sorted array (or original if 'none' or undefined)\n */\nexport const sortOptions = <T extends string | number>(\n options: InputOption<T>[],\n sortConfig?: SortSelected<T>\n): { id: T; label?: string }[] => {\n if (!sortConfig || sortConfig === 'none') {\n return options;\n }\n\n const sorted = [...options]; // Create a copy to avoid mutating original\n\n if (typeof sortConfig === 'function') {\n return sorted.sort(sortConfig);\n }\n\n // Sort by label, fallback to id if no label\n return sorted.sort((a, b) => {\n const aLabel = (a.label || a.id.toString()).toLowerCase();\n const bLabel = (b.label || b.id.toString()).toLowerCase();\n\n const comparison = aLabel.localeCompare(bLabel);\n return sortConfig === 'asc' ? comparison : -comparison;\n });\n};\n\n/**\n * Pad left, default width 2 with a '0'\n *\n * @see http://stackoverflow.com/a/10073788/319711\n * @param {(string | number)} n\n * @param {number} [width=2]\n * @param {string} [z='0']\n * @returns\n */\nexport const padLeft = (n: string | number, width: number = 2, z: string = '0') => String(n).padStart(width, z);\n\nexport const normalizeSelection = <T>(value?: T | T[]): T[] => {\n if (value === undefined) {\n return [];\n }\n\n return Array.isArray(value) ? value : [value];\n};\n\nexport interface ControllableValueOptions<T> {\n controlled: boolean;\n disabled?: boolean;\n controlledValue?: T;\n defaultValue?: T;\n internalValue?: T;\n fallbackValue: T;\n}\n\nexport const resolveControllableValue = <T>({\n controlled,\n disabled,\n controlledValue,\n defaultValue,\n internalValue,\n fallbackValue,\n}: ControllableValueOptions<T>): T => {\n if (controlled) {\n return controlledValue ?? fallbackValue;\n }\n\n if (disabled) {\n return defaultValue ?? controlledValue ?? fallbackValue;\n }\n\n return internalValue ?? defaultValue ?? fallbackValue;\n};\n\nexport interface FieldChromeOptions {\n label?: string;\n id?: string;\n isMandatory?: boolean;\n isActive?: boolean | string;\n initialValue?: boolean;\n helperText?: string;\n dataError?: string;\n dataSuccess?: string;\n}\n\nexport const renderFieldChrome = ({\n label,\n id,\n isMandatory,\n isActive,\n initialValue,\n helperText,\n dataError,\n dataSuccess,\n}: FieldChromeOptions): m.Children[] => {\n return [\n label\n ? m(Label, {\n label,\n id,\n isMandatory,\n isActive,\n initialValue,\n })\n : undefined,\n helperText || dataError || dataSuccess\n ? m(HelperText, {\n helperText,\n dataError,\n dataSuccess,\n })\n : undefined,\n ].filter(Boolean) as m.Children[];\n};\n\n// Keep only essential dropdown positioning styles\nexport const getDropdownStyles = (\n inputRef?: HTMLElement | null,\n overlap = false,\n options?: {\n /** ID property of the selected item */\n id?: string | number;\n /** Label to show in the dropdown */\n label?: string;\n /** Optional group */\n group?: string;\n /** Can we select the item */\n disabled?: boolean;\n /** Add a divider */\n divider?: boolean;\n }[],\n isDropDown = false\n) => {\n if (!inputRef) {\n return {\n display: 'block',\n opacity: 1,\n position: 'absolute',\n top: overlap ? 0 : '100%',\n left: '0',\n zIndex: 1000,\n width: '100%',\n };\n }\n\n const rect = inputRef.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n // Calculate dropdown height based on options\n let estimatedHeight = 200; // Default fallback\n const itemHeight = 52; // Standard height for dropdown items\n if (options) {\n const groupHeaderHeight = 52; // Height for group headers\n\n // Count groups and total options\n const groups = new Set();\n let totalOptions = 0;\n\n options\n .filter((o) => !o.divider)\n .forEach((option) => {\n totalOptions++;\n if (option.group) {\n groups.add(option.group);\n }\n });\n\n // Match the select dropdown's CSS max-height. Positioning with the full\n // option count would otherwise leave a gap above an input near the bottom\n // of the viewport when the rendered menu is capped at 400px.\n estimatedHeight = Math.min(totalOptions * itemHeight + groups.size * groupHeaderHeight, 400);\n }\n const spaceBelow = viewportHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n // If there's not enough space below and more space above, position dropdown above\n const shouldPositionAbove = spaceBelow < estimatedHeight && spaceAbove > spaceBelow;\n\n // Calculate available space and whether scrolling is needed\n const availableSpace = shouldPositionAbove ? spaceAbove : spaceBelow;\n\n // When positioning above, we need to consider the actual space from viewport top to input\n let effectiveAvailableSpace = availableSpace;\n if (shouldPositionAbove) {\n effectiveAvailableSpace = rect.top - 10; // Space from viewport top to input, minus margin\n }\n\n const needsScrolling = estimatedHeight > effectiveAvailableSpace;\n\n // Calculate the actual height the dropdown will take\n const actualHeight = needsScrolling ? effectiveAvailableSpace : estimatedHeight;\n\n const styles: any = {\n display: 'block',\n opacity: 1,\n position: 'absolute',\n left: '0',\n zIndex: 1000,\n width: `${rect.width}px`,\n };\n\n if (shouldPositionAbove) {\n // This menu is absolutely positioned inside the select wrapper. A negative\n // `top` calculated from viewport coordinates becomes wrong when an ancestor\n // scrolls (as ScenarioSpark's main area does). Anchor the menu to its local\n // containing block instead; its height can then change without detaching it\n // from the input.\n styles.top = 'auto';\n styles.bottom = `${isDropDown ? -18 : inputRef.offsetHeight - 12}px`;\n } else {\n styles.top = overlap ? 0 : '100%';\n }\n\n // Only add scrolling constraints when necessary\n if (needsScrolling) {\n styles.maxHeight = `${actualHeight}px`;\n styles.overflowY = 'auto';\n }\n\n return styles;\n};\n\n/**\n * Generate a range of numbers from a to and including b, i.e. [a, b]\n * @example: console.log(range(5, 10)); // [5, 6, 7, 8, 9, 10]\n */\nexport const range = (a: number, b: number): number[] => Array.from({ length: b - a + 1 }, (_, i) => a + i);\n\n// Portal container management for rendering modals outside parent stacking contexts\ninterface PortalContainer {\n element: HTMLElement;\n refCount: number;\n}\n\n// Global registry for portal containers\nconst portalContainers = new Map<string, PortalContainer>();\n\n/**\n * Creates or retrieves a portal container appended to document.body.\n * Uses reference counting to manage container lifecycle.\n *\n * @param id - Unique identifier for the portal container\n * @param zIndex - Z-index for the portal container (default: 1004, above modals at 1003)\n * @returns The portal container element\n */\nexport const getPortalContainer = (id: string, zIndex: number = 1004): HTMLElement => {\n let container = portalContainers.get(id);\n\n if (!container) {\n const element = document.createElement('div');\n element.id = id;\n element.style.position = 'fixed';\n element.style.top = '0';\n element.style.left = '0';\n element.style.width = '100%';\n element.style.height = '100%';\n element.style.pointerEvents = 'none'; // Allow clicks through to underlying elements\n element.style.zIndex = zIndex.toString();\n\n document.body.appendChild(element);\n\n container = { element, refCount: 0 };\n portalContainers.set(id, container);\n }\n\n container.refCount++;\n return container.element;\n};\n\n/**\n * Decrements reference count and removes portal container if no longer needed.\n *\n * @param id - Portal container identifier\n */\nexport const releasePortalContainer = (id: string): void => {\n const container = portalContainers.get(id);\n\n if (container) {\n container.refCount--;\n\n if (container.refCount <= 0) {\n container.element.remove();\n portalContainers.delete(id);\n }\n }\n};\n\n/**\n * Renders a Mithril vnode into a portal container using m.render().\n * This allows components to render outside their parent DOM hierarchy,\n * useful for modals and pickers that need to escape stacking contexts.\n *\n * @param containerId - Portal container identifier\n * @param vnode - Mithril vnode to render\n * @param zIndex - Z-index for portal container (default: 1004)\n */\nexport const renderToPortal = (containerId: string, vnode: m.Children, zIndex: number = 1004): void => {\n const existingContainer = portalContainers.get(containerId);\n const container = existingContainer ? existingContainer.element : getPortalContainer(containerId, zIndex);\n m.render(container, vnode);\n};\n\nexport interface PortalSyncOptions {\n containerId: string;\n shouldRender: boolean;\n vnode: m.Children | null;\n zIndex?: number;\n}\n\nexport const syncPortalContent = ({ containerId, shouldRender, vnode, zIndex = 1004 }: PortalSyncOptions): void => {\n if (!shouldRender || vnode === null) {\n clearPortal(containerId);\n return;\n }\n\n renderToPortal(containerId, vnode, zIndex);\n};\n\n/**\n * Clears portal content and releases container reference.\n * If this is the last reference, the container will be removed from the DOM.\n *\n * @param containerId - Portal container identifier\n */\nexport const clearPortal = (containerId: string): void => {\n const container = portalContainers.get(containerId);\n if (container) {\n m.render(container.element, null);\n releasePortalContainer(containerId);\n }\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { uniqueId } from './utils';\nimport { InputAttrs } from './input-options';\nimport { Label, HelperText } from './label';\n\nexport interface AutoCompleteAttrs extends InputAttrs<string> {\n /** The data object defining the autocomplete options */\n data?: Record<string, string | null>;\n /** Limit of how many options are shown. Default: Infinity */\n limit?: number;\n /** Minimum length of input before autocomplete shows. Default: 1 */\n minLength?: number;\n /** Function called when an option is selected */\n onAutocomplete?: (value: string) => void;\n}\n\n/** Component to auto complete your text input - Pure Mithril implementation */\nexport const Autocomplete: FactoryComponent<AutoCompleteAttrs> = () => {\n const state = {\n id: uniqueId(),\n isActive: false,\n internalValue: '',\n isOpen: false,\n suggestions: [] as Array<{ key: string; value: string | null }>,\n selectedIndex: -1,\n inputElement: null as HTMLInputElement | null,\n };\n\n const isControlled = (attrs: AutoCompleteAttrs) =>\n 'value' in attrs && typeof attrs.value !== 'undefined' && typeof attrs.oninput === 'function';\n\n const filterSuggestions = (input: string, data: Record<string, string | null>, limit: number, minLength: number) => {\n if (!input || input.length < minLength) {\n return [];\n }\n\n const filtered = Object.entries(data || {})\n .filter(([key]) => key.toLowerCase().includes(input.toLowerCase()))\n .map(([key, value]) => ({ key, value }))\n .slice(0, limit);\n\n return filtered;\n };\n\n const highlightMatch = (text: string, query: string) => {\n if (!query) {\n return text;\n }\n\n const lowerText = text.toLowerCase();\n const lowerQuery = query.toLowerCase();\n const nodes: Array<string | m.Vnode<any, any>> = [];\n\n let start = 0;\n let index = lowerText.indexOf(lowerQuery, start);\n\n while (index !== -1) {\n if (index > start) {\n nodes.push(text.slice(start, index));\n }\n\n nodes.push(m('span.highlight', text.slice(index, index + query.length)));\n start = index + query.length;\n index = lowerText.indexOf(lowerQuery, start);\n }\n\n if (start < text.length) {\n nodes.push(text.slice(start));\n }\n\n return nodes.length > 0 ? nodes : text;\n };\n\n const selectSuggestion = (suggestion: { key: string; value: string | null }, attrs: AutoCompleteAttrs) => {\n const controlled = isControlled(attrs);\n\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalValue = suggestion.key;\n }\n\n state.isOpen = false;\n state.selectedIndex = -1;\n\n if (attrs.oninput) {\n attrs.oninput(suggestion.key);\n }\n if (attrs.onchange) {\n attrs.onchange(suggestion.key);\n }\n if (attrs.onAutocomplete) {\n attrs.onAutocomplete(suggestion.key);\n }\n };\n\n const handleKeydown = (e: KeyboardEvent, attrs: AutoCompleteAttrs) => {\n if (!state.isOpen) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n state.selectedIndex = Math.min(state.selectedIndex + 1, state.suggestions.length - 1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n state.selectedIndex = Math.max(state.selectedIndex - 1, -1);\n break;\n case 'Enter':\n e.preventDefault();\n if (state.selectedIndex >= 0 && state.suggestions[state.selectedIndex]) {\n state.isOpen = false;\n selectSuggestion(state.suggestions[state.selectedIndex], attrs);\n }\n break;\n case 'Escape':\n e.preventDefault();\n state.isOpen = false;\n state.selectedIndex = -1;\n break;\n }\n };\n\n const closeDropdown = (e: Event) => {\n const target = e.target as Element;\n const autocompleteWrapper = target.closest('.autocomplete-wrapper');\n const dropdownContent = target.closest('.autocomplete-content');\n\n // Close if clicking outside both the input wrapper and dropdown content\n if (!autocompleteWrapper && !dropdownContent) {\n state.isOpen = false;\n state.selectedIndex = -1;\n }\n m.redraw();\n };\n\n const getDropdownStyles = () => {\n if (!state.inputElement) {\n return {\n display: 'block',\n width: '100%',\n height: `${state.suggestions.length * 50}px`,\n transformOrigin: '0px 0px',\n opacity: state.isOpen ? 1 : 0,\n transform: 'scaleX(1) scaleY(1)',\n };\n }\n\n const rect = state.inputElement.getBoundingClientRect();\n const inputWidth = rect.width;\n\n return {\n display: 'block',\n width: `${inputWidth}px`,\n height: `${state.suggestions.length * 50}px`,\n transformOrigin: '0px 0px',\n opacity: state.isOpen ? 1 : 0,\n transform: 'scaleX(1) scaleY(1)',\n position: 'absolute',\n top: '100%',\n left: '0',\n zIndex: 1000,\n };\n };\n\n return {\n oninit: ({ attrs }) => {\n // Initialize internal value for uncontrolled mode\n if (!isControlled(attrs)) {\n state.internalValue = attrs.defaultValue || '';\n }\n document.addEventListener('click', closeDropdown);\n },\n\n onremove: () => {\n document.removeEventListener('click', closeDropdown);\n },\n\n view: ({ attrs }) => {\n const id = attrs.id || state.id;\n const {\n label,\n helperText,\n onchange,\n newRow,\n className = 'col s12',\n style,\n iconName,\n isMandatory,\n data = {},\n limit = Infinity,\n minLength = 1,\n ...params\n } = attrs;\n\n const controlled = isControlled(attrs);\n const currentValue = controlled ? attrs.value || '' : state.internalValue;\n const cn = newRow ? className + ' clear' : className;\n\n // Update suggestions when input changes\n state.suggestions = filterSuggestions(currentValue, data, limit, minLength);\n\n // Check if there's a perfect match (exact key match, case-insensitive)\n const hasExactMatch =\n currentValue.length >= minLength &&\n Object.keys(data).some((key) => key.toLowerCase() === currentValue.toLowerCase());\n\n // Only open dropdown if there are suggestions and no perfect match\n state.isOpen = state.suggestions.length > 0 && currentValue.length >= minLength && !hasExactMatch;\n\n return m(\n '.input-field.autocomplete-wrapper',\n {\n className: cn,\n style,\n },\n [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m('input', {\n ...params,\n className: 'autocomplete',\n type: 'text',\n tabindex: 0,\n id,\n value: currentValue,\n oncreate: (vnode) => {\n state.inputElement = vnode.dom as HTMLInputElement;\n\n // Set initial value for uncontrolled mode\n if (!controlled && attrs.defaultValue) {\n (vnode.dom as HTMLInputElement).value = attrs.defaultValue;\n }\n },\n oninput: (e: Event) => {\n const target = e.target as HTMLInputElement;\n const inputValue = target.value;\n state.selectedIndex = -1;\n\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalValue = inputValue;\n }\n\n // Call oninput and onchange if provided\n if (attrs.oninput) {\n attrs.oninput(inputValue);\n }\n if (onchange) {\n onchange(inputValue);\n }\n },\n onkeydown: (e: KeyboardEvent) => {\n handleKeydown(e, attrs);\n\n // Call original onkeydown if provided\n if (attrs.onkeydown) {\n attrs.onkeydown(e, currentValue);\n }\n },\n onfocus: () => {\n state.isActive = true;\n if (currentValue.length >= minLength) {\n // Check for perfect match on focus too\n const hasExactMatch = Object.keys(data).some((key) => key.toLowerCase() === currentValue.toLowerCase());\n state.isOpen = state.suggestions.length > 0 && !hasExactMatch;\n }\n },\n onblur: (e: FocusEvent) => {\n state.isActive = false;\n if (!e.relatedTarget || !(e.relatedTarget as Element).closest('.autocomplete-content')) {\n state.isOpen = false;\n state.selectedIndex = -1;\n }\n },\n }),\n\n // Autocomplete dropdown\n state.isOpen &&\n m(\n 'ul.autocomplete-content.dropdown-content',\n {\n style: getDropdownStyles(),\n },\n state.suggestions.map((suggestion, index) =>\n m(\n 'li',\n {\n key: suggestion.key,\n class: state.selectedIndex === index ? 'active' : '',\n onclick: (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n selectSuggestion(suggestion, attrs);\n },\n onmouseover: () => {\n state.selectedIndex = index;\n },\n },\n [\n // Check if value contains image URL or icon\n suggestion.value && suggestion.value.includes('http')\n ? m('img', {\n src: suggestion.value,\n class: 'right circle',\n onerror: (e: Event) => {\n // Hide image if it fails to load\n (e.target as HTMLElement).style.display = 'none';\n },\n })\n : suggestion.value && suggestion.value.startsWith('icon:')\n ? m(\n 'i.material-icons',\n {\n style: {\n fontSize: '24px',\n color: 'var(--md-grey-600)',\n },\n },\n suggestion.value.replace('icon:', '')\n )\n : null,\n m('span', suggestion.key ? highlightMatch(suggestion.key, currentValue) : ''),\n ]\n )\n )\n ),\n m(Label, {\n label,\n id,\n isMandatory,\n isActive: state.isActive || currentValue.length > 0 || !!attrs.placeholder || !!attrs.value,\n }),\n m(HelperText, { helperText }),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { MaterialColor, ColorIntensity } from './types';\n\n/** Badge positioning anchor origin */\nexport interface BadgeAnchorOrigin {\n /** Vertical positioning: 'top' | 'bottom' */\n vertical: 'top' | 'bottom';\n /** Horizontal positioning: 'left' | 'right' */\n horizontal: 'left' | 'right';\n}\n\n/** Badge display variant */\nexport type BadgeVariant = 'standard' | 'dot';\n\n/** Badge overlap mode affecting positioning offset */\nexport type BadgeOverlap = 'rectangular' | 'circular';\n\n/**\n * Badge component attributes\n *\n * Displays a badge anchored to a child element, commonly used for notifications,\n * counts, or status indicators.\n *\n * @example\n * ```typescript\n * // Standard notification badge\n * m(Badge, { badgeContent: 4 },\n * m('button.btn', 'Notifications')\n * )\n *\n * // Dot variant with custom color\n * m(Badge, {\n * variant: 'dot',\n * color: 'green',\n * anchorOrigin: { vertical: 'bottom', horizontal: 'right' }\n * },\n * m(Icon, { iconName: 'notifications' })\n * )\n *\n * // Badge with max value capping\n * m(Badge, { badgeContent: 150, max: 99 },\n * m('span', 'Inbox')\n * )\n * ```\n */\nexport interface BadgeAttrs extends Attributes {\n /**\n * Content to display in badge (number or string)\n * For 'dot' variant, this is ignored\n */\n badgeContent?: string | number;\n\n /**\n * Maximum value to display - if badgeContent exceeds this, shows \"max+\"\n * @default undefined (no capping)\n */\n max?: number;\n\n /**\n * Badge positioning relative to child element\n * @default { vertical: 'top', horizontal: 'right' }\n */\n anchorOrigin?: BadgeAnchorOrigin;\n\n /**\n * Overlap mode affecting positioning offset\n * - 'rectangular': Badge positioned at corner edge\n * - 'circular': Badge overlaps slightly for circular child elements\n * @default 'rectangular'\n */\n overlap?: BadgeOverlap;\n\n /**\n * Badge display variant\n * - 'standard': Shows badgeContent\n * - 'dot': Displays minimal dot indicator\n * @default 'standard'\n */\n variant?: BadgeVariant;\n\n /**\n * Badge background color from MaterialColor palette\n * @default 'red'\n */\n color?: MaterialColor;\n\n /**\n * Color intensity modifier\n * @example 'lighten-2', 'darken-3'\n */\n colorIntensity?: ColorIntensity;\n\n /**\n * Force hide badge regardless of badgeContent\n * @default false\n */\n invisible?: boolean;\n\n /**\n * Show badge even when badgeContent is 0\n * @default false\n */\n showZero?: boolean;\n\n /**\n * ARIA label for accessibility\n * Automatically generated from badgeContent if not provided\n */\n 'aria-label'?: string;\n\n /**\n * Additional CSS class for badge element (not wrapper)\n */\n badgeClassName?: string;\n\n /**\n * Additional CSS class for wrapper element\n */\n className?: string;\n}\n\n/**\n * Badge component\n *\n * Displays a badge anchored to a child element. Commonly used for notifications,\n * counts, or status indicators. Supports flexible positioning, colors, and variants.\n *\n * @example\n * ```typescript\n * // Basic notification badge\n * m(Badge, { badgeContent: 5 },\n * m('button.btn', 'Messages')\n * )\n *\n * // Dot badge on avatar\n * m(Badge, {\n * variant: 'dot',\n * color: 'green',\n * overlap: 'circular'\n * },\n * m('img.circle', { src: 'avatar.jpg' })\n * )\n * ```\n */\nexport const Badge: FactoryComponent<BadgeAttrs> = () => {\n return {\n view: ({ attrs, children }) => {\n const {\n badgeContent,\n max,\n anchorOrigin = { vertical: 'top', horizontal: 'right' },\n overlap = 'rectangular',\n variant = 'standard',\n color = 'red',\n colorIntensity,\n invisible = false,\n showZero = false,\n 'aria-label': ariaLabel,\n badgeClassName = '',\n className = '',\n ...params\n } = attrs;\n\n // === VALIDATION: Single child element ===\n const childArray = Array.isArray(children) ? children : children ? [children] : [];\n\n if (childArray.length === 0) {\n console.warn('Badge component requires a child element');\n return null;\n }\n\n if (childArray.length > 1) {\n console.warn('Badge component should only wrap a single child element. Using first child only.');\n }\n\n const child = childArray[0];\n\n // === VISIBILITY LOGIC ===\n // Hide badge if:\n // 1. invisible prop is true, OR\n // 2. For standard variant: badgeContent is undefined/null OR (badgeContent is 0 AND !showZero)\n const shouldHideBadge =\n invisible ||\n (variant === 'standard' &&\n (badgeContent === undefined ||\n badgeContent === null ||\n (badgeContent === 0 && !showZero)));\n\n // === BADGE CONTENT FORMATTING ===\n // Apply max capping: if badgeContent > max, show \"max+\"\n const getDisplayContent = (): string => {\n if (variant === 'dot') return '';\n\n if (typeof badgeContent === 'number' && max !== undefined && badgeContent > max) {\n return `${max}+`;\n }\n\n return String(badgeContent ?? '');\n };\n\n const displayContent = getDisplayContent();\n\n // === CSS CLASS ASSEMBLY ===\n // Wrapper classes\n const wrapperClasses = ['badge-wrapper', className].filter(Boolean).join(' ').trim() || undefined;\n\n // Badge element classes - using m-badge prefix to avoid Materialize conflicts\n const positionClass = `m-badge--${anchorOrigin.vertical}-${anchorOrigin.horizontal}`;\n const badgeClasses = [\n 'm-badge',\n `m-badge--${variant}`,\n positionClass,\n `m-badge--${overlap}`,\n `m-badge--${color}`,\n colorIntensity ? `m-badge--${colorIntensity}` : '',\n shouldHideBadge ? 'm-badge--invisible' : '',\n badgeClassName,\n ]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n // === ARIA ATTRIBUTES ===\n const badgeAriaLabel =\n ariaLabel ||\n (variant === 'dot'\n ? 'notification indicator'\n : displayContent\n ? `${displayContent} notifications`\n : 'notification badge');\n\n // === RENDER ===\n return m(\n '.badge-wrapper',\n {\n ...params,\n className: wrapperClasses,\n },\n [\n // Child element\n child,\n\n // Badge element - only render if not hidden\n !shouldHideBadge\n ? m(\n 'span',\n {\n className: badgeClasses,\n 'aria-label': badgeAriaLabel,\n role: 'status',\n 'aria-live': 'polite',\n },\n variant === 'standard' ? displayContent : null\n )\n : null,\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface IconAttrs extends Attributes {\n iconName: string;\n}\n\n/**\n * A simple material icon, defined by its icon name.\n *\n * @example m(Icon, { className: 'small' }, 'create') renders a small 'create' icon\n * @example m(Icon, { className: 'prefix' }, iconName) renders the icon as a prefix\n */\nexport const Icon: FactoryComponent<IconAttrs> = () => ({\n view: ({ attrs: { iconName, ...passThrough } }) => m('i.material-icons', passThrough, iconName),\n});\n","/*!\n * Waves Effect for Mithril Materialized\n * Based on Waves v0.6.4 by Alfiana E. Sibuea\n * Adapted for TypeScript and Mithril integration\n */\n\ninterface WavesOffset {\n top: number;\n left: number;\n}\n\nexport class WavesEffect {\n private static duration = 750;\n\n private static offset(elem: Element): WavesOffset {\n const rect = elem.getBoundingClientRect();\n return {\n top: rect.top + window.pageYOffset,\n left: rect.left + window.pageXOffset\n };\n }\n\n private static createRipple(e: MouseEvent | TouchEvent, element: Element): void {\n // Disable right click\n if ((e as MouseEvent).button === 2) {\n return;\n }\n\n // Create ripple element\n const ripple = document.createElement('div');\n ripple.className = 'waves-ripple';\n\n // Get click position relative to element\n const pos = this.offset(element);\n const relativeY = (e as any).pageY - pos.top;\n const relativeX = (e as any).pageX - pos.left;\n\n // Calculate scale based on element size\n const scale = (element.clientWidth / 100) * 10;\n\n // Set initial ripple position and style\n ripple.style.cssText = `\n top: ${relativeY}px;\n left: ${relativeX}px;\n transform: scale(0);\n opacity: 1;\n `;\n\n // Add ripple to element\n element.appendChild(ripple);\n\n // Force reflow and animate\n ripple.offsetHeight;\n ripple.style.transform = `scale(${scale})`;\n ripple.style.opacity = '1';\n\n // Store reference for cleanup\n ripple.setAttribute('data-created', Date.now().toString());\n }\n\n private static removeRipples(element: Element): void {\n const ripples = element.querySelectorAll('.waves-ripple');\n ripples.forEach((ripple: Element) => {\n const created = parseInt(ripple.getAttribute('data-created') || '0');\n const age = Date.now() - created;\n\n const fadeOut = () => {\n (ripple as HTMLElement).style.opacity = '0';\n setTimeout(() => {\n if (ripple.parentNode) {\n ripple.parentNode.removeChild(ripple);\n }\n }, this.duration);\n };\n\n if (age >= 350) {\n fadeOut();\n } else {\n setTimeout(fadeOut, 350 - age);\n }\n });\n }\n\n static onMouseDown = (e: MouseEvent) => {\n const element = e.currentTarget as Element;\n if (element && element.classList.contains('waves-effect')) {\n WavesEffect.createRipple(e, element);\n }\n };\n\n static onMouseUp = (e: MouseEvent) => {\n const element = e.currentTarget as Element;\n if (element && element.classList.contains('waves-effect')) {\n WavesEffect.removeRipples(element);\n }\n };\n\n static onMouseLeave = (e: MouseEvent) => {\n const element = e.currentTarget as Element;\n if (element && element.classList.contains('waves-effect')) {\n WavesEffect.removeRipples(element);\n }\n };\n\n static onTouchStart = (e: TouchEvent) => {\n const element = e.currentTarget as Element;\n if (element && element.classList.contains('waves-effect')) {\n WavesEffect.createRipple(e, element);\n }\n };\n\n static onTouchEnd = (e: TouchEvent) => {\n const element = e.currentTarget as Element;\n if (element && element.classList.contains('waves-effect')) {\n WavesEffect.removeRipples(element);\n }\n };\n}","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { Icon } from './icon';\nimport { IconName } from './material-icon';\nimport { MaterialPosition, IconClass, ButtonVariant } from './types';\nimport { WavesEffect } from './waves';\n\n/**\n * HTML attributes that can be passed to button elements\n * @deprecated Use native HTML attributes directly instead\n */\nexport interface HtmlAttrs {\n id?: string;\n for?: string;\n placeholder?: string;\n autofocus?: boolean;\n disabled?: boolean;\n type?: 'submit' | 'button' | 'reset';\n}\n\n/**\n * Enhanced button attributes with improved TypeScript support\n * @example\n * ```typescript\n * // Basic button\n * m(Button, { label: 'Click me' })\n *\n * // Submit button with icon\n * m(Button, {\n * variant: 'submit',\n * label: 'Save',\n * iconName: 'save',\n * iconClass: 'small left'\n * })\n *\n * // Reset button\n * m(Button, {\n * variant: 'reset',\n * label: 'Clear Form'\n * })\n * ```\n */\nexport interface ButtonAttrs extends Attributes {\n /** Button label text (optional for icon-only buttons) */\n label?: string;\n\n /** Optional navigation destination. When provided, the component renders an anchor instead of a button. */\n href?: string;\n\n /** Material icon name - see https://materializecss.com/icons.html */\n iconName?: string;\n\n /**\n * Icon size and position class\n * @example 'small', 'medium left', 'large right'\n */\n iconClass?: IconClass;\n\n /**\n * Button type - determines the HTML button behavior\n * @default 'button'\n * @example\n * ```typescript\n * // Standard clickable button (default)\n * variant: 'button'\n *\n * // Form submission button\n * variant: 'submit'\n *\n * // Form reset button\n * variant: 'reset'\n * ```\n */\n variant?: ButtonVariant;\n\n /**\n * @deprecated Use native HTML attributes directly instead\n * Some additional HTML attributes that can be attached to the button\n */\n attr?: HtmlAttrs;\n\n /** Tooltip text to display on hover */\n tooltip?: string;\n\n /**\n * Tooltip position\n * @fixed typo: tooltipPostion -> tooltipPosition\n */\n tooltipPosition?: MaterialPosition;\n}\n\n/**\n * A factory to create new buttons.\n *\n * @example FlatButton = ButtonFactory('button.waves-effect.waves-teal.btn-flat');\n */\nexport const ButtonFactory = (\n element: string,\n defaultClassNames: string,\n type: string = ''\n): FactoryComponent<ButtonAttrs> => {\n return () => {\n return {\n view: ({ attrs, children }) => {\n const {\n tooltip,\n tooltipPosition,\n tooltipPostion, // Keep for backwards compatibility\n iconName,\n iconClass,\n label,\n className,\n variant,\n ...params\n } = attrs;\n\n // Use variant or fallback to factory type\n const buttonType = variant || type || 'button';\n\n const cn = [tooltip ? 'tooltipped' : '', defaultClassNames, className].filter(Boolean).join(' ').trim();\n\n // Use tooltipPosition if available, fallback to legacy tooltipPostion\n const position = tooltipPosition || tooltipPostion || 'top';\n\n // Add waves effect event handlers if waves-effect class is present\n const wavesHandlers = cn.includes('waves-effect')\n ? {\n onmousedown: WavesEffect.onMouseDown,\n onmouseup: WavesEffect.onMouseUp,\n onmouseleave: WavesEffect.onMouseLeave,\n ontouchstart: WavesEffect.onTouchStart,\n ontouchend: WavesEffect.onTouchEnd,\n }\n : {};\n\n const tagName = element.split(/[.#]/)[0] || element;\n const elementSuffix = element.slice(tagName.length);\n const isLink = Boolean(attrs.href);\n const renderedElement = `${isLink ? 'a' : 'button'}${elementSuffix}`;\n\n return m(\n renderedElement,\n {\n ...params,\n ...wavesHandlers,\n className: cn,\n 'data-position': tooltip ? position : undefined,\n 'data-tooltip': tooltip || undefined,\n // Links retain native navigation semantics and must not have a button type.\n type: isLink ? undefined : buttonType,\n },\n iconName ? m(Icon, { iconName, className: iconClass !== undefined ? iconClass : 'left' }) : undefined,\n label ? label : undefined,\n children\n );\n },\n };\n };\n};\n\nexport const Button = ButtonFactory('button', 'waves-effect waves-light btn', 'button');\nexport const LargeButton = ButtonFactory('button', 'waves-effect waves-light btn-large', 'button');\nexport const SmallButton = ButtonFactory('button', 'waves-effect waves-light btn-small', 'button');\nexport const FlatButton = ButtonFactory('button', 'waves-effect waves-teal btn-flat', 'button');\nexport const IconButton = ButtonFactory('button', 'btn-flat btn-icon waves-effect waves-teal', 'button');\nexport const RoundIconButton = ButtonFactory('button', 'btn-floating btn-large waves-effect waves-light', 'button');\nexport const SubmitButton = ButtonFactory('button', 'btn waves-effect waves-light', 'submit');\nconst SmallRaisedIconButton = ButtonFactory('button', 'btn-small btn-icon waves-effect waves-light', 'button');\n\nexport interface ConfirmButtonAttrs extends ButtonAttrs {\n /** Use material-icon name, or internal MaterialIcon name */\n confirmIconName?: IconName | string;\n /** Use material-icon name, or internal MaterialIcon name */\n confirmColor?: IconName | string;\n timeout?: number;\n clickDelay?: number;\n onFirstClick?: () => void;\n}\n\nexport const ConfirmButton: FactoryComponent<ConfirmButtonAttrs> = () => {\n let isConfirming = false;\n let isBlocked = false;\n let timeoutId: number;\n let blockTimeoutId: number;\n\n const reset = () => {\n isConfirming = false;\n isBlocked = false;\n m.redraw();\n };\n\n const unblock = () => {\n isBlocked = false;\n };\n\n return {\n onremove: () => {\n window.clearTimeout(timeoutId);\n window.clearTimeout(blockTimeoutId);\n },\n view: ({ attrs }) => {\n const {\n iconName = 'delete',\n confirmIconName = 'check',\n confirmColor = 'red',\n timeout = 3000,\n clickDelay = 500,\n onFirstClick,\n onclick,\n iconClass,\n label,\n ...props\n } = attrs;\n\n const handleClick = (e: MouseEvent) => {\n e.preventDefault();\n if (isBlocked) return;\n\n if (isConfirming) {\n window.clearTimeout(timeoutId);\n window.clearTimeout(blockTimeoutId); // Clean up safety\n isConfirming = false;\n onclick?.(e);\n } else {\n isConfirming = true;\n isBlocked = true;\n onFirstClick?.();\n timeoutId = window.setTimeout(reset, timeout);\n blockTimeoutId = window.setTimeout(unblock, clickDelay);\n }\n };\n\n const currentIconName = isConfirming ? confirmIconName : iconName;\n const cn = isConfirming ? confirmColor : 'red-text';\n\n // Choose button component based on label and confirming state\n let ButtonComponent: FactoryComponent<ButtonAttrs>;\n if (label) {\n ButtonComponent = FlatButton;\n } else {\n // Icon-only: use small raised button for square shape when confirming\n ButtonComponent = isConfirming ? SmallRaisedIconButton : IconButton;\n }\n\n // Add square styling for icon-only confirming state\n const buttonStyle =\n !label && isConfirming\n ? {\n ...props.style,\n width: '36px',\n height: '36px',\n padding: '0',\n minWidth: '28px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '2px',\n }\n : props.style;\n\n return m(ButtonComponent, {\n ...props,\n style: buttonStyle,\n className: `${props.className || ''} ${cn}`,\n iconName: currentIconName as string,\n iconClass: label ? iconClass || 'left' : '',\n label,\n onclick: handleClick,\n });\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface CarouselItem extends Attributes {\n /** Relative page link, e.g. '#one' */\n href: string;\n /** Image source */\n src: string;\n /** Alternative name */\n alt?: string;\n}\n\nexport interface CarouselOptions {\n /** Duration of carousel item change animation in ms */\n duration?: number;\n /** Zoom scale (perspective distance) */\n dist?: number;\n /** Spacing for center image */\n shift?: number;\n /** Padding between non-center items */\n padding?: number;\n /** Number of visible items in carousel */\n numVisible?: number;\n /** Change to full width styles */\n fullWidth?: boolean;\n /** Toggle indicators */\n indicators?: boolean;\n /** Don't wrap around and cycle through items */\n noWrap?: boolean;\n}\n\nexport interface CarouselAttrs extends CarouselOptions, Attributes {\n /** The list of images */\n items: CarouselItem[];\n /** Called when carousel item changes */\n onCycleTo?: (item: CarouselItem, index: number, dragged: boolean) => void;\n}\n\n/**\n * Materialize CSS Carousel component with dynamic positioning\n * Port of the original MaterializeCSS carousel logic\n */\nexport const Carousel: FactoryComponent<CarouselAttrs> = () => {\n // Default options based on original Materialize CSS\n const defaults = {\n duration: 200, // ms\n dist: -100, // zoom scale\n shift: 0, // spacing for center image\n padding: 0, // Padding between non center items\n numVisible: 5, // Number of visible items in carousel\n fullWidth: false, // Change to full width styles\n indicators: false, // Toggle indicators\n noWrap: false, // Don't wrap around and cycle through items\n };\n\n const state = {\n // Carousel state\n hasMultipleSlides: false,\n showIndicators: false,\n noWrap: false,\n pressed: false,\n dragged: false,\n verticalDragged: false,\n offset: 0,\n target: 0,\n center: 0,\n\n // Touch/drag state\n reference: 0,\n referenceY: 0,\n velocity: 0,\n amplitude: 0,\n frame: 0,\n timestamp: 0,\n\n // Item measurements\n itemWidth: 0,\n itemHeight: 0,\n dim: 1, // Make sure dim is non zero for divisions\n\n // Animation\n ticker: null as number | null,\n scrollingTimeout: null as number | null,\n\n // Callbacks\n oneTimeCallback: null as ((item: HTMLElement, dragged: boolean) => void) | null,\n \n // Instance options (properly typed with defaults)\n options: { ...defaults } as Required<CarouselOptions>,\n };\n\n // Utility functions\n const xpos = (e: MouseEvent | TouchEvent): number => {\n // Touch event\n if ('targetTouches' in e && e.targetTouches && e.targetTouches.length >= 1) {\n return e.targetTouches[0].clientX;\n }\n // Mouse event\n return (e as MouseEvent).clientX;\n };\n\n const ypos = (e: MouseEvent | TouchEvent): number => {\n // Touch event\n if ('targetTouches' in e && e.targetTouches && e.targetTouches.length >= 1) {\n return e.targetTouches[0].clientY;\n }\n // Mouse event\n return (e as MouseEvent).clientY;\n };\n\n const wrap = (x: number, count: number): number => {\n return x >= count ? x % count : x < 0 ? wrap(count + (x % count), count) : x;\n };\n\n const track = () => {\n const now = Date.now();\n const elapsed = now - state.timestamp;\n state.timestamp = now;\n const delta = state.offset - state.frame;\n state.frame = state.offset;\n\n const v = (1000 * delta) / (1 + elapsed);\n state.velocity = 0.8 * v + 0.2 * state.velocity;\n };\n\n const autoScroll = () => {\n if (state.amplitude) {\n const elapsed = Date.now() - state.timestamp;\n const delta = state.amplitude * Math.exp(-elapsed / state.options.duration);\n if (delta > 2 || delta < -2) {\n scroll(state.target - delta);\n requestAnimationFrame(autoScroll);\n } else {\n scroll(state.target);\n }\n }\n };\n\n const updateItemStyle = (el: HTMLElement, opacity: number, zIndex: number, transform: string) => {\n el.style.transform = transform;\n el.style.zIndex = zIndex.toString();\n el.style.opacity = opacity.toString();\n el.style.visibility = 'visible';\n };\n\n const scroll = (x?: number, attrs?: CarouselAttrs) => {\n const carouselEl = document.querySelector('.carousel') as HTMLElement;\n if (!carouselEl) return;\n\n // Track scrolling state\n if (!carouselEl.classList.contains('scrolling')) {\n carouselEl.classList.add('scrolling');\n }\n if (state.scrollingTimeout != null) {\n window.clearTimeout(state.scrollingTimeout);\n }\n state.scrollingTimeout = window.setTimeout(() => {\n carouselEl.classList.remove('scrolling');\n }, state.options.duration);\n\n // Start actual scroll\n const items = Array.from(carouselEl.querySelectorAll('.carousel-item')) as HTMLElement[];\n const count = items.length;\n if (count === 0) return;\n\n const lastCenter = state.center;\n const numVisibleOffset = 1 / state.options.numVisible;\n\n state.offset = typeof x === 'number' ? x : state.offset;\n state.center = Math.floor((state.offset + state.dim / 2) / state.dim);\n const delta = state.offset - state.center * state.dim;\n const dir = delta < 0 ? 1 : -1;\n const tween = (-dir * delta * 2) / state.dim;\n const half = count >> 1;\n\n let alignment: string;\n let centerTweenedOpacity: number;\n\n if (state.options.fullWidth) {\n alignment = 'translateX(0)';\n centerTweenedOpacity = 1;\n } else {\n alignment = `translateX(${(carouselEl.clientWidth - state.itemWidth) / 2}px) `;\n alignment += `translateY(${(carouselEl.clientHeight - state.itemHeight) / 2}px)`;\n centerTweenedOpacity = 1 - numVisibleOffset * tween;\n }\n\n // Set indicator active\n if (state.showIndicators) {\n const diff = state.center % count;\n const indicators = carouselEl.querySelectorAll('.indicator-item');\n indicators.forEach((indicator, index) => {\n indicator.classList.toggle('active', index === diff);\n });\n }\n\n // Center item\n if (!state.noWrap || (state.center >= 0 && state.center < count)) {\n const el = items[wrap(state.center, count)];\n\n // Add active class to center item\n items.forEach((item) => item.classList.remove('active'));\n el.classList.add('active');\n\n const transformString = `${alignment} translateX(${-delta / 2}px) translateX(${\n dir * state.options.shift * tween\n }px) translateZ(${state.options.dist * tween}px)`;\n updateItemStyle(el, centerTweenedOpacity, 0, transformString);\n }\n\n // Side items\n for (let i = 1; i <= half; ++i) {\n let zTranslation: number;\n let tweenedOpacity: number;\n\n // Right side\n if (state.options.fullWidth) {\n zTranslation = state.options.dist;\n tweenedOpacity = i === half && delta < 0 ? 1 - tween : 1;\n } else {\n zTranslation = state.options.dist * (i * 2 + tween * dir);\n tweenedOpacity = 1 - numVisibleOffset * (i * 2 + tween * dir);\n }\n\n if (!state.noWrap || state.center + i < count) {\n const el = items[wrap(state.center + i, count)];\n const transformString = `${alignment} translateX(${\n state.options.shift + (state.dim * i - delta) / 2\n }px) translateZ(${zTranslation}px)`;\n updateItemStyle(el, tweenedOpacity, -i, transformString);\n }\n\n // Left side\n if (state.options.fullWidth) {\n zTranslation = state.options.dist;\n tweenedOpacity = i === half && delta > 0 ? 1 - tween : 1;\n } else {\n zTranslation = state.options.dist * (i * 2 - tween * dir);\n tweenedOpacity = 1 - numVisibleOffset * (i * 2 - tween * dir);\n }\n\n if (!state.noWrap || state.center - i >= 0) {\n const el = items[wrap(state.center - i, count)];\n const transformString = `${alignment} translateX(${\n -state.options.shift + (-state.dim * i - delta) / 2\n }px) translateZ(${zTranslation}px)`;\n updateItemStyle(el, tweenedOpacity, -i, transformString);\n }\n }\n\n // onCycleTo callback\n if (lastCenter !== state.center && attrs && attrs.onCycleTo) {\n const currItem = items[wrap(state.center, count)];\n if (currItem) {\n const itemIndex = Array.from(items).indexOf(currItem);\n attrs.onCycleTo(attrs.items[itemIndex], itemIndex, state.dragged);\n }\n }\n\n // One time callback\n if (state.oneTimeCallback) {\n const currItem = items[wrap(state.center, count)];\n state.oneTimeCallback(currItem, state.dragged);\n state.oneTimeCallback = null;\n }\n };\n\n const cycleTo = (n: number, callback?: (item: HTMLElement, dragged: boolean) => void, _attrs?: CarouselAttrs) => {\n const items = document.querySelectorAll('.carousel-item');\n const count = items.length;\n if (count === 0) return;\n\n let diff = (state.center % count) - n;\n\n // Account for wraparound\n if (!state.noWrap) {\n if (diff < 0) {\n if (Math.abs(diff + count) < Math.abs(diff)) {\n diff += count;\n }\n } else if (diff > 0) {\n if (Math.abs(diff - count) < diff) {\n diff -= count;\n }\n }\n }\n\n state.target = state.dim * Math.round(state.offset / state.dim);\n\n if (diff < 0) {\n state.target += state.dim * Math.abs(diff);\n } else if (diff > 0) {\n state.target -= state.dim * diff;\n }\n\n // Set one time callback\n if (callback) {\n state.oneTimeCallback = callback;\n }\n\n // Scroll\n if (state.offset !== state.target) {\n state.amplitude = state.target - state.offset;\n state.timestamp = Date.now();\n requestAnimationFrame(autoScroll);\n }\n };\n\n // Event handlers\n const handleCarouselTap = (e: MouseEvent | TouchEvent) => {\n // Fixes firefox draggable image bug\n if (e.type === 'mousedown' && (e.target as HTMLElement).tagName === 'IMG') {\n e.preventDefault();\n }\n state.pressed = true;\n state.dragged = false;\n state.verticalDragged = false;\n state.reference = xpos(e);\n state.referenceY = ypos(e);\n\n state.velocity = state.amplitude = 0;\n state.frame = state.offset;\n state.timestamp = Date.now();\n\n if (state.ticker) clearInterval(state.ticker);\n state.ticker = setInterval(track, 100);\n };\n\n const handleCarouselDrag = (e: MouseEvent | TouchEvent, attrs: CarouselAttrs) => {\n if (state.pressed) {\n const x = xpos(e);\n const y = ypos(e);\n const delta = state.reference - x;\n const deltaY = Math.abs(state.referenceY - y);\n\n if (deltaY < 30 && !state.verticalDragged) {\n if (delta > 2 || delta < -2) {\n state.dragged = true;\n state.reference = x;\n scroll(state.offset + delta, attrs);\n }\n } else if (state.dragged) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n } else {\n state.verticalDragged = true;\n }\n }\n\n if (state.dragged) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n }\n return true;\n };\n\n const handleCarouselRelease = (e: MouseEvent | TouchEvent, _attrs: CarouselAttrs) => {\n if (state.pressed) {\n state.pressed = false;\n } else {\n return;\n }\n\n if (state.ticker) clearInterval(state.ticker);\n state.target = state.offset;\n\n if (state.velocity > 10 || state.velocity < -10) {\n state.amplitude = 0.9 * state.velocity;\n state.target = state.offset + state.amplitude;\n }\n\n state.target = Math.round(state.target / state.dim) * state.dim;\n\n // No wrap of items\n if (state.noWrap) {\n const items = document.querySelectorAll('.carousel-item');\n if (state.target >= state.dim * (items.length - 1)) {\n state.target = state.dim * (items.length - 1);\n } else if (state.target < 0) {\n state.target = 0;\n }\n }\n\n state.amplitude = state.target - state.offset;\n state.timestamp = Date.now();\n requestAnimationFrame(autoScroll);\n\n if (state.dragged) {\n e.preventDefault();\n e.stopPropagation();\n }\n return false;\n };\n\n const handleCarouselClick = (e: MouseEvent, attrs: CarouselAttrs) => {\n if (state.dragged) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n } else if (!state.options.fullWidth) {\n const target = (e.target as HTMLElement).closest('.carousel-item') as HTMLElement;\n if (target) {\n const items = Array.from(document.querySelectorAll('.carousel-item'));\n const clickedIndex = items.indexOf(target);\n const diff = wrap(state.center, items.length) - clickedIndex;\n\n if (diff !== 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n cycleTo(clickedIndex, undefined, attrs);\n }\n }\n return true;\n };\n\n const handleIndicatorClick = (e: MouseEvent, attrs: CarouselAttrs) => {\n e.stopPropagation();\n const indicator = (e.target as HTMLElement).closest('.indicator-item') as HTMLElement;\n if (indicator) {\n const indicators = Array.from(document.querySelectorAll('.indicator-item'));\n const index = indicators.indexOf(indicator);\n cycleTo(index, undefined, attrs);\n }\n };\n\n return {\n view: ({ attrs }) => {\n const { items, indicators = false } = attrs;\n\n if (!items || items.length === 0) return undefined;\n\n // Create instance-specific options without mutating globals\n const instanceOptions = { ...defaults, ...attrs };\n // Update state options for this render\n state.options = instanceOptions;\n\n const supportTouch = typeof window.ontouchstart !== 'undefined';\n\n return m(\n '.carousel',\n {\n oncreate: ({ attrs, dom }) => {\n const carouselEl = dom as HTMLElement;\n const items = carouselEl.querySelectorAll('.carousel-item');\n\n state.hasMultipleSlides = items.length > 1;\n state.showIndicators = instanceOptions.indicators && state.hasMultipleSlides;\n state.noWrap = instanceOptions.noWrap || !state.hasMultipleSlides;\n\n if (items.length > 0) {\n const firstItem = items[0] as HTMLElement;\n state.itemWidth = firstItem.offsetWidth;\n state.itemHeight = firstItem.offsetHeight;\n state.dim = state.itemWidth * 2 + instanceOptions.padding || 1;\n }\n\n // Cap numVisible at count\n instanceOptions.numVisible = Math.min(items.length, instanceOptions.numVisible);\n state.options = instanceOptions;\n\n // Initial scroll\n scroll(state.offset, attrs);\n },\n onmousedown: (e: MouseEvent) => handleCarouselTap(e),\n onmousemove: (e: MouseEvent) => handleCarouselDrag(e, attrs),\n onmouseup: (e: MouseEvent) => handleCarouselRelease(e, attrs),\n onmouseleave: (e: MouseEvent) => handleCarouselRelease(e, attrs),\n onclick: (e: MouseEvent) => handleCarouselClick(e, attrs),\n ontouchstart: supportTouch ? (e: TouchEvent) => handleCarouselTap(e) : undefined,\n ontouchmove: supportTouch ? (e: TouchEvent) => handleCarouselDrag(e, attrs) : undefined,\n ontouchend: supportTouch ? (e: TouchEvent) => handleCarouselRelease(e, attrs) : undefined,\n },\n [\n // Carousel items\n ...items.map((item) =>\n m(\n 'a.carousel-item',\n {\n // key: index,\n href: item.href,\n style: 'visibility: hidden;', // Initially hidden, will be shown by scroll\n },\n m('img', { src: item.src, alt: item.alt })\n )\n ),\n\n // Indicators\n indicators &&\n items.length > 1 &&\n m(\n 'ul.indicators',\n items.map((_, index) =>\n m('li.indicator-item', {\n key: `indicator-${index}`,\n className: index === 0 ? 'active' : '',\n onclick: (e: MouseEvent) => handleIndicatorClick(e, attrs),\n })\n )\n ),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { Icon } from './icon';\nimport { ComponentStyle } from './types';\n\nconst iconPaths = {\n caret: [\n 'M7 10l5 5 5-5z', // arrow\n 'M0 0h24v24H0z', // background\n ],\n close: [\n 'M18.3 5.71a1 1 0 0 0-1.41 0L12 10.59 7.11 5.7A1 1 0 0 0 5.7 7.11L10.59 12l-4.89 4.89a1 1 0 1 0 1.41 1.41L12 13.41l4.89 4.89a1 1 0 0 0 1.41-1.41L13.41 12l4.89-4.89a1 1 0 0 0 0-1.4z',\n 'M0 0h24v24H0z',\n ],\n chevron: [\n 'M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z', // chevron down\n 'M0 0h24v24H0z', // background\n ],\n chevron_left: [\n 'M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z', // chevron left\n 'M0 0h24v24H0z', // background\n ],\n chevron_right: [\n 'M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z', // chevron right\n 'M0 0h24v24H0z', // background\n ],\n menu: [\n 'M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z', // hamburger menu\n 'M0 0h24v24H0z', // background\n ],\n expand: [\n 'M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z', // plus\n 'M0 0h24v24H0z', // background\n ],\n collapse: [\n 'M19 13H5v-2h14v2z', // minus\n 'M0 0h24v24H0z', // background\n ],\n check: [\n 'M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z', // checkmark\n 'M0 0h24v24H0z', // background\n ],\n radio_checked: [\n 'M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z', // radio button checked\n 'M0 0h24v24H0z', // background\n ],\n radio_unchecked: [\n 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z', // radio button unchecked\n 'M0 0h24v24H0z', // background\n ],\n light_mode: [\n 'M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5M2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1m18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1M11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1m0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1M5.99 4.58a.996.996 0 0 0-1.41 0 .996.996 0 0 0 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41zm12.4 12.4a.996.996 0 0 0-1.41 0 .996.996 0 0 0 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0a.996.996 0 0 0 0-1.41zm1.06-11a.996.996 0 0 0 0-1.41.996.996 0 0 0-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0zM7.05 18.4a.996.996 0 0 0 0-1.41.996.996 0 0 0-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0z',\n 'M0 0h24v24H0z', // background\n ],\n dark_mode: [\n 'M12 3a9 9 0 1 0 9 9c0-.46-.04-.92-.1-1.36a5.39 5.39 0 0 1-4.4 2.26 5.4 5.4 0 0 1-3.14-9.8c-.44-.06-.9-.1-1.36-.1z',\n 'M0 0h24v24H0z', // background\n ],\n delete: [\n // trashbin\n 'M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z',\n 'M0 0h24v24H0z', // background\n ],\n} as const;\n\nexport type IconName = keyof typeof iconPaths;\n\nexport interface MaterialIconAttrs extends Attributes {\n name: IconName;\n direction?: 'up' | 'down' | 'left' | 'right';\n style?: ComponentStyle;\n onclick?: (e: MouseEvent) => void;\n}\n\nexport const MaterialIcon: FactoryComponent<MaterialIconAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const { name, direction = 'down', style, ...props } = attrs;\n\n const rotationMap: Record<string, number> = {\n down: 0,\n up: 180,\n left: 90,\n right: -90,\n };\n\n const rotation = rotationMap[direction] ?? 0;\n const transform = rotation ? `rotate(${rotation}deg)` : undefined;\n const baseStyle: Record<string, string | number | undefined> = {\n display: 'inline-block',\n verticalAlign: 'middle',\n transform,\n };\n const combinedStyle =\n typeof style === 'string'\n ? `display:inline-block;vertical-align:middle;${transform ? `transform:${transform};` : ''}${style}`\n : { ...baseStyle, ...style };\n\n const icon = iconPaths[name];\n if (!icon || !Array.isArray(icon)) {\n return m(Icon, { ...props, iconName: name });\n }\n return m(\n 'svg',\n {\n ...props,\n style: combinedStyle,\n height: '24px',\n width: '24px',\n viewBox: '0 0 24 24',\n xmlns: 'http://www.w3.org/2000/svg',\n },\n icon?.map((d) =>\n m('path', {\n d,\n fill: d.includes('M0 0h24v24H0z') ? 'none' : 'currentColor',\n })\n )\n );\n },\n };\n};\n","import m from 'mithril';\nimport { uniqueId } from './utils';\nimport { HelperText, Label } from './label';\nimport { MaterialIcon } from './material-icon';\n\nexport interface ChipData {\n tag: string;\n image?: string;\n alt?: string;\n}\n\nexport interface AutocompleteOption extends ChipData {\n value?: string;\n}\n\nexport interface ChipsAttrs {\n id?: string;\n data?: ChipData[];\n placeholder?: string;\n secondaryPlaceholder?: string;\n autocompleteOptions?: {\n data: Record<string, string | null> | AutocompleteOption[];\n limit?: number;\n minLength?: number;\n };\n limit?: number;\n required?: boolean;\n isMandatory?: boolean;\n className?: string;\n label?: string;\n helperText?: string;\n onchange?: (data: ChipData[]) => void;\n onChipAdd?: (chip: ChipData) => void;\n onChipDelete?: (chip: ChipData) => void;\n onChipSelect?: (chip: ChipData) => void;\n}\n\nexport const Chips: m.FactoryComponent<ChipsAttrs> = () => {\n interface ChipsState {\n chipsData: ChipData[];\n selectedChip: number | null;\n focused: boolean;\n inputValue: string;\n inputId: string;\n autocompleteItems: AutocompleteOption[];\n selectedAutocompleteIndex: number;\n showAutocomplete: boolean;\n }\n\n const state: ChipsState = {\n chipsData: [],\n selectedChip: null,\n focused: false,\n inputValue: '',\n inputId: uniqueId(),\n autocompleteItems: [],\n selectedAutocompleteIndex: -1,\n showAutocomplete: false,\n };\n\n let currentVnode: m.VnodeDOM<ChipsAttrs, any> | null = null;\n\n const processAutocompleteData = (\n data: Record<string, string | null> | AutocompleteOption[]\n ): AutocompleteOption[] => {\n if (Array.isArray(data)) {\n return data.map((item) => {\n if (typeof item === 'string') {\n return { tag: item };\n }\n return item;\n });\n }\n return Object.entries(data).map(([text, value]) => ({\n tag: text,\n value: value || text,\n }));\n };\n\n const updateAutocomplete = () => {\n if (!currentVnode?.attrs.autocompleteOptions?.data) {\n state.autocompleteItems = [];\n return;\n }\n\n const { data, minLength = 1 } = currentVnode.attrs.autocompleteOptions;\n const input = state.inputValue.toLowerCase();\n\n if (input.length < minLength) {\n state.autocompleteItems = [];\n state.showAutocomplete = false;\n return;\n }\n\n const allOptions = processAutocompleteData(data);\n const filtered = allOptions.filter((option) => option.tag.toLowerCase().includes(input));\n\n const limit = currentVnode.attrs.autocompleteOptions.limit || Infinity;\n state.autocompleteItems = filtered.slice(0, limit);\n state.showAutocomplete = state.autocompleteItems.length > 0;\n state.selectedAutocompleteIndex = -1;\n };\n\n const selectAutocompleteItem = (item: AutocompleteOption) => {\n addChip({\n tag: item.tag,\n image: item.image,\n alt: item.alt, // Preserve alt text when converting to chip\n });\n state.inputValue = '';\n state.showAutocomplete = false;\n state.selectedAutocompleteIndex = -1;\n };\n\n const isValid = (chip: ChipData, currentChips: ChipData[]): boolean => {\n if (!chip.tag || chip.tag.trim() === '') return false;\n return !currentChips.some((c) => c.tag === chip.tag);\n };\n\n const addChip = (chip: ChipData) => {\n if (!currentVnode) return;\n\n const { limit = Infinity, onChipAdd, onchange } = currentVnode.attrs;\n\n if (!isValid(chip, state.chipsData) || state.chipsData.length >= limit) {\n return;\n }\n\n state.chipsData = [...state.chipsData, chip];\n state.inputValue = '';\n\n if (onChipAdd) onChipAdd(chip);\n if (onchange) onchange(state.chipsData);\n };\n\n const deleteChip = (index: number) => {\n if (!currentVnode) return;\n\n const { onChipDelete, onchange } = currentVnode.attrs;\n const chip = state.chipsData[index];\n\n state.chipsData = state.chipsData.filter((_, i) => i !== index);\n state.selectedChip = null;\n\n if (onChipDelete) onChipDelete(chip);\n if (onchange) onchange(state.chipsData);\n };\n\n const selectChip = (index: number) => {\n if (!currentVnode) return;\n\n const { onChipSelect } = currentVnode.attrs;\n state.selectedChip = index;\n\n if (onChipSelect && state.chipsData[index]) {\n onChipSelect(state.chipsData[index]);\n }\n };\n\n const handleKeydown = (e: KeyboardEvent) => {\n const target = e.target as HTMLInputElement;\n\n if (state.showAutocomplete) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n state.selectedAutocompleteIndex = Math.min(\n state.selectedAutocompleteIndex + 1,\n state.autocompleteItems.length - 1\n );\n const selectedItem = currentVnode?.dom.querySelector('.autocomplete-item.selected') as HTMLElement;\n if (selectedItem) {\n selectedItem.scrollIntoView({ block: 'nearest' });\n }\n return;\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n state.selectedAutocompleteIndex = Math.max(state.selectedAutocompleteIndex - 1, -1);\n const selectedItem = currentVnode?.dom.querySelector('.autocomplete-item.selected') as HTMLElement;\n if (selectedItem) {\n selectedItem.scrollIntoView({ block: 'nearest' });\n }\n return;\n }\n\n if (e.key === 'Enter' && state.selectedAutocompleteIndex >= 0) {\n e.preventDefault();\n selectAutocompleteItem(state.autocompleteItems[state.selectedAutocompleteIndex]);\n return;\n }\n }\n\n if (e.key === 'Enter' && target.value.trim()) {\n e.preventDefault();\n addChip({ tag: target.value.trim() });\n } else if (e.key === 'Backspace' && !target.value && state.chipsData.length > 0) {\n e.preventDefault();\n // Delete the last chip immediately when backspace is pressed in an empty input\n deleteChip(state.chipsData.length - 1);\n } else if (e.key === 'ArrowLeft' && !target.value && state.chipsData.length) {\n e.preventDefault();\n selectChip(state.chipsData.length - 1);\n }\n };\n\n const handleChipKeydown = (e: KeyboardEvent, index: number) => {\n if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n deleteChip(index);\n const newIndex = Math.max(index - 1, 0);\n if (state.chipsData.length) selectChip(newIndex);\n } else if (e.key === 'ArrowLeft' && index > 0) {\n selectChip(index - 1);\n } else if (e.key === 'ArrowRight') {\n if (index < state.chipsData.length - 1) {\n selectChip(index + 1);\n } else {\n const input = currentVnode?.dom.querySelector('.chips-input') as HTMLInputElement;\n if (input) input.focus();\n }\n }\n };\n\n return {\n oninit: ({ attrs }) => {\n state.chipsData = attrs.data || [];\n },\n\n oncreate: (vnode) => {\n currentVnode = vnode;\n },\n\n onremove: () => {\n currentVnode = null;\n },\n\n view: ({ attrs }) => {\n const {\n id,\n required,\n isMandatory = required,\n className = 'col s12',\n label,\n helperText,\n placeholder,\n secondaryPlaceholder,\n } = attrs;\n\n const getPlaceholder = () => {\n if (!state.chipsData.length && placeholder) {\n return placeholder;\n }\n if (state.chipsData.length && secondaryPlaceholder) {\n return secondaryPlaceholder;\n }\n return '';\n };\n\n return m('.input-field', { id, className }, [\n m(\n '.chips.chips-initial',\n {\n class: `chips-container${state.focused ? ' focused' : ''}${placeholder ? ' chips-placeholder' : ''}`,\n },\n [\n // Chips\n state.chipsData.map((chip, index) =>\n m(\n '.chip',\n {\n key: `${chip.tag}-${index}`,\n tabindex: 0,\n class: state.selectedChip === index ? 'selected' : undefined,\n onkeydown: (e: KeyboardEvent) => handleChipKeydown(e, index),\n },\n [\n chip.image &&\n m('img', {\n src: chip.image,\n alt: chip.alt || chip.tag,\n }),\n chip.tag,\n m(MaterialIcon, {\n name: 'close',\n className: 'close',\n onclick: (e: MouseEvent) => {\n e.stopPropagation();\n deleteChip(index);\n },\n }),\n ]\n )\n ),\n\n // Input\n m('input[type=text].chips-input.input.browser-default', {\n id: state.inputId,\n title: 'label',\n value: state.inputValue,\n placeholder: getPlaceholder(),\n oninput: (e: InputEvent) => {\n state.inputValue = (e.target as HTMLInputElement).value;\n updateAutocomplete();\n },\n onfocus: () => {\n state.focused = true;\n state.selectedChip = null;\n updateAutocomplete();\n },\n onblur: () => {\n state.focused = false;\n setTimeout(() => {\n state.showAutocomplete = false;\n state.selectedChip = null;\n }, 150);\n },\n onkeydown: handleKeydown,\n }),\n\n state.showAutocomplete &&\n m(\n 'ul.autocomplete-content.dropdown-content',\n {\n style: {\n display: 'block',\n opacity: 1,\n transform: 'scaleX(1) scaleY(1)',\n position: 'absolute',\n width: '100%',\n left: 0,\n top: '100%',\n maxHeight: '200px',\n overflow: 'auto',\n zIndex: 1000,\n backgroundColor: 'var(--mm-surface-color, #fff)',\n boxShadow:\n '0 2px 2px 0 var(--mm-shadow-penumbra, rgba(0,0,0,0.14)), 0 3px 1px -2px var(--mm-shadow-umbra, rgba(0,0,0,0.12)), 0 1px 5px 0 var(--mm-shadow-ambient, rgba(0,0,0,0.2))',\n },\n },\n state.autocompleteItems.map((item, index) =>\n m(\n 'li.autocomplete-item',\n {\n key: item.tag,\n class: state.selectedAutocompleteIndex === index ? 'selected' : '',\n style: {\n padding: '12px 16px',\n cursor: 'pointer',\n backgroundColor: state.selectedAutocompleteIndex === index ? 'var(--mm-border-color, #eee)' : 'transparent',\n color: 'var(--mm-text-primary, inherit)',\n },\n onmousedown: (e: MouseEvent) => {\n e.preventDefault();\n selectAutocompleteItem(item);\n },\n onmouseover: () => {\n state.selectedAutocompleteIndex = index;\n },\n },\n [\n item.image &&\n m('img.autocomplete-item-image', {\n src: item.image,\n alt: item.alt || item.tag,\n style: {\n width: '24px',\n height: '24px',\n marginRight: '8px',\n verticalAlign: 'middle',\n },\n }),\n m('span.autocomplete-item-text', item.tag),\n ]\n )\n )\n ),\n ]\n ),\n label &&\n m(Label, {\n label,\n id: state.inputId,\n isMandatory,\n isActive: state.focused || state.chipsData.length || placeholder ? true : false,\n }),\n helperText && m(HelperText, { helperText }),\n ]);\n },\n };\n};\n","// Styles are imported via the main index or individual component imports\nimport m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface CodeBlockAttrs extends Attributes {\n language?: string;\n code: string | string[];\n newRow?: boolean;\n}\n\n/** A simple code block without syntax high-lighting */\nexport const CodeBlock: FactoryComponent<CodeBlockAttrs> = () => ({\n view: ({ attrs }) => {\n const { newRow, code, language, className, ...params } = attrs;\n const lang = language || 'lang-TypeScript';\n const label = lang.replace('lang-', '');\n const cb = code instanceof Array ? code.join('\\n') : code;\n const cn = [newRow ? 'clear' : '', lang, className].filter(Boolean).join(' ').trim() || undefined;\n return m(`pre.codeblock${newRow ? '.clear' : ''}`, params, [\n m('div', m('label', label)),\n m(\n 'code',\n {\n ...params,\n className: cn,\n },\n cb\n ),\n ]);\n },\n});\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\n\nexport interface CollapsibleItem extends Attributes {\n /** Header of the collabsible item, may contain HTML or may be a Vnode */\n header?: string | Vnode<any, any>;\n /** Body of the collabsible item, may contain HTML or may be a Vnode */\n body?: string | Vnode<any, any>;\n /** If active, preselect the collabsible item. */\n active?: boolean;\n /** Add an material icon in front of the header. */\n iconName?: string;\n}\n\nexport interface CollapsibleAttrs extends Attributes {\n /** Optional header for the entire collapsible, similar to Collection header */\n header?: string | Vnode<any, any>;\n /** The list of accordeon/collabsible items */\n items: CollapsibleItem[];\n /** If true, only one item can be expanded at a time (accordion mode) */\n accordion?: boolean;\n}\n\nexport const CollapsibleItem: FactoryComponent<\n CollapsibleItem & {\n isActive: boolean;\n onToggle: () => void;\n }\n> = () => {\n return {\n view: ({ attrs: { header, body, iconName, isActive, onToggle } }) => {\n return m('li', { className: isActive ? 'active' : '' }, [\n header || iconName\n ? m(\n '.collapsible-header',\n {\n onclick: onToggle,\n },\n [\n iconName ? m('i.material-icons', iconName) : undefined,\n header\n ? typeof header === 'string'\n ? m('span.collapsible-header-text', header)\n : m('.collapsible-header-content', header)\n : undefined,\n ]\n )\n : undefined,\n m(\n '.collapsible-body',\n {\n style: {\n display: isActive ? 'block' : 'none',\n },\n },\n body ? (typeof body === 'string' ? m('div', { innerHTML: body }) : body) : undefined\n ),\n ]);\n },\n };\n};\n\n/**\n * Creates a collabsible or accordion component with pure CSS/Mithril implementation.\n * No MaterializeCSS JavaScript dependencies.\n */\nexport const Collapsible: FactoryComponent<CollapsibleAttrs> = () => {\n const state = {\n activeItems: new Set<number>(),\n };\n\n return {\n oninit: ({ attrs }) => {\n // Initialize active items from the items array\n attrs.items.forEach((item, index) => {\n if (item.active) {\n state.activeItems.add(index);\n }\n });\n },\n\n view: ({ attrs }) => {\n const { items, header, accordion = true, class: c, className, style, id } = attrs;\n\n const toggleItem = (index: number) => {\n if (accordion) {\n // Accordion mode: only one item can be active\n if (state.activeItems.has(index)) {\n state.activeItems.clear();\n } else {\n state.activeItems.clear();\n state.activeItems.add(index);\n }\n } else {\n // Expandable mode: multiple items can be active\n if (state.activeItems.has(index)) {\n state.activeItems.delete(index);\n } else {\n state.activeItems.add(index);\n }\n }\n };\n\n const collapsibleItems = items.map((item, index) =>\n m(CollapsibleItem, {\n ...item,\n key: index,\n isActive: state.activeItems.has(index),\n onToggle: () => toggleItem(index),\n })\n );\n\n return items && items.length > 0\n ? header\n ? m(\n 'ul.collapsible.with-header',\n {\n class: c || className,\n style,\n id,\n },\n [\n m('li.collapsible-main-header', m('h4', typeof header === 'string' ? header : header)),\n collapsibleItems,\n ]\n )\n : m(\n 'ul.collapsible',\n {\n class: c || className,\n style,\n id,\n },\n collapsibleItems\n )\n : undefined;\n },\n };\n};\n","export type ComboboxKeyAction = 'none' | 'open' | 'close' | 'selectFocused' | 'selectAction';\n\nexport interface ComboboxKeyInput {\n key: string;\n isOpen: boolean;\n focusedIndex: number;\n optionCount: number;\n includeActionRow: boolean;\n}\n\nexport interface ComboboxKeyResult {\n isOpen: boolean;\n focusedIndex: number;\n action: ComboboxKeyAction;\n preventDefault: boolean;\n}\n\nexport type ComboboxViewState = 'loading' | 'error' | 'empty' | 'ready';\n\nexport interface AsyncComboboxState<TOption> {\n options: TOption[];\n isLoading: boolean;\n error: string | null;\n latestRequestId: number;\n}\n\nconst isHandledKey = (key: string): boolean =>\n key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter' || key === ' ' || key === 'Escape';\n\nconst getTotalRows = (optionCount: number, includeActionRow: boolean): number =>\n Math.max(0, optionCount) + (includeActionRow ? 1 : 0);\n\nexport const getComboboxKeyResult = ({\n key,\n isOpen,\n focusedIndex,\n optionCount,\n includeActionRow,\n}: ComboboxKeyInput): ComboboxKeyResult => {\n const totalRows = getTotalRows(optionCount, includeActionRow);\n\n if (!isHandledKey(key)) {\n return { isOpen, focusedIndex, action: 'none', preventDefault: false };\n }\n\n if (key === 'Escape') {\n return { isOpen: false, focusedIndex: -1, action: 'close', preventDefault: true };\n }\n\n if (key === 'ArrowDown') {\n if (!isOpen) {\n return {\n isOpen: true,\n focusedIndex: totalRows > 0 ? 0 : -1,\n action: 'open',\n preventDefault: true,\n };\n }\n\n return {\n isOpen: true,\n focusedIndex: totalRows > 0 ? Math.min(focusedIndex + 1, totalRows - 1) : -1,\n action: 'none',\n preventDefault: true,\n };\n }\n\n if (key === 'ArrowUp') {\n if (!isOpen) {\n return {\n isOpen: true,\n focusedIndex: totalRows > 0 ? 0 : -1,\n action: 'open',\n preventDefault: true,\n };\n }\n\n return {\n isOpen: true,\n focusedIndex: totalRows > 0 ? Math.max(focusedIndex - 1, 0) : -1,\n action: 'none',\n preventDefault: true,\n };\n }\n\n if (!isOpen) {\n return {\n isOpen: true,\n focusedIndex: totalRows > 0 ? 0 : -1,\n action: 'open',\n preventDefault: true,\n };\n }\n\n if (focusedIndex < 0) {\n return { isOpen, focusedIndex, action: 'none', preventDefault: true };\n }\n\n const isActionRow = includeActionRow && focusedIndex === optionCount;\n return {\n isOpen,\n focusedIndex,\n action: isActionRow ? 'selectAction' : 'selectFocused',\n preventDefault: true,\n };\n};\n\nexport const getComboboxOptionId = (baseId: string, optionIndex: number): string => `${baseId}-option-${optionIndex}`;\n\nexport const createAsyncComboboxState = <TOption>(initialOptions: TOption[] = []): AsyncComboboxState<TOption> => ({\n options: initialOptions,\n isLoading: false,\n error: null,\n latestRequestId: 0,\n});\n\nexport const startAsyncComboboxRequest = <TOption>(\n state: AsyncComboboxState<TOption>\n): { requestId: number; nextState: AsyncComboboxState<TOption> } => {\n const requestId = state.latestRequestId + 1;\n return {\n requestId,\n nextState: {\n ...state,\n isLoading: true,\n error: null,\n latestRequestId: requestId,\n },\n };\n};\n\nexport const resolveAsyncComboboxRequest = <TOption>(\n state: AsyncComboboxState<TOption>,\n requestId: number,\n options: TOption[]\n): AsyncComboboxState<TOption> => {\n if (requestId !== state.latestRequestId) {\n return state;\n }\n\n return {\n ...state,\n options,\n isLoading: false,\n error: null,\n };\n};\n\nexport const rejectAsyncComboboxRequest = <TOption>(\n state: AsyncComboboxState<TOption>,\n requestId: number,\n errorMessage: string\n): AsyncComboboxState<TOption> => {\n if (requestId !== state.latestRequestId) {\n return state;\n }\n\n return {\n ...state,\n options: [],\n isLoading: false,\n error: errorMessage,\n };\n};\n\nexport const getComboboxViewState = ({\n isLoading,\n error,\n optionCount,\n}: {\n isLoading: boolean;\n error: string | null;\n optionCount: number;\n}): ComboboxViewState => {\n if (isLoading) {\n return 'loading';\n }\n if (error) {\n return 'error';\n }\n if (optionCount === 0) {\n return 'empty';\n }\n return 'ready';\n};\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\nimport { Icon } from './icon';\n\nexport enum CollectionMode {\n BASIC,\n LINKS,\n AVATAR,\n}\n\nexport interface CollectionItem {\n /** If available, will be used as the key, so all items need an id. */\n id?: string | number;\n /** Title of the collection item */\n title: string | Vnode<any, any>;\n /** For links, may contain a URL reference */\n href?: string;\n /** For Avatar mode, may contain a URL reference to an image or a material icons class name */\n avatar?: string;\n /** Add a class to the avatar image or icon, e.g. a color 'red'. */\n className?: string;\n /** For Avatar mode, may contain a two-line trusted HTML content, or a Vnode for rich content */\n content?: string | Vnode<any, any>;\n /** If active, preselect the collection item. */\n active?: boolean;\n /** Add a material icon as secondary content. */\n iconName?: string;\n /** Onclick event handler */\n onclick?: (item: CollectionItem) => void;\n /** Any other virtual element properties, including attributes and event handlers. */\n [property: string]: any;\n}\n\nexport interface CollectionAttrs extends Attributes {\n /** Optional header */\n header?: string;\n /** The list of items */\n items: CollectionItem[];\n /** Mode of operation */\n mode?: CollectionMode;\n}\n\nconst isNonLocalRoute = (url?: string) => url && /https?:\\/\\//.test(url);\n\nexport const SecondaryContent: FactoryComponent<CollectionItem> = () => {\n return {\n view: ({ attrs }) => {\n const { href, iconName = 'send', onclick, style = { cursor: 'pointer' } } = attrs;\n const props = {\n href,\n style,\n className: 'secondary-content',\n onclick: onclick ? () => onclick(attrs) : undefined,\n };\n return isNonLocalRoute(href) || !href\n ? m('a[target=_]', props, m(Icon, { iconName }))\n : m(m.route.Link, props as { href: string }, m(Icon, { iconName }));\n },\n };\n};\n\nconst avatarIsImage = (avatar = '') => /\\./.test(avatar);\n\nexport const ListItem: FactoryComponent<{ item: CollectionItem; mode: CollectionMode }> = () => {\n return {\n view: ({ attrs: { item, mode } }) => {\n const { title, content, active, iconName, avatar, className, onclick } = item;\n return mode === CollectionMode.AVATAR\n ? m(\n 'li.collection-item.avatar',\n {\n className: active ? 'active' : '',\n onclick: onclick ? () => onclick(item) : undefined,\n },\n [\n avatarIsImage(avatar)\n ? m('img.circle', { src: avatar })\n : m('i.material-icons.circle', { className }, avatar),\n m('span.title', title),\n content ? (typeof content === 'string' ? m('p', m.trust(content)) : m('p', content)) : undefined,\n iconName ? m(SecondaryContent, item) : undefined,\n ].filter(Boolean)\n )\n : m(\n 'li.collection-item',\n {\n className: active ? 'active' : '',\n onclick: onclick ? () => onclick(item) : undefined,\n },\n content\n ? m(\n 'div',\n [\n m('div', title),\n typeof content === 'string' ? m('p.secondary-text', content) : content,\n iconName ? m(SecondaryContent, item) : undefined,\n ].filter(Boolean)\n )\n : iconName\n ? m('div', [title, m(SecondaryContent, item)])\n : title\n );\n },\n };\n};\n\nconst BasicCollection: FactoryComponent<CollectionAttrs> = () => {\n return {\n view: ({ attrs: { header, items, mode = CollectionMode.BASIC, ...params } }) => {\n const collectionItems = items.map((item) => m(ListItem, { key: item.id, item, mode }));\n return header\n ? m('ul.collection.with-header', params, [m('li.collection-header', m('h4', header)), collectionItems])\n : m('ul.collection', params, collectionItems);\n },\n };\n};\n\nexport const AnchorItem: FactoryComponent<{ item: CollectionItem }> = () => {\n return {\n view: ({ attrs: { item } }) => {\n const { title, active, href, ...params } = item;\n const props = {\n ...params,\n className: `collection-item ${active ? 'active' : ''}`,\n href,\n };\n return isNonLocalRoute(href) || !href\n ? m('a[target=_]', props, title)\n : m(m.route.Link, props as { href: string }, title);\n },\n };\n};\n\nconst LinksCollection: FactoryComponent<CollectionAttrs> = () => {\n return {\n view: ({ attrs: { items, header, ...params } }) => {\n return header\n ? m('.collection.with-header', params, [\n m('.collection-header', m('h4', header)),\n items.map((item) => m(AnchorItem, { key: item.id, item })),\n ])\n : m(\n '.collection',\n params,\n items.map((item) => m(AnchorItem, { key: item.id, item }))\n );\n },\n };\n};\n\n/**\n * Creates a Collection of items, optionally containing links, headers, secondary content or avatars.\n * @see https://materializecss.com/collections.html\n */\nexport const Collection: FactoryComponent<CollectionAttrs> = () => {\n return {\n view: ({ attrs: { items, header, mode = CollectionMode.BASIC, ...params } }) => {\n return header || (items && items.length > 0)\n ? mode === CollectionMode.LINKS\n ? m(LinksCollection, { header, items, ...params })\n : m(BasicCollection, { header, items, mode, ...params })\n : undefined;\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { InputAttrs } from './input-options';\nimport { range, uniqueId, renderToPortal, clearPortal } from './utils';\n\nexport interface DatePickerI18n {\n cancel?: string;\n clear?: string;\n done?: string;\n previousMonth?: string;\n nextMonth?: string;\n months?: string[];\n monthsShort?: string[];\n weekdays?: string[];\n weekdaysShort?: string[];\n weekdaysAbbrev?: string[];\n}\n\nconst defaultI18n: Required<DatePickerI18n> = {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok',\n previousMonth: '\\u2039',\n nextMonth: '\\u203a',\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysAbbrev: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n};\n\nexport interface DatePickerOptions {\n /** Close when date is selected */\n autoClose?: boolean;\n /** The default output format for the input field value */\n format?: string;\n /** Custom parse function */\n parse?: (dateString: string, format: string) => Date | null;\n /** The initial date to view when first opened */\n defaultDate?: Date;\n /** Make the defaultDate the initial selected value */\n setDefaultDate?: boolean;\n /** Disable weekends */\n disableWeekends?: boolean;\n /** Custom function to disable specific days */\n disableDayFn?: (date: Date) => boolean;\n /** First day of week (0: Sunday, 1: Monday etc) */\n firstDay?: number;\n /** The earliest date that can be selected */\n minDate?: Date;\n /** The latest date that can be selected */\n maxDate?: Date;\n /** Number of years either side, or array of upper/lower range */\n yearRange?: number | number[];\n /** Show clear button */\n showClearBtn?: boolean;\n /** Show week numbers */\n showWeekNumbers?: boolean;\n /** Week numbering system: 'iso' (ISO 8601) or 'local' (local convention) */\n weekNumbering?: 'iso' | 'local';\n /** Internationalization */\n i18n?: DatePickerI18n;\n /** Enable date range selection mode for selecting start and end dates */\n dateRange?: boolean;\n /** Initial start date for range selection */\n initialStartDate?: Date;\n /** Initial end date for range selection */\n initialEndDate?: Date;\n /** Minimum number of days between start and end dates */\n minDateRange?: number;\n /** Maximum number of days between start and end dates */\n maxDateRange?: number;\n /** Callback when date is selected (single date or range start/end) */\n onSelect?: (date: Date, endDate?: Date) => void;\n /** Callback when picker is opened */\n onOpen?: () => void;\n /** Callback when picker is closed */\n onClose?: () => void;\n}\n\nexport interface DatePickerAttrs extends InputAttrs<string>, DatePickerOptions {\n /** Date format attribute (alternative to format property) */\n format?: string;\n /** Year range attribute (alternative to yearRange property) */\n yearrange?: string;\n /** Legacy: Date label (use label instead) */\n dateLabel?: string;\n /** Legacy: Display format (use format instead) */\n displayFormat?: string;\n}\n\n// Utility functions based on Materialize CSS implementation\nconst isDate = (obj: any): obj is Date => {\n return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n};\n\nconst isWeekend = (date: Date): boolean => {\n const day = date.getDay();\n return day === 0 || day === 6;\n};\n\nconst setToStartOfDay = (date: Date): void => {\n if (isDate(date)) date.setHours(0, 0, 0, 0);\n};\n\nconst getDaysInMonth = (year: number, month: number): number => {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n};\n\nconst isLeapYear = (year: number): boolean => {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n};\n\nconst compareDates = (a: Date, b: Date): boolean => {\n return a.getTime() === b.getTime();\n};\n\n// Week number calculation utilities\nconst getWeekNumber = (date: Date, weekNumbering: 'iso' | 'local', firstDay: number): number => {\n if (weekNumbering === 'iso') {\n return getISOWeekNumber(date);\n } else {\n return getLocalWeekNumber(date, firstDay);\n }\n};\n\nconst getISOWeekNumber = (date: Date): number => {\n // ISO 8601 week numbering\n const tempDate = new Date(date.getTime());\n const dayNum = (date.getDay() + 6) % 7; // Make Monday = 0\n tempDate.setDate(tempDate.getDate() - dayNum + 3); // Thursday in target week\n const firstThursday = new Date(tempDate.getFullYear(), 0, 4); // First Thursday of year\n const firstThursdayDayNum = (firstThursday.getDay() + 6) % 7; // Make Monday = 0\n firstThursday.setDate(firstThursday.getDate() - firstThursdayDayNum + 3);\n return Math.ceil((tempDate.getTime() - firstThursday.getTime()) / (7 * 24 * 60 * 60 * 1000)) + 1;\n};\n\nconst getLocalWeekNumber = (date: Date, firstDay: number): number => {\n // Local week numbering based on firstDay setting\n const tempDate = new Date(date.getFullYear(), 0, 1);\n const firstDayOfYear = tempDate.getDay();\n\n // Calculate days from first day of year to the start of first week\n let daysToFirstWeek = (firstDay - firstDayOfYear + 7) % 7;\n if (daysToFirstWeek === 0 && firstDayOfYear !== firstDay) {\n daysToFirstWeek = 7;\n }\n\n const firstWeekStart = new Date(tempDate.getTime());\n firstWeekStart.setDate(1 + daysToFirstWeek);\n\n if (date < firstWeekStart) {\n // Date is in the last week of previous year\n return getLocalWeekNumber(new Date(date.getFullYear() - 1, 11, 31), firstDay);\n }\n\n const daysDiff = Math.floor((date.getTime() - firstWeekStart.getTime()) / (24 * 60 * 60 * 1000));\n return Math.floor(daysDiff / 7) + 1;\n};\n\ninterface Calendar {\n month: number;\n year: number;\n}\n\ninterface DatePickerState {\n id: string;\n isOpen: boolean;\n date: Date | null;\n startDate: Date | null;\n endDate: Date | null;\n selectionMode: 'start' | 'end' | null;\n isSelectingRange: boolean;\n calendars: Calendar[];\n formats: { [key: string]: () => string | number };\n monthDropdownOpen: boolean;\n yearDropdownOpen: boolean;\n portalContainerId: string;\n}\n\n/**\n * Enhanced DatePicker component based on Materialize CSS datepicker\n */\nexport const DatePicker: FactoryComponent<DatePickerAttrs> = () => {\n let state: DatePickerState;\n\n const mergeOptions = (attrs: DatePickerAttrs): Required<DatePickerOptions> => {\n // Handle HTML attributes\n let yearRange: number | number[] = 10;\n if (attrs.yearrange) {\n const parts = attrs.yearrange.split(',');\n if (parts.length === 2) {\n yearRange = [parseInt(parts[0], 10), parseInt(parts[1], 10)];\n }\n } else if (attrs.yearRange) {\n yearRange = attrs.yearRange;\n }\n\n // Handle format - priority: format attribute > displayFormat > default\n let finalFormat = 'mmm dd, yyyy';\n if (attrs.format) {\n finalFormat = attrs.format;\n } else if (attrs.displayFormat) {\n finalFormat = attrs.displayFormat;\n }\n\n const merged = {\n autoClose: false,\n format: finalFormat,\n parse: null,\n defaultDate: null,\n setDefaultDate: false,\n disableWeekends: false,\n disableDayFn: null,\n firstDay: 0,\n minDate: null,\n maxDate: null,\n yearRange,\n showClearBtn: false,\n showWeekNumbers: false,\n weekNumbering: 'iso' as const,\n i18n: defaultI18n,\n onSelect: null,\n onOpen: null,\n onClose: null,\n ...attrs,\n };\n\n // Merge i18n properly\n merged.i18n = { ...defaultI18n, ...attrs.i18n };\n\n return merged as Required<DatePickerOptions>;\n };\n\n const toString = (date: Date | null, format: string): string => {\n if (!date || !isDate(date)) {\n return '';\n }\n\n // Split format into tokens - match longer patterns first\n const formatTokens = /(dddd|ddd|dd|d|mmmm|mmm|mm|m|yyyy|yy)/g;\n let result = format;\n\n // Replace all format tokens with actual values\n result = result.replace(formatTokens, (match) => {\n if (state.formats[match]) {\n return String(state.formats[match]());\n }\n return match;\n });\n\n return result;\n };\n\n // New function to format any specific date (not just state.date)\n const formatDate = (date: Date | null, format: string, options: Required<DatePickerOptions>): string => {\n if (!date || !isDate(date)) {\n return '';\n }\n\n // Split format into tokens - match longer patterns first\n const formatTokens = /(dddd|ddd|dd|d|mmmm|mmm|mm|m|yyyy|yy)/g;\n let result = format;\n\n // Create temporary formats for the specific date\n const dateFormats = {\n d: () => date.getDate(),\n dd: () => {\n const d = date.getDate();\n return (d < 10 ? '0' : '') + d;\n },\n ddd: () => options.i18n.weekdaysShort![date.getDay()],\n dddd: () => options.i18n.weekdays![date.getDay()],\n m: () => date.getMonth() + 1,\n mm: () => {\n const m = date.getMonth() + 1;\n return (m < 10 ? '0' : '') + m;\n },\n mmm: () => options.i18n.monthsShort![date.getMonth()],\n mmmm: () => options.i18n.months![date.getMonth()],\n yy: () => ('' + date.getFullYear()).slice(2),\n yyyy: () => date.getFullYear(),\n };\n\n // Replace all format tokens with actual values\n result = result.replace(formatTokens, (match) => {\n if (dateFormats[match as keyof typeof dateFormats]) {\n return String(dateFormats[match as keyof typeof dateFormats]());\n }\n return match;\n });\n\n return result;\n };\n\n const setDate = (date: Date | null, preventOnSelect: boolean = false, options: Required<DatePickerOptions>) => {\n if (!date) {\n state.date = null;\n return;\n }\n\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n\n if (!isDate(date)) {\n return;\n }\n\n const min = options.minDate;\n const max = options.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n state.date = new Date(date.getTime());\n setToStartOfDay(state.date);\n gotoDate(state.date);\n\n if (!preventOnSelect && options.onSelect) {\n options.onSelect(state.date);\n }\n };\n\n const handleRangeSelection = (date: Date, options: Required<DatePickerOptions>) => {\n setToStartOfDay(date);\n\n // First click or reset - set start date\n if (!state.startDate || (state.startDate && state.endDate)) {\n state.startDate = new Date(date.getTime());\n state.endDate = null;\n state.selectionMode = 'end';\n state.isSelectingRange = true;\n }\n // Second click - set end date\n else if (state.startDate && !state.endDate) {\n // Ensure proper order (start <= end)\n if (date < state.startDate) {\n state.endDate = new Date(state.startDate.getTime());\n state.startDate = new Date(date.getTime());\n } else {\n state.endDate = new Date(date.getTime());\n }\n\n // Validate range constraints\n if (options.minDateRange || options.maxDateRange) {\n const daysDiff = Math.ceil((state.endDate.getTime() - state.startDate.getTime()) / (1000 * 60 * 60 * 24));\n\n if (options.minDateRange && daysDiff < options.minDateRange) {\n // Range too short, reset\n state.startDate = new Date(date.getTime());\n state.endDate = null;\n state.selectionMode = 'end';\n return;\n }\n\n if (options.maxDateRange && daysDiff > options.maxDateRange) {\n // Range too long, reset\n state.startDate = new Date(date.getTime());\n state.endDate = null;\n state.selectionMode = 'end';\n return;\n }\n }\n\n state.selectionMode = null;\n state.isSelectingRange = false;\n\n // Call onSelect with both dates\n if (options.onSelect) {\n options.onSelect(state.startDate, state.endDate);\n }\n\n // Auto-close if enabled\n if (options.autoClose) {\n state.isOpen = false;\n }\n }\n };\n\n const gotoDate = (date: Date) => {\n if (!isDate(date)) {\n return;\n }\n\n state.calendars = [\n {\n month: date.getMonth(),\n year: date.getFullYear(),\n },\n ];\n };\n\n const nextMonth = () => {\n state.calendars[0].month++;\n adjustCalendars();\n };\n\n const prevMonth = () => {\n state.calendars[0].month--;\n adjustCalendars();\n };\n\n const adjustCalendars = () => {\n state.calendars[0] = adjustCalendar(state.calendars[0]);\n };\n\n const adjustCalendar = (calendar: Calendar): Calendar => {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month) / 12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month) / 12);\n calendar.month -= 12;\n }\n return calendar;\n };\n\n interface DayAttrs {\n opts: any;\n options: Required<DatePickerOptions>;\n }\n\n const Day: FactoryComponent<DayAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const { opts, options } = attrs;\n const arr = [];\n let ariaSelected = 'false';\n\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n arr.push('is-selection-disabled');\n } else {\n return m('td.is-empty');\n }\n }\n\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n\n if (opts.isToday) {\n arr.push('is-today');\n }\n\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n\n // Range selection states\n if (opts.isRangeStart) {\n arr.push('is-range-start');\n ariaSelected = 'true';\n }\n\n if (opts.isRangeEnd) {\n arr.push('is-range-end');\n ariaSelected = 'true';\n }\n\n if (opts.isInRange) {\n arr.push('is-in-range');\n }\n\n if (opts.isRangePreview) {\n arr.push('is-range-preview');\n }\n\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n\n return m(\n 'td',\n {\n 'data-day': opts.day,\n class: arr.join(' '),\n 'aria-selected': ariaSelected,\n },\n [\n m(\n 'button.datepicker-day-button',\n {\n type: 'button',\n 'data-year': opts.year,\n 'data-month': opts.month,\n 'data-day': opts.day,\n onclick: (e: Event) => {\n const target = e.target as HTMLElement;\n if (!opts.isDisabled) {\n const year = parseInt(target.getAttribute('data-year') || '0', 10);\n const month = parseInt(target.getAttribute('data-month') || '0', 10);\n const day = parseInt(target.getAttribute('data-day') || '0', 10);\n const selectedDate = new Date(year, month, day);\n\n if (options.dateRange) {\n handleRangeSelection(selectedDate, options);\n } else {\n setDate(selectedDate, false, options);\n if (options.autoClose) {\n state.isOpen = false;\n }\n }\n }\n },\n },\n opts.day\n ),\n ]\n );\n },\n };\n };\n\n interface CalendarAttrs {\n year: number;\n month: number;\n options: Required<DatePickerOptions>;\n randId?: string;\n }\n\n const Calendar: FactoryComponent<CalendarAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const { year, month, options, randId } = attrs;\n const now = new Date();\n const days = getDaysInMonth(year, month);\n let before = new Date(year, month, 1).getDay();\n const data: any[] = [];\n let row: any[] = [];\n\n setToStartOfDay(now);\n\n if (options.firstDay > 0) {\n before -= options.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n\n const previousMonth = month === 0 ? 11 : month - 1;\n const nextMonth = month === 11 ? 0 : month + 1;\n const yearOfPreviousMonth = month === 0 ? year - 1 : year;\n const yearOfNextMonth = month === 11 ? year + 1 : year;\n const daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n\n let cells = days + before;\n let after = cells;\n while (after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n\n for (let i = 0, r = 0; i < cells; i++) {\n const day = new Date(year, month, 1 + (i - before));\n const isSelected = isDate(state.date) ? compareDates(day, state.date) : false;\n const isToday = compareDates(day, now);\n const isEmpty = i < before || i >= days + before;\n let dayNumber = 1 + (i - before);\n let monthNumber = month;\n let yearNumber = year;\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n const isDisabled =\n (options.minDate && day < options.minDate) ||\n (options.maxDate && day > options.maxDate) ||\n (options.disableWeekends && isWeekend(day)) ||\n (options.disableDayFn && options.disableDayFn(day));\n\n // Range selection states\n let isRangeStart = false;\n let isRangeEnd = false;\n let isInRange = false;\n let isRangePreview = false;\n\n if (options.dateRange) {\n if (state.startDate && compareDates(day, state.startDate)) {\n isRangeStart = true;\n }\n if (state.endDate && compareDates(day, state.endDate)) {\n isRangeEnd = true;\n }\n if (state.startDate && state.endDate && day > state.startDate && day < state.endDate) {\n isInRange = true;\n }\n // TODO: Add hover preview logic for range selection\n }\n\n const dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: false,\n isSelected: !options.dateRange && isSelected, // Only use isSelected in single date mode\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n showDaysInNextAndPreviousMonths: false,\n isRangeStart: isRangeStart,\n isRangeEnd: isRangeEnd,\n isInRange: isInRange,\n isRangePreview: isRangePreview,\n };\n\n // Add week number cell at the beginning of each row\n if (r === 0 && options.showWeekNumbers) {\n const weekDate = new Date(yearNumber, monthNumber, dayNumber);\n const weekNum = getWeekNumber(weekDate, options.weekNumbering, options.firstDay);\n row.push(\n m(\n 'td.datepicker-week-number',\n {\n title: `Week ${weekNum}`,\n },\n weekNum\n )\n );\n }\n\n row.push(m(Day, { opts: dayConfig, options }));\n\n if (++r === 7) {\n data.push(m('tr.datepicker-row', row));\n row = [];\n r = 0;\n }\n }\n\n const weekdayHeaders = [];\n\n // Add week number header if enabled\n if (options.showWeekNumbers) {\n weekdayHeaders.push(m('th.datepicker-week-header', { scope: 'col', title: 'Week' }, 'Wk'));\n }\n\n for (let i = 0; i < 7; i++) {\n let day = i + options.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n weekdayHeaders.push(\n m('th', { scope: 'col' }, [\n m('abbr', { title: options.i18n.weekdays![day] }, options.i18n.weekdaysAbbrev![day]),\n ])\n );\n }\n\n return m('.datepicker-table-wrapper', [\n m(\n 'table.datepicker-table',\n {\n cellpadding: '0',\n cellspacing: '0',\n role: 'grid',\n 'aria-labelledby': randId || 'datepicker-controls',\n class: options.showWeekNumbers ? 'with-week-numbers' : '',\n },\n [m('thead', [m('tr', weekdayHeaders)]), m('tbody', data)]\n ),\n ]);\n },\n };\n };\n\n interface DateDisplayAttrs {\n options: Required<DatePickerOptions>;\n }\n\n const DateDisplay: FactoryComponent<DateDisplayAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const { options } = attrs;\n\n if (options.dateRange) {\n // Range display\n const startDate = state.startDate;\n const endDate = state.endDate;\n\n if (startDate && endDate) {\n // Both dates selected\n const startDay = options.i18n.weekdaysShort![startDate.getDay()];\n const startMonth = options.i18n.monthsShort![startDate.getMonth()];\n const endDay = options.i18n.weekdaysShort![endDate.getDay()];\n const endMonth = options.i18n.monthsShort![endDate.getMonth()];\n\n return m('.datepicker-date-display.range-display', [\n m('span.year-text', startDate.getFullYear()),\n m('span.date-text', [\n m('span.start-date', `${startDay}, ${startMonth} ${startDate.getDate()}`),\n m('span.range-separator', ' - '),\n m('span.end-date', `${endDay}, ${endMonth} ${endDate.getDate()}`),\n ]),\n ]);\n } else if (startDate) {\n // Only start date selected\n const startDay = options.i18n.weekdaysShort![startDate.getDay()];\n const startMonth = options.i18n.monthsShort![startDate.getMonth()];\n\n return m('.datepicker-date-display.range-display', [\n m('span.year-text', startDate.getFullYear()),\n m('span.date-text', [\n m('span.start-date', `${startDay}, ${startMonth} ${startDate.getDate()}`),\n m('span.range-separator', ' - '),\n m('span.end-date.placeholder', 'Select end date'),\n ]),\n ]);\n } else {\n // No dates selected\n const currentDate = new Date();\n return m('.datepicker-date-display.range-display', [\n m('span.year-text', currentDate.getFullYear()),\n m('span.date-text.placeholder', 'Select date range'),\n ]);\n }\n } else {\n // Single date display (original behavior)\n const displayDate = isDate(state.date) ? state.date : new Date();\n const day = options.i18n.weekdaysShort![displayDate.getDay()];\n const month = options.i18n.monthsShort![displayDate.getMonth()];\n const date = displayDate.getDate();\n\n return m('.datepicker-date-display', [\n m('span.year-text', displayDate.getFullYear()),\n m('span.date-text', `${day}, ${month} ${date}`),\n ]);\n }\n },\n };\n };\n\n interface DateControlsAttrs {\n options: Required<DatePickerOptions>;\n randId: string;\n }\n\n const DateControls: FactoryComponent<DateControlsAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const { options, randId } = attrs;\n const calendar = state.calendars[0];\n const year = calendar.year;\n const month = calendar.month;\n\n // Year range calculation\n let yearStart: number, yearEnd: number;\n if (Array.isArray(options.yearRange)) {\n yearStart = options.yearRange[0];\n yearEnd = options.yearRange[1];\n } else {\n yearStart = year - options.yearRange;\n yearEnd = year + options.yearRange;\n }\n\n return m(\n '.datepicker-controls',\n {\n id: randId,\n role: 'heading',\n 'aria-live': 'assertive',\n },\n [\n m(\n 'button.month-prev',\n {\n type: 'button',\n onclick: (e: Event) => {\n e.preventDefault();\n prevMonth();\n },\n },\n m(\n 'svg',\n {\n height: '24',\n viewBox: '0 0 24 24',\n width: '24',\n xmlns: 'http://www.w3.org/2000/svg',\n style: 'fill: var(--mm-text-primary, rgba(0, 0, 0, 0.87));',\n },\n [\n m('path', { d: 'M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z' }),\n m('path', { d: 'M0-.5h24v24H0z', fill: 'none' }),\n ]\n )\n ),\n\n m('.selects-container', [\n // Month select wrapper\n m('.select-wrapper.select-month', [\n m('input.select-dropdown.dropdown-trigger', {\n type: 'text',\n readonly: true,\n value: options.i18n.months![month],\n onclick: (e: Event) => {\n e.preventDefault();\n state.monthDropdownOpen = !state.monthDropdownOpen;\n state.yearDropdownOpen = false; // Close year dropdown\n },\n }),\n // Custom dropdown menu\n state.monthDropdownOpen &&\n m(\n '.dropdown-content',\n options.i18n.months!.map((monthName, index) =>\n m(\n '.dropdown-item',\n {\n key: index,\n class: index === month ? 'selected' : '',\n onclick: (e: Event) => {\n e.stopPropagation();\n gotoMonth(index);\n state.monthDropdownOpen = false;\n m.redraw();\n },\n },\n monthName\n )\n )\n ),\n ]),\n\n // Year select wrapper\n m('.select-wrapper.select-year', [\n m('input.select-dropdown.dropdown-trigger', {\n type: 'text',\n readonly: true,\n value: year.toString(),\n onclick: (e: Event) => {\n e.preventDefault();\n state.yearDropdownOpen = !state.yearDropdownOpen;\n state.monthDropdownOpen = false; // Close month dropdown\n },\n }),\n // Custom dropdown menu\n state.yearDropdownOpen &&\n m(\n '.dropdown-content',\n range(yearStart, yearEnd).map((i) =>\n m(\n '.dropdown-item',\n {\n key: i,\n class: i === year ? 'selected' : '',\n onclick: (e: Event) => {\n e.stopPropagation();\n gotoYear(i);\n state.yearDropdownOpen = false;\n m.redraw();\n },\n },\n i\n )\n )\n ),\n ]),\n ]),\n\n m(\n 'button.month-next',\n {\n type: 'button',\n onclick: (e: Event) => {\n e.preventDefault();\n nextMonth();\n },\n },\n m(\n 'svg',\n {\n height: '24',\n viewBox: '0 0 24 24',\n width: '24',\n xmlns: 'http://www.w3.org/2000/svg',\n style: 'fill: var(--mm-text-primary, rgba(0, 0, 0, 0.87));',\n },\n [\n m('path', { d: 'M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z' }),\n m('path', { d: 'M0-.25h24v24H0z', fill: 'none' }),\n ]\n )\n ),\n ]\n );\n },\n };\n };\n\n const gotoMonth = (month: number) => {\n if (!isNaN(month)) {\n state.calendars[0].month = month;\n adjustCalendars();\n\n // Update selected date if one exists\n if (state.date && isDate(state.date)) {\n const currentDay = state.date.getDate();\n const newYear = state.calendars[0].year;\n const daysInNewMonth = getDaysInMonth(newYear, month);\n\n // Adjust day if it doesn't exist in the new month (e.g., Jan 31 -> Feb 28)\n const adjustedDay = Math.min(currentDay, daysInNewMonth);\n const newDate = new Date(newYear, month, adjustedDay);\n\n state.date = newDate;\n setToStartOfDay(state.date);\n }\n }\n };\n\n const gotoYear = (year: number) => {\n if (!isNaN(year)) {\n state.calendars[0].year = year;\n adjustCalendars();\n\n // Update selected date if one exists\n if (state.date && isDate(state.date)) {\n const currentMonth = state.date.getMonth();\n const currentDay = state.date.getDate();\n const daysInNewMonth = getDaysInMonth(year, currentMonth);\n\n // Adjust day if it doesn't exist in the new year/month (e.g., leap year changes)\n const adjustedDay = Math.min(currentDay, daysInNewMonth);\n const newDate = new Date(year, currentMonth, adjustedDay);\n\n state.date = newDate;\n setToStartOfDay(state.date);\n }\n }\n };\n\n const handleDocumentClick = (e: Event) => {\n const target = e.target as HTMLElement;\n if (!target.closest('.select-wrapper') && !target.closest('.dropdown-content')) {\n state.monthDropdownOpen = false;\n state.yearDropdownOpen = false;\n }\n m.redraw();\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && state.isOpen) {\n state.isOpen = false;\n const options = mergeOptions({} as DatePickerAttrs);\n if (options.onClose) options.onClose();\n clearPortal(state.portalContainerId);\n m.redraw();\n }\n };\n\n const renderPickerToPortal = (attrs: DatePickerAttrs) => {\n const options = mergeOptions(attrs);\n\n const pickerModal = m(\n '.datepicker-modal-wrapper',\n {\n style: {\n position: 'fixed',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n },\n [\n // Modal overlay\n m('.modal-overlay', {\n style: {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: '1002',\n },\n onclick: () => {\n state.isOpen = false;\n if (options.onClose) options.onClose();\n m.redraw();\n },\n }),\n\n // Modal content\n m(\n '.modal.datepicker-modal.open',\n {\n id: `modal-${state.id}`,\n tabindex: 0,\n style: {\n position: 'relative',\n zIndex: '1003',\n display: 'block',\n opacity: 1,\n top: 'auto',\n transform: 'scaleX(1) scaleY(1)',\n margin: '0 auto',\n },\n },\n [\n m(\n '.modal-content.datepicker-container',\n {\n onclick: (e: Event) => {\n const target = e.target as HTMLElement;\n if (!target.closest('.select-wrapper') && !target.closest('.dropdown-content')) {\n state.monthDropdownOpen = false;\n state.yearDropdownOpen = false;\n }\n },\n },\n [\n m(DateDisplay, { options }),\n m('.datepicker-calendar-container', [\n m('.datepicker-calendar', [\n m(DateControls, {\n options,\n randId: `datepicker-title-${Math.random().toString(36).slice(2)}`,\n }),\n m(Calendar, {\n year: state.calendars[0].year,\n month: state.calendars[0].month,\n options,\n }),\n ]),\n m('.datepicker-footer', [\n options.showClearBtn &&\n m(\n 'button.btn-flat.datepicker-clear.waves-effect',\n {\n type: 'button',\n onclick: () => {\n setDate(null, false, options);\n state.isOpen = false;\n },\n },\n options.i18n.clear\n ),\n m(\n 'button.btn-flat.datepicker-cancel.waves-effect',\n {\n type: 'button',\n onclick: () => {\n state.isOpen = false;\n if (options.onClose) options.onClose();\n },\n },\n options.i18n.cancel\n ),\n m(\n 'button.btn-flat.datepicker-done.waves-effect',\n {\n type: 'button',\n onclick: () => {\n state.isOpen = false;\n\n if (options.dateRange) {\n if (state.startDate && state.endDate && attrs.onchange) {\n const startStr = formatDate(state.startDate, 'yyyy-mm-dd', options);\n const endStr = formatDate(state.endDate, 'yyyy-mm-dd', options);\n attrs.onchange(`${startStr} - ${endStr}`);\n }\n } else {\n if (state.date && attrs.onchange) {\n attrs.onchange(toString(state.date, 'yyyy-mm-dd'));\n }\n }\n\n if (options.onClose) options.onClose();\n },\n },\n options.i18n.done\n ),\n ]),\n ]),\n ]\n ),\n ]\n ),\n ]\n );\n\n renderToPortal(state.portalContainerId, pickerModal, 1004);\n };\n\n return {\n oninit: (vnode) => {\n const attrs = vnode.attrs;\n const options = mergeOptions(attrs);\n\n state = {\n id: uniqueId(),\n isOpen: false,\n date: null,\n startDate: null,\n endDate: null,\n selectionMode: null,\n isSelectingRange: false,\n calendars: [{ month: 0, year: 0 }],\n monthDropdownOpen: false,\n yearDropdownOpen: false,\n portalContainerId: `datepicker-portal-${uniqueId()}`,\n formats: {\n d: () => state.date?.getDate() || 0,\n dd: () => {\n const d = state.date?.getDate() || 0;\n return (d < 10 ? '0' : '') + d;\n },\n ddd: () => options.i18n.weekdaysShort![state.date?.getDay() || 0],\n dddd: () => options.i18n.weekdays![state.date?.getDay() || 0],\n m: () => (state.date?.getMonth() || 0) + 1,\n mm: () => {\n const m = (state.date?.getMonth() || 0) + 1;\n return (m < 10 ? '0' : '') + m;\n },\n mmm: () => options.i18n.monthsShort![state.date?.getMonth() || 0],\n mmmm: () => options.i18n.months![state.date?.getMonth() || 0],\n yy: () => ('' + (state.date?.getFullYear() || 0)).slice(2),\n yyyy: () => state.date?.getFullYear() || 0,\n },\n };\n\n // Initialize date or date range\n if (options.dateRange) {\n // Initialize range dates\n if (attrs.initialStartDate && isDate(attrs.initialStartDate)) {\n state.startDate = new Date(attrs.initialStartDate.getTime());\n setToStartOfDay(state.startDate);\n gotoDate(state.startDate);\n }\n\n if (attrs.initialEndDate && isDate(attrs.initialEndDate)) {\n state.endDate = new Date(attrs.initialEndDate.getTime());\n setToStartOfDay(state.endDate);\n }\n\n if (!state.startDate && !state.endDate) {\n gotoDate(new Date());\n }\n } else {\n // Single date initialization (original behavior)\n let defaultDate = attrs.defaultDate;\n if (!defaultDate && attrs.defaultValue) {\n defaultDate = new Date(attrs.defaultValue);\n }\n\n if (isDate(defaultDate)) {\n // Always set the date if we have value or defaultDate\n setDate(defaultDate, true, options);\n } else {\n gotoDate(new Date());\n }\n }\n\n // Add document click listener to close dropdowns\n document.addEventListener('click', handleDocumentClick);\n // Add ESC key listener\n document.addEventListener('keydown', handleKeyDown);\n },\n\n onremove: () => {\n // Clean up event listeners\n document.removeEventListener('click', handleDocumentClick);\n document.removeEventListener('keydown', handleKeyDown);\n\n // Clean up portal if picker was open\n if (state.isOpen) {\n clearPortal(state.portalContainerId);\n }\n },\n\n onupdate: (vnode) => {\n // Render to portal when picker is open, clear when closed\n if (state.isOpen) {\n renderPickerToPortal(vnode.attrs);\n } else {\n clearPortal(state.portalContainerId);\n }\n },\n\n view: (vnode) => {\n const attrs = vnode.attrs;\n const options = mergeOptions(attrs);\n const {\n id = state.id,\n label,\n dateLabel,\n placeholder,\n disabled,\n readonly,\n required,\n iconName,\n helperText,\n onchange,\n oninput,\n className: cn1,\n class: cn2,\n } = attrs;\n const className = cn1 || cn2 || 'col s12';\n\n // Calculate display value for the input\n let displayValue = '';\n\n if (options.dateRange) {\n // Handle date range display\n const formatToUse = attrs.displayFormat || options.format;\n\n if (state.startDate && state.endDate) {\n let startStr: string, endStr: string;\n\n if (attrs.displayFormat) {\n // Custom display format for date range\n startStr = attrs.displayFormat\n .replace(/yyyy/gi, state.startDate.getFullYear().toString())\n .replace(/mm/gi, (state.startDate.getMonth() + 1).toString().padStart(2, '0'))\n .replace(/dd/gi, state.startDate.getDate().toString().padStart(2, '0'));\n endStr = attrs.displayFormat\n .replace(/yyyy/gi, state.endDate.getFullYear().toString())\n .replace(/mm/gi, (state.endDate.getMonth() + 1).toString().padStart(2, '0'))\n .replace(/dd/gi, state.endDate.getDate().toString().padStart(2, '0'));\n } else {\n // Standard format\n startStr = formatDate(state.startDate, formatToUse, options);\n endStr = formatDate(state.endDate, formatToUse, options);\n }\n\n displayValue = `${startStr} - ${endStr}`;\n } else if (state.startDate) {\n let startStr: string;\n\n if (attrs.displayFormat) {\n // Custom display format for single date\n startStr = attrs.displayFormat\n .replace(/yyyy/gi, state.startDate.getFullYear().toString())\n .replace(/mm/gi, (state.startDate.getMonth() + 1).toString().padStart(2, '0'))\n .replace(/dd/gi, state.startDate.getDate().toString().padStart(2, '0'));\n } else {\n // Standard format\n startStr = formatDate(state.startDate, formatToUse, options);\n }\n\n displayValue = `${startStr} - `;\n }\n } else {\n // Single date display (original behavior)\n if (state.date) {\n displayValue = toString(state.date, options.format);\n }\n\n // Custom date format handling\n if (attrs.displayFormat) {\n // const formatRegex = /(yyyy|mm|dd)/gi;\n let customDisplayValue = attrs.displayFormat;\n if (state.date) {\n customDisplayValue = customDisplayValue\n .replace(/yyyy/gi, state.date.getFullYear().toString())\n .replace(/mm/gi, (state.date.getMonth() + 1).toString().padStart(2, '0'))\n .replace(/dd/gi, state.date.getDate().toString().padStart(2, '0'));\n displayValue = customDisplayValue;\n }\n }\n }\n\n return m(\n '.input-field',\n {\n className,\n },\n [\n // Icon prefix\n iconName && m('i.material-icons.prefix', iconName),\n\n // Date input field\n m('input.datepicker', {\n id,\n type: 'text',\n value: displayValue,\n placeholder,\n disabled,\n readonly,\n required,\n onclick: () => {\n if (!disabled && !readonly) {\n state.isOpen = true;\n if (options.onOpen) options.onOpen();\n }\n },\n oninput: (e: Event) => {\n if (oninput) {\n const target = e.target as HTMLInputElement;\n oninput(target.value);\n }\n },\n onchange: (e: Event) => {\n if (onchange) {\n const target = e.target as HTMLInputElement;\n // Try to parse the input value\n const date = new Date(target.value);\n if (isDate(date)) {\n setDate(date, false, options);\n onchange(toString(date, 'yyyy-mm-dd')); // Always return ISO format\n } else {\n onchange(target.value);\n }\n }\n },\n }),\n\n // Label\n (label || dateLabel) &&\n m(\n 'label',\n {\n for: id,\n class: displayValue || placeholder ? 'active' : '',\n },\n label || dateLabel\n ),\n // Helper text\n helperText && m('span.helper-text', helperText),\n // Modal is now rendered via portal in onupdate hook\n ]\n );\n },\n };\n};\n","import m from 'mithril';\nimport { InputAttrs } from './input-options';\nimport { Label, HelperText } from './label';\nimport { ComponentStyle } from './types';\n\n// Tooltip component for range sliders\nconst RangeTooltip = {\n view: ({ attrs: { show, position, value } }: { attrs: { value: number; position: string; show: boolean } }) => {\n return show ? m(`.value-tooltip.${position}`, value.toFixed(0)) : null;\n },\n};\n\nconst DoubleRangeTooltip = {\n view: ({ attrs: { show, orientation, value } }: { attrs: { value: number; orientation: string; show: boolean } }) => {\n return show ? m(`.value.${orientation}`, value.toFixed(0)) : null;\n },\n};\n\n// Utility functions\nconst getPercentage = (value: number, min: number, max: number) => {\n return ((value - min) / (max - min)) * 100;\n};\n\nconst positionToValue = (\n e: MouseEvent,\n rect: DOMRect,\n min: number,\n max: number,\n step: number,\n vertical: boolean\n): number => {\n let percentage;\n\n if (vertical) {\n percentage = ((rect.bottom - e.clientY) / rect.height) * 100;\n } else {\n percentage = ((e.clientX - rect.left) / rect.width) * 100;\n }\n\n percentage = Math.max(0, Math.min(100, percentage));\n const value = min + (percentage / 100) * (max - min);\n return Math.round(value / step) * step;\n};\n\nconst handleKeyboardNavigation = (\n key: string,\n currentValue: number,\n min: number,\n max: number,\n step: number\n): number | null => {\n const largeStep = step * 10;\n\n switch (key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n return Math.max(min, currentValue - step);\n case 'ArrowRight':\n case 'ArrowUp':\n return Math.min(max, currentValue + step);\n case 'PageDown':\n return Math.max(min, currentValue - largeStep);\n case 'PageUp':\n return Math.min(max, currentValue + largeStep);\n case 'Home':\n return min;\n case 'End':\n return max;\n default:\n return null;\n }\n};\n\nconst isControlled = (attrs: any) => {\n return attrs.value !== undefined && typeof attrs.oninput === 'function';\n};\n\nconst isRangeControlled = (attrs: any) => {\n return (attrs.minValue !== undefined || attrs.maxValue !== undefined) && typeof attrs.oninput === 'function';\n};\n\nconst initRangeState = (state: any, attrs: any) => {\n const { min = 0, max = 100, value, minValue, maxValue, defaultValue } = attrs;\n\n // Initialize single range value\n if (isControlled(attrs)) {\n // Always use value from props in controlled mode\n state.singleValue = value !== undefined ? value : min;\n } else {\n // Use internal state for uncontrolled mode\n if (state.singleValue === undefined) {\n state.singleValue = defaultValue !== undefined ? defaultValue : value !== undefined ? value : min;\n }\n // Only update internal state if props changed and user hasn't interacted\n if (state.lastValue !== value && !state.hasUserInteracted && value !== undefined) {\n state.singleValue = value;\n state.lastValue = value;\n }\n }\n\n // Initialize range values\n if (isRangeControlled(attrs)) {\n // Always use values from props in controlled mode\n state.rangeMinValue = minValue !== undefined ? minValue : min;\n state.rangeMaxValue = maxValue !== undefined ? maxValue : max;\n } else {\n // Use internal state for uncontrolled mode\n const currentMinValue = minValue !== undefined ? minValue : min;\n const currentMaxValue = maxValue !== undefined ? maxValue : max;\n\n if (state.rangeMinValue === undefined || state.rangeMaxValue === undefined) {\n state.rangeMinValue = currentMinValue;\n state.rangeMaxValue = currentMaxValue;\n }\n\n if (\n !state.hasUserInteracted &&\n ((minValue !== undefined && state.lastMinValue !== minValue) ||\n (maxValue !== undefined && state.lastMaxValue !== maxValue))\n ) {\n state.rangeMinValue = currentMinValue;\n state.rangeMaxValue = currentMaxValue;\n state.lastMinValue = minValue;\n state.lastMaxValue = maxValue;\n }\n }\n\n // Initialize active thumb if not set\n if (state.activeThumb === null) {\n state.activeThumb = 'min';\n }\n\n // Initialize dragging state\n if (state.isDragging === undefined) {\n state.isDragging = false;\n }\n};\n\nconst updateRangeValues = <T>(\n minValue: number,\n maxValue: number,\n attrs: InputAttrs<T>,\n state: any,\n immediate: boolean\n) => {\n // Ensure min doesn't exceed max and vice versa\n if (minValue > maxValue) minValue = maxValue;\n if (maxValue < minValue) maxValue = minValue;\n\n // Only update internal state for uncontrolled mode\n if (!isRangeControlled(attrs)) {\n state.rangeMinValue = minValue;\n state.rangeMaxValue = maxValue;\n }\n\n state.hasUserInteracted = true;\n\n // Call appropriate handler based on interaction type, not control mode\n if (immediate && attrs.oninput) {\n attrs.oninput(minValue as T, maxValue as T); // Immediate feedback during drag\n }\n\n if (!immediate && attrs.onchange) {\n attrs.onchange(minValue as T, maxValue as T); // Final value on interaction end (blur/mouseup)\n }\n};\n\n// Single Range Slider Component\nexport const SingleRangeSlider = {\n oninit({ state }: { state: any }) {\n if (!state.componentInitialized) {\n state.componentInitialized = true;\n }\n },\n\n onremove({ state }: { state: any }) {\n if (state.cleanupMouseEvents) {\n state.cleanupMouseEvents();\n state.cleanupMouseEvents = null;\n }\n },\n\n view({\n attrs,\n state,\n }: {\n attrs: InputAttrs<any> & {\n cn?: string;\n style?: ComponentStyle;\n iconName?: string;\n id: string;\n label?: string;\n isMandatory?: boolean;\n helperText?: string;\n };\n state: any;\n }) {\n const {\n cn,\n style,\n iconName,\n id,\n label,\n isMandatory,\n helperText,\n min = 0,\n max = 100,\n step = 1,\n vertical = false,\n showValue = false,\n valueDisplay,\n height = '200px',\n disabled = false,\n tooltipPos = 'top',\n oninput,\n onchange,\n } = attrs;\n\n // Apply fallback logic for valueDisplay if not explicitly set\n const finalValueDisplay = valueDisplay || (showValue ? 'always' : 'none');\n\n // Initialize state\n initRangeState(state, attrs);\n\n const percentage = getPercentage(state.singleValue as number, min, max);\n const containerStyle = vertical ? { height } : {};\n const orientation = vertical ? 'vertical' : 'horizontal';\n\n const progressStyle = vertical ? { height: `${percentage}%` } : { width: `${percentage}%` };\n\n const thumbStyle = vertical ? { bottom: `${percentage}%` } : { left: `${percentage}%` };\n\n // Determine tooltip position for vertical sliders\n const tooltipPosition = vertical\n ? tooltipPos === 'top' || tooltipPos === 'bottom'\n ? 'right'\n : tooltipPos\n : tooltipPos;\n\n const updateSingleValue = (newValue: number, immediate = false) => {\n // Only update internal state for uncontrolled mode\n if (!isControlled(attrs)) {\n state.singleValue = newValue;\n }\n\n state.hasUserInteracted = true;\n\n // Call appropriate handler based on interaction type, not control mode\n if (immediate && oninput) {\n oninput(newValue); // Immediate feedback during drag\n }\n\n if (!immediate && onchange) {\n onchange(newValue); // Final value on interaction end (blur/mouseup)\n }\n };\n\n const handleMouseDown = (e: MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n state.isDragging = true;\n\n if (finalValueDisplay === 'auto') {\n m.redraw();\n }\n\n const thumbElement = e.currentTarget as HTMLElement;\n const container = thumbElement.parentElement;\n if (!container) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!state.isDragging || !container) return;\n const rect = container.getBoundingClientRect();\n const value = positionToValue(e, rect, min, max, step, vertical);\n updateSingleValue(value, true);\n m.redraw();\n };\n\n const handleMouseUp = () => {\n state.isDragging = false;\n if (state.cleanupMouseEvents) {\n state.cleanupMouseEvents();\n state.cleanupMouseEvents = null;\n }\n updateSingleValue(state.singleValue as number, false);\n m.redraw();\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n state.cleanupMouseEvents = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n };\n\n const fieldClass = vertical ? 'range-field vertical' : 'range-field';\n\n return m('.input-field', { className: cn, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : undefined,\n m('input[type=range]', {\n id,\n value: state.singleValue,\n min,\n max,\n step,\n style: { display: 'none' },\n disabled,\n tabindex: -1,\n }),\n m('div', { class: fieldClass, style: containerStyle }, [\n m(\n `.single-range-slider.${orientation}`,\n {\n tabindex: disabled ? -1 : 0,\n role: 'slider',\n 'aria-valuemin': min,\n 'aria-valuemax': max,\n 'aria-valuenow': state.singleValue,\n 'aria-label': label || 'Range slider',\n onclick: (e: MouseEvent) => {\n if (disabled) return;\n const container = e.currentTarget as HTMLElement;\n const rect = container.getBoundingClientRect();\n const value = positionToValue(e, rect, min, max, step, vertical);\n updateSingleValue(value, false);\n (e.currentTarget as HTMLElement).focus();\n },\n onkeydown: (e: KeyboardEvent) => {\n if (disabled) return;\n const currentValue = state.singleValue as number;\n const newValue = handleKeyboardNavigation(e.key, currentValue, min, max, step);\n if (newValue !== null) {\n e.preventDefault();\n updateSingleValue(newValue, false);\n }\n },\n onblur: () => {\n if (disabled || !onchange) return;\n onchange(state.singleValue as number);\n },\n },\n [\n m(`.track.${orientation}`),\n m(`.range-progress.${orientation}`, { style: progressStyle }),\n m(\n `.thumb.${orientation}`,\n { style: thumbStyle, onmousedown: handleMouseDown },\n m(RangeTooltip, {\n value: state.singleValue as number,\n position: tooltipPosition,\n show: finalValueDisplay === 'always' || (finalValueDisplay === 'auto' && state.isDragging),\n })\n ),\n ]\n ),\n ]),\n label ? m(Label, { label, id, isMandatory, isActive: true }) : null,\n helperText ? m(HelperText, { helperText }) : null,\n ]);\n },\n};\n\n// Double Range Slider Component\nexport const DoubleRangeSlider = {\n oninit({ state }: { state: any }) {\n if (!state.componentInitialized) {\n state.componentInitialized = true;\n }\n },\n\n onremove({ state }: { state: any }) {\n if (state.cleanupMouseEvents) {\n state.cleanupMouseEvents();\n state.cleanupMouseEvents = null;\n }\n },\n\n view({\n attrs,\n state,\n }: {\n attrs: InputAttrs<any> & {\n cn?: string;\n style?: ComponentStyle;\n iconName?: string;\n id: string;\n label?: string;\n isMandatory?: boolean;\n helperText?: string;\n };\n state: any;\n }) {\n const {\n cn,\n style,\n iconName,\n id,\n label,\n isMandatory,\n helperText,\n min = 0,\n max = 100,\n step = 1,\n vertical = false,\n showValue = false,\n valueDisplay,\n height = '200px',\n disabled = false,\n } = attrs;\n\n const finalValueDisplay = valueDisplay || (showValue ? 'always' : 'none');\n\n initRangeState(state, attrs);\n\n const minPercentage = getPercentage(state.rangeMinValue, min, max);\n const maxPercentage = getPercentage(state.rangeMaxValue, min, max);\n const containerStyle = vertical ? { height } : {};\n const orientation = vertical ? 'vertical' : 'horizontal';\n\n const rangeStyle = vertical\n ? {\n bottom: `${minPercentage}%`,\n height: `${maxPercentage - minPercentage}%`,\n }\n : {\n left: `${minPercentage}%`,\n width: `${maxPercentage - minPercentage}%`,\n };\n\n const createThumbStyle = (percentage: number, isActive: boolean) =>\n vertical\n ? {\n bottom: `${percentage}%`,\n zIndex: isActive ? 10 : 5,\n }\n : {\n left: `${percentage}%`,\n zIndex: isActive ? 10 : 5,\n };\n\n const handleMouseDown = (thumb: 'min' | 'max') => (e: MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n state.isDragging = true;\n state.activeThumb = thumb;\n\n if (finalValueDisplay === 'auto') {\n m.redraw();\n }\n\n const thumbElement = e.currentTarget as HTMLElement;\n const container = thumbElement.parentElement;\n if (!container) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!state.isDragging || !container) return;\n const rect = container.getBoundingClientRect();\n const steppedValue = positionToValue(e, rect, min, max, step, vertical);\n\n if (thumb === 'min') {\n updateRangeValues(Math.min(steppedValue, state.rangeMaxValue), state.rangeMaxValue, attrs, state, true);\n } else {\n updateRangeValues(state.rangeMinValue, Math.max(steppedValue, state.rangeMinValue), attrs, state, true);\n }\n m.redraw();\n };\n\n const handleMouseUp = () => {\n state.isDragging = false;\n state.activeThumb = null;\n if (state.cleanupMouseEvents) {\n state.cleanupMouseEvents();\n state.cleanupMouseEvents = null;\n }\n updateRangeValues(state.rangeMinValue, state.rangeMaxValue, attrs, state, false);\n m.redraw();\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n state.cleanupMouseEvents = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n };\n\n const fieldClass = vertical ? 'range-field vertical' : 'range-field';\n\n return m('.input-field', { className: cn, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : undefined,\n m('input[type=range]', {\n id,\n value: state.rangeMinValue,\n min,\n max,\n step,\n style: { display: 'none' },\n disabled,\n tabindex: -1,\n }),\n m('input[type=range]', {\n id: `${id}_max`,\n value: state.rangeMaxValue,\n min,\n max,\n step,\n style: { display: 'none' },\n disabled,\n tabindex: -1,\n }),\n m(`div`, { className: fieldClass }, [\n m(\n `.double-range-slider.${orientation}`,\n {\n style: containerStyle,\n onclick: (e: MouseEvent) => {\n if (disabled) return;\n const container = e.currentTarget as HTMLElement;\n const rect = container.getBoundingClientRect();\n const steppedValue = positionToValue(e, rect, min, max, step, vertical);\n\n const distToMin = Math.abs(steppedValue - state.rangeMinValue);\n const distToMax = Math.abs(steppedValue - state.rangeMaxValue);\n\n if (distToMin <= distToMax) {\n updateRangeValues(\n Math.min(steppedValue, state.rangeMaxValue),\n state.rangeMaxValue,\n attrs,\n state,\n false\n );\n state.activeThumb = 'min';\n const minThumb = container.querySelector('.thumb.min-thumb') as HTMLElement;\n if (minThumb) minThumb.focus();\n } else {\n updateRangeValues(\n state.rangeMinValue,\n Math.max(steppedValue, state.rangeMinValue),\n attrs,\n state,\n false\n );\n state.activeThumb = 'max';\n const maxThumb = container.querySelector('.thumb.max-thumb') as HTMLElement;\n if (maxThumb) maxThumb.focus();\n }\n },\n onblur: () => {\n if (disabled || !attrs.onchange) return;\n attrs.onchange(state.rangeMinValue, state.rangeMaxValue);\n },\n },\n [\n m(`.track.${orientation}`),\n m(`.range.${orientation}`, { style: rangeStyle }),\n // Min thumb\n m(\n `.thumb.${orientation}.min-thumb${state.activeThumb === 'min' ? '.active' : ''}`,\n {\n style: createThumbStyle(minPercentage, state.activeThumb === 'min'),\n tabindex: disabled ? -1 : 0,\n role: 'slider',\n 'aria-valuemin': min,\n 'aria-valuemax': state.rangeMaxValue,\n 'aria-valuenow': state.rangeMinValue,\n 'aria-label': `Minimum value: ${state.rangeMinValue}`,\n 'aria-orientation': vertical ? 'vertical' : 'horizontal',\n onmousedown: handleMouseDown('min'),\n onclick: (e: MouseEvent) => {\n e.stopPropagation();\n state.activeThumb = 'min';\n (e.currentTarget as HTMLElement).focus();\n },\n onfocus: () => {\n state.activeThumb = 'min';\n },\n onkeydown: (e: KeyboardEvent) => {\n if (disabled) return;\n const currentValue = state.rangeMinValue;\n const newValue = handleKeyboardNavigation(e.key, currentValue, min, max, step);\n if (newValue !== null) {\n e.preventDefault();\n const constrainedValue = Math.min(newValue, state.rangeMaxValue);\n updateRangeValues(constrainedValue, state.rangeMaxValue, attrs, state, false);\n }\n },\n },\n m(DoubleRangeTooltip, {\n value: state.rangeMinValue,\n orientation,\n show:\n finalValueDisplay === 'always' ||\n (finalValueDisplay === 'auto' && state.isDragging && state.activeThumb === 'min'),\n })\n ),\n // Max thumb\n m(\n `.thumb.${orientation}.max-thumb${state.activeThumb === 'max' ? '.active' : ''}`,\n {\n style: createThumbStyle(maxPercentage, state.activeThumb === 'max'),\n tabindex: disabled ? -1 : 0,\n role: 'slider',\n 'aria-valuemin': state.rangeMinValue,\n 'aria-valuemax': max,\n 'aria-valuenow': state.rangeMaxValue,\n 'aria-label': `Maximum value: ${state.rangeMaxValue}`,\n 'aria-orientation': vertical ? 'vertical' : 'horizontal',\n onmousedown: handleMouseDown('max'),\n onclick: (e: MouseEvent) => {\n e.stopPropagation();\n state.activeThumb = 'max';\n (e.currentTarget as HTMLElement).focus();\n },\n onfocus: () => {\n state.activeThumb = 'max';\n },\n onkeydown: (e: KeyboardEvent) => {\n if (disabled) return;\n const currentValue = state.rangeMaxValue;\n const newValue = handleKeyboardNavigation(e.key, currentValue, min, max, step);\n if (newValue !== null) {\n e.preventDefault();\n const constrainedValue = Math.max(newValue, state.rangeMinValue);\n updateRangeValues(state.rangeMinValue, constrainedValue, attrs, state, false);\n }\n },\n },\n m(DoubleRangeTooltip, {\n value: state.rangeMaxValue,\n orientation,\n show:\n finalValueDisplay === 'always' ||\n (finalValueDisplay === 'auto' && state.isDragging && state.activeThumb === 'max'),\n })\n ),\n ]\n ),\n ]),\n label ? m(Label, { label, id, isMandatory, isActive: true }) : null,\n helperText ? m(HelperText, { helperText }) : null,\n ]);\n },\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\nimport { InputAttrs } from './input-options';\nimport { MaterialIcon } from './material-icon';\nimport { InputType } from './types';\nimport { DoubleRangeSlider, SingleRangeSlider } from './range-slider';\nimport { renderFieldChrome } from './utils';\n\nconst isReadonly = <T>(attrs: InputAttrs<T>): boolean => {\n const legacyReadonly = (attrs as InputAttrs<T> & { readonly?: boolean }).readonly;\n return Boolean(attrs.readOnly || legacyReadonly);\n};\n\n/** Character counter component that tracks text length against maxLength */\nexport const CharacterCounter: FactoryComponent<{ currentLength: number; maxLength: number; show: boolean }> = () => {\n return {\n view: ({ attrs }) => {\n const { currentLength, maxLength, show } = attrs;\n if (!show) return null;\n\n const isOverLimit = currentLength > maxLength;\n return m(\n 'span.character-counter',\n {\n style: {\n color: isOverLimit ? '#F44336' : '#9e9e9e',\n },\n },\n `${currentLength}/${maxLength}`\n );\n },\n };\n};\n\n/** Create a TextArea */\nexport const TextArea: FactoryComponent<InputAttrs<string>> = () => {\n const state = {\n id: uniqueId(),\n currentLength: 0,\n hasInteracted: false,\n isValid: true,\n height: undefined as undefined | string,\n active: false,\n textarea: undefined as undefined | HTMLTextAreaElement,\n hiddenDiv: undefined as undefined | HTMLDivElement,\n internalValue: '',\n };\n\n let labelManager: { updateLabelState: () => void; cleanup: () => void } | null = null;\n\n const updateHeight = (textarea: HTMLTextAreaElement, hiddenDiv?: HTMLDivElement) => {\n if (!textarea || !hiddenDiv) return;\n\n // Copy font properties from textarea to hidden div\n const computedStyle = window.getComputedStyle(textarea);\n hiddenDiv.style.fontFamily = computedStyle.fontFamily;\n hiddenDiv.style.fontSize = computedStyle.fontSize;\n hiddenDiv.style.lineHeight = computedStyle.lineHeight;\n\n // Copy padding from textarea (important for accurate measurement)\n hiddenDiv.style.paddingTop = computedStyle.paddingTop;\n hiddenDiv.style.paddingRight = computedStyle.paddingRight;\n hiddenDiv.style.paddingBottom = computedStyle.paddingBottom;\n hiddenDiv.style.paddingLeft = computedStyle.paddingLeft;\n\n // Handle text wrapping\n if (textarea.getAttribute('wrap') === 'off') {\n hiddenDiv.style.overflowWrap = 'normal';\n hiddenDiv.style.whiteSpace = 'pre';\n } else {\n hiddenDiv.style.overflowWrap = 'break-word';\n hiddenDiv.style.whiteSpace = 'pre-wrap';\n }\n\n // Set content with extra newline for measurement\n hiddenDiv.textContent = textarea.value + '\\n';\n const content = hiddenDiv.innerHTML.replace(/\\n/g, '<br>');\n hiddenDiv.innerHTML = content;\n\n // Set width to match textarea\n if (textarea.offsetWidth > 0) {\n hiddenDiv.style.width = textarea.offsetWidth + 'px';\n } else {\n hiddenDiv.style.width = window.innerWidth / 2 + 'px';\n }\n\n // Get the original/natural height of the textarea\n const originalHeight = textarea.offsetHeight;\n const measuredHeight = hiddenDiv.offsetHeight;\n\n // Key logic: Only set custom height when content requires MORE space than original height\n // This matches the Materialize CSS reference behavior\n if (originalHeight <= measuredHeight) {\n state.height = measuredHeight + 'px';\n } else {\n // Single line content or content that fits in original height - let CSS handle it\n state.height = undefined;\n }\n };\n\n const isControlled = (attrs: InputAttrs<string>) =>\n attrs.value !== undefined && (attrs.oninput !== undefined || attrs.onchange !== undefined);\n\n return {\n oninit: ({ attrs }) => {\n const controlled = isControlled(attrs);\n const isNonInteractive = isReadonly(attrs) || attrs.disabled;\n\n // Warn developer for improper controlled usage\n if (attrs.value !== undefined && !controlled && !isNonInteractive) {\n console.warn(\n `TextArea received 'value' prop without 'oninput' or 'onchange' handler. ` +\n `Use 'defaultValue' for uncontrolled components or add an event handler for controlled components.`\n );\n }\n\n // Initialize internal value for uncontrolled mode\n if (!controlled) {\n state.internalValue = attrs.defaultValue || '';\n }\n },\n onremove: () => {\n if (labelManager) {\n labelManager.cleanup();\n labelManager = null;\n }\n },\n view: ({ attrs }) => {\n const {\n className = 'col s12',\n helperText,\n iconName,\n id = state.id,\n value,\n placeholder,\n isMandatory,\n label,\n maxLength,\n oninput,\n onchange,\n onkeydown,\n onkeypress,\n onkeyup,\n onblur,\n style,\n ...params\n } = attrs;\n\n const controlled = isControlled(attrs);\n const isNonInteractive = isReadonly(attrs) || attrs.disabled;\n\n let currentValue: string;\n if (controlled) {\n currentValue = value || '';\n } else if (isNonInteractive) {\n // Non-interactive components: prefer defaultValue, fallback to value\n currentValue = attrs.defaultValue ?? value ?? '';\n } else {\n // Interactive uncontrolled: use internal state\n currentValue = state.internalValue ?? attrs.defaultValue ?? '';\n }\n\n return [\n // Hidden div for height measurement - positioned outside the input-field\n m('.hiddendiv', {\n style: {\n visibility: 'hidden',\n position: 'absolute',\n top: '0',\n left: '0',\n zIndex: '-1',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n overflowWrap: 'break-word',\n },\n oncreate: ({ dom }) => {\n const hiddenDiv = (state.hiddenDiv = dom as HTMLDivElement);\n if (state.textarea) {\n updateHeight(state.textarea, hiddenDiv);\n }\n },\n onupdate: ({ dom }) => {\n const hiddenDiv = (state.hiddenDiv = dom as HTMLDivElement);\n if (state.textarea) {\n updateHeight(state.textarea, hiddenDiv);\n }\n },\n }),\n m('.input-field', { className, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m('textarea.materialize-textarea', {\n ...params,\n id,\n tabindex: 0,\n value: controlled ? currentValue : undefined,\n style: {\n height: state.height,\n },\n oncreate: ({ dom }) => {\n const textarea = (state.textarea = dom as HTMLTextAreaElement);\n\n // For uncontrolled mode, set initial value only\n if (!controlled && attrs.defaultValue !== undefined) {\n textarea.value = String(attrs.defaultValue);\n }\n\n // Update character count state for counter component\n if (maxLength) {\n state.currentLength = textarea.value.length;\n }\n\n // Calculate initial height after DOM is fully ready\n // Use requestAnimationFrame to ensure layout is complete\n if (state.hiddenDiv) {\n requestAnimationFrame(() => {\n if (state.hiddenDiv) {\n updateHeight(textarea, state.hiddenDiv);\n m.redraw();\n }\n });\n }\n },\n onupdate: ({ dom }) => {\n const textarea = dom as HTMLTextAreaElement;\n\n // Recalculate and apply height\n if (state.hiddenDiv) {\n updateHeight(textarea, state.hiddenDiv);\n }\n\n if (state.height) {\n textarea.style.height = state.height;\n }\n },\n onfocus: () => {\n state.active = true;\n },\n oninput: (e: Event) => {\n state.active = true;\n state.hasInteracted = false;\n const target = e.target as HTMLTextAreaElement;\n\n // Height will be recalculated by hidden div on next update\n\n // Update character count\n if (maxLength) {\n state.currentLength = target.value.length;\n state.hasInteracted = target.value.length > 0;\n }\n\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalValue = target.value;\n }\n\n // Call oninput handler\n if (oninput) {\n oninput(target.value);\n }\n },\n onblur: (e: FocusEvent) => {\n state.active = false;\n // const target = e.target as HTMLTextAreaElement;\n state.hasInteracted = true;\n\n // Call original onblur if provided\n if (onblur) {\n onblur(e);\n }\n\n if (onchange && state.textarea) {\n onchange(state.textarea.value);\n }\n },\n onkeyup: onkeyup\n ? (ev: KeyboardEvent) => {\n onkeyup(ev, (ev.target as HTMLTextAreaElement).value);\n }\n : undefined,\n onkeydown: onkeydown\n ? (ev: KeyboardEvent) => {\n onkeydown(ev, (ev.target as HTMLTextAreaElement).value);\n }\n : undefined,\n onkeypress: onkeypress\n ? (ev: KeyboardEvent) => {\n onkeypress(ev, (ev.target as HTMLTextAreaElement).value);\n }\n : undefined,\n }),\n ...renderFieldChrome({\n label,\n id,\n isMandatory,\n isActive: currentValue || placeholder || state.active,\n initialValue: currentValue !== '',\n helperText,\n dataError: state.hasInteracted && attrs.dataError ? attrs.dataError : undefined,\n dataSuccess: state.hasInteracted && attrs.dataSuccess ? attrs.dataSuccess : undefined,\n }),\n maxLength\n ? m(CharacterCounter, {\n currentLength: state.currentLength,\n maxLength,\n show: state.currentLength > 0,\n })\n : undefined,\n ]),\n ];\n },\n };\n};\n\n/** Default component for all kinds of input fields. */\nconst InputField =\n <T>(type: InputType, defaultClass = ''): FactoryComponent<InputAttrs<T>> =>\n () => {\n const state = {\n id: uniqueId(),\n internalValue: undefined as undefined | T,\n hasInteracted: false,\n isValid: true,\n active: false,\n inputElement: null as null | HTMLInputElement,\n // Range-specific state\n rangeMinValue: undefined as number | undefined,\n rangeMaxValue: undefined as number | undefined,\n singleValue: undefined as number | undefined,\n isDragging: false,\n activeThumb: null as 'min' | 'max' | null,\n };\n\n const isControlled = (attrs: InputAttrs<T>) =>\n 'value' in attrs && typeof attrs.value !== 'undefined' && typeof attrs.oninput === 'function';\n\n const getValue = (target: HTMLInputElement) => {\n const val = target.value as unknown as T;\n return (val ? (type === 'number' || type === 'range' ? +val : val) : val) as T;\n };\n\n const setValidity = (target: HTMLInputElement, validationResult: string | boolean) => {\n if (typeof validationResult === 'boolean') {\n target.setCustomValidity(validationResult ? '' : 'Custom validation failed');\n } else {\n target.setCustomValidity(validationResult);\n }\n };\n\n const focus = ({ autofocus }: InputAttrs<T>) =>\n autofocus ? (typeof autofocus === 'boolean' ? autofocus : autofocus()) : false;\n\n // const lengthUpdateHandler = () => {\n // const length = state.inputElement?.value.length;\n // if (length) {\n // state.currentLength = length;\n // state.hasInteracted = length > 0;\n // }\n // };\n\n const clearInput = (\n oninput?: (value: any, maxValue?: any) => void,\n onchange?: (value: any, maxValue?: any) => void\n ) => {\n if (state.inputElement) {\n state.inputElement.value = '';\n state.inputElement.focus();\n state.active = false;\n // state.currentLength = 0;\n // state.hasInteracted = false;\n\n // Trigger oninput and onchange callbacks\n const value = getValue(state.inputElement);\n if (oninput) {\n oninput(value);\n }\n if (onchange) {\n onchange(value);\n }\n\n // Update validation state\n state.inputElement.classList.remove('valid', 'invalid');\n state.isValid = true;\n m.redraw();\n }\n };\n\n // Range slider helper functions\n // Range slider rendering functions are now in separate module\n\n return {\n oninit: ({ attrs }) => {\n const controlled = isControlled(attrs);\n const isNonInteractive = isReadonly(attrs) || attrs.disabled;\n\n // Warn developer for improper controlled usage\n if (attrs.value !== undefined && !controlled && !isNonInteractive) {\n console.warn(\n `${type} input with label '${attrs.label}' received 'value' prop without 'oninput' handler. ` +\n `Use 'defaultValue' for uncontrolled components or add an event handler for controlled components.`\n );\n }\n\n // Initialize internal value if not in controlled mode\n if (!controlled) {\n const isNumeric = ['number', 'range'].includes(type);\n if (attrs.defaultValue !== undefined) {\n if (isNumeric) {\n state.internalValue = attrs.defaultValue as T;\n } else {\n state.internalValue = String(attrs.defaultValue) as T;\n }\n } else {\n state.internalValue = (type === 'color' ? '#ff0000' : isNumeric ? undefined : '') as T;\n }\n }\n },\n view: ({ attrs }) => {\n const {\n className = 'col s12',\n dataError,\n dataSuccess,\n helperText,\n iconName,\n id = state.id,\n placeholder,\n isMandatory,\n label,\n maxLength,\n newRow,\n oninput,\n onchange,\n onkeydown,\n onkeypress,\n onkeyup,\n style,\n validate,\n canClear,\n ...params\n } = attrs;\n\n // const attributes = toAttrs(params);\n const cn = [newRow ? 'clear' : '', defaultClass, className].filter(Boolean).join(' ').trim() || undefined;\n\n // Special rendering for minmax range sliders\n if (type === 'range' && (attrs.minmax || attrs.valueDisplay)) {\n return m(attrs.minmax ? DoubleRangeSlider : SingleRangeSlider, {\n ...attrs,\n state,\n cn,\n style,\n iconName,\n id,\n label,\n isMandatory,\n helperText,\n });\n }\n const isNumeric = ['number', 'range'].includes(type);\n const controlled = isControlled(attrs);\n const isNonInteractive = isReadonly(attrs) || attrs.disabled;\n\n let value: T;\n if (controlled) {\n value = attrs.value as T;\n } else if (isNonInteractive) {\n // Non-interactive components: prefer defaultValue, fallback to value\n value = (attrs.defaultValue ?? attrs.value ?? (isNumeric ? 0 : '')) as T;\n } else {\n // Interactive uncontrolled: use internal state\n value = (state.internalValue ?? attrs.defaultValue ?? (isNumeric ? 0 : '')) as T;\n }\n\n const isActive =\n state.active || state.inputElement?.value || value || placeholder || type === 'color' || type === 'range'\n ? true\n : false;\n const rangeType = type === 'range' && !attrs.minmax;\n // Only add validate class if input is interactive and validation is needed\n const shouldValidate = !isNonInteractive && (validate || type === 'email' || type === 'url' || isNumeric);\n const inputClass = [\n type === 'number' ? 'number-input' : '',\n type === 'range' && attrs.vertical ? 'range-slider vertical' : '',\n shouldValidate ? 'validate' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const stepNumberInput = (direction: 'up' | 'down') => {\n const input = state.inputElement;\n if (!input) return;\n\n if (direction === 'up') {\n input.stepUp();\n } else {\n input.stepDown();\n }\n\n input.dispatchEvent(new Event('input', { bubbles: true }));\n };\n\n return m('.input-field', { className: cn, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : undefined,\n m('input', {\n class: inputClass || undefined,\n ...params,\n type,\n tabindex: 0,\n id,\n placeholder,\n value: controlled ? value : undefined,\n style:\n type === 'range' && attrs.vertical\n ? {\n height: attrs.height || '200px',\n width: '6px',\n writingMode: 'vertical-lr' as const,\n direction: 'rtl' as const,\n }\n : undefined,\n // attributes,\n oncreate: ({ dom }) => {\n const input = (state.inputElement = dom as HTMLInputElement);\n if (focus(attrs)) {\n input.focus();\n }\n\n // For uncontrolled mode, set initial value only\n if (!controlled && attrs.defaultValue !== undefined) {\n input.value = String(attrs.defaultValue);\n }\n },\n onkeyup: onkeyup\n ? (ev: KeyboardEvent) => {\n onkeyup(ev, getValue(ev.target as HTMLInputElement));\n }\n : undefined,\n onkeydown: onkeydown\n ? (ev: KeyboardEvent) => {\n onkeydown(ev, getValue(ev.target as HTMLInputElement));\n }\n : undefined,\n onkeypress: onkeypress\n ? (ev: KeyboardEvent) => {\n onkeypress(ev, getValue(ev.target as HTMLInputElement));\n }\n : undefined,\n oninput: (e: Event) => {\n state.active = true;\n state.hasInteracted = false;\n const target = e.target as HTMLInputElement;\n\n // Handle original oninput logic\n const inputValue = getValue(target);\n\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalValue = inputValue;\n }\n\n if (oninput) {\n oninput(inputValue);\n }\n\n if (rangeType) {\n const value = target.value;\n const min = parseFloat(target.min || '0');\n const max = parseFloat(target.max || '100');\n const percentage = Math.round((100 * (parseFloat(value) - min)) / (max - min));\n target.style.setProperty('--range-progress', `${percentage}%`);\n }\n\n // Don't validate on input, only clear error states if user is typing\n if (validate && target.classList.contains('invalid') && target.value.length > 0) {\n const validationResult = validate(value, target);\n if (typeof validationResult === 'boolean' && validationResult) {\n target.classList.remove('invalid');\n target.classList.add('valid');\n state.isValid = true;\n } else if (typeof validationResult === 'string' && validationResult === '') {\n target.classList.remove('invalid');\n target.classList.add('valid');\n state.isValid = true;\n }\n } else if (\n (type === 'email' || type === 'url') &&\n target.classList.contains('invalid') &&\n target.value.length > 0\n ) {\n // Clear native validation errors if user is typing and input becomes valid\n if (target.validity.valid) {\n target.classList.remove('invalid');\n target.classList.add('valid');\n state.isValid = true;\n }\n }\n },\n onfocus: () => {\n state.active = true;\n },\n onblur: (e: FocusEvent) => {\n state.active = false;\n const target = e.target as HTMLInputElement;\n state.hasInteracted = true;\n\n // Skip validation for readonly/disabled inputs\n if (isReadonly(attrs) || attrs.disabled) {\n // Call original onblur if provided\n if (attrs.onblur) {\n attrs.onblur(e);\n }\n if (onchange && state.inputElement) {\n onchange(getValue(state.inputElement));\n }\n return;\n }\n\n if (target && validate) {\n const value = getValue(target);\n // Only validate if user has entered some text\n if (value && String(value).length > 0) {\n const validationResult = validate(value, target);\n state.isValid = typeof validationResult === 'boolean' ? validationResult : false;\n setValidity(target, validationResult);\n\n // Update visual validation state\n if (typeof validationResult === 'boolean') {\n if (validationResult) {\n target.classList.remove('invalid');\n target.classList.add('valid');\n } else {\n target.classList.remove('valid');\n target.classList.add('invalid');\n }\n } else if (typeof validationResult === 'string') {\n target.classList.remove('valid');\n target.classList.add('invalid');\n state.isValid = false;\n }\n } else {\n // Clear validation state if no text\n target.classList.remove('valid', 'invalid');\n state.isValid = true;\n }\n } else if (type === 'email' || type === 'url') {\n // Use browser's native HTML5 validation for email and url types\n const value = getValue(target);\n if (value && String(value).length > 0) {\n state.isValid = target.validity.valid;\n target.setCustomValidity(''); // Clear any custom validation message\n\n if (state.isValid) {\n target.classList.remove('invalid');\n target.classList.add('valid');\n } else {\n target.classList.remove('valid');\n target.classList.add('invalid');\n }\n } else {\n // Clear validation state if no text\n target.classList.remove('valid', 'invalid');\n state.isValid = true;\n }\n } else if (isNumeric) {\n // Use browser's native HTML5 validation for numeric inputs (handles min, max, step, etc.)\n const value = getValue(target);\n if (value !== undefined && value !== null && !isNaN(Number(value))) {\n state.isValid = target.validity.valid;\n target.setCustomValidity(''); // Clear any custom validation message\n\n if (state.isValid) {\n target.classList.remove('invalid');\n target.classList.add('valid');\n } else {\n target.classList.remove('valid');\n target.classList.add('invalid');\n }\n } else {\n // Clear validation state if no valid number\n target.classList.remove('valid', 'invalid');\n state.isValid = true;\n }\n }\n\n // Also call the original onblur handler if provided\n if (attrs.onblur) {\n attrs.onblur(e);\n }\n if (onchange && state.inputElement) {\n onchange(getValue(state.inputElement));\n }\n },\n }),\n type === 'number' && !isNonInteractive\n ? m('.number-input-controls', [\n m(\n 'button.number-input-control.number-input-control-up[type=button]',\n {\n 'aria-label': `Increase ${label || 'value'}`,\n title: 'Increase value',\n onmousedown: (event: MouseEvent) => event.preventDefault(),\n onclick: () => stepNumberInput('up'),\n },\n m(MaterialIcon as any, { name: 'chevron', direction: 'up' })\n ),\n m(\n 'button.number-input-control.number-input-control-down[type=button]',\n {\n 'aria-label': `Decrease ${label || 'value'}`,\n title: 'Decrease value',\n onmousedown: (event: MouseEvent) => event.preventDefault(),\n onclick: () => stepNumberInput('down'),\n },\n m(MaterialIcon as any, { name: 'chevron' })\n ),\n ])\n : undefined,\n // Clear button - only for text inputs with canClear enabled and has content\n canClear && type === 'text' && state.inputElement?.value\n ? m(MaterialIcon, {\n name: 'close',\n className: 'input-clear-btn',\n onclick: (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n clearInput(oninput, onchange);\n },\n })\n : undefined,\n ...renderFieldChrome({\n label,\n id,\n isMandatory,\n isActive,\n initialValue: value !== undefined && value !== '',\n helperText,\n dataError: state.hasInteracted && !state.isValid ? dataError : undefined,\n dataSuccess: state.hasInteracted && state.isValid ? dataSuccess : undefined,\n }),\n maxLength && typeof value === 'string'\n ? m(CharacterCounter, {\n currentLength: value.length,\n maxLength,\n show: value.length > 0,\n })\n : undefined,\n ]);\n },\n };\n };\n\n/** Component for entering some text */\nexport const TextInput = InputField<string>('text');\n/** Component for entering a password */\nexport const PasswordInput = InputField<string>('password');\n/** Component for entering a number */\nexport const NumberInput = InputField<number>('number');\n/** Component for entering a URL */\nexport const UrlInput = InputField<string>('url');\n/** Component for entering a color */\nexport const ColorInput = InputField<string>('color');\n/** Component for entering a range */\nexport const RangeInput = InputField<number>('range', '.range-field');\n/** Component for entering an email */\nexport const EmailInput = InputField<string>('email');\n\nexport interface FileInputAttrs extends Attributes {\n /** Displayed on the button, @default File */\n label?: string;\n /** Current value of the file input, write only */\n value?: string;\n /** Adds a placeholder message */\n placeholder?: string;\n /** If true, upload multiple files */\n multiple?: boolean;\n /** Called when the file input is changed */\n onchange?: (files: FileList) => void;\n /** If true, disable the box */\n disabled?: boolean;\n /**\n * Accepted file types, e.g. image/png, image/jpeg,\n * any image/*, video/*. audio/*, .pdf, a valid MIME type string, with no extensions, etc.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Unique_file_type_specifiers\n */\n accept?: string | string[];\n}\n\n/** Component for uploading a file */\nexport const FileInput: FactoryComponent<FileInputAttrs> = () => {\n let canClear = false;\n let i: HTMLInputElement;\n return {\n view: ({ attrs }) => {\n const {\n multiple,\n disabled,\n value,\n placeholder,\n onchange,\n className = 'col s12',\n accept: acceptedFiles,\n label = 'File',\n } = attrs;\n const accept = acceptedFiles\n ? acceptedFiles instanceof Array\n ? acceptedFiles.join(', ')\n : acceptedFiles\n : undefined;\n return m(\n '.file-field.input-field',\n {\n className: attrs.class || className,\n },\n [\n m('.btn', [\n m('span', label),\n m('input[type=file]', {\n title: label,\n accept,\n multiple,\n disabled,\n onchange: onchange\n ? (e: UIEvent) => {\n const i = e.target as HTMLInputElement;\n if (i && i.files && onchange) {\n canClear = true;\n onchange(i.files);\n }\n }\n : undefined,\n }),\n ]),\n m(\n '.file-path-wrapper',\n m('input.file-path.validate[type=text]', {\n placeholder,\n oncreate: ({ dom }) => {\n i = dom as HTMLInputElement;\n if (value) i.value = value;\n },\n })\n ),\n (canClear || i?.value) &&\n m(\n 'a.waves-effect.waves-teal.btn-flat',\n {\n style: {\n float: 'right',\n position: 'relative',\n top: '-3rem',\n padding: 0,\n },\n onclick: () => {\n canClear = false;\n i.value = '';\n onchange && onchange({} as FileList);\n },\n },\n m(MaterialIcon, {\n name: 'close',\n className: 'close',\n })\n ),\n ]\n );\n },\n };\n};\n","import m, { Vnode, FactoryComponent, Attributes, Component } from 'mithril';\nimport { HelperText } from './label';\nimport { uniqueId } from './utils';\n\nexport interface InputCheckboxAttrs extends Attributes {\n /** Optional event handler when a checkbox is clicked */\n onchange?: (checked: boolean) => void;\n /** Label of the checkbox, can be a string or Vnode */\n label?: string | Vnode<any, any>;\n /** If true, the checkbox is checked */\n checked?: boolean;\n /** If true, the checkbox is disabled */\n disabled?: boolean;\n /** Optional input id for the checkbox */\n inputId?: string;\n}\n\n/** Component to show a check box */\nexport const InputCheckbox: FactoryComponent<InputCheckboxAttrs> = () => {\n let checkboxId: string | undefined;\n\n return {\n view: ({ attrs: { className = 'col s12', onchange, label, checked, disabled, description, style, inputId } }) => {\n if (!checkboxId) checkboxId = inputId || uniqueId();\n return m(\n 'div',\n { className, style },\n m('label', { for: checkboxId, style: { position: 'relative', display: 'inline-block' } }, [\n m('input[type=checkbox][tabindex=0]', {\n className: disabled ? 'disabled' : undefined,\n id: checkboxId,\n checked,\n disabled,\n onclick: onchange\n ? (e: Event) => {\n if (e.target && typeof (e.target as HTMLInputElement).checked !== 'undefined') {\n onchange((e.target as HTMLInputElement).checked);\n }\n }\n : undefined,\n }),\n label ? (typeof label === 'string' ? m('span', label) : label) : undefined,\n ]),\n description && m(HelperText, { className: 'input-checkbox-desc', helperText: description })\n );\n },\n };\n};\n\nexport interface InputOption<T extends string | number> {\n /** Option ID */\n id: T;\n /** Displayed label */\n label: string;\n /** Optional title, often used to display a tooltip - will only work when choosing browser-defaults */\n title?: string;\n /** Is the option disabled? */\n disabled?: boolean;\n /** Select image */\n img?: string;\n /** Select group label */\n group?: string;\n /** Optional class name */\n className?: string;\n /** Optional description */\n description?: string;\n}\n\nexport interface OptionsAttrs<T extends string | number> extends Attributes {\n /** Element ID */\n id?: string;\n /** Optional title or label */\n label?: string;\n /** The options that you have */\n options: InputOption<T>[];\n /** Event handler that is called when an option is changed */\n onchange?: (checkedIds: T[]) => void;\n /** Currently selected ids. This property controls the component state and should be updated externally to change selection programmatically. */\n checkedId?: T | T[];\n /** Optional description */\n description?: string;\n /** Optional CSS that is added to the input checkbox, e.g. if you add col s4, the items will be put inline */\n checkboxClass?: string;\n /** If true, start on a new row */\n newRow?: boolean;\n /** If true, add a mandatory '*' after the label */\n isMandatory?: boolean;\n /** If true, disable the options. */\n disabled?: boolean;\n /** Layout for the options: 'vertical' (default) or 'horizontal' */\n layout?: 'vertical' | 'horizontal';\n /** If true, show select all/none buttons */\n showSelectAll?: boolean;\n /** Text for select all button */\n selectAllText?: string;\n /** Text for select none button */\n selectNoneText?: string;\n}\n\n/** Reusable layout component for rendering options horizontally or vertically */\nexport const OptionsList: Component<{\n options: Array<{ component: any; props: any; key: string | number }>;\n layout: 'vertical' | 'horizontal';\n}> = {\n view: ({ attrs: { options, layout } }) => {\n const optionElements = options.map(({ component, props, key }) => m(component, { ...props, key }));\n\n return layout === 'horizontal' ? m('div.grid-container', optionElements) : optionElements;\n },\n};\n\n/** A list of checkboxes */\nexport const Options = <T extends string | number>(): Component<OptionsAttrs<T>> => {\n const state = {\n componentId: '',\n };\n\n const selectAll = (options: InputOption<T>[], onchange?: (checkedIds: T[]) => void) => {\n const allIds = options.map((option) => option.id);\n onchange && onchange(allIds);\n };\n\n const selectNone = (onchange?: (checkedIds: T[]) => void) => {\n onchange && onchange([]);\n };\n\n const handleChange = (propId: T, checked: boolean, checkedIds: T[], onchange?: (checkedIds: T[]) => void) => {\n const newCheckedIds = checkedIds.filter((i) => i !== propId);\n if (checked) {\n newCheckedIds.push(propId);\n }\n onchange && onchange(newCheckedIds);\n };\n\n return {\n oninit: ({ attrs }) => {\n state.componentId = attrs.id || uniqueId();\n },\n view: ({\n attrs: {\n checkedId,\n label,\n options = [],\n description,\n className = 'col s12',\n style,\n disabled,\n checkboxClass,\n newRow,\n isMandatory,\n layout = 'vertical',\n showSelectAll = false,\n selectAllText = 'Select All',\n selectNoneText = 'Select None',\n onchange,\n },\n }) => {\n // Derive checked IDs from props\n const checkedIds = checkedId !== undefined ? (Array.isArray(checkedId) ? checkedId : [checkedId]) : [];\n\n const isChecked = (id: T) => checkedIds.includes(id);\n\n const cn = [newRow ? 'clear' : '', className].filter(Boolean).join(' ').trim() || undefined;\n\n const optionItems = options.map((option) => ({\n component: InputCheckbox,\n props: {\n disabled: disabled || option.disabled,\n label: option.label,\n onchange: onchange ? (v: boolean) => handleChange(option.id, v, checkedIds, onchange) : undefined,\n className: option.className || checkboxClass,\n checked: isChecked(option.id),\n description: option.description,\n inputId: `${state.componentId}-${option.id}`,\n },\n key: option.id,\n }));\n\n const optionsContent = m(OptionsList, {\n options: optionItems,\n layout,\n });\n\n return m('div', { id: state.componentId, className: cn, style }, [\n label && m('h5.form-group-label', label + (isMandatory ? ' *' : '')),\n showSelectAll &&\n m('div.select-all-controls', { style: { marginBottom: '10px' } }, [\n m(\n 'a',\n {\n href: '#',\n onclick: (e: Event) => {\n e.preventDefault();\n selectAll(options, onchange);\n },\n style: { marginRight: '15px' },\n },\n selectAllText\n ),\n m(\n 'a',\n {\n href: '#',\n onclick: (e: Event) => {\n e.preventDefault();\n selectNone(onchange);\n },\n },\n selectNoneText\n ),\n ]),\n description && m(HelperText, { helperText: description }),\n m('form', { action: '#' }, optionsContent),\n ]);\n },\n };\n};\n","import m, { Attributes, Component, Vnode, type FactoryComponent } from 'mithril';\nimport { TextInput } from './input';\nimport { InputCheckbox } from './option';\nimport { uniqueId } from './utils';\n\n/**\n * Attributes for custom cell renderer components in DataTable\n * @template T The type of the data object for each row\n */\nexport interface CellRendererAttrs<T = Record<string, any>> {\n /** The processed value from the data object for this cell */\n value: any;\n /** The complete row data object */\n row: T;\n /** The row index in the processed data */\n index: number;\n /** The column configuration object */\n column: DataTableColumn<T>;\n}\n\n/**\n * Configuration for a DataTable column\n * @template T The type of the data object for each row\n */\nexport interface DataTableColumn<T = Record<string, any>> {\n /** Unique identifier for the column (required for sorting/filtering) */\n key: string;\n /** Display title shown in the column header */\n title: string;\n /** Property name in the data object to display. If not provided, the entire row object is passed to the renderer */\n field?: keyof T;\n /** Custom cell renderer component for advanced cell content */\n cellRenderer?: FactoryComponent<CellRendererAttrs<T>>;\n /** @deprecated Use cellRenderer instead - Legacy render function for cell content */\n render?: (value: any, row: T, index: number) => string | number | Vnode | Vnode[];\n /** Enable sorting for this column */\n sortable?: boolean;\n /** Enable global search filtering for this column */\n filterable?: boolean;\n /** CSS width value (e.g., '100px', '20%', '10rem') */\n width?: string;\n /** Text alignment within cells */\n align?: 'left' | 'center' | 'right';\n /** CSS class applied to all cells in this column */\n className?: string;\n /** CSS class applied to the column header */\n headerClassName?: string;\n}\n\n/**\n * Configuration for DataTable sorting state\n */\nexport interface DataTableSort {\n /** Key of the column to sort by (must match a column's key) */\n column: string;\n /** Sort direction - ascending or descending */\n direction: 'asc' | 'desc';\n}\n\n/**\n * Configuration for DataTable pagination\n */\nexport interface DataTablePagination {\n /** Current page number (0-based indexing) */\n page: number;\n /** Number of items to display per page */\n pageSize: number;\n /** Total number of items in the dataset */\n total: number;\n /** Array of available page size options for user selection */\n pageSizes?: number[];\n}\n\n/**\n * Configuration for DataTable row selection functionality\n * @template T The type of the data object for each row\n */\nexport interface DataTableSelection<T = Record<string, any>> {\n /** Selection mode - controls how many rows can be selected */\n mode: 'single' | 'multiple' | 'none';\n /** Array of currently selected row keys */\n selectedKeys: string[];\n /** Function to generate a unique key for each row */\n getRowKey: (row: T, index: number) => string;\n /** Callback invoked when row selection changes */\n onSelectionChange?: (selectedKeys: string[], selectedRows: T[]) => void;\n}\n\n/**\n * Configuration for DataTable filtering functionality\n */\nexport interface DataTableFilter {\n /** Global search term applied across all filterable columns */\n searchTerm?: string;\n /** Column-specific filter values keyed by column key */\n columnFilters?: Record<string, any>;\n}\n\n/**\n * Main DataTable component attributes\n * @template T The type of the data object for each row\n *\n * @example Basic usage\n * ```typescript\n * m(DataTable, {\n * data: users,\n * columns: [\n * { key: 'name', title: 'Name', field: 'name', sortable: true },\n * { key: 'email', title: 'Email', field: 'email', filterable: true }\n * ]\n * })\n * ```\n *\n * @example With pagination and selection\n * ```typescript\n * m(DataTable, {\n * data: users,\n * columns,\n * pagination: { page: 0, pageSize: 10, total: users.length },\n * selection: {\n * mode: 'multiple',\n * selectedKeys: [],\n * getRowKey: (user) => user.id,\n * onSelectionChange: (keys, users) => console.log('Selected:', users)\n * }\n * })\n * ```\n */\nexport interface DataTableAttrs<T = Record<string, any>> extends Attributes {\n /** Array of data objects to display in the table */\n data: T[];\n /** Column configuration array defining how data should be displayed */\n columns: DataTableColumn<T>[];\n /** Optional title displayed above the table */\n title?: string;\n /** Show loading spinner and disable interactions */\n loading?: boolean;\n /** Message to display when data array is empty */\n emptyMessage?: string;\n /** Apply alternating row background colors */\n striped?: boolean;\n /** Enable row highlighting on hover */\n hoverable?: boolean;\n /** Make table responsive with horizontal scrolling on small screens */\n responsive?: boolean;\n /** Center-align all table content */\n centered?: boolean;\n /** Fixed table height in pixels (enables scrolling) */\n height?: number;\n /** Additional CSS classes to apply to the table */\n className?: string;\n /** Custom HTML id attribute for the table container */\n id?: string;\n\n // Sorting\n /** Current sort configuration. If provided, sorting is controlled externally */\n sort?: DataTableSort;\n /** Callback invoked when user changes sort order */\n onSortChange?: (sort: DataTableSort) => void;\n\n // Pagination\n /** Pagination configuration. If provided, pagination is controlled externally */\n pagination?: DataTablePagination;\n /** Callback invoked when user changes page or page size */\n onPaginationChange?: (pagination: DataTablePagination) => void;\n\n // Selection\n /** Row selection configuration */\n selection?: DataTableSelection<T>;\n\n // Filtering\n /** Current filter state. If provided, filtering is controlled externally */\n filter?: DataTableFilter;\n /** Callback invoked when filter values change */\n onFilterChange?: (filter: DataTableFilter) => void;\n /** Show global search input above the table */\n enableGlobalSearch?: boolean;\n /** Placeholder text for the global search input */\n searchPlaceholder?: string;\n\n // Row events\n /** Callback invoked when a row is clicked */\n onRowClick?: (row: T, index: number, event: Event) => void;\n /** Callback invoked when a row is double-clicked */\n onRowDoubleClick?: (row: T, index: number, event: Event) => void;\n /** Function to generate custom CSS classes for each row */\n getRowClassName?: (row: T, index: number) => string;\n\n // Internationalization\n /** Internationalization configuration for UI text */\n i18n?: DataTableI18n;\n}\n\n// Internal state interface\ninterface DataTableState<T = Record<string, any>> {\n internalSort?: DataTableSort;\n internalFilter?: DataTableFilter;\n internalPagination?: DataTablePagination;\n processedData: T[];\n tableId: string;\n // Performance optimization caches\n lastProcessedHash?: string;\n cachedFilteredData?: T[];\n cachedSortedData?: T[];\n}\n\n// Helper function interfaces for FactoryComponents\ninterface DataTableHelpers<T = Record<string, any>> {\n getCellValue: (row: T, column: DataTableColumn<T>) => any;\n handleSort: (columnKey: string) => void;\n handleGlobalSearch: (searchTerm: string) => void;\n handleSelectionChange: (rowKey: string, selected: boolean) => void;\n handleSelectAll: (selected: boolean) => void;\n}\n\n/**\n * Internationalization configuration for DataTable UI text\n * Allows customization of all user-facing text strings\n */\nexport interface DataTableI18n {\n /** Label for the search input */\n search?: string;\n /** Placeholder text for the search input */\n searchPlaceholder?: string;\n /** \"Showing\" text in pagination display */\n showing?: string;\n /** \"to\" text in pagination display (e.g., \"Showing 1 to 10 of 100\") */\n to?: string;\n /** \"of\" text in pagination display */\n of?: string;\n /** \"entries\" text in pagination display */\n entries?: string;\n /** \"Page\" text in pagination controls */\n page?: string;\n /** Message displayed when no data is available */\n noDataAvailable?: string;\n /** Loading message displayed during data fetch */\n loading?: string;\n}\n\n// FactoryComponent for global search\ninterface GlobalSearchAttrs {\n searchPlaceholder?: string;\n onSearch: (searchTerm: string) => void;\n i18n?: DataTableI18n;\n}\n\nconst GlobalSearch: FactoryComponent<GlobalSearchAttrs> = () => {\n return {\n view: ({ attrs }: Vnode<GlobalSearchAttrs>) => {\n const { searchPlaceholder, onSearch, i18n } = attrs;\n\n return m(\n '.datatable-global-search',\n m(TextInput, {\n className: 'datatable-search',\n label: i18n?.search || 'Search',\n placeholder: searchPlaceholder || i18n?.searchPlaceholder || 'Search table...',\n oninput: onSearch,\n })\n );\n },\n };\n};\n\n// FactoryComponent for table header\ninterface TableHeaderAttrs<T = Record<string, any>> {\n columns: DataTableColumn<T>[];\n selection?: DataTableSelection<T>;\n sort?: DataTableSort;\n allSelected: boolean;\n someSelected: boolean;\n helpers: DataTableHelpers<T>;\n}\n\nconst TableHeader = <T = Record<string, any>>(): Component<TableHeaderAttrs<T>> => {\n return {\n view: ({ attrs }: Vnode<TableHeaderAttrs<T>>) => {\n const { columns, selection, sort, allSelected, helpers } = attrs;\n\n return m(\n 'thead',\n m('tr', [\n // Selection column header\n ...(selection && selection.mode !== 'none'\n ? [\n m('th.selection-checkbox', [\n selection.mode === 'multiple' &&\n m(InputCheckbox, {\n checked: allSelected,\n onchange: helpers.handleSelectAll,\n className: '',\n }),\n ]),\n ]\n : []),\n // Regular columns\n ...columns.map((column: DataTableColumn<T>) => {\n const isSorted = sort?.column === column.key;\n const sortDirection = isSorted ? sort.direction : null;\n\n return m(\n 'th',\n {\n class: [\n column.headerClassName,\n column.sortable ? 'sortable' : '',\n isSorted ? `sorted-${sortDirection}` : '',\n ]\n .filter(Boolean)\n .join(' '),\n style: column.width ? { width: column.width } : undefined,\n onclick: column.sortable ? () => helpers.handleSort(column.key) : undefined,\n },\n [\n column.title,\n column.sortable &&\n m('.sort-indicators', [\n m(\n 'span.sort-icon.sort-asc',\n {\n className: isSorted && sortDirection === 'asc' ? 'active' : '',\n },\n '▲'\n ),\n m(\n 'span.sort-icon.sort-desc',\n {\n className: isSorted && sortDirection === 'desc' ? 'active' : '',\n },\n '▼'\n ),\n ]),\n ]\n );\n }),\n ])\n );\n },\n };\n};\n\n// FactoryComponent for table row\ninterface TableRowAttrs<T = Record<string, any>> {\n row: T;\n index: number;\n columns: DataTableColumn<T>[];\n selection?: DataTableSelection<T>;\n onRowClick?: (row: T, index: number, event: Event) => void;\n onRowDoubleClick?: (row: T, index: number, event: Event) => void;\n getRowClassName?: (row: T, index: number) => string;\n helpers: DataTableHelpers<T>;\n data: T[];\n}\n\nconst TableRow = <T = Record<string, any>>(): Component<TableRowAttrs<T>> => {\n return {\n view: ({ attrs }: Vnode<TableRowAttrs<T>>) => {\n const { row, index, columns, selection, onRowClick, onRowDoubleClick, getRowClassName, helpers, data } = attrs;\n\n // Calculate the original data index for the row key\n const originalIndex = data.findIndex((originalRow: T) => originalRow === row);\n const rowKey = selection?.getRowKey(row, originalIndex) || String(originalIndex);\n const isSelected = selection?.selectedKeys.includes(rowKey) || false;\n\n return m(\n 'tr',\n {\n class:\n [getRowClassName ? getRowClassName(row, index) : '', isSelected ? 'selected' : '']\n .filter(Boolean)\n .join(' ') || undefined,\n onclick: onRowClick ? (e: Event) => onRowClick(row, index, e) : undefined,\n ondblclick: onRowDoubleClick ? (e: Event) => onRowDoubleClick(row, index, e) : undefined,\n },\n [\n // Selection column\n selection &&\n selection.mode !== 'none' &&\n m('td.selection-checkbox', [\n m(InputCheckbox, {\n checked: isSelected,\n onchange: (checked: boolean) => helpers.handleSelectionChange(rowKey, checked),\n className: '',\n }),\n ]),\n\n columns.map((column: DataTableColumn<T>) => {\n const value = helpers.getCellValue(row, column);\n\n let cellContent;\n if (column.cellRenderer) {\n cellContent = m(column.cellRenderer, {\n value,\n row,\n index,\n column,\n });\n } else if (column.render) {\n // Backward compatibility with deprecated render function\n cellContent = column.render(value, row, index);\n } else {\n cellContent = String(value || '');\n }\n\n return m(\n 'td',\n {\n class:\n [column.className, column.align ? `align-${column.align}` : ''].filter(Boolean).join(' ') ||\n undefined,\n },\n cellContent\n );\n }),\n ]\n );\n },\n };\n};\n\n// FactoryComponent for pagination\n/**\n * Attributes for the PaginationControls component\n */\nexport interface PaginationControlsAttrs {\n /** Pagination configuration object */\n pagination?: DataTablePagination;\n /** Callback function invoked when pagination state changes */\n onPaginationChange: (pagination: DataTablePagination) => void;\n /** Internationalization strings for pagination text */\n i18n?: DataTableI18n;\n}\n\n/**\n * Standalone Pagination Controls component\n *\n * Provides navigation controls for paginated data with customizable text labels.\n * Includes first page, previous page, next page, last page buttons and page info display.\n * Can be used independently of DataTable for any paginated content.\n *\n * @example\n * ```typescript\n * m(PaginationControls, {\n * pagination: { page: 0, pageSize: 10, total: 100 },\n * onPaginationChange: (newPagination) => console.log('Page changed:', newPagination),\n * i18n: { showing: 'Showing', to: 'to', of: 'of', entries: 'entries', page: 'Page' }\n * })\n * ```\n */\nexport const PaginationControls: FactoryComponent<PaginationControlsAttrs> = () => {\n return {\n view: ({ attrs }: Vnode<PaginationControlsAttrs>) => {\n const { pagination, onPaginationChange, i18n } = attrs;\n\n if (!pagination) return null;\n\n const { page, pageSize, total } = pagination;\n const totalPages = Math.ceil(total / pageSize);\n const startItem = page * pageSize + 1;\n const endItem = Math.min((page + 1) * pageSize, total);\n\n const showingText = i18n?.showing || 'Showing';\n const toText = i18n?.to || 'to';\n const ofText = i18n?.of || 'of';\n const entriesText = i18n?.entries || 'entries';\n const pageText = i18n?.page || 'Page';\n\n return m('.datatable-pagination', [\n m('.pagination-info', `${showingText} ${startItem} ${toText} ${endItem} ${ofText} ${total} ${entriesText}`),\n m('.pagination-controls', [\n m(\n 'button.btn-flat',\n {\n disabled: page === 0,\n onclick: () => onPaginationChange({ ...pagination, page: 0 }),\n },\n '⏮'\n ),\n m(\n 'button.btn-flat',\n {\n disabled: page === 0,\n onclick: () => onPaginationChange({ ...pagination, page: page - 1 }),\n },\n '◀'\n ),\n m('span.page-info', `${pageText} ${page + 1} ${ofText} ${totalPages}`),\n m(\n 'button.btn-flat',\n {\n disabled: page >= totalPages - 1,\n onclick: () => onPaginationChange({ ...pagination, page: page + 1 }),\n },\n '▶'\n ),\n m(\n 'button.btn-flat',\n {\n disabled: page >= totalPages - 1,\n onclick: () => onPaginationChange({ ...pagination, page: totalPages - 1 }),\n },\n '⏭'\n ),\n ]),\n ]);\n },\n };\n};\n\n// Table content FactoryComponent\ninterface TableContentAttrs<T = Record<string, any>> {\n processedData: T[];\n height?: number;\n tableClasses: string;\n columns: DataTableColumn<T>[];\n selection?: DataTableSelection<T>;\n internalSort?: DataTableSort;\n allSelected: boolean;\n someSelected: boolean;\n helpers: DataTableHelpers<T>;\n onRowClick?: (row: T, index: number, event: Event) => void;\n onRowDoubleClick?: (row: T, index: number, event: Event) => void;\n getRowClassName?: (row: T, index: number) => string;\n data: T[];\n}\n\nconst TableContent = <T = Record<string, any>>(): Component<TableContentAttrs<T>> => {\n return {\n view: ({ attrs: contentAttrs }) => {\n const {\n processedData,\n tableClasses,\n columns,\n selection,\n internalSort,\n allSelected,\n someSelected,\n helpers,\n onRowClick,\n onRowDoubleClick,\n getRowClassName,\n data,\n } = contentAttrs;\n\n return m(\n 'table',\n {\n class: tableClasses,\n },\n m(TableHeader<T>(), {\n columns,\n selection,\n sort: internalSort,\n allSelected,\n someSelected,\n helpers,\n }),\n\n m(\n 'tbody',\n processedData.map((row, index) =>\n m(TableRow<T>(), {\n key:\n selection?.getRowKey(\n row,\n data.findIndex((originalRow) => originalRow === row)\n ) || index,\n row,\n index,\n columns,\n selection,\n onRowClick,\n onRowDoubleClick,\n getRowClassName,\n helpers,\n data,\n })\n )\n )\n );\n },\n };\n};\n\n/**\n * A comprehensive data table component with sorting, filtering, pagination, and selection capabilities.\n *\n * @template T The type of data objects displayed in each row\n *\n * @description\n * The DataTable component provides a feature-rich interface for displaying and interacting with tabular data.\n * It supports both controlled and uncontrolled modes for all interactive features.\n *\n * **Key Features:**\n * - Sorting: Click column headers to sort data ascending/descending\n * - Filtering: Global search across filterable columns\n * - Pagination: Navigate through large datasets with customizable page sizes\n * - Selection: Single or multiple row selection with callbacks\n * - Custom rendering: Use cellRenderer for complex cell content\n * - Responsive: Adapts to different screen sizes\n * - Internationalization: Customize all UI text\n * - Accessibility: Proper ARIA attributes and keyboard navigation\n *\n * @example Basic usage\n * ```typescript\n * interface User { id: number; name: string; email: string; }\n * const users: User[] = [...];\n * const columns: DataTableColumn<User>[] = [\n * { key: 'name', title: 'Name', field: 'name', sortable: true, filterable: true },\n * { key: 'email', title: 'Email', field: 'email', sortable: true, filterable: true }\n * ];\n *\n * return m(DataTable<User>, { data: users, columns });\n * ```\n *\n * @example Advanced usage with all features\n * ```typescript\n * return m(DataTable<User>, {\n * data: users,\n * columns,\n * title: 'User Management',\n * striped: true,\n * hoverable: true,\n * height: 400,\n *\n * // Pagination\n * pagination: { page: 0, pageSize: 10, total: users.length },\n * onPaginationChange: (pagination) => console.log('Page changed:', pagination),\n *\n * // Selection\n * selection: {\n * mode: 'multiple',\n * selectedKeys: [],\n * getRowKey: (user) => String(user.id),\n * onSelectionChange: (keys, selectedUsers) => console.log('Selection:', selectedUsers)\n * },\n *\n * // Search\n * enableGlobalSearch: true,\n * searchPlaceholder: 'Search users...',\n *\n * // Events\n * onRowClick: (user, index, event) => console.log('Clicked:', user),\n * onRowDoubleClick: (user) => editUser(user),\n *\n * // Styling\n * getRowClassName: (user) => user.active ? '' : 'inactive-row'\n * });\n * ```\n *\n * @returns A Mithril component that renders the data table\n */\nexport const DataTable = <T = Record<string, any>>(): Component<DataTableAttrs<T>> => {\n const state: DataTableState<T> = {\n internalSort: undefined,\n internalFilter: undefined,\n internalPagination: undefined,\n processedData: [],\n tableId: '',\n // Performance optimization caches\n lastProcessedHash: '',\n cachedFilteredData: undefined,\n cachedSortedData: [],\n };\n\n // Helper functions\n const quickDataHash = (data: T[]): string => {\n if (data.length === 0) return '0';\n if (data.length === 1) return '1';\n\n // Sample first, middle, and last items for quick hash\n const first = JSON.stringify(data[0]);\n const middle = data.length > 2 ? JSON.stringify(data[Math.floor(data.length / 2)]) : '';\n const last = JSON.stringify(data[data.length - 1]);\n\n return `${data.length}-${first.length}-${middle.length}-${last.length}`;\n };\n\n const getDataHash = (attrs: DataTableAttrs<T>): string => {\n const { data, sort, filter, pagination } = attrs;\n const { internalSort, internalFilter, internalPagination } = state;\n\n const hashInputs = {\n dataLength: data.length,\n dataHash: quickDataHash(data),\n sort: sort || internalSort,\n filter: filter || internalFilter,\n pagination: pagination || internalPagination,\n };\n\n return JSON.stringify(hashInputs);\n };\n\n const getCellValue = (row: T, column: DataTableColumn<T>): any => {\n if (column.field) {\n return row[column.field];\n }\n return row;\n };\n\n const applyFiltering = (data: T[], filter: DataTableFilter, columns: DataTableColumn<T>[]): T[] => {\n if (!filter.searchTerm && !filter.columnFilters) return data;\n\n const filterableColumns = columns.filter((col) => col.filterable);\n if (filterableColumns.length === 0 && !filter.searchTerm) return data;\n\n const searchTerm = filter.searchTerm?.toLowerCase();\n const hasColumnFilters =\n filter.columnFilters &&\n Object.keys(filter.columnFilters).some((key) => {\n const value = filter.columnFilters![key];\n return value !== null && value !== undefined && value !== '';\n });\n\n return data.filter((row) => {\n // Global search\n if (searchTerm) {\n const matchesGlobal = filterableColumns.some((column) => {\n const value = getCellValue(row, column);\n if (value == null) return false;\n return String(value).toLowerCase().includes(searchTerm);\n });\n if (!matchesGlobal) return false;\n }\n\n // Column-specific filters\n if (hasColumnFilters) {\n const matchesColumnFilters = Object.entries(filter.columnFilters!).every(([columnKey, filterValue]) => {\n if (filterValue === null || filterValue === undefined || filterValue === '') return true;\n\n const column = columns.find((col) => col.key === columnKey);\n if (!column) return true;\n\n const value = getCellValue(row, column);\n if (value == null) return false;\n\n return String(value).toLowerCase().includes(String(filterValue).toLowerCase());\n });\n if (!matchesColumnFilters) return false;\n }\n\n return true;\n });\n };\n\n const applySorting = (data: T[], sort: DataTableSort, columns: DataTableColumn<T>[]): T[] => {\n const column = columns.find((col) => col.key === sort.column);\n if (!column || !column.sortable) return data;\n\n const multiplier = sort.direction === 'asc' ? 1 : -1;\n\n return [...data].sort((a, b) => {\n const aValue = getCellValue(a, column);\n const bValue = getCellValue(b, column);\n\n // Handle null/undefined values\n if (aValue == null && bValue == null) return 0;\n if (aValue == null) return -1 * multiplier;\n if (bValue == null) return 1 * multiplier;\n\n // Type-specific comparisons\n const aType = typeof aValue;\n const bType = typeof bValue;\n\n if (aType === bType) {\n if (aType === 'number') {\n return (aValue - bValue) * multiplier;\n }\n if (aType === 'boolean') {\n return (aValue === bValue ? 0 : aValue ? 1 : -1) * multiplier;\n }\n if (aValue instanceof Date && bValue instanceof Date) {\n return (aValue.getTime() - bValue.getTime()) * multiplier;\n }\n }\n\n // Fallback to string comparison\n return String(aValue).localeCompare(String(bValue)) * multiplier;\n });\n };\n\n const processData = (attrs: DataTableAttrs<T>) => {\n const { data } = attrs;\n const { internalSort, internalFilter, internalPagination } = state;\n\n let processedData = [...data];\n\n // Apply filtering\n if (internalFilter) {\n processedData = applyFiltering(processedData, internalFilter, attrs.columns);\n }\n\n // Apply sorting\n if (internalSort) {\n processedData = applySorting(processedData, internalSort, attrs.columns);\n }\n\n // Update total count for pagination\n if (internalPagination) {\n state.internalPagination = {\n ...internalPagination,\n total: processedData.length,\n };\n }\n\n // Apply pagination\n if (internalPagination) {\n const { page, pageSize } = internalPagination;\n const start = page * pageSize;\n const end = start + pageSize;\n processedData = processedData.slice(start, end);\n }\n\n state.processedData = processedData;\n };\n\n // Create stable helper functions that don't get recreated on every render\n const createHelpers = (attrs: DataTableAttrs<T>): DataTableHelpers<T> => ({\n getCellValue,\n handleSort: (columnKey: string) => {\n const column = attrs.columns.find((col) => col.key === columnKey);\n if (!column || !column.sortable) return;\n\n const currentSort = state.internalSort;\n let newSort: DataTableSort;\n\n if (currentSort?.column === columnKey) {\n // Toggle direction\n if (currentSort.direction === 'asc') {\n newSort = { column: columnKey, direction: 'desc' };\n } else {\n newSort = { column: columnKey, direction: 'asc' };\n }\n } else {\n // New column sort\n newSort = { column: columnKey, direction: 'asc' };\n }\n\n state.internalSort = newSort;\n attrs.onSortChange?.(newSort);\n },\n handleGlobalSearch: (searchTerm: string) => {\n const newFilter = {\n ...state.internalFilter,\n searchTerm,\n };\n state.internalFilter = newFilter;\n\n // Reset pagination to first page when filtering\n if (state.internalPagination) {\n state.internalPagination = {\n ...state.internalPagination,\n page: 0,\n };\n }\n\n attrs.onFilterChange?.(newFilter);\n },\n handleSelectionChange: (rowKey: string, selected: boolean) => {\n if (!attrs.selection) return;\n\n let newSelectedKeys: string[];\n\n if (attrs.selection.mode === 'single') {\n newSelectedKeys = selected ? [rowKey] : [];\n } else if (attrs.selection.mode === 'multiple') {\n if (selected) {\n newSelectedKeys = [...attrs.selection.selectedKeys, rowKey];\n } else {\n newSelectedKeys = attrs.selection.selectedKeys.filter((key) => key !== rowKey);\n }\n } else {\n return; // No selection mode\n }\n\n // Get selected rows\n const selectedRows = attrs.data.filter((row, index) => {\n const key = attrs.selection!.getRowKey(row, index);\n return newSelectedKeys.includes(key);\n });\n\n attrs.selection.onSelectionChange?.(newSelectedKeys, selectedRows);\n },\n handleSelectAll: (selected: boolean) => {\n if (!attrs.selection || attrs.selection.mode !== 'multiple') return;\n\n let newSelectedKeys: string[];\n\n if (selected) {\n // Select all visible rows\n newSelectedKeys = state.processedData.map((row) => {\n const originalIndex = attrs.data.findIndex((originalRow) => originalRow === row);\n return attrs.selection!.getRowKey(row, originalIndex);\n });\n } else {\n newSelectedKeys = [];\n }\n\n const selectedRows = attrs.data.filter((row, index) => {\n const key = attrs.selection!.getRowKey(row, index);\n return newSelectedKeys.includes(key);\n });\n\n attrs.selection.onSelectionChange?.(newSelectedKeys, selectedRows);\n },\n });\n\n return {\n oninit(vnodeInit) {\n const { sort, filter, pagination } = vnodeInit.attrs;\n\n state.tableId = uniqueId();\n state.internalSort = sort || undefined;\n state.internalFilter = filter || { searchTerm: '', columnFilters: {} };\n state.internalPagination = pagination || undefined;\n\n processData(vnodeInit.attrs);\n },\n\n onbeforeupdate(vnodeUpdate) {\n // Only reprocess data if inputs have changed\n const currentHash = getDataHash(vnodeUpdate.attrs);\n if (currentHash !== state.lastProcessedHash) {\n processData(vnodeUpdate.attrs);\n state.lastProcessedHash = currentHash;\n }\n },\n\n view(vnodeView) {\n const attrs = vnodeView.attrs;\n const {\n loading,\n emptyMessage,\n striped,\n hoverable,\n responsive,\n centered,\n className,\n id,\n title,\n height,\n enableGlobalSearch,\n searchPlaceholder,\n selection,\n columns,\n onRowClick,\n onRowDoubleClick,\n getRowClassName,\n data,\n onPaginationChange,\n i18n,\n } = attrs;\n const { processedData, tableId, internalSort, internalPagination } = state;\n if (loading) {\n return m('.datatable-loading', [\n m(\n '.preloader-wrapper.small.active',\n m('.spinner-layer.spinner-blue-only', m('.circle-clipper.left', m('.circle')))\n ),\n m('p', i18n?.loading || 'Loading...'),\n ]);\n }\n\n // Create stable helpers object using the factory function\n const helpers = createHelpers(attrs);\n\n // Calculate selection state for \"select all\" checkbox\n let allSelected = false;\n let someSelected = false;\n\n if (selection && selection.mode === 'multiple') {\n const visibleRowKeys = processedData.map((row) => {\n const originalIndex = data.findIndex((originalRow) => originalRow === row);\n return selection.getRowKey(row, originalIndex);\n });\n\n const selectedVisibleKeys = visibleRowKeys.filter((key) => selection.selectedKeys.includes(key));\n allSelected = visibleRowKeys.length > 0 && selectedVisibleKeys.length === visibleRowKeys.length;\n someSelected = selectedVisibleKeys.length > 0 && selectedVisibleKeys.length < visibleRowKeys.length;\n }\n\n const tableClasses = [\n 'datatable',\n striped ? 'striped' : '',\n hoverable ? 'highlight' : '',\n responsive ? 'responsive-table' : '',\n centered ? 'centered' : '',\n className || '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return m(\n '.datatable-container',\n {\n id: id || tableId,\n },\n title && m('h5.datatable-title', title),\n enableGlobalSearch &&\n m(GlobalSearch, {\n searchPlaceholder,\n onSearch: helpers.handleGlobalSearch,\n i18n,\n }),\n m(\n '.datatable-wrapper',\n {\n style: {\n maxHeight: height ? `${height}px` : undefined,\n overflowY: height ? 'auto' : undefined,\n overflowX: responsive ? 'auto' : undefined,\n },\n },\n processedData.length === 0\n ? m('.datatable-empty', emptyMessage || i18n?.noDataAvailable || 'No data available')\n : m(TableContent<T>(), {\n processedData,\n height,\n tableClasses,\n columns,\n selection,\n internalSort,\n allSelected,\n someSelected,\n helpers,\n onRowClick,\n onRowDoubleClick,\n getRowClassName,\n data,\n })\n ),\n m(PaginationControls, {\n pagination: internalPagination,\n onPaginationChange: (pagination) => {\n state.internalPagination = pagination;\n onPaginationChange?.(pagination);\n },\n i18n,\n })\n );\n },\n };\n};\n","import m, { Component, Attributes } from 'mithril';\nimport { HelperText } from './label';\nimport { uniqueId, getDropdownStyles, resolveControllableValue, syncPortalContent } from './utils';\nimport { MaterialIcon } from './material-icon';\n\nexport interface DropdownItem<T extends string | number> {\n /** ID property of the selected item */\n id?: T;\n /** Label to show in the dropdown */\n label: string;\n /** Can we select the item */\n disabled?: boolean;\n /** Display a Materials Icon in front of the label */\n iconName?: string;\n /** Add a divider */\n divider?: boolean;\n}\n\nexport interface DropdownAttrs<T extends string | number> extends Attributes {\n /**\n * Optional id of the dropdown element\n * @default 'dropdown'\n */\n id?: T;\n /**\n * Optional label when no item is selected\n * @default 'Select'\n */\n label?: string;\n key?: string | number;\n /** If true, disable the selection */\n disabled?: boolean;\n /** Item array to show in the dropdown. If the value is not supplied, uses he name. */\n items: DropdownItem<T>[];\n /**\n * Currently selected item id for controlled mode. If provided along with `onchange`, the component operates in controlled mode\n * where the parent manages the state. The parent must update this value in response to `onchange` callbacks.\n */\n checkedId?: T;\n /**\n * Default selected item id for uncontrolled mode. Only used when `checkedId` and `onchange` are not provided.\n * The component will manage its own internal state in uncontrolled mode.\n */\n defaultCheckedId?: T;\n /** When a value or name is selected. Optional for uncontrolled mode. */\n onchange?: (value: T) => void;\n /** Uses Materialize icons as a prefix or postfix. */\n iconName?: string;\n /** Add a description underneath the input field. */\n helperText?: string;\n /** Max height of the dropdown menu, default '400px', use 'none' to disable it */\n maxHeight?: string;\n}\n\ninterface DropdownState<T extends string | number> {\n isOpen: boolean;\n id: string;\n focusedIndex: number;\n inputRef?: HTMLElement | null;\n dropdownRef?: HTMLElement | null;\n internalCheckedId?: T;\n isInsideModal: boolean;\n}\n\n/** Pure TypeScript Dropdown component - no Materialize dependencies */\nexport const Dropdown = <T extends string | number>(): Component<DropdownAttrs<T>> => {\n const state: DropdownState<T> = {\n isOpen: false,\n id: '',\n focusedIndex: -1,\n inputRef: null,\n dropdownRef: null,\n internalCheckedId: undefined,\n isInsideModal: false,\n };\n\n const isControlled = (attrs: DropdownAttrs<T>) =>\n attrs.checkedId !== undefined && typeof attrs.onchange === 'function';\n\n const closeDropdown = () => {\n state.isOpen = false;\n m.redraw(); // Needed to remove the dropdown options list (potentially added to document root)\n };\n\n const handleKeyDown = (e: KeyboardEvent, items: DropdownItem<T>[]): T | undefined => {\n const availableItems = items.filter((item) => !item.divider && !item.disabled);\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!state.isOpen) {\n state.isOpen = true;\n state.focusedIndex = availableItems.length > 0 ? 0 : -1;\n } else {\n state.focusedIndex = (state.focusedIndex + 1) % availableItems.length;\n }\n return undefined;\n case 'ArrowUp':\n e.preventDefault();\n if (state.isOpen) {\n state.focusedIndex = state.focusedIndex <= 0 ? availableItems.length - 1 : state.focusedIndex - 1;\n }\n return undefined;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (state.isOpen && state.focusedIndex >= 0 && state.focusedIndex < availableItems.length) {\n const selectedItem = availableItems[state.focusedIndex];\n const value = (selectedItem.id || selectedItem.label) as T;\n state.isOpen = false;\n state.focusedIndex = -1;\n return value;\n } else if (!state.isOpen) {\n state.isOpen = true;\n state.focusedIndex = availableItems.length > 0 ? 0 : -1;\n }\n return undefined;\n case 'Escape':\n e.preventDefault();\n state.isOpen = false;\n state.focusedIndex = -1;\n return undefined;\n default:\n return undefined;\n }\n };\n\n const getPortalStyles = (inputRef: HTMLElement | null | undefined) => {\n if (!inputRef) return {};\n\n const rect = inputRef.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n // Choose whether to show above or below based on available space\n const showAbove = spaceBelow < 200 && spaceAbove > spaceBelow;\n\n return {\n position: 'fixed',\n top: showAbove ? 'auto' : `${rect.bottom}px`,\n bottom: showAbove ? `${viewportHeight - rect.top}px` : 'auto',\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n zIndex: 10000,\n maxHeight: showAbove ? `${spaceAbove - 20}px` : `${spaceBelow - 20}px`,\n overflow: 'auto',\n display: 'block',\n opacity: 1,\n };\n };\n\n const updatePortalDropdown = (\n items: DropdownItem<T>[],\n selectedLabel: string,\n onSelectItem: (item: DropdownItem<T>) => void,\n maxHeight?: string\n ) => {\n if (!state.isInsideModal) return;\n\n // Create dropdown content\n const availableItems = items.filter((item) => !item.divider && !item.disabled);\n const dropdownContent = items.map((item) => {\n if (item.divider) {\n return m('li.divider');\n }\n\n const itemIndex = availableItems.indexOf(item);\n const isSelected = selectedLabel === item.label;\n const isFocused = state.focusedIndex === itemIndex;\n\n return m(\n 'li',\n {\n class: `${isSelected ? 'selected' : ''} ${isFocused ? 'focused' : ''}${item.disabled ? ' disabled' : ''}`,\n onclick: item.disabled ? undefined : () => onSelectItem(item),\n },\n m(\n 'span',\n {\n class: 'mm-layout-row mm-layout-row--center',\n style: {\n padding: '14px 16px',\n },\n },\n [\n item.iconName\n ? m(\n 'i.material-icons',\n {\n class: 'mm-layout-item-icon',\n },\n item.iconName\n )\n : undefined,\n item.label,\n ]\n )\n );\n });\n\n // Create dropdown with proper positioning\n const dropdownVnode = m(\n 'ul.dropdown-content.select-dropdown',\n {\n tabindex: 0,\n style: {\n ...getPortalStyles(state.inputRef),\n ...(maxHeight ? { maxHeight } : {}),\n },\n oncreate: ({ dom }) => {\n state.dropdownRef = dom as HTMLElement;\n },\n onremove: () => {\n state.dropdownRef = null;\n },\n },\n dropdownContent\n );\n\n syncPortalContent({\n containerId: `${state.id}-dropdown`,\n shouldRender: state.isOpen && !!state.inputRef,\n vnode: dropdownVnode,\n zIndex: 10000,\n });\n };\n\n return {\n oninit: ({ attrs }) => {\n state.id = attrs.id?.toString() || uniqueId();\n\n // Initialize internal state for uncontrolled mode\n if (!isControlled(attrs)) {\n state.internalCheckedId = attrs.defaultCheckedId;\n }\n\n // Add global click listener to close dropdown\n document.addEventListener('click', closeDropdown);\n },\n\n oncreate: ({ dom }) => {\n // Detect if component is inside a modal\n state.isInsideModal = !!dom.closest('.modal');\n },\n\n onremove: () => {\n // Cleanup global listener\n document.removeEventListener('click', closeDropdown);\n\n // Cleanup portal\n syncPortalContent({ containerId: `${state.id}-dropdown`, shouldRender: false, vnode: null });\n },\n\n view: ({ attrs }) => {\n const {\n checkedId,\n key,\n label,\n onchange,\n disabled = false,\n items,\n iconName,\n helperText,\n style,\n className = 'col s12',\n } = attrs;\n\n const controlled = isControlled(attrs);\n const currentCheckedId = resolveControllableValue<T | undefined>({\n controlled,\n disabled,\n controlledValue: checkedId,\n defaultValue: attrs.defaultCheckedId,\n internalValue: state.internalCheckedId,\n fallbackValue: undefined,\n });\n\n const handleSelection = (value: T) => {\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalCheckedId = value;\n }\n\n // Call onchange if provided\n if (onchange) {\n onchange(value);\n }\n };\n\n const selectedItem = currentCheckedId\n ? items\n .filter((i: DropdownItem<T>) => (i.id ? i.id === currentCheckedId : i.label === currentCheckedId))\n .shift()\n : undefined;\n const title = selectedItem ? selectedItem.label : label || 'Select';\n const availableItems = items.filter((item) => !item.divider && !item.disabled);\n\n // Update portal dropdown when inside modal\n if (state.isInsideModal) {\n updatePortalDropdown(\n items,\n title,\n (item) => {\n if (item.id) {\n state.isOpen = false;\n state.focusedIndex = -1;\n handleSelection(item.id);\n }\n },\n attrs.maxHeight\n );\n }\n\n return m('.dropdown-wrapper.input-field', { className, key, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : undefined,\n m(HelperText, { helperText }),\n m(\n '.select-wrapper',\n {\n class: 'mm-layout-row mm-layout-row--center',\n onkeydown: disabled\n ? undefined\n : (e: KeyboardEvent) => {\n const selectedValue = handleKeyDown(e, items);\n if (selectedValue) {\n handleSelection(selectedValue);\n }\n },\n tabindex: disabled ? -1 : 0,\n 'aria-expanded': state.isOpen ? 'true' : 'false',\n 'aria-haspopup': 'listbox',\n role: 'combobox',\n },\n [\n m('input[type=text][readonly=true].select-dropdown.dropdown-trigger', {\n id: state.id,\n value: title,\n oncreate: ({ dom }) => {\n state.inputRef = dom as HTMLElement;\n },\n onclick: (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) {\n state.isOpen = !state.isOpen;\n // Reset focus index when opening/closing\n state.focusedIndex = -1;\n }\n },\n }),\n // Dropdown Menu - render inline only when NOT inside modal\n state.isOpen &&\n !state.isInsideModal &&\n m(\n 'ul.dropdown-content.select-dropdown',\n {\n tabindex: 0,\n role: 'listbox',\n 'aria-labelledby': state.id,\n oncreate: ({ dom }) => {\n state.dropdownRef = dom as HTMLElement;\n },\n onremove: () => {\n state.dropdownRef = null;\n },\n style: {\n ...getDropdownStyles(state.inputRef, true, items, true),\n ...(attrs.maxHeight ? { maxHeight: attrs.maxHeight } : {}),\n },\n },\n items.map((item) => {\n if (item.divider) {\n return m('li.divider');\n }\n\n const itemIndex = availableItems.indexOf(item);\n const isFocused = itemIndex === state.focusedIndex;\n\n const className =\n [\n item.disabled ? 'disabled' : '',\n isFocused ? 'focused' : '',\n selectedItem?.id === item.id || selectedItem?.label === item.label ? 'selected' : '',\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n return m(\n 'li',\n {\n className,\n onclick: item.disabled\n ? undefined\n : () => {\n const value = (item.id || item.label) as T;\n state.isOpen = false;\n state.focusedIndex = -1;\n handleSelection(value);\n },\n },\n m(\n 'span',\n {\n class: 'mm-layout-row mm-layout-row--center',\n style: {\n padding: '14px 16px',\n },\n },\n [\n item.iconName\n ? m(\n 'i.material-icons',\n {\n class: 'mm-layout-item-icon',\n },\n item.iconName\n )\n : undefined,\n item.label,\n ]\n )\n );\n })\n ),\n m(MaterialIcon, {\n name: 'caret',\n direction: 'down',\n class: 'caret',\n }),\n ]\n ),\n ]);\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { WavesEffect } from './waves';\nimport { ComponentStyle } from './types';\n\ninterface FloatingActionButtonState {\n isOpen: boolean;\n}\n\nexport interface FloatingActionButtonAttrs {\n /** Optional classes to add to the top element */\n className?: string;\n /** Optional style to add to the top element, e.g. for positioning it inline */\n style?: ComponentStyle;\n /** Material-icons name for the main FAB, @see https://materializecss.com/icons.html */\n iconName: string;\n /** Helper option to place the FAB inline instead of the bottom right of the display */\n position?: 'left' | 'right' | 'inline-left' | 'inline-right';\n /**\n * Optional icon class, e.g. tiny (1em), small (2em), medium (4em), large (6em), or 'tiny right'.\n * @default large\n */\n iconClass?: string;\n /** The buttons you want to show */\n buttons?: Array<{\n /** Optional classes you want to add to the main element */\n className?: string;\n /** Name of the icon */\n iconName: string;\n /** Classes of the icon */\n iconClass?: string;\n /** On click function */\n onclick?: (e: UIEvent) => void;\n }>;\n /** Direction to open the buttons */\n direction?: 'top' | 'bottom' | 'left' | 'right';\n /** Whether to show the toolbar */\n toolbarEnabled?: boolean;\n /** Hover behavior */\n hoverEnabled?: boolean;\n}\n\n/**\n * Floating Action Button\n */\nexport const FloatingActionButton: FactoryComponent<FloatingActionButtonAttrs> = () => {\n const state: FloatingActionButtonState = {\n isOpen: false,\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Element;\n if (!target.closest('.fixed-action-btn')) {\n state.isOpen = false;\n }\n };\n\n return {\n oncreate: () => {\n document.addEventListener('click', handleClickOutside);\n },\n\n onremove: () => {\n document.removeEventListener('click', handleClickOutside);\n },\n\n view: ({\n attrs: {\n className,\n iconName,\n iconClass,\n position,\n style = position === 'left' || position === 'inline-left'\n ? 'position: absolute; display: inline-block; left: 24px;'\n : position === 'right' || position === 'inline-right'\n ? 'position: absolute; display: inline-block; right: 24px;'\n : undefined,\n buttons,\n direction = 'top',\n hoverEnabled = true,\n },\n }) => {\n const fabClasses = [\n 'fixed-action-btn',\n direction ? `direction-${direction}` : '',\n state.isOpen ? 'active' : '',\n // hoverEnabled ? 'hover-enabled' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return m(\n 'div',\n {\n style:\n position === 'inline-right' || position === 'inline-left' ? 'position: relative; height: 70px;' : undefined,\n },\n m(\n `.${fabClasses}`,\n {\n style,\n onclick: (e: Event) => {\n e.stopPropagation();\n if (buttons && buttons.length > 0) {\n state.isOpen = !state.isOpen;\n }\n },\n onmouseover: hoverEnabled\n ? () => {\n if (buttons && buttons.length > 0) {\n state.isOpen = true;\n }\n }\n : undefined,\n onmouseleave: hoverEnabled\n ? () => {\n state.isOpen = false;\n }\n : undefined,\n },\n [\n m(\n 'a.btn-floating.btn-large.waves-effect.waves-light',\n {\n className,\n onmousedown: WavesEffect.onMouseDown,\n onmouseup: WavesEffect.onMouseUp,\n onmouseleave: WavesEffect.onMouseLeave,\n ontouchstart: WavesEffect.onTouchStart,\n ontouchend: WavesEffect.onTouchEnd,\n },\n m('i.material-icons', { className: iconClass }, iconName)\n ),\n buttons &&\n buttons.length > 0 &&\n m(\n 'ul',\n buttons.map((button, index) =>\n m(\n 'li',\n m(\n `a.btn-floating.waves-effect.waves-light.${button.className || 'red'}`,\n {\n style: {\n opacity: state.isOpen ? '1' : '0',\n transform: state.isOpen ? 'scale(1)' : 'scale(0.4)',\n transition: `all 0.3s ease ${index * 40}ms`,\n },\n onclick: (e: UIEvent) => {\n e.stopPropagation();\n if (button.onclick) button.onclick(e);\n },\n onmousedown: WavesEffect.onMouseDown,\n onmouseup: WavesEffect.onMouseUp,\n onmouseleave: WavesEffect.onMouseLeave,\n ontouchstart: WavesEffect.onTouchStart,\n ontouchend: WavesEffect.onTouchEnd,\n },\n m('i.material-icons', { className: button.iconClass }, button.iconName)\n )\n )\n )\n ),\n ]\n )\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface MaterialBoxOptions {\n /** Animation duration in ms */\n inDuration?: number;\n /** Animation duration in ms for closing */\n outDuration?: number;\n /** Callback when materialbox is opened */\n onOpenStart?: () => void;\n /** Callback when materialbox is closed */\n onCloseStart?: () => void;\n /** Callback when materialbox opening animation is complete */\n onOpenEnd?: () => void;\n /** Callback when materialbox closing animation is complete */\n onCloseEnd?: () => void;\n}\n\nexport interface MaterialBoxAttrs extends MaterialBoxOptions, Attributes {\n /** Source image path */\n src: string;\n /** Alt text for the image */\n alt?: string;\n /**\n * Width of the image\n * @default undefined\n */\n width?: number;\n /**\n * Height of the image\n * @default undefined\n */\n height?: number;\n /** Caption for the image overlay */\n caption?: string;\n}\n\n/**\n * Pure TypeScript MaterialBox - creates an image lightbox that fills the screen when clicked\n * Uses CSS classes from _materialbox.scss\n */\nexport const MaterialBox: FactoryComponent<MaterialBoxAttrs> = () => {\n const state = {\n isOpen: false,\n originalImage: null as HTMLImageElement | null,\n overlay: null as HTMLElement | null,\n overlayImage: null as HTMLImageElement | null,\n };\n\n const openBox = (img: HTMLImageElement, attrs: MaterialBoxAttrs) => {\n if (state.isOpen) return;\n\n state.isOpen = true;\n state.originalImage = img;\n\n if (attrs.onOpenStart) attrs.onOpenStart();\n\n const inDuration = attrs.inDuration || 275;\n\n // Create overlay\n const overlay = document.createElement('div');\n overlay.className = 'materialbox-overlay';\n overlay.style.transition = `opacity ${inDuration}ms ease`;\n\n // Create enlarged image\n const enlargedImg = document.createElement('img');\n enlargedImg.src = img.src;\n enlargedImg.alt = img.alt || '';\n enlargedImg.className = 'materialbox-image';\n\n // Get original image dimensions and position\n const imgRect = img.getBoundingClientRect();\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n // Calculate final size maintaining aspect ratio\n const aspectRatio = img.naturalWidth / img.naturalHeight;\n const maxWidth = windowWidth * 0.9;\n const maxHeight = windowHeight * 0.9;\n\n let finalWidth = maxWidth;\n let finalHeight = maxWidth / aspectRatio;\n\n if (finalHeight > maxHeight) {\n finalHeight = maxHeight;\n finalWidth = maxHeight * aspectRatio;\n }\n\n // Set initial position and size (same as original image)\n enlargedImg.style.top = `${imgRect.top}px`;\n enlargedImg.style.left = `${imgRect.left}px`;\n enlargedImg.style.width = `${imgRect.width}px`;\n enlargedImg.style.height = `${imgRect.height}px`;\n enlargedImg.style.transition = `all ${inDuration}ms ease`;\n\n // Add caption if provided\n let caption: HTMLElement | null = null;\n if (attrs.caption) {\n caption = document.createElement('div');\n caption.className = 'materialbox-caption';\n caption.textContent = attrs.caption;\n caption.style.transition = `opacity ${inDuration}ms ease ${inDuration}ms`;\n }\n\n // Add to DOM\n document.body.appendChild(overlay);\n document.body.appendChild(enlargedImg);\n if (caption) document.body.appendChild(caption);\n\n // Store references\n state.overlay = overlay;\n state.overlayImage = enlargedImg;\n\n // Prevent body scrolling\n document.body.style.overflow = 'hidden';\n\n // Trigger animations\n requestAnimationFrame(() => {\n overlay.style.opacity = '1';\n enlargedImg.style.top = `${(windowHeight - finalHeight) / 2}px`;\n enlargedImg.style.left = `${(windowWidth - finalWidth) / 2}px`;\n enlargedImg.style.width = `${finalWidth}px`;\n enlargedImg.style.height = `${finalHeight}px`;\n\n if (caption) {\n caption.style.opacity = '1';\n }\n });\n\n // Add close handlers\n const closeHandler = () => closeBox(attrs);\n overlay.addEventListener('click', closeHandler);\n enlargedImg.addEventListener('click', closeHandler);\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') closeHandler();\n });\n\n // Call onOpenEnd after animation\n setTimeout(() => {\n if (attrs.onOpenEnd) attrs.onOpenEnd();\n }, inDuration);\n };\n\n const closeBox = (attrs: MaterialBoxAttrs) => {\n if (!state.isOpen || !state.originalImage || !state.overlay || !state.overlayImage) return;\n\n if (attrs.onCloseStart) attrs.onCloseStart();\n\n const originalRect = state.originalImage.getBoundingClientRect();\n\n // Animate back to original position\n state.overlay.style.opacity = '0';\n state.overlayImage.style.top = `${originalRect.top}px`;\n state.overlayImage.style.left = `${originalRect.left}px`;\n state.overlayImage.style.width = `${originalRect.width}px`;\n state.overlayImage.style.height = `${originalRect.height}px`;\n\n // Hide caption\n const caption = document.querySelector('.materialbox-caption');\n if (caption) {\n (caption as HTMLElement).style.opacity = '0';\n }\n\n // Clean up after animation\n setTimeout(() => {\n if (state.overlay) {\n document.body.removeChild(state.overlay);\n state.overlay = null;\n }\n if (state.overlayImage) {\n document.body.removeChild(state.overlayImage);\n state.overlayImage = null;\n }\n if (caption) {\n document.body.removeChild(caption);\n }\n\n // Restore body scroll\n document.body.style.overflow = '';\n\n state.isOpen = false;\n state.originalImage = null;\n\n if (attrs.onCloseEnd) attrs.onCloseEnd();\n m.redraw();\n }, attrs.outDuration || 200);\n };\n\n return {\n onremove: () => {\n // Clean up if component is removed while open\n if (state.isOpen) {\n if (state.overlay) document.body.removeChild(state.overlay);\n if (state.overlayImage) document.body.removeChild(state.overlayImage);\n const caption = document.querySelector('.materialbox-caption');\n if (caption) document.body.removeChild(caption);\n document.body.style.overflow = '';\n }\n },\n\n view: ({ attrs }) => {\n const { src, alt, width, height, caption, className, style, ...otherAttrs } = attrs;\n\n // Build style attribute - handle both string and object styles\n let imgStyle: string | Record<string, string> = style || {};\n\n if (typeof style !== 'string') {\n // If style is an object or undefined, add default styles as object\n imgStyle = {\n cursor: 'zoom-in',\n transition: 'opacity 200ms ease',\n ...(style || {}),\n };\n }\n\n return m('img.materialboxed', {\n ...otherAttrs,\n src,\n alt: alt || '',\n width,\n height,\n className: ['materialboxed', className].filter(Boolean).join(' ') || undefined,\n style: imgStyle,\n onclick: (e: Event) => {\n e.preventDefault();\n openBox(e.target as HTMLImageElement, attrs);\n },\n });\n },\n };\n};\n","import m, { FactoryComponent, Vnode, Attributes } from 'mithril';\nimport { FlatButton } from './button';\nimport { uniqueId } from './utils';\n// Styles are imported via the main index or individual component imports\n\nexport interface ModalState {\n isOpen: boolean;\n id: string;\n}\n\nexport interface ModalAttrs extends Attributes {\n id?: string;\n title: string;\n description?: string | Vnode<any, any>;\n /** Set to true when the description contains HTML */\n richContent?: boolean;\n /** Fixate the footer, so you can show more content. */\n fixedFooter?: boolean;\n /** Display on the bottom */\n bottomSheet?: boolean;\n /** Menu buttons, from left to right */\n buttons?: Array<{\n label: string;\n iconName?: string;\n disabled?: boolean;\n onclick?: (e: UIEvent) => void;\n className?: string;\n }>;\n /** Control modal visibility externally */\n isOpen?: boolean;\n /** Called when modal should be opened/closed */\n onToggle?: (open: boolean) => void;\n /** Called when modal is closed */\n onClose?: () => void;\n /** Show close button in top right (default true) */\n showCloseButton?: boolean;\n /** Close modal when clicking backdrop (default true) */\n closeOnBackdropClick?: boolean;\n /** Close modal when clicking a button (default false) */\n closeOnButtonClick?: boolean;\n /** Close modal when pressing escape key */\n closeOnEsc?: boolean;\n}\n\n/**\n * CSS-only Modal Panel component - no JavaScript dependencies\n * Uses modern CSS techniques for modal functionality\n */\nexport const ModalPanel: FactoryComponent<ModalAttrs> = () => {\n const state: ModalState = {\n isOpen: false,\n id: '',\n };\n\n let keydownHandler: ((e: KeyboardEvent) => void) | null = null;\n\n const closeModal = (attrs: ModalAttrs) => {\n state.isOpen = false;\n if (attrs.onToggle) attrs.onToggle(false);\n if (attrs.onClose) attrs.onClose();\n\n // Remove keyboard listener\n if (keydownHandler) {\n document.removeEventListener('keydown', keydownHandler);\n keydownHandler = null;\n }\n\n // Restore body scroll\n document.body.style.overflow = '';\n m.redraw();\n };\n\n const openModal = (attrs: ModalAttrs) => {\n state.isOpen = true;\n if (attrs.onToggle) attrs.onToggle(true);\n\n // Add keyboard listener\n keydownHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && attrs.closeOnEsc !== false && state.isOpen) {\n closeModal(attrs);\n }\n };\n document.addEventListener('keydown', keydownHandler);\n\n // Prevent body scroll\n document.body.style.overflow = 'hidden';\n };\n\n return {\n oninit: ({ attrs }) => {\n state.id = attrs.id ?? uniqueId();\n if (attrs.isOpen) {\n openModal(attrs);\n }\n },\n\n onremove: () => {\n // Cleanup on component removal\n if (keydownHandler) {\n document.removeEventListener('keydown', keydownHandler);\n keydownHandler = null;\n }\n document.body.style.overflow = '';\n },\n\n view: ({ attrs }) => {\n // Sync external isOpen prop with internal state - do this in view for immediate response\n if (attrs.isOpen !== undefined && attrs.isOpen !== state.isOpen) {\n if (attrs.isOpen) {\n openModal(attrs);\n } else {\n closeModal(attrs);\n }\n }\n\n const {\n id,\n title,\n description,\n fixedFooter,\n bottomSheet,\n buttons,\n richContent,\n className,\n showCloseButton = true,\n closeOnBackdropClick = true,\n closeOnButtonClick = false,\n } = attrs;\n\n const modalClasses = [\n 'modal',\n className || '',\n fixedFooter ? 'modal-fixed-footer' : '',\n bottomSheet ? 'bottom-sheet' : '',\n state.isOpen ? 'active' : '',\n ]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n const overlayClasses =\n ['modal-overlay', state.isOpen ? 'active' : ''].filter(Boolean).join(' ').trim() || undefined;\n\n return m('div', { className: 'modal-container' }, [\n // Modal overlay\n m('div', {\n className: overlayClasses,\n onclick: closeOnBackdropClick ? () => closeModal(attrs) : undefined,\n style: {\n display: state.isOpen ? 'block' : 'none',\n position: 'fixed',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: '1002',\n },\n }),\n\n // Modal content\n m(\n 'div',\n {\n id,\n className: modalClasses,\n 'aria-hidden': state.isOpen ? 'false' : 'true',\n role: 'dialog',\n 'aria-labelledby': `${id}-title`,\n 'aria-describedby': description ? `${id}-desc` : undefined,\n style: {\n display: state.isOpen ? 'flex' : 'none',\n position: 'fixed',\n ...(bottomSheet\n ? {\n // Bottom sheet positioning\n top: 'auto',\n bottom: '0',\n left: '0',\n right: '0',\n transform: 'none',\n maxWidth: '100%',\n borderRadius: '8px 8px 0 0',\n }\n : {\n // Regular modal positioning\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n maxWidth: '75%',\n borderRadius: '4px',\n }),\n backgroundColor: 'var(--mm-modal-background, #fff)',\n maxHeight: '85%',\n overflow: 'auto',\n zIndex: '1003',\n padding: '0',\n flexDirection: 'column',\n boxShadow:\n '0 24px 38px 3px rgba(0,0,0,0.14), 0 9px 46px 8px rgba(0,0,0,0.12), 0 11px 15px -7px rgba(0,0,0,0.20)',\n },\n // onclick: (e: Event) => e.stopPropagation(), // Prevent backdrop click when clicking inside modal\n },\n [\n // Close button\n showCloseButton &&\n m(\n 'button',\n {\n className: 'modal-close btn-flat',\n style: {\n position: 'absolute',\n top: '8px',\n right: '8px',\n padding: '8px',\n minWidth: 'auto',\n lineHeight: 1,\n },\n onclick: () => closeModal(attrs),\n 'aria-label': 'Close modal',\n },\n '×'\n ),\n\n // Modal content\n m(\n '.modal-content',\n {\n style: {\n padding: '24px',\n paddingTop: showCloseButton ? '48px' : '24px',\n minHeight: 'auto',\n flex: '1 1 auto',\n },\n },\n [\n m('h4', { id: `${id}-title`, style: { margin: '0 0 20px 0' } }, title),\n description &&\n m(\n 'div',\n {\n id: `${id}-desc`,\n ...(richContent && typeof description === 'string' ? { innerHTML: description } : {}),\n },\n richContent && typeof description === 'string' ? undefined : description\n ),\n ]\n ),\n\n // Modal footer with buttons\n buttons &&\n buttons.length > 0 &&\n m(\n '.modal-footer',\n {\n style: {\n padding: '4px 6px',\n borderTop: '1px solid var(--mm-border-color, rgba(160,160,160,0.2))',\n textAlign: 'right',\n },\n },\n buttons.map((buttonProps) =>\n m(FlatButton, {\n // key: `modal-button-${index}`,\n ...buttonProps,\n className: `modal-close ${buttonProps.className || ''}`,\n onclick: (e: UIEvent) => {\n if (buttonProps.onclick) buttonProps.onclick(e);\n closeOnButtonClick && closeModal(attrs);\n },\n })\n )\n ),\n ]\n ),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\n\ninterface InternalPaginationAttrs extends PaginationItem {\n active?: boolean;\n title: number | Vnode<any, any>;\n}\n\nexport interface PaginationItem extends Attributes {\n href: string;\n disabled?: boolean;\n}\n\nconst PaginationItem: FactoryComponent<InternalPaginationAttrs> = () => ({\n view: ({ attrs: { title, href, active, disabled } }) =>\n m(\n 'li',\n { className: active ? 'active' : disabled ? 'disabled' : 'waves-effect' },\n typeof title === 'number' ? m(m.route.Link, { href }, title) : title\n ),\n});\n\nexport interface PaginationAttrs extends Attributes {\n /**\n * How many items do we show\n * @default 9 or items.length, whatever is the smallest\n */\n size?: number;\n /** The active page index */\n curPage?: number;\n items: PaginationItem[];\n}\n\nexport const Pagination: FactoryComponent<PaginationAttrs> = () => {\n const state = {\n pagIndex: 0,\n };\n return {\n view: ({ attrs: { items, curPage = 1, size = Math.min(9, items.length) } }) => {\n const { pagIndex } = state;\n const startPage = pagIndex * size;\n const endPage = startPage + size;\n const canGoBack = pagIndex > 0;\n const canGoForward = endPage < items.length;\n const displayedItems = [\n {\n title: m(\n 'a',\n {\n onclick: () => canGoBack && state.pagIndex--,\n },\n m('i.material-icons', 'chevron_left')\n ),\n disabled: !canGoBack,\n },\n ...items.filter((_, i) => startPage <= i && i < endPage),\n {\n title: m(\n 'a',\n {\n onclick: () => canGoForward && state.pagIndex++,\n },\n m('i.material-icons', 'chevron_right')\n ),\n disabled: !canGoForward,\n },\n ] as (\n | PaginationItem\n | {\n title?: m.Vnode<any, any>;\n disabled: boolean;\n }\n )[];\n return m(\n 'ul.pagination',\n displayedItems.map((item, i) =>\n m(PaginationItem, {\n title: startPage + i,\n ...item,\n active: startPage + i === curPage,\n })\n )\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface ParallaxAttrs extends Attributes {\n /** Enable responsive parallax (disable on mobile for performance) */\n responsiveThreshold?: number;\n /** Image source */\n src: string;\n /** Alt text for the image */\n alt?: string;\n}\n\n/**\n * MaterializeCSS Parallax component with dynamic positioning\n * Port of the original MaterializeCSS parallax logic\n */\nexport const Parallax: FactoryComponent<ParallaxAttrs> = () => {\n let containerEl: HTMLElement | null = null;\n let imgEl: HTMLImageElement | null = null;\n let scrollThrottle: number | null = null;\n let lastScrollTop = -1;\n\n // MaterializeCSS parallax logic - exact port from original source\n const updateParallax = () => {\n if (!containerEl || !imgEl) return;\n\n const containerHeight =\n containerEl.offsetHeight > 0 ? containerEl.offsetHeight : containerEl.parentElement?.offsetHeight || 1;\n const imgHeight = imgEl.offsetHeight;\n const parallaxDist = imgHeight - containerHeight;\n const bottom = containerEl.offsetTop + containerHeight;\n const top = containerEl.offsetTop;\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n const windowHeight = window.innerHeight;\n const windowBottom = scrollTop + windowHeight;\n const percentScrolled = (windowBottom - top) / (containerHeight + windowHeight);\n\n // MaterializeCSS formula: start at negative parallaxDist/2, move toward positive parallaxDist/2\n const parallax = Math.round(parallaxDist * percentScrolled - parallaxDist / 2);\n\n // Only update if we're in the viewport and scroll position changed\n if (bottom > scrollTop && top < windowBottom && scrollTop !== lastScrollTop) {\n // Match MaterializeCSS transform format: translate3d(-50%, Ypx, 0px) with opacity\n imgEl.style.transform = `translate3d(-50%, ${parallax}px, 0px)`;\n imgEl.style.opacity = '1';\n lastScrollTop = scrollTop;\n }\n };\n\n const handleScroll = () => {\n if (scrollThrottle) return;\n\n scrollThrottle = requestAnimationFrame(() => {\n updateParallax();\n scrollThrottle = null;\n });\n };\n\n const handleResize = () => {\n updateParallax();\n };\n\n const setupParallax = (containerElement: HTMLElement, responsiveThreshold: number) => {\n containerEl = containerElement;\n imgEl = containerElement.querySelector('.parallax img') as HTMLImageElement;\n\n if (!imgEl) return;\n\n // Check if we should enable parallax based on screen size\n const shouldEnableParallax = window.innerWidth >= responsiveThreshold;\n\n if (shouldEnableParallax) {\n // Set initial MaterializeCSS styles on the image\n imgEl.style.transform = 'translate3d(-50%, 0px, 0px)';\n imgEl.style.opacity = '1';\n\n // Wait for image to load before calculating parallax\n if (imgEl.complete) {\n updateParallax();\n } else {\n imgEl.onload = () => updateParallax();\n }\n\n // Add event listeners\n window.addEventListener('scroll', handleScroll, { passive: true });\n window.addEventListener('resize', handleResize, { passive: true });\n\n // Store cleanup function\n (containerEl as any)._parallaxCleanup = () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleResize);\n if (scrollThrottle) {\n cancelAnimationFrame(scrollThrottle);\n scrollThrottle = null;\n }\n };\n }\n };\n\n const cleanup = () => {\n if (containerEl && (containerEl as any)._parallaxCleanup) {\n (containerEl as any)._parallaxCleanup();\n }\n containerEl = null;\n imgEl = null;\n if (scrollThrottle) {\n cancelAnimationFrame(scrollThrottle);\n scrollThrottle = null;\n }\n lastScrollTop = -1;\n };\n\n return {\n oncreate: ({ dom, attrs }) => {\n const { responsiveThreshold = 768 } = attrs;\n setupParallax(dom as HTMLElement, responsiveThreshold);\n },\n\n onremove: () => {\n cleanup();\n },\n\n view: ({ attrs }) => {\n const { src, alt = '' } = attrs;\n\n if (!src) return undefined;\n\n return m('.parallax-container', [\n m('.parallax', [\n m('img', {\n src,\n alt,\n onerror: (e: Event) => {\n console.warn('Parallax image failed to load:', src);\n const img = e.target as HTMLImageElement;\n img.style.backgroundColor = '#ddd';\n img.alt = 'Image failed to load';\n },\n }),\n ]),\n ]);\n },\n };\n};\n","/**\n * Shared utility functions for TimePicker and TimeRangePicker components\n */\n\nexport interface TimeValue {\n hours: number;\n minutes: number;\n amOrPm: 'AM' | 'PM';\n}\n\nexport const addLeadingZero = (num: number): string => {\n return (num < 10 ? '0' : '') + num;\n};\n\nexport const parseTime = (timeStr: string, twelveHour: boolean): TimeValue => {\n if (!timeStr) {\n return { hours: twelveHour ? 12 : 0, minutes: 0, amOrPm: 'AM' };\n }\n\n const parts = timeStr.trim().split(/[:\\s]+/);\n if (parts.length < 2) {\n return { hours: twelveHour ? 12 : 0, minutes: 0, amOrPm: 'AM' };\n }\n\n let hours = parseInt(parts[0]) || 0;\n const minutes = parseInt(parts[1]) || 0;\n let amOrPm: 'AM' | 'PM' = 'AM';\n\n const upperStr = timeStr.toUpperCase();\n if (upperStr.includes('PM')) {\n amOrPm = 'PM';\n } else if (upperStr.includes('AM')) {\n amOrPm = 'AM';\n }\n\n if (twelveHour) {\n if (hours >= 12) {\n amOrPm = 'PM';\n if (hours > 12) hours -= 12;\n } else if (hours === 0) {\n hours = 12;\n }\n }\n\n return { hours, minutes, amOrPm };\n};\n\nexport const formatTime = (time: TimeValue, twelveHour: boolean): string => {\n if (!time) return '';\n\n const { hours, minutes, amOrPm } = time;\n const hoursStr = addLeadingZero(hours);\n const minutesStr = addLeadingZero(minutes);\n\n if (twelveHour) {\n return `${hoursStr}:${minutesStr} ${amOrPm}`;\n }\n\n let hours24 = hours;\n if (amOrPm === 'PM' && hours !== 12) {\n hours24 = hours + 12;\n } else if (amOrPm === 'AM' && hours === 12) {\n hours24 = 0;\n }\n\n return `${addLeadingZero(hours24)}:${minutesStr}`;\n};\n\nexport const timeToMinutes = (time: TimeValue, twelveHour: boolean): number => {\n let h = time.hours;\n\n if (twelveHour) {\n if (time.amOrPm === 'PM' && h !== 12) h += 12;\n if (time.amOrPm === 'AM' && h === 12) h = 0;\n }\n\n return h * 60 + time.minutes;\n};\n\nexport const generateHourOptions = (twelveHour: boolean, hourStep: number): number[] => {\n const start = twelveHour ? 1 : 0;\n const end = twelveHour ? 12 : 23;\n const hours: number[] = [];\n\n for (let i = start; i <= end; i += hourStep) {\n hours.push(i);\n }\n\n // Special case for 12-hour: include 12 first\n if (twelveHour && hourStep === 1) {\n return [12, ...hours.filter((h) => h !== 12)];\n }\n\n return hours;\n};\n\nexport const generateMinuteOptions = (minuteStep: number): number[] => {\n const minutes: number[] = [];\n for (let i = 0; i < 60; i += minuteStep) {\n minutes.push(i);\n }\n return minutes;\n};\n\nexport const isTimeDisabled = (\n hours: number,\n minutes: number,\n amOrPm: 'AM' | 'PM',\n minTime?: string,\n maxTime?: string,\n twelveHour?: boolean\n): boolean => {\n if (!minTime && !maxTime) return false;\n\n const currentMins = timeToMinutes({ hours, minutes, amOrPm }, twelveHour || false);\n\n if (minTime) {\n const minParsed = parseTime(minTime, twelveHour || false);\n const minMins = timeToMinutes(minParsed, twelveHour || false);\n if (currentMins < minMins) return true;\n }\n\n if (maxTime) {\n const maxParsed = parseTime(maxTime, twelveHour || false);\n const maxMins = timeToMinutes(maxParsed, twelveHour || false);\n if (currentMins > maxMins) return true;\n }\n\n return false;\n};\n\nexport const scrollToValue = (\n container: HTMLElement,\n index: number,\n itemHeight: number,\n animated: boolean = true\n): void => {\n const scrollTop = index * itemHeight - (container.clientHeight / 2 - itemHeight / 2);\n\n if (animated) {\n container.scrollTo({ top: scrollTop, behavior: 'smooth' });\n } else {\n container.scrollTop = scrollTop;\n }\n};\n\nexport const snapToNearestItem = (\n container: HTMLElement,\n itemHeight: number,\n onSnap: (index: number) => void\n): void => {\n const scrollTop = container.scrollTop;\n const centerOffset = container.clientHeight / 2;\n const nearestIndex = Math.round((scrollTop + centerOffset - itemHeight / 2) / itemHeight);\n\n scrollToValue(container, nearestIndex, itemHeight, true);\n onSnap(nearestIndex);\n};\n","import m, { FactoryComponent } from 'mithril';\nimport {\n addLeadingZero,\n generateHourOptions,\n generateMinuteOptions,\n isTimeDisabled,\n scrollToValue,\n snapToNearestItem,\n} from './time-utils';\n\n/**\n * Attributes for the DigitalClock component\n */\nexport interface DigitalClockAttrs {\n /** Current hours value (1-12 for 12-hour, 0-23 for 24-hour) */\n hours: number;\n\n /** Current minutes value (0-59) */\n minutes: number;\n\n /** Current AM/PM value (only relevant in 12-hour mode) */\n amOrPm: 'AM' | 'PM';\n\n /** Whether to use 12-hour format (true) or 24-hour format (false) */\n twelveHour: boolean;\n\n /** Step between minute options (default: 5) */\n minuteStep?: number;\n\n /** Step between hour options (default: 1) */\n hourStep?: number;\n\n /** Minimum allowed time in format \"HH:MM\" or \"HH:MM AM/PM\" */\n minTime?: string;\n\n /** Maximum allowed time in format \"HH:MM\" or \"HH:MM AM/PM\" */\n maxTime?: string;\n\n /** Callback when time changes */\n onTimeChange: (hours: number, minutes: number, amOrPm: 'AM' | 'PM') => void;\n\n /** Optional reference to external hours display element for updates */\n spanHours?: HTMLElement;\n\n /** Optional reference to external minutes display element for updates */\n spanMinutes?: HTMLElement;\n\n /** Optional reference to external AM/PM display element for updates */\n spanAmPm?: HTMLElement;\n}\n\n/**\n * Internal state for the DigitalClock component\n */\ninterface DigitalClockState {\n hourScrollContainer?: HTMLElement;\n minuteScrollContainer?: HTMLElement;\n amPmScrollContainer?: HTMLElement;\n hourScrollTimeout?: number;\n minuteScrollTimeout?: number;\n amPmScrollTimeout?: number;\n}\n\n/**\n * DigitalClock component - A scrollable digital time picker\n *\n * @example\n * ```typescript\n * m(DigitalClock, {\n * hours: 10,\n * minutes: 30,\n * amOrPm: 'AM',\n * twelveHour: true,\n * minuteStep: 5,\n * onTimeChange: (hours, minutes, amOrPm) => {\n * console.log(`Time changed to ${hours}:${minutes} ${amOrPm}`);\n * }\n * })\n * ```\n */\nexport const DigitalClock: FactoryComponent<DigitalClockAttrs> = () => {\n const ITEM_HEIGHT = 48;\n const state: DigitalClockState = {};\n\n return {\n view: ({ attrs }) => {\n const {\n hours,\n minutes,\n amOrPm,\n twelveHour,\n minuteStep = 5,\n hourStep = 1,\n minTime,\n maxTime,\n onTimeChange,\n spanHours,\n spanMinutes,\n spanAmPm,\n } = attrs;\n\n const hourOptions = generateHourOptions(twelveHour, hourStep);\n const minuteOptions = generateMinuteOptions(minuteStep);\n\n return m('.timepicker-digital-clock', [\n // Hours column\n m(\n '.digital-clock-column',\n {\n oncreate: (vnode) => {\n state.hourScrollContainer = vnode.dom as HTMLElement;\n const currentIndex = hourOptions.indexOf(hours);\n if (currentIndex >= 0) {\n scrollToValue(state.hourScrollContainer, currentIndex + 2, ITEM_HEIGHT, false);\n }\n },\n onwheel: (e: WheelEvent) => {\n e.preventDefault();\n if (!state.hourScrollContainer) return;\n\n const delta = Math.sign(e.deltaY);\n const currentIndex = hourOptions.indexOf(hours);\n const newIndex = Math.max(0, Math.min(hourOptions.length - 1, currentIndex + delta));\n const newHour = hourOptions[newIndex];\n\n if (!isTimeDisabled(newHour, minutes, amOrPm, minTime, maxTime, twelveHour)) {\n onTimeChange(newHour, minutes, amOrPm);\n if (spanHours) {\n spanHours.innerHTML = addLeadingZero(newHour);\n }\n scrollToValue(state.hourScrollContainer, newIndex + 2, ITEM_HEIGHT, true);\n m.redraw();\n }\n },\n onscroll: () => {\n if (state.hourScrollTimeout) {\n clearTimeout(state.hourScrollTimeout);\n }\n state.hourScrollTimeout = window.setTimeout(() => {\n if (!state.hourScrollContainer) return;\n snapToNearestItem(state.hourScrollContainer, ITEM_HEIGHT, (index) => {\n const actualIndex = index - 2; // Account for padding\n if (actualIndex >= 0 && actualIndex < hourOptions.length) {\n const newHour = hourOptions[actualIndex];\n if (!isTimeDisabled(newHour, minutes, amOrPm, minTime, maxTime, twelveHour)) {\n onTimeChange(newHour, minutes, amOrPm);\n if (spanHours) {\n spanHours.innerHTML = addLeadingZero(newHour);\n }\n m.redraw();\n }\n }\n });\n }, 150);\n },\n },\n [\n // Padding items for centering\n m('.digital-clock-item.padding'),\n m('.digital-clock-item.padding'),\n\n // Hour items\n ...hourOptions.map((hour) => {\n const disabled = isTimeDisabled(hour, minutes, amOrPm, minTime, maxTime, twelveHour);\n return m(\n '.digital-clock-item',\n {\n class: `${hour === hours ? 'selected' : ''} ${disabled ? 'disabled' : ''}`,\n onclick: () => {\n if (disabled) return;\n onTimeChange(hour, minutes, amOrPm);\n if (spanHours) {\n spanHours.innerHTML = addLeadingZero(hour);\n }\n if (state.hourScrollContainer) {\n const index = hourOptions.indexOf(hour);\n scrollToValue(state.hourScrollContainer, index + 2, ITEM_HEIGHT, true);\n }\n m.redraw();\n },\n },\n addLeadingZero(hour)\n );\n }),\n\n // Padding items for centering\n m('.digital-clock-item.padding'),\n m('.digital-clock-item.padding'),\n ]\n ),\n\n // Separator\n m('.digital-clock-separator', ':'),\n\n // Minutes column\n m(\n '.digital-clock-column',\n {\n oncreate: (vnode) => {\n state.minuteScrollContainer = vnode.dom as HTMLElement;\n const currentIndex = minuteOptions.indexOf(minutes);\n if (currentIndex >= 0) {\n scrollToValue(state.minuteScrollContainer, currentIndex + 2, ITEM_HEIGHT, false);\n }\n },\n onwheel: (e: WheelEvent) => {\n e.preventDefault();\n if (!state.minuteScrollContainer) return;\n\n const delta = Math.sign(e.deltaY);\n const currentIndex = minuteOptions.indexOf(minutes);\n const newIndex = Math.max(0, Math.min(minuteOptions.length - 1, currentIndex + delta));\n const newMinute = minuteOptions[newIndex];\n\n if (!isTimeDisabled(hours, newMinute, amOrPm, minTime, maxTime, twelveHour)) {\n onTimeChange(hours, newMinute, amOrPm);\n if (spanMinutes) {\n spanMinutes.innerHTML = addLeadingZero(newMinute);\n }\n scrollToValue(state.minuteScrollContainer, newIndex + 2, ITEM_HEIGHT, true);\n m.redraw();\n }\n },\n onscroll: () => {\n if (state.minuteScrollTimeout) {\n clearTimeout(state.minuteScrollTimeout);\n }\n state.minuteScrollTimeout = window.setTimeout(() => {\n if (!state.minuteScrollContainer) return;\n snapToNearestItem(state.minuteScrollContainer, ITEM_HEIGHT, (index) => {\n const actualIndex = index - 2; // Account for padding\n if (actualIndex >= 0 && actualIndex < minuteOptions.length) {\n const newMinute = minuteOptions[actualIndex];\n if (!isTimeDisabled(hours, newMinute, amOrPm, minTime, maxTime, twelveHour)) {\n onTimeChange(hours, newMinute, amOrPm);\n if (spanMinutes) {\n spanMinutes.innerHTML = addLeadingZero(newMinute);\n }\n m.redraw();\n }\n }\n });\n }, 150);\n },\n },\n [\n // Padding items for centering\n m('.digital-clock-item.padding'),\n m('.digital-clock-item.padding'),\n\n // Minute items\n ...minuteOptions.map((minute) => {\n const disabled = isTimeDisabled(hours, minute, amOrPm, minTime, maxTime, twelveHour);\n return m(\n '.digital-clock-item',\n {\n class: `${minute === minutes ? 'selected' : ''} ${disabled ? 'disabled' : ''}`,\n onclick: () => {\n if (disabled) return;\n onTimeChange(hours, minute, amOrPm);\n if (spanMinutes) {\n spanMinutes.innerHTML = addLeadingZero(minute);\n }\n if (state.minuteScrollContainer) {\n const index = minuteOptions.indexOf(minute);\n scrollToValue(state.minuteScrollContainer, index + 2, ITEM_HEIGHT, true);\n }\n m.redraw();\n },\n },\n addLeadingZero(minute)\n );\n }),\n\n // Padding items for centering\n m('.digital-clock-item.padding'),\n m('.digital-clock-item.padding'),\n ]\n ),\n\n // AM/PM column (if twelveHour)\n twelveHour &&\n m(\n '.digital-clock-column.ampm-column',\n {\n oncreate: (vnode) => {\n state.amPmScrollContainer = vnode.dom as HTMLElement;\n const amPmOptions = ['AM', 'PM'];\n const currentIndex = amPmOptions.indexOf(amOrPm);\n if (currentIndex >= 0) {\n scrollToValue(state.amPmScrollContainer, currentIndex + 2, ITEM_HEIGHT, false);\n }\n },\n onwheel: (e: WheelEvent) => {\n e.preventDefault();\n const delta = Math.sign(e.deltaY);\n const newAmPm = delta > 0 ? 'PM' : 'AM';\n if (newAmPm !== amOrPm && !isTimeDisabled(hours, minutes, newAmPm, minTime, maxTime, twelveHour)) {\n onTimeChange(hours, minutes, newAmPm);\n if (spanAmPm) {\n spanAmPm.innerHTML = newAmPm;\n }\n const amPmOptions = ['AM', 'PM'];\n const newIndex = amPmOptions.indexOf(newAmPm);\n if (state.amPmScrollContainer) {\n scrollToValue(state.amPmScrollContainer, newIndex + 2, ITEM_HEIGHT, true);\n }\n m.redraw();\n }\n },\n onscroll: () => {\n if (state.amPmScrollTimeout) {\n clearTimeout(state.amPmScrollTimeout);\n }\n state.amPmScrollTimeout = window.setTimeout(() => {\n if (!state.amPmScrollContainer) return;\n snapToNearestItem(state.amPmScrollContainer, ITEM_HEIGHT, (index) => {\n const actualIndex = index - 2;\n const amPmOptions = ['AM', 'PM'];\n if (actualIndex >= 0 && actualIndex < amPmOptions.length) {\n const newAmPm = amPmOptions[actualIndex] as 'AM' | 'PM';\n if (!isTimeDisabled(hours, minutes, newAmPm, minTime, maxTime, twelveHour)) {\n onTimeChange(hours, minutes, newAmPm);\n if (spanAmPm) {\n spanAmPm.innerHTML = newAmPm;\n }\n m.redraw();\n }\n }\n });\n }, 150);\n },\n },\n [\n // Padding items\n m('.digital-clock-item.padding'),\n m('.digital-clock-item.padding'),\n\n // AM/PM items\n ['AM', 'PM'].map((ampm) => {\n const disabled = isTimeDisabled(hours, minutes, ampm as 'AM' | 'PM', minTime, maxTime, twelveHour);\n return m(\n '.digital-clock-item',\n {\n class: `${ampm === amOrPm ? 'selected' : ''} ${disabled ? 'disabled' : ''}`,\n onclick: () => {\n if (disabled) return;\n onTimeChange(hours, minutes, ampm as 'AM' | 'PM');\n if (spanAmPm) {\n spanAmPm.innerHTML = ampm;\n }\n if (state.amPmScrollContainer) {\n const amPmOptions = ['AM', 'PM'];\n const index = amPmOptions.indexOf(ampm);\n scrollToValue(state.amPmScrollContainer, index + 2, ITEM_HEIGHT, true);\n }\n m.redraw();\n },\n },\n ampm\n );\n }),\n\n // Padding items\n m('.digital-clock-item.padding'),\n m('.digital-clock-item.padding'),\n ]\n ),\n ]);\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { addLeadingZero } from './time-utils';\n\n/**\n * Attributes for the AnalogClock component\n */\nexport interface AnalogClockAttrs {\n /** Current hours value (1-12 for 12-hour, 0-23 for 24-hour) */\n hours: number;\n\n /** Current minutes value (0-59) */\n minutes: number;\n\n /** Current AM/PM value (only relevant in 12-hour mode) */\n amOrPm: 'AM' | 'PM';\n\n /** Current view mode: 'hours' or 'minutes' */\n currentView: 'hours' | 'minutes';\n\n /** Whether to use 12-hour format (true) or 24-hour format (false) */\n twelveHour: boolean;\n\n /** Radius of the clock dial (default: 135) */\n dialRadius?: number;\n\n /** Radius of outer clock ticks (default: 105) */\n outerRadius?: number;\n\n /** Radius of inner clock ticks for 24-hour mode (default: 70) */\n innerRadius?: number;\n\n /** Radius of tick circles (default: 20) */\n tickRadius?: number;\n\n /** Round minutes to nearest 5 when dragging (default: false) */\n roundBy5?: boolean;\n\n /** Enable haptic feedback vibration (default: true) */\n vibrate?: boolean;\n\n /** Callback when time changes */\n onTimeChange: (hours: number, minutes: number) => void;\n\n /** Callback when view changes (optional) */\n onViewChange?: (view: 'hours' | 'minutes') => void;\n\n /** Optional reference to external hours display element for updates */\n spanHours?: HTMLElement;\n\n /** Optional reference to external minutes display element for updates */\n spanMinutes?: HTMLElement;\n}\n\n/**\n * Internal state for the AnalogClock component\n */\ninterface AnalogClockState {\n // SVG elements\n hand?: SVGLineElement;\n bg?: SVGCircleElement;\n bearing?: SVGCircleElement;\n g?: SVGGElement;\n\n // DOM elements\n canvas?: HTMLElement;\n plate?: HTMLElement;\n hoursView?: HTMLElement;\n minutesView?: HTMLElement;\n\n // Interaction state\n moved: boolean;\n x0: number;\n y0: number;\n dx: number;\n dy: number;\n vibrateTimer?: number;\n}\n\n/**\n * AnalogClock component - A draggable analog clock face for time selection\n *\n * @example\n * ```typescript\n * m(AnalogClock, {\n * hours: 10,\n * minutes: 30,\n * amOrPm: 'AM',\n * currentView: 'hours',\n * twelveHour: true,\n * onTimeChange: (hours, minutes) => {\n * console.log(`Time changed to ${hours}:${minutes}`);\n * },\n * onViewChange: (view) => {\n * console.log(`View changed to ${view}`);\n * }\n * })\n * ```\n */\nexport const AnalogClock: FactoryComponent<AnalogClockAttrs> = () => {\n const state: AnalogClockState = {\n moved: false,\n x0: 0,\n y0: 0,\n dx: 0,\n dy: 0,\n };\n\n const getPos = (e: Event): { x: number; y: number } => {\n const touchEvent = e as TouchEvent;\n const mouseEvent = e as MouseEvent;\n\n if (touchEvent.targetTouches && touchEvent.targetTouches.length >= 1) {\n return { x: touchEvent.targetTouches[0].clientX, y: touchEvent.targetTouches[0].clientY };\n }\n return { x: mouseEvent.clientX, y: mouseEvent.clientY };\n };\n\n const vibrate = (attrs: AnalogClockAttrs) => {\n if (state.vibrateTimer) {\n clearTimeout(state.vibrateTimer);\n }\n if (attrs.vibrate && navigator.vibrate) {\n navigator.vibrate(10);\n state.vibrateTimer = window.setTimeout(() => {\n state.vibrateTimer = undefined;\n }, 100);\n }\n };\n\n const setHand = (x: number, y: number, attrs: AnalogClockAttrs, roundBy5?: boolean, _dragging?: boolean) => {\n const outerRadius = attrs.outerRadius || 105;\n const innerRadius = attrs.innerRadius || 70;\n const tickRadius = attrs.tickRadius || 20;\n\n let radian = Math.atan2(x, -y);\n const isHours = attrs.currentView === 'hours';\n const unit = Math.PI / (isHours || roundBy5 ? 6 : 30);\n const z = Math.sqrt(x * x + y * y);\n const inner = isHours && z < (outerRadius + innerRadius) / 2;\n let radius = inner ? innerRadius : outerRadius;\n\n if (attrs.twelveHour) {\n radius = outerRadius;\n }\n\n if (radian < 0) {\n radian = Math.PI * 2 + radian;\n }\n\n let value = Math.round(radian / unit);\n radian = value * unit;\n\n if (attrs.twelveHour) {\n if (isHours) {\n if (value === 0) value = 12;\n } else {\n if (roundBy5) value *= 5;\n if (value === 60) value = 0;\n }\n } else {\n if (isHours) {\n if (value === 12) value = 0;\n value = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n } else {\n if (roundBy5) value *= 5;\n if (value === 60) value = 0;\n }\n }\n\n const currentValue = isHours ? attrs.hours : attrs.minutes;\n if (currentValue !== value) {\n vibrate(attrs);\n }\n\n // Update the value\n if (isHours) {\n attrs.onTimeChange(value, attrs.minutes);\n if (attrs.spanHours) {\n attrs.spanHours.innerHTML = addLeadingZero(value);\n }\n } else {\n attrs.onTimeChange(attrs.hours, value);\n if (attrs.spanMinutes) {\n attrs.spanMinutes.innerHTML = addLeadingZero(value);\n }\n }\n\n // Set clock hand position\n if (state.hand && state.bg) {\n const cx1 = Math.sin(radian) * (radius - tickRadius);\n const cy1 = -Math.cos(radian) * (radius - tickRadius);\n const cx2 = Math.sin(radian) * radius;\n const cy2 = -Math.cos(radian) * radius;\n\n state.hand.setAttribute('x2', cx1.toString());\n state.hand.setAttribute('y2', cy1.toString());\n state.bg.setAttribute('cx', cx2.toString());\n state.bg.setAttribute('cy', cy2.toString());\n }\n };\n\n const resetClock = (attrs: AnalogClockAttrs) => {\n const view = attrs.currentView;\n const value = view === 'hours' ? attrs.hours : attrs.minutes;\n const isHours = view === 'hours';\n const unit = Math.PI / (isHours ? 6 : 30);\n const radian = value * unit;\n const outerRadius = attrs.outerRadius || 105;\n const innerRadius = attrs.innerRadius || 70;\n\n // In 12-hour mode, always use outer radius\n // In 24-hour mode, use inner radius for hours 1-12, outer for 0 and 13-23\n let radius = outerRadius;\n if (!attrs.twelveHour && isHours && value > 0 && value < 13) {\n radius = innerRadius;\n }\n\n const x = Math.sin(radian) * radius;\n const y = -Math.cos(radian) * radius;\n\n setHand(x, y, attrs);\n };\n\n const handleClockClickStart = (e: Event, attrs: AnalogClockAttrs) => {\n e.preventDefault();\n if (!state.plate) return;\n\n const _dialRadius = attrs.dialRadius || 135;\n const clockPlateBR = state.plate.getBoundingClientRect();\n const offset = { x: clockPlateBR.left, y: clockPlateBR.top };\n\n state.x0 = offset.x + _dialRadius;\n state.y0 = offset.y + _dialRadius;\n state.moved = false;\n const clickPos = getPos(e);\n state.dx = clickPos.x - state.x0;\n state.dy = clickPos.y - state.y0;\n\n const startX = clickPos.x;\n const startY = clickPos.y;\n\n setHand(state.dx, state.dy, attrs, attrs.roundBy5);\n m.redraw();\n\n // Add document-level listeners to track dragging\n const moveHandler = (e: Event) => {\n e.preventDefault();\n const clickPos = getPos(e);\n const x = clickPos.x - state.x0;\n const y = clickPos.y - state.y0;\n\n // Only consider it \"moved\" if dragged more than 5 pixels\n const distance = Math.sqrt(Math.pow(clickPos.x - startX, 2) + Math.pow(clickPos.y - startY, 2));\n if (distance > 5) {\n state.moved = true;\n }\n\n setHand(x, y, attrs, attrs.roundBy5, true);\n };\n\n const endHandler = () => {\n document.removeEventListener('mousemove', moveHandler);\n document.removeEventListener('touchmove', moveHandler);\n\n // After setting hour (either by click or drag), switch to minutes view\n if (attrs.currentView === 'hours' && attrs.onViewChange) {\n attrs.onViewChange('minutes');\n }\n\n state.moved = false;\n m.redraw();\n };\n\n document.addEventListener('mousemove', moveHandler);\n document.addEventListener('touchmove', moveHandler);\n document.addEventListener('mouseup', endHandler, { once: true });\n document.addEventListener('touchend', endHandler, { once: true });\n };\n\n const HourTicks: FactoryComponent<AnalogClockAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const dialRadius = attrs.dialRadius || 135;\n const outerRadius = attrs.outerRadius || 105;\n const innerRadius = attrs.innerRadius || 70;\n const tickRadius = attrs.tickRadius || 20;\n\n const ticks = [];\n\n if (attrs.twelveHour) {\n for (let i = 1; i < 13; i++) {\n const radian = (i / 6) * Math.PI;\n const radius = outerRadius;\n const left = dialRadius + Math.sin(radian) * radius - tickRadius;\n const top = dialRadius - Math.cos(radian) * radius - tickRadius;\n ticks.push(\n m(\n '.timepicker-tick',\n {\n style: {\n left: `${left}px`,\n top: `${top}px`,\n },\n },\n i === 0 ? '00' : i.toString()\n )\n );\n }\n } else {\n for (let i = 0; i < 24; i++) {\n const radian = (i / 6) * Math.PI;\n const inner = i > 0 && i < 13;\n const radius = inner ? innerRadius : outerRadius;\n const left = dialRadius + Math.sin(radian) * radius - tickRadius;\n const top = dialRadius - Math.cos(radian) * radius - tickRadius;\n ticks.push(\n m(\n '.timepicker-tick',\n {\n style: {\n left: `${left}px`,\n top: `${top}px`,\n },\n },\n i === 0 ? '00' : i.toString()\n )\n );\n }\n }\n\n return ticks;\n },\n };\n };\n\n const MinuteTicks: FactoryComponent<AnalogClockAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const dialRadius = attrs.dialRadius || 135;\n const outerRadius = attrs.outerRadius || 105;\n const tickRadius = attrs.tickRadius || 20;\n\n const ticks = [];\n\n for (let i = 0; i < 60; i += 5) {\n const radian = (i / 30) * Math.PI;\n const left = dialRadius + Math.sin(radian) * outerRadius - tickRadius;\n const top = dialRadius - Math.cos(radian) * outerRadius - tickRadius;\n ticks.push(\n m(\n '.timepicker-tick',\n {\n style: {\n left: `${left}px`,\n top: `${top}px`,\n },\n },\n addLeadingZero(i)\n )\n );\n }\n\n return ticks;\n },\n };\n };\n\n return {\n oncreate: ({ attrs }) => {\n resetClock(attrs);\n },\n\n view: ({ attrs }) => {\n // Handle view transitions\n const isHours = attrs.currentView === 'hours';\n const dialRadius = attrs.dialRadius || 135;\n const tickRadius = attrs.tickRadius || 20;\n const diameter = dialRadius * 2;\n\n // Calculate hand and background positions\n const view = attrs.currentView;\n const value = view === 'hours' ? attrs.hours : attrs.minutes;\n const unit = Math.PI / (view === 'hours' ? 6 : 30);\n const radian = value * unit;\n const outerRadius = attrs.outerRadius || 105;\n const innerRadius = attrs.innerRadius || 70;\n\n // In 12-hour mode, always use outer radius\n // In 24-hour mode, use inner radius for hours 1-12, outer for 0 and 13-23\n let radius = outerRadius;\n if (!attrs.twelveHour && view === 'hours' && value > 0 && value < 13) {\n radius = innerRadius;\n }\n\n const cx1 = Math.sin(radian) * (radius - tickRadius);\n const cy1 = -Math.cos(radian) * (radius - tickRadius);\n const cx2 = Math.sin(radian) * radius;\n const cy2 = -Math.cos(radian) * radius;\n\n return [\n m(\n '.timepicker-canvas',\n {\n oncreate: (vnode) => {\n state.canvas = vnode.dom as HTMLElement;\n state.plate = vnode.dom.parentElement as HTMLElement;\n },\n onmousedown: (e: MouseEvent) => handleClockClickStart(e, attrs),\n ontouchstart: (e: TouchEvent) => handleClockClickStart(e, attrs),\n },\n [\n m(\n 'svg.timepicker-svg',\n {\n width: diameter,\n height: diameter,\n xmlns: 'http://www.w3.org/2000/svg',\n },\n [\n m(\n 'g',\n {\n transform: `translate(${dialRadius},${dialRadius})`,\n oncreate: (vnode) => {\n state.g = vnode.dom as SVGGElement;\n },\n },\n [\n m('line', {\n x1: '0',\n y1: '0',\n x2: cx1,\n y2: cy1,\n oncreate: (vnode) => {\n state.hand = vnode.dom as SVGLineElement;\n },\n }),\n m('circle.timepicker-canvas-bg', {\n cx: cx2,\n cy: cy2,\n r: tickRadius,\n oncreate: (vnode) => {\n state.bg = vnode.dom as SVGCircleElement;\n },\n }),\n m('circle.timepicker-canvas-bearing', {\n cx: '0',\n cy: '0',\n r: '4',\n oncreate: (vnode) => {\n state.bearing = vnode.dom as SVGCircleElement;\n },\n }),\n ]\n ),\n ]\n ),\n ]\n ),\n m(\n `.timepicker-dial.timepicker-hours${isHours ? '' : '.timepicker-dial-out'}`,\n {\n oncreate: (vnode) => {\n state.hoursView = vnode.dom as HTMLElement;\n },\n style: {\n visibility: isHours ? 'visible' : 'hidden',\n },\n },\n m(HourTicks, attrs)\n ),\n m(\n `.timepicker-dial.timepicker-minutes${!isHours ? '' : '.timepicker-dial-out'}`,\n {\n oncreate: (vnode) => {\n state.minutesView = vnode.dom as HTMLElement;\n },\n style: {\n visibility: !isHours ? 'visible' : 'hidden',\n },\n },\n m(MinuteTicks, attrs)\n ),\n ];\n },\n\n onupdate: ({ attrs }) => {\n // Update clock hand when time or view changes\n resetClock(attrs);\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { InputAttrs } from './input-options';\nimport { uniqueId, renderToPortal, clearPortal } from './utils';\nimport { addLeadingZero } from './time-utils';\nimport { DigitalClock } from './digital-clock';\nimport { AnalogClock } from './analog-clock';\n\nexport interface TimepickerI18n {\n cancel?: string;\n clear?: string;\n done?: string;\n next?: string;\n}\n\nconst defaultI18n: Required<TimepickerI18n> = {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok',\n next: 'Next',\n};\n\nexport interface TimepickerOptions {\n dialRadius?: number;\n outerRadius?: number;\n innerRadius?: number;\n tickRadius?: number;\n duration?: number;\n container?: string | null;\n defaultTime?: string; // 'now' or '13:14' e.g.\n fromNow?: number; // Millisecond offset from the defaultTime\n showClearBtn?: boolean;\n i18n?: TimepickerI18n;\n autoClose?: boolean; // auto close when minute is selected\n twelveHour?: boolean; // change to 12 hour AM/PM clock from 24 hour\n vibrate?: boolean; // vibrate the device when dragging clock hand\n roundBy5?: boolean;\n\n /** Display mode: 'analog' (default) or 'digital' */\n displayMode?: 'analog' | 'digital';\n\n /** Step for minute increments in digital mode (default 5) */\n minuteStep?: number;\n\n /** Step for hour increments (default 1) */\n hourStep?: number;\n\n /** Minimum selectable time in HH:MM or HH:MM AM/PM format */\n minTime?: string;\n\n /** Maximum selectable time in HH:MM or HH:MM AM/PM format */\n maxTime?: string;\n\n // Callbacks\n onOpen?: () => void;\n onOpenStart?: () => void;\n onOpenEnd?: () => void;\n onCloseStart?: () => void;\n onCloseEnd?: () => void;\n onSelect?: (hour: number, minute: number) => void;\n}\n\nexport interface TimePickerAttrs extends InputAttrs<string>, TimepickerOptions {\n /** Use inline mode (HTML5 time input) instead of modal, default true */\n useModal?: boolean;\n /** Allow format toggle between 12h/24h (for inline mode) */\n allowFormatToggle?: boolean;\n}\n\ninterface TimepickerState {\n id: string;\n isOpen: boolean;\n hours: number;\n minutes: number;\n amOrPm: 'AM' | 'PM';\n currentView: 'hours' | 'minutes';\n portalContainerId: string;\n // DOM elements for display\n spanHours?: HTMLElement;\n spanMinutes?: HTMLElement;\n spanAmPm?: HTMLElement;\n footer?: HTMLElement;\n amBtn?: HTMLElement;\n pmBtn?: HTMLElement;\n}\n\nconst defaultOptions: Required<TimepickerOptions> = {\n dialRadius: 135,\n outerRadius: 105,\n innerRadius: 70,\n tickRadius: 20,\n duration: 350,\n container: null,\n defaultTime: 'now',\n fromNow: 0,\n showClearBtn: false,\n i18n: defaultI18n,\n autoClose: false,\n twelveHour: true,\n vibrate: true,\n roundBy5: false,\n displayMode: 'analog',\n minuteStep: 5,\n hourStep: 1,\n minTime: undefined as any,\n maxTime: undefined as any,\n onOpen: () => {},\n onOpenStart: () => {},\n onOpenEnd: () => {},\n onCloseStart: () => {},\n onCloseEnd: () => {},\n onSelect: () => {},\n};\n\n/**\n * TimePicker component based on original Materialize CSS timepicker\n */\nexport const TimePicker: FactoryComponent<TimePickerAttrs> = () => {\n let state: TimepickerState;\n let options: Required<TimepickerOptions>;\n\n // Use shared utilities from time-utils\n // const addLeadingZero = sharedAddLeadingZero;\n // const generateHourOptions = sharedGenerateHourOptions;\n // const generateMinuteOptions = sharedGenerateMinuteOptions;\n // const scrollToValue = sharedScrollToValue;\n // const snapToNearestItem = sharedSnapToNearestItem;\n\n const updateTimeFromInput = (inputValue: string) => {\n let value: string[] = ((inputValue || options.defaultTime || '') + '').split(':');\n let amPmWasProvided = false;\n\n if (options.twelveHour && value.length > 1) {\n if (value[1].toUpperCase().indexOf('AM') > -1) {\n state.amOrPm = 'AM';\n amPmWasProvided = true;\n } else if (value[1].toUpperCase().indexOf('PM') > -1) {\n state.amOrPm = 'PM';\n amPmWasProvided = true;\n }\n value[1] = value[1].replace('AM', '').replace('PM', '').trim();\n }\n\n if (value[0] === 'now') {\n const now = new Date(+new Date() + options.fromNow);\n value = [now.getHours().toString(), now.getMinutes().toString()];\n if (options.twelveHour) {\n state.amOrPm = parseInt(value[0]) >= 12 ? 'PM' : 'AM';\n amPmWasProvided = false; // For 'now', we need to do conversion\n }\n }\n\n let hours = +value[0] || 0;\n let minutes = +value[1] || 0;\n\n if (options.twelveHour) {\n if (!amPmWasProvided) {\n // No AM/PM was provided, assume this is 24-hour format input - convert it\n if (hours >= 12) {\n state.amOrPm = 'PM';\n if (hours > 12) {\n hours = hours - 12;\n }\n } else {\n state.amOrPm = 'AM';\n if (hours === 0) {\n hours = 12;\n }\n }\n } else {\n // AM/PM was provided, hours are already in 12-hour format\n // Just handle midnight/noon edge cases\n if (hours === 0 && state.amOrPm === 'AM') {\n hours = 12;\n }\n }\n }\n\n state.hours = hours;\n state.minutes = minutes;\n\n if (state.spanHours) {\n state.spanHours.innerHTML = addLeadingZero(state.hours);\n }\n if (state.spanMinutes) {\n state.spanMinutes.innerHTML = addLeadingZero(state.minutes);\n }\n\n updateAmPmView();\n };\n\n const updateAmPmView = () => {\n if (options.twelveHour && state.amBtn && state.pmBtn) {\n state.amBtn.classList.toggle('text-primary', state.amOrPm === 'AM');\n state.pmBtn.classList.toggle('text-primary', state.amOrPm === 'PM');\n }\n };\n\n const handleAmPmClick = (ampm: 'AM' | 'PM') => {\n state.amOrPm = ampm;\n updateAmPmView();\n };\n\n const open = (inputValue: string) => {\n if (state.isOpen) return;\n\n state.isOpen = true;\n updateTimeFromInput(inputValue);\n state.currentView = 'hours';\n\n if (options.onOpen) options.onOpen();\n if (options.onOpenStart) options.onOpenStart();\n if (options.onOpenEnd) options.onOpenEnd();\n };\n\n const close = () => {\n if (!state.isOpen) return;\n\n state.isOpen = false;\n if (options.onCloseStart) options.onCloseStart();\n if (options.onCloseEnd) options.onCloseEnd();\n };\n\n const done = (clearValue?: boolean) => {\n // const last = ''; // We'll get this from the actual input\n let value = clearValue ? '' : addLeadingZero(state.hours) + ':' + addLeadingZero(state.minutes);\n\n if (!clearValue && options.twelveHour) {\n value = `${value} ${state.amOrPm}`;\n }\n\n close();\n m.redraw();\n return value;\n };\n\n const clear = () => {\n return done(true);\n };\n\n interface TimepickerModalAttrs {\n i18n: TimepickerI18n;\n showClearBtn: boolean;\n }\n\n const TimepickerModal: FactoryComponent<TimepickerModalAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const { i18n, showClearBtn } = attrs;\n const isDigitalMode = options.displayMode === 'digital';\n\n return [\n m('.modal-content.timepicker-container', [\n m('.timepicker-digital-display', [\n m('.timepicker-text-container', [\n m('.timepicker-display-column', [\n m(\n 'span.timepicker-span-hours',\n {\n class: state.currentView === 'hours' ? 'text-primary' : '',\n onclick: () => {\n if (!isDigitalMode) {\n state.currentView = 'hours';\n m.redraw();\n }\n },\n oncreate: (vnode) => {\n state.spanHours = vnode.dom as HTMLElement;\n },\n },\n addLeadingZero(state.hours)\n ),\n ':',\n m(\n 'span.timepicker-span-minutes',\n {\n class: state.currentView === 'minutes' ? 'text-primary' : '',\n onclick: () => {\n if (!isDigitalMode) {\n state.currentView = 'minutes';\n m.redraw();\n }\n },\n oncreate: (vnode) => {\n state.spanMinutes = vnode.dom as HTMLElement;\n },\n },\n addLeadingZero(state.minutes)\n ),\n ]),\n options.twelveHour &&\n m('.timepicker-display-column.timepicker-display-am-pm', [\n m(\n '.timepicker-span-am-pm',\n {\n oncreate: (vnode) => {\n state.spanAmPm = vnode.dom as HTMLElement;\n },\n },\n [\n m(\n '.am-btn',\n {\n class: state.amOrPm === 'AM' ? 'text-primary' : '',\n onclick: () => handleAmPmClick('AM'),\n oncreate: (vnode) => {\n state.amBtn = vnode.dom as HTMLElement;\n },\n },\n 'AM'\n ),\n m(\n '.pm-btn',\n {\n class: state.amOrPm === 'PM' ? 'text-primary' : '',\n onclick: () => handleAmPmClick('PM'),\n oncreate: (vnode) => {\n state.pmBtn = vnode.dom as HTMLElement;\n },\n },\n 'PM'\n ),\n ]\n ),\n ]),\n ]),\n ]),\n\n // Conditional rendering: digital or analog mode\n isDigitalMode\n ? m('.timepicker-digital-mode', [\n m(DigitalClock, {\n hours: state.hours,\n minutes: state.minutes,\n amOrPm: state.amOrPm,\n twelveHour: options.twelveHour,\n minuteStep: options.minuteStep,\n hourStep: options.hourStep,\n minTime: options.minTime,\n maxTime: options.maxTime,\n onTimeChange: (hours, minutes, amOrPm) => {\n state.hours = hours;\n state.minutes = minutes;\n state.amOrPm = amOrPm;\n updateAmPmView();\n if (options.onSelect) options.onSelect(hours, minutes);\n },\n spanHours: state.spanHours,\n spanMinutes: state.spanMinutes,\n spanAmPm: state.spanAmPm,\n }),\n m(\n '.timepicker-footer',\n {\n oncreate: (vnode) => {\n state.footer = vnode.dom as HTMLElement;\n },\n },\n [\n m(\n 'button.btn-flat.timepicker-clear.waves-effect',\n {\n type: 'button',\n tabindex: options.twelveHour ? '3' : '1',\n style: showClearBtn ? '' : 'visibility: hidden;',\n onclick: () => clear(),\n },\n i18n.clear\n ),\n m('.confirmation-btns', [\n m(\n 'button.btn-flat.timepicker-close.waves-effect',\n {\n type: 'button',\n tabindex: options.twelveHour ? '3' : '1',\n onclick: () => close(),\n },\n i18n.cancel\n ),\n m(\n 'button.btn-flat.timepicker-close.waves-effect',\n {\n type: 'button',\n tabindex: options.twelveHour ? '3' : '1',\n onclick: () => done(),\n },\n i18n.done\n ),\n ]),\n ]\n ),\n ])\n : m('.timepicker-analog-display', [\n m(\n '.timepicker-plate',\n m(AnalogClock, {\n hours: state.hours,\n minutes: state.minutes,\n amOrPm: state.amOrPm,\n currentView: state.currentView,\n twelveHour: options.twelveHour,\n dialRadius: options.dialRadius,\n outerRadius: options.outerRadius,\n innerRadius: options.innerRadius,\n tickRadius: options.tickRadius,\n roundBy5: options.roundBy5,\n vibrate: options.vibrate,\n onTimeChange: (hours, minutes) => {\n state.hours = hours;\n state.minutes = minutes;\n if (options.onSelect) options.onSelect(hours, minutes);\n },\n onViewChange: (view) => {\n state.currentView = view;\n if (view === 'minutes' && options.autoClose) {\n setTimeout(() => done(), options.duration / 2);\n }\n },\n spanHours: state.spanHours,\n spanMinutes: state.spanMinutes,\n })\n ),\n m(\n '.timepicker-footer',\n {\n oncreate: (vnode) => {\n state.footer = vnode.dom as HTMLElement;\n },\n },\n [\n m(\n 'button.btn-flat.timepicker-clear.waves-effect',\n {\n type: 'button',\n tabindex: options.twelveHour ? '3' : '1',\n style: showClearBtn ? '' : 'visibility: hidden;',\n onclick: () => clear(),\n },\n i18n.clear\n ),\n m('.confirmation-btns', [\n m(\n 'button.btn-flat.timepicker-close.waves-effect',\n {\n type: 'button',\n tabindex: options.twelveHour ? '3' : '1',\n onclick: () => close(),\n },\n i18n.cancel\n ),\n m(\n 'button.btn-flat.timepicker-close.waves-effect',\n {\n type: 'button',\n tabindex: options.twelveHour ? '3' : '1',\n onclick: () => done(),\n },\n i18n.done\n ),\n ]),\n ]\n ),\n ]),\n ]),\n ];\n },\n };\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && state.isOpen) {\n close();\n clearPortal(state.portalContainerId);\n m.redraw();\n }\n };\n\n const renderPickerToPortal = () => {\n const pickerModal = m(\n '.timepicker-modal-wrapper',\n {\n style: {\n position: 'fixed',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n },\n [\n // Modal overlay\n m('.modal-overlay', {\n style: {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: '1002',\n },\n onclick: () => {\n close();\n m.redraw();\n },\n }),\n\n // Modal content\n m(\n '.modal.timepicker-modal.open',\n {\n style: {\n position: 'relative',\n zIndex: '1003',\n display: 'block',\n opacity: 1,\n top: 'auto',\n transform: 'scaleX(1) scaleY(1)',\n margin: '0 auto',\n },\n },\n [\n m(TimepickerModal, {\n i18n: options.i18n,\n showClearBtn: options.showClearBtn,\n } as TimepickerModalAttrs),\n ]\n ),\n ]\n );\n\n renderToPortal(state.portalContainerId, pickerModal, 1004);\n };\n\n return {\n oninit: (vnode) => {\n const attrs = vnode.attrs;\n options = { ...defaultOptions, ...attrs };\n\n state = {\n id: uniqueId(),\n isOpen: false,\n hours: 12,\n minutes: 0,\n amOrPm: 'AM',\n currentView: 'hours',\n portalContainerId: `timepicker-portal-${uniqueId()}`,\n };\n\n // Handle value after options are set\n if (attrs.defaultValue) {\n updateTimeFromInput(attrs.defaultValue);\n }\n\n // Add ESC key listener\n document.addEventListener('keydown', handleKeyDown);\n },\n\n onremove: () => {\n // Cleanup\n document.removeEventListener('keydown', handleKeyDown);\n\n // Clean up portal if picker was open\n if (state.isOpen) {\n clearPortal(state.portalContainerId);\n }\n },\n\n onupdate: ({ attrs }) => {\n const { useModal = true } = attrs;\n\n // Only render to portal when using modal mode\n if (useModal && state.isOpen) {\n renderPickerToPortal();\n } else {\n clearPortal(state.portalContainerId);\n }\n },\n\n view: ({ attrs }) => {\n const {\n id = state.id,\n label,\n placeholder,\n disabled,\n readonly,\n required,\n iconName,\n helperText,\n onchange,\n oninput,\n useModal = true,\n twelveHour,\n className: cn1,\n class: cn2,\n } = attrs;\n const className = cn1 || cn2 || 'col s12';\n // Format time value for display\n const formatTime = (hours: number, minutes: number, use12Hour: boolean): string => {\n if (use12Hour) {\n const displayHours = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const ampm = hours >= 12 ? 'PM' : 'AM';\n return `${displayHours}:${minutes.toString().padStart(2, '0')} ${ampm}`;\n } else {\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n }\n };\n\n const setTime = (timeValue: string) => {\n if (onchange) {\n onchange(timeValue);\n }\n };\n\n // Calculate display hours based on format\n let hoursForDisplay = state.hours;\n\n if (twelveHour) {\n // For 12-hour display format, use the original 24-hour value so formatTime can properly determine AM/PM\n if (options.twelveHour) {\n // Convert from internal 12-hour back to 24-hour for proper AM/PM calculation\n if (state.amOrPm === 'PM' && state.hours !== 12) {\n hoursForDisplay = state.hours + 12;\n } else if (state.amOrPm === 'AM' && state.hours === 12) {\n hoursForDisplay = 0;\n }\n }\n } else {\n // For 24-hour display format\n if (options.twelveHour) {\n // Convert from internal 12-hour to 24-hour for display\n if (state.amOrPm === 'PM' && state.hours !== 12) {\n hoursForDisplay = state.hours + 12;\n } else if (state.amOrPm === 'AM' && state.hours === 12) {\n hoursForDisplay = 0;\n }\n }\n }\n\n const displayValue =\n state.hours !== undefined && state.minutes !== undefined\n ? formatTime(hoursForDisplay, state.minutes, twelveHour || false)\n : '';\n\n return m('.input-field', { className }, [\n // Icon prefix\n iconName && m('i.material-icons.prefix', iconName),\n\n // Time input field - use HTML5 time input for inline mode\n m('input.timepicker', {\n id,\n type: useModal ? 'text' : 'time',\n value: useModal\n ? displayValue\n : state.hours !== undefined && state.minutes !== undefined\n ? `${state.hours.toString().padStart(2, '0')}:${state.minutes.toString().padStart(2, '0')}`\n : '',\n placeholder: useModal ? placeholder : undefined,\n disabled,\n readonly,\n required,\n onclick: () => {\n if (!disabled && !readonly && useModal) {\n open(displayValue);\n }\n },\n onchange: (e: Event) => {\n if (!useModal) {\n // For inline mode, handle HTML5 time input changes directly\n const target = e.target as HTMLInputElement;\n const timeValue = target.value; // Already in HH:MM format\n const [hours, minutes] = timeValue.split(':').map(Number);\n state.hours = hours;\n state.minutes = minutes;\n setTime(timeValue);\n }\n },\n oninput: (e: Event) => {\n if (!useModal && oninput) {\n const target = e.target as HTMLInputElement;\n oninput(target.value);\n }\n },\n }),\n\n // Label\n label &&\n m(\n 'label',\n {\n for: id,\n class: displayValue || placeholder ? 'active' : '',\n },\n label\n ),\n\n // Helper text\n helperText && m('span.helper-text', helperText),\n\n // Modal is now rendered via portal in onupdate hook\n ]);\n },\n };\n};\n","import { FactoryComponent, Attributes } from 'mithril';\n\nexport interface PushpinOptions {\n /** Distance from top of page where element becomes fixed */\n top?: number;\n /** Distance from bottom of page where element stops being fixed */\n bottom?: number;\n /** Offset for calculations */\n offset?: number;\n /** Called when pushpin position changes */\n onPositionChange?: (position: 'pin-top' | 'pinned' | 'pin-bottom') => void;\n}\n\ninterface PushpinState {\n originalOffset: number;\n}\n\nexport class Pushpin {\n public el: HTMLElement;\n public options: Required<PushpinOptions>;\n private state: PushpinState;\n\n private static defaults: PushpinOptions = {\n top: 0,\n bottom: Infinity,\n offset: 0,\n onPositionChange: undefined,\n };\n\n // Bound event handler\n private _updateElementPositionBound!: () => void;\n\n constructor(el: HTMLElement, options: PushpinOptions = {}) {\n this.el = el;\n this.options = { ...Pushpin.defaults, ...options } as Required<PushpinOptions>;\n\n this.state = {\n originalOffset: this.el.getBoundingClientRect().top + window.pageYOffset,\n };\n\n (this.el as any).M_Pushpin = this;\n this._setupEventHandlers();\n this._updateElementPosition();\n }\n\n static getInstance(el: HTMLElement): Pushpin | undefined {\n return (el as any).M_Pushpin;\n }\n\n destroy(): void {\n this.el.style.position = '';\n this.el.style.top = '';\n this.el.style.left = '';\n this._removeEventHandlers();\n (this.el as any).M_Pushpin = undefined;\n }\n\n _setupEventHandlers(): void {\n this._updateElementPositionBound = this._updateElementPosition.bind(this);\n window.addEventListener('scroll', this._updateElementPositionBound);\n window.addEventListener('resize', this._updateElementPositionBound);\n }\n\n _removeEventHandlers(): void {\n window.removeEventListener('scroll', this._updateElementPositionBound);\n window.removeEventListener('resize', this._updateElementPositionBound);\n }\n\n _updateElementPosition(): void {\n const scrolled = window.pageYOffset;\n const elementTop = this.state.originalOffset - this.options.offset;\n // const elementBottom = elementTop + this.el.offsetHeight;\n\n // Check if element should be pinned\n if (scrolled > elementTop) {\n // Check if element is past bottom\n if (this.options.bottom !== Infinity && scrolled > this.options.bottom) {\n this._removePinClasses();\n this.el.classList.add('pin-bottom');\n this.el.style.position = 'absolute';\n this.el.style.top = this.options.bottom - this.el.offsetHeight + 'px';\n this.el.style.left = '';\n\n if (this.options.onPositionChange) {\n this.options.onPositionChange('pin-bottom');\n }\n } else {\n // Pin element\n this._removePinClasses();\n this.el.classList.add('pinned');\n this.el.style.position = 'fixed';\n this.el.style.top = this.options.top + 'px';\n this.el.style.left = this.el.getBoundingClientRect().left + 'px';\n\n if (this.options.onPositionChange) {\n this.options.onPositionChange('pinned');\n }\n }\n } else {\n // Unpin element\n this._removePinClasses();\n this.el.classList.add('pin-top');\n this.el.style.position = '';\n this.el.style.top = '';\n this.el.style.left = '';\n\n if (this.options.onPositionChange) {\n this.options.onPositionChange('pin-top');\n }\n }\n }\n\n _removePinClasses(): void {\n this.el.classList.remove('pin-top');\n this.el.classList.remove('pinned');\n this.el.classList.remove('pin-bottom');\n }\n\n _updatePosition(): void {\n // Recalculate original offset in case element moved\n this.state.originalOffset = this.el.getBoundingClientRect().top + window.pageYOffset;\n this._updateElementPosition();\n }\n}\n\n// Mithril component for declarative usage\nexport interface PushpinAttrs extends Attributes, PushpinOptions {\n /** Element selector or reference to attach pushpin to */\n targetSelector?: string;\n}\n\nexport const PushpinComponent: FactoryComponent<PushpinAttrs> = () => {\n let pushpinInstance: Pushpin | null = null;\n\n return {\n oncreate: ({ attrs }) => {\n if (attrs.targetSelector) {\n const targetEl = document.querySelector(attrs.targetSelector) as HTMLElement;\n if (targetEl) {\n pushpinInstance = new Pushpin(targetEl, attrs);\n }\n }\n },\n\n onupdate: ({ attrs }) => {\n if (pushpinInstance) {\n // Update options and recalculate position\n pushpinInstance.options = { ...pushpinInstance.options, ...attrs };\n pushpinInstance._updatePosition();\n }\n },\n\n onremove: () => {\n if (pushpinInstance) {\n pushpinInstance.destroy();\n pushpinInstance = null;\n }\n },\n\n view: () => null, // This component doesn't render anything itself\n };\n};\n\n// Helper function to initialize pushpins on elements\nexport const initPushpins = (selector: string = '.pushpin', options: PushpinOptions = {}): Pushpin[] => {\n const elements = document.querySelectorAll(selector) as NodeListOf<HTMLElement>;\n const pushpins: Pushpin[] = [];\n\n elements.forEach((el) => {\n if (!(el as any).M_Pushpin) {\n pushpins.push(new Pushpin(el, options));\n }\n });\n\n return pushpins;\n};\n","import m, { Attributes, Component } from 'mithril';\nimport { uniqueId } from './utils';\nimport { InputOption, OptionsList } from './option';\n\nexport interface RadioButtonsAttrs<T extends string | number> extends Attributes {\n /** Element ID */\n id?: string;\n /** Optional title or label */\n label?: string;\n /** The options that you have */\n options: InputOption<T>[];\n /** Event handler that is called when an option is changed. Optional for uncontrolled mode. */\n onchange?: (id: T) => void;\n /**\n * Currently selected id for controlled mode. If provided along with `onchange`, the component operates in controlled mode\n * where the parent manages the state. The parent must update this value in response to `onchange` callbacks.\n */\n checkedId?: T;\n /**\n * Default selected id for uncontrolled mode. Only used when `checkedId` and `onchange` are not provided.\n * The component will manage its own internal state in uncontrolled mode.\n */\n defaultCheckedId?: T;\n /** Optional description */\n description?: string;\n /** If true, start on a new row */\n newRow?: boolean;\n /** If true, add a mandatory '*' after the label */\n isMandatory?: boolean;\n /** Optional CSS that is added to the input checkbox, e.g. if you add col s4, the items will be put inline */\n checkboxClass?: string;\n /** Disable the button */\n disabled?: boolean;\n /** Layout for the options: 'vertical' (default) or 'horizontal' */\n layout?: 'vertical' | 'horizontal';\n /** @deprecated Use layout instead. Kept for backward compatibility. */\n direction?: 'vertical' | 'horizontal';\n /**\n * Explicitly allow HTML in option labels and description.\n * Disabled by default to prevent unsafe rendering.\n */\n allowHtml?: boolean;\n}\n\nexport interface RadioButtonAttrs<T extends string | number> extends Attributes {\n id: T;\n checked?: boolean;\n onchange: (id: T) => void;\n label: string;\n groupId: string;\n disabled?: boolean;\n /** Optional input id for the radio button */\n inputId?: string;\n /** Explicitly allow trusted HTML in the label */\n allowHtml?: boolean;\n}\n\nexport const RadioButton = <T extends string | number>(): Component<RadioButtonAttrs<T>> => ({\n view: ({ attrs: { id, groupId, label, onchange, className = 'col s12', checked, disabled, inputId, allowHtml } }) => {\n const radioId = inputId || `${groupId}-${id}`;\n return m(\n 'p',\n { className },\n m('label', { for: radioId, style: { position: 'relative', display: 'inline-block' } }, [\n m('input[type=radio][tabindex=0]', {\n id: radioId,\n name: groupId,\n disabled,\n checked,\n onclick: onchange ? () => onchange(id) : undefined,\n }),\n m('span', allowHtml ? m.trust(label) : label),\n ])\n );\n },\n});\n\n/** Component to show a list of radio buttons, from which you can choose one. */\nexport const RadioButtons = <T extends string | number>(): Component<RadioButtonsAttrs<T>> => {\n const state = {\n groupId: uniqueId(),\n componentId: '',\n internalCheckedId: undefined as T | undefined,\n };\n\n const isControlled = (attrs: RadioButtonsAttrs<T>) =>\n attrs.checkedId !== undefined && typeof attrs.onchange === 'function';\n\n return {\n oninit: ({ attrs }) => {\n state.componentId = attrs.id || uniqueId();\n\n const controlled = isControlled(attrs);\n\n // Warn developer for improper controlled usage\n if (attrs.checkedId !== undefined && !controlled && !attrs.disabled) {\n console.warn(\n `RadioButtons component received 'checkedId' prop without 'onchange' handler. ` +\n `Use 'defaultCheckedId' for uncontrolled components or add 'onchange' for controlled components.`\n );\n }\n\n // Initialize internal state for uncontrolled mode\n if (!controlled) {\n state.internalCheckedId = attrs.defaultCheckedId;\n }\n },\n view: ({ attrs }) => {\n const {\n checkedId,\n newRow,\n className = 'col s12',\n label = '',\n disabled,\n description,\n options,\n isMandatory,\n checkboxClass,\n layout,\n direction,\n allowHtml = false,\n onchange,\n } = attrs;\n\n const resolvedLayout = layout ?? direction ?? 'vertical';\n\n const { groupId, componentId } = state;\n const controlled = isControlled(attrs);\n\n // Get current checked ID from props or internal state\n let currentCheckedId: T | undefined;\n if (controlled) {\n currentCheckedId = checkedId;\n } else if (disabled) {\n // Non-interactive components: prefer defaultCheckedId, fallback to checkedId\n currentCheckedId = attrs.defaultCheckedId ?? checkedId;\n } else {\n // Interactive uncontrolled: use internal state\n currentCheckedId = state.internalCheckedId ?? attrs.defaultCheckedId;\n }\n\n const handleChange = (id: T) => {\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalCheckedId = id;\n }\n\n // Call onchange if provided\n if (onchange) {\n onchange(id);\n }\n };\n\n const cn = [newRow ? 'clear' : '', className].filter(Boolean).join(' ').trim() || undefined;\n\n const radioItems = options.map((r) => ({\n component: RadioButton<T>,\n props: {\n ...r,\n onchange: handleChange,\n groupId,\n disabled: disabled || r.disabled,\n className: checkboxClass,\n checked: r.id === currentCheckedId,\n inputId: `${componentId}-${r.id}`,\n allowHtml,\n } as RadioButtonAttrs<T>,\n key: r.id,\n }));\n\n const optionsContent = m(OptionsList, {\n options: radioItems,\n layout: resolvedLayout,\n });\n\n return m('div', { id: componentId, className: cn }, [\n label && m('h5.form-group-label', label + (isMandatory ? ' *' : '')),\n description && m('p.helper-text', allowHtml ? m.trust(description) : description),\n m('form', { action: '#' }, optionsContent),\n ]);\n },\n };\n};\n","import m, { Attributes, Component } from 'mithril';\nimport { InputOption } from './option';\nimport {\n getDropdownStyles,\n uniqueId,\n sortOptions,\n normalizeSelection,\n resolveControllableValue,\n syncPortalContent,\n renderFieldChrome,\n} from './utils';\nimport { MaterialIcon } from './material-icon';\nimport { ComponentStyle } from './types';\n\nexport type SortSelected<T extends string | number> =\n | 'asc'\n | 'desc'\n | 'none'\n | ((a: InputOption<T>, b: InputOption<T>) => number);\n\nexport type SelectSummaryMode = 'labels' | 'count' | 'all-or-count';\nexport type SelectAppearance = 'standard' | 'outlined';\n\nexport interface SelectAttrs<T extends string | number> extends Attributes {\n /** Options to select from */\n options: InputOption<T>[];\n /** Called when the selection changes, contains all selected (checked) ids as an array */\n onchange?: (checkedIds: T[]) => void;\n /**\n * Currently selected id or ids. For controlled mode, pass the current selection and provide onchange.\n * For single select, pass a single value or array with one item.\n * For multiple select, pass an array of selected ids.\n */\n checkedId?: T | T[];\n /**\n * Default selected id or ids for uncontrolled mode. Only used when checkedId and onchange are not provided.\n * The component will manage its own internal state in uncontrolled mode.\n */\n defaultCheckedId?: T | T[];\n /** Select a single option or multiple options */\n multiple?: boolean;\n /** Optional label. */\n label?: string;\n /** Optional ID. */\n id?: string;\n /** Unique key for use of the element in an array. */\n key?: string | number;\n /** Add a a placeholder to the input field. */\n placeholder?: string;\n /** Add a description underneath the input field. */\n helperText?: string;\n /** Uses Materialize icons as a prefix or postfix. */\n iconName?: string;\n /** Sets the input field to disabled. */\n disabled?: boolean;\n /** Optional style information. */\n style?: ComponentStyle;\n /** If true, break to a new row */\n newRow?: boolean;\n /**\n * If true, add a mandatory * after the label (if any),\n * and add the required and aria-required attributes to the input element.\n */\n isMandatory?: boolean;\n /** Add the required and aria-required attributes to the input element */\n required?: boolean;\n /** Enable the clear icon */\n showClearButton?: boolean;\n /** Max height of the dropdown menu, default '400px' */\n maxHeight?: string;\n /** Sort selected items: 'asc' (alphabetically A-Z), 'desc' (Z-A), 'none' (insertion order), or custom sort function */\n sortSelected?: SortSelected<T>;\n /** Display mode for selected values in the input field. Defaults to 'labels'. */\n summaryMode?: SelectSummaryMode;\n /** Label shown when all selectable options are selected in summary mode 'all-or-count'. */\n allSelectedLabel?: string;\n /** Label shown when no options are selected in summary mode 'all-or-count'. */\n noneSelectedLabel?: string;\n /** Custom formatter for count-based summary modes. */\n countLabel?: (selectedCount: number, totalCount: number) => string;\n /** Visual style of the trigger. Defaults to 'standard'. */\n appearance?: SelectAppearance;\n}\n\ninterface SelectState<T extends string | number> {\n id: string;\n dropdownId: string;\n isOpen: boolean;\n focusedIndex: number;\n inputRef?: HTMLElement | null;\n dropdownRef?: HTMLElement | null;\n internalSelectedIds: T[];\n isInsideModal: boolean;\n isMultiple: boolean;\n}\n\n/** Select component */\nexport const Select = <T extends string | number>(): Component<SelectAttrs<T>> => {\n const state: SelectState<T> = {\n id: '',\n dropdownId: '',\n isOpen: false,\n focusedIndex: -1,\n inputRef: null,\n dropdownRef: null,\n internalSelectedIds: [],\n isInsideModal: false,\n isMultiple: false,\n };\n\n const isControlled = (attrs: SelectAttrs<T>) => attrs.checkedId !== undefined && attrs.onchange !== undefined;\n\n const isSelected = (id: T, selectedIds: T[]) => {\n return selectedIds.some((selectedId) => selectedId === id);\n };\n\n const toggleOption = (id: T, multiple: boolean, attrs: SelectAttrs<T>) => {\n const controlled = isControlled(attrs);\n\n // Get current selected IDs from props or internal state\n const currentSelectedIds = controlled\n ? attrs.checkedId !== undefined\n ? Array.isArray(attrs.checkedId)\n ? attrs.checkedId\n : [attrs.checkedId]\n : []\n : state.internalSelectedIds;\n\n let newIds: T[];\n if (multiple) {\n newIds = currentSelectedIds.includes(id)\n ? currentSelectedIds.filter((selectedId) => selectedId !== id)\n : [...currentSelectedIds, id];\n } else {\n newIds = [id];\n state.isOpen = false; // Close dropdown for single select\n }\n\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalSelectedIds = newIds;\n }\n\n // Call onchange if provided\n if (attrs.onchange) {\n attrs.onchange(newIds);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent, attrs: SelectAttrs<T>) => {\n const { options } = attrs;\n const selectableOptions = options.filter((opt) => !opt.disabled);\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!state.isOpen) {\n state.isOpen = true;\n state.focusedIndex = 0;\n } else {\n const currentSelectableIndex = selectableOptions.findIndex((opt) => opt === options[state.focusedIndex]);\n const nextSelectableIndex = Math.min(currentSelectableIndex + 1, selectableOptions.length - 1);\n const nextOption = selectableOptions[nextSelectableIndex];\n state.focusedIndex = options.findIndex((opt) => opt === nextOption);\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (state.isOpen) {\n const currentSelectableIndex = selectableOptions.findIndex((opt) => opt === options[state.focusedIndex]);\n const prevSelectableIndex = Math.max(currentSelectableIndex - 1, 0);\n const prevOption = selectableOptions[prevSelectableIndex];\n state.focusedIndex = options.findIndex((opt) => opt === prevOption);\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (state.isOpen && state.focusedIndex >= 0 && state.focusedIndex < options.length) {\n const option = options[state.focusedIndex];\n if (option && !option.disabled) {\n toggleOption(option.id, attrs.multiple || false, attrs);\n }\n } else if (!state.isOpen) {\n state.isOpen = true;\n state.focusedIndex = 0;\n }\n break;\n case 'Escape':\n e.preventDefault();\n state.isOpen = false;\n state.focusedIndex = -1;\n break;\n }\n };\n\n const closeDropdown = (e: MouseEvent) => {\n if (!state.isMultiple) {\n state.isOpen = false;\n m.redraw();\n return;\n }\n const target = e.target as Element;\n // When inside modal, check both the select component AND the portaled dropdown\n const isClickInsideSelect = target.closest('.input-field.select-space');\n const isClickInsidePortalDropdown =\n state.isInsideModal && state.dropdownRef && (state.dropdownRef.contains(target) || target === state.dropdownRef);\n\n if (!isClickInsideSelect && !isClickInsidePortalDropdown) {\n state.isOpen = false;\n }\n m.redraw();\n };\n\n const getPortalStyles = (inputRef: HTMLElement | null | undefined) => {\n if (!inputRef) return {};\n\n const rect = inputRef.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n // Choose whether to show above or below based on available space\n const showAbove = spaceBelow < 200 && spaceAbove > spaceBelow;\n\n return {\n position: 'fixed',\n top: showAbove ? 'auto' : `${rect.bottom}px`,\n bottom: showAbove ? `${viewportHeight - rect.top}px` : 'auto',\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n zIndex: 10000, // Higher than modal z-index\n maxHeight: showAbove ? `${spaceAbove - 20}px` : `${spaceBelow - 20}px`, // Leave 20px margin\n overflow: 'auto',\n display: 'block',\n opacity: 1,\n };\n };\n\n const formatSelectionSummary = (\n attrs: SelectAttrs<T>,\n selectedOptions: InputOption<T>[],\n selectedIds: T[],\n placeholder: string\n ) => {\n const mode = attrs.summaryMode || 'labels';\n const selectedCount = selectedIds.length;\n const totalCount = attrs.options.filter((option) => !option.disabled).length;\n\n if (mode === 'labels') {\n return selectedOptions.length > 0 ? selectedOptions.map((o) => o.label || o.id).join(', ') : placeholder;\n }\n\n const defaultCountLabel = `${selectedCount}/${totalCount} selected`;\n const formattedCount = attrs.countLabel ? attrs.countLabel(selectedCount, totalCount) : defaultCountLabel;\n\n if (mode === 'count') {\n return selectedCount > 0 ? formattedCount : placeholder;\n }\n\n if (selectedCount === 0) {\n return attrs.noneSelectedLabel || placeholder;\n }\n\n if (totalCount > 0 && selectedCount >= totalCount) {\n return attrs.allSelectedLabel || 'All selected';\n }\n\n return formattedCount;\n };\n\n const renderDropdownContent = (attrs: SelectAttrs<T>, selectedIds: T[], multiple: boolean, placeholder: string) => [\n placeholder && m('li.disabled', { tabindex: 0 }, m('span', placeholder)),\n // Render ungrouped options first\n attrs.options\n .filter((option) => !option.group)\n .map((option) =>\n m(\n 'li',\n {\n class: `${option.disabled ? 'disabled' : ''}${\n isSelected(option.id, selectedIds) ? ' selected' : ''\n }${state.focusedIndex === attrs.options.indexOf(option) ? ' focused' : ''}`,\n ...(option.disabled\n ? {}\n : {\n onclick: () => {\n toggleOption(option.id, multiple, attrs);\n },\n }),\n },\n [\n option.img && m('img', { src: option.img, alt: option.label }),\n m(\n 'span',\n [\n multiple\n ? m(\n 'label',\n { for: option.id },\n m('input', {\n id: option.id,\n type: 'checkbox',\n checked: selectedIds.includes(option.id),\n disabled: option.disabled ? true : undefined,\n onclick: (e: MouseEvent) => {\n e.stopPropagation();\n },\n }),\n m('span', option.label)\n )\n : m('span', option.label),\n ].filter(Boolean)\n ),\n ]\n )\n ),\n // Render grouped options\n Object.entries(\n attrs.options\n .filter((option) => option.group)\n .reduce(\n (groups, option) => {\n const group = option.group!;\n if (!groups[group]) groups[group] = [];\n groups[group].push(option);\n return groups;\n },\n {} as { [key: string]: (typeof attrs.options)[0][] }\n )\n )\n .map(([groupName, groupOptions]) => [\n m('li.optgroup', { tabindex: 0 }, m('span', groupName)),\n ...groupOptions.map((option) =>\n m(\n 'li',\n {\n class: `optgroup-option${option.disabled ? ' disabled' : ''}${\n isSelected(option.id, selectedIds) ? ' selected' : ''\n }${state.focusedIndex === attrs.options.indexOf(option) ? ' focused' : ''}`,\n ...(option.disabled\n ? {}\n : {\n onclick: (e: MouseEvent) => {\n e.stopPropagation();\n toggleOption(option.id, multiple, attrs);\n },\n }),\n },\n [\n option.img && m('img', { src: option.img, alt: option.label }),\n m(\n 'span',\n [\n multiple\n ? m(\n 'label',\n { for: option.id },\n m('input', {\n id: option.id,\n type: 'checkbox',\n checked: selectedIds.includes(option.id),\n disabled: option.disabled ? true : undefined,\n onclick: (e: MouseEvent) => {\n e.stopPropagation();\n },\n }),\n m('span', option.label)\n )\n : m('span', option.label),\n ].filter(Boolean)\n ),\n ]\n )\n ),\n ])\n .reduce((acc, val) => acc.concat(val), []),\n ];\n\n const updatePortalDropdown = (attrs: SelectAttrs<T>, selectedIds: T[], multiple: boolean, placeholder: string) => {\n if (!state.isInsideModal) return;\n\n // Create dropdown with proper positioning\n const dropdownVnode = m(\n 'ul.dropdown-content.select-dropdown',\n {\n tabindex: 0,\n style: {\n ...getPortalStyles(state.inputRef),\n ...(attrs.maxHeight ? { maxHeight: attrs.maxHeight } : {}),\n },\n oncreate: ({ dom }) => {\n state.dropdownRef = dom as HTMLElement;\n },\n onremove: () => {\n state.dropdownRef = null;\n },\n },\n renderDropdownContent(attrs, selectedIds, multiple, placeholder)\n );\n\n syncPortalContent({\n containerId: state.dropdownId,\n shouldRender: state.isOpen && !!state.inputRef,\n vnode: dropdownVnode,\n zIndex: 10000,\n });\n };\n\n return {\n oninit: ({ attrs }) => {\n state.id = attrs.id || uniqueId();\n state.dropdownId = `${state.id}-dropdown`;\n\n const controlled = isControlled(attrs);\n\n // Warn developer for improper controlled usage\n if (attrs.checkedId !== undefined && !controlled && !attrs.disabled) {\n console.warn(\n `Select component received 'checkedId' prop without 'onchange' handler. ` +\n `Use 'defaultCheckedId' for uncontrolled components or add 'onchange' for controlled components.`\n );\n }\n\n // Initialize internal state for uncontrolled mode\n if (!controlled) {\n const defaultIds =\n attrs.defaultCheckedId !== undefined\n ? Array.isArray(attrs.defaultCheckedId)\n ? attrs.defaultCheckedId\n : [attrs.defaultCheckedId]\n : [];\n state.internalSelectedIds = defaultIds;\n }\n\n // Add global click listener to close dropdown\n document.addEventListener('click', closeDropdown);\n },\n\n oncreate: ({ dom }) => {\n // Detect if component is inside a modal\n state.isInsideModal = !!dom.closest('.modal');\n },\n\n onremove: () => {\n // Cleanup global listener\n document.removeEventListener('click', closeDropdown);\n\n // Cleanup portaled dropdown if it exists\n if (state.isInsideModal && state.dropdownRef) {\n syncPortalContent({ containerId: state.dropdownId, shouldRender: false, vnode: null });\n }\n },\n\n view: ({ attrs }) => {\n const controlled = isControlled(attrs);\n const {\n newRow,\n className = 'col s12',\n key,\n options = [],\n multiple = false,\n label,\n helperText,\n placeholder = '',\n isMandatory,\n iconName,\n appearance = 'standard',\n style,\n disabled,\n } = attrs;\n state.isMultiple = multiple;\n // Get selected IDs from props or internal state\n const selectedIds = resolveControllableValue<T[]>({\n controlled,\n disabled,\n controlledValue: normalizeSelection(attrs.checkedId),\n defaultValue: normalizeSelection(attrs.defaultCheckedId),\n internalValue: state.internalSelectedIds,\n fallbackValue: [],\n });\n\n const layoutClassName = newRow ? `${className} clear` : className;\n const appearanceClassName = appearance === 'outlined' ? 'select-appearance-outlined' : '';\n const finalClassName = [layoutClassName, appearanceClassName].filter(Boolean).join(' ');\n const shouldInlineLabel = appearance === 'outlined' && !!label;\n const selectedOptionsUnsorted = options.filter((opt) => isSelected(opt.id, selectedIds));\n const selectedOptions = sortOptions(selectedOptionsUnsorted, attrs.sortSelected);\n const triggerValue = formatSelectionSummary(attrs, selectedOptions, selectedIds, placeholder);\n\n // Update portal dropdown when inside modal\n if (state.isInsideModal) {\n updatePortalDropdown(attrs, selectedIds, multiple, placeholder);\n }\n\n return m(\n '.input-field.select-space',\n {\n className: finalClassName,\n key,\n style,\n },\n [\n // Icon prefix\n iconName && m('i.material-icons.prefix', iconName),\n m(\n '.select-wrapper',\n {\n onkeydown: disabled ? undefined : (e: KeyboardEvent) => handleKeyDown(e, attrs),\n tabindex: disabled ? -1 : 0,\n 'aria-expanded': state.isOpen ? 'true' : 'false',\n 'aria-haspopup': 'listbox',\n 'aria-controls': state.dropdownId,\n role: 'combobox',\n },\n [\n shouldInlineLabel &&\n m('span.select-inline-label', [\n label,\n isMandatory && m('span.mandatory', { style: { marginLeft: '2px' } }, '*'),\n ]),\n m('input[type=text][readonly=true].select-dropdown.dropdown-trigger', {\n id: state.id,\n value: triggerValue,\n 'aria-label': label,\n oncreate: ({ dom }) => {\n state.inputRef = dom as HTMLElement;\n },\n onclick: (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) {\n state.isOpen = !state.isOpen;\n }\n },\n }),\n // Dropdown Menu - render inline only when NOT inside modal\n state.isOpen &&\n !state.isInsideModal &&\n m(\n 'ul.dropdown-content.select-dropdown',\n {\n tabindex: 0,\n oncreate: ({ dom }) => {\n state.dropdownRef = dom as HTMLElement;\n },\n onremove: () => {\n state.dropdownRef = null;\n },\n style: {\n ...getDropdownStyles(state.inputRef, true, options),\n ...(attrs.maxHeight ? { maxHeight: attrs.maxHeight } : {}),\n },\n },\n renderDropdownContent(attrs, selectedIds, multiple, placeholder)\n ),\n m(MaterialIcon, {\n name: 'caret',\n direction: 'down',\n class: 'caret',\n }),\n ]\n ),\n\n // Label\n ...renderFieldChrome({\n label: shouldInlineLabel ? undefined : label,\n id: state.id,\n isMandatory,\n helperText,\n }),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { uniqueId } from './utils';\nimport { InputAttrs } from './input-options';\nimport { Label } from './label';\n// Styles are imported via the main index or individual component imports\n\nexport interface SwitchAttrs\n extends Pick<InputAttrs<boolean>, 'label' | 'disabled' | 'id' | 'className' | 'onchange' | 'newRow' | 'isMandatory'> {\n /** Left text label */\n left?: string;\n /** Right text label */\n right?: string;\n /** If checked is true, the switch is set in the right position. */\n checked?: boolean;\n}\n\n/** Component to display a switch with two values. */\nexport const Switch: FactoryComponent<SwitchAttrs> = () => {\n const state = { id: uniqueId(), checked: false };\n return {\n oninit: ({ attrs: { checked } }) => {\n state.checked = checked || false;\n },\n view: ({ attrs }) => {\n const {\n checked,\n label,\n left,\n right,\n disabled,\n newRow,\n onchange,\n isMandatory,\n className = 'col s12',\n id = state.id,\n ...params\n } = attrs;\n const cn = ['input-field', newRow ? 'clear' : '', className].filter(Boolean).join(' ').trim();\n return m(\n 'div',\n {\n className: cn,\n onclick: (e: MouseEvent) => {\n e.preventDefault();\n onchange && onchange(!checked);\n },\n },\n [\n label && m(Label, { label: label || '', id, isMandatory, className: 'active' }),\n m(\n '.switch',\n params,\n m('label', [\n m('span', left || 'Off'),\n m('input[type=checkbox]', {\n id,\n disabled,\n checked,\n }),\n m('span.lever'),\n m('span', right || 'On'),\n ])\n ),\n ]\n );\n },\n };\n};\n","import m, { Vnode, FactoryComponent, Attributes } from 'mithril';\n\n/**\n * Link or anchor target may take 4 values:\n * - _blank: Opens the linked document in a new window or tab\n * - _self: Opens the linked document in the same frame as it was clicked (this is default)\n * - _parent: Opens the linked document in the parent frame\n * - _top: Opens the linked document in the full body of the window\n */\nexport type AnchorTarget = '_blank' | '_self' | '_parent' | '_top';\n\nexport interface TabItem {\n /** Title of the tab */\n title: string;\n /** Vnode to render: may be empty in case of a using the tab as a hyperlink. */\n vnode?: Vnode<any, any>;\n /** ID of the tab element. Default the title in lowercase */\n id?: string;\n /** If the tab should be disabled */\n disabled?: boolean;\n /** CSS class for the tab (li), default `.tab.col.s3` */\n className?: string;\n /** CSS class for the content (li), default `.tab.col.s3` */\n contentClass?: string;\n /**\n * By default, Materialize tabs will ignore their default anchor behaviour.\n * To force a tab to behave as a regular hyperlink, just specify the target property of that link.\n */\n target?: AnchorTarget;\n /** Only used in combination with a set target to make the tab act as a regular hyperlink. */\n href?: string;\n}\n\nexport interface TabsOptions {\n /** Duration of tab change animation in ms */\n duration?: number;\n /** Called when a tab is shown */\n onShow?: (tab: HTMLElement) => void;\n /** The maximum width at which tabs switch to swipeable mode */\n responsiveThreshold?: number;\n /** Enable swiping between tabs on mobile */\n swipeable?: boolean;\n}\n\nexport interface TabsAttrs extends TabsOptions, Attributes {\n /** Selected tab id, takes precedence over tab.active property */\n selectedTabId?: string;\n /**\n * Tab width, can be `auto` to use the width of the title,\n * `fill` to use all availabe space, or `fixed` to use a column size.\n */\n tabWidth?: 'auto' | 'fixed' | 'fill';\n /** List of tab items */\n tabs: TabItem[];\n /** Callback when tab changes */\n onTabChange?: (tabId: string) => void;\n}\n\n/** CSS-only Tabs component - no MaterializeCSS dependencies */\nexport const Tabs: FactoryComponent<TabsAttrs> = () => {\n type AnchoredTabItem = TabItem & {\n anchorId: string;\n tabId: string;\n };\n\n const toAnchored = () => {\n return (tab: TabItem) => {\n const tabId = createId(tab.title, tab.id);\n return { ...tab, tabId, anchorId: `anchor-${tabId}` } as AnchoredTabItem;\n };\n };\n\n const state = {\n activeTabId: '',\n isDragging: false,\n startX: 0,\n translateX: 0,\n indicatorStyle: {\n left: '0px',\n width: '0px',\n },\n lastIndicatorUpdate: '',\n };\n\n const createId = (title: string, id?: string) => (id ? id : title.replace(/ /g, '').toLowerCase());\n\n const updateIndicator = () => {\n const tabElement = document.getElementById(state.activeTabId);\n if (tabElement) {\n const tabsContainer = tabElement.closest('.tabs');\n if (tabsContainer) {\n const containerRect = tabsContainer.getBoundingClientRect();\n const tabRect = tabElement.getBoundingClientRect();\n\n const newLeft = `${tabRect.left - containerRect.left}px`;\n const newWidth = `${tabRect.width}px`;\n\n // Only update if values actually changed - NO m.redraw()!\n if (state.indicatorStyle.left !== newLeft || state.indicatorStyle.width !== newWidth) {\n state.indicatorStyle = {\n left: newLeft,\n width: newWidth,\n };\n }\n }\n }\n };\n\n const handleTabClick = (tabId: string, tabElement: HTMLElement, attrs: TabsAttrs) => {\n console.log({ state, tabId });\n if (state.activeTabId === tabId) return;\n\n state.activeTabId = tabId;\n\n // Call onShow callback if provided\n if (attrs.onShow) {\n attrs.onShow(tabElement);\n }\n\n // Call onTabChange callback if provided\n if (attrs.onTabChange) {\n attrs.onTabChange(tabId);\n }\n };\n\n // Touch/swipe support for mobile\n const handleTouchStart = (e: TouchEvent) => {\n if (!e.touches || e.touches.length === 0) return;\n state.isDragging = true;\n state.startX = e.touches[0].clientX;\n };\n\n const handleTouchEnd = (e: TouchEvent, attrs: TabsAttrs) => {\n if (!state.isDragging || !e.changedTouches || e.changedTouches.length === 0) return;\n\n const endX = e.changedTouches[0].clientX;\n const deltaX = endX - state.startX;\n const threshold = 50; // Minimum swipe distance\n\n if (Math.abs(deltaX) > threshold) {\n const currentIndex = attrs.tabs.findIndex((tab) => createId(tab.title, tab.id) === state.activeTabId);\n\n if (deltaX > 0 && currentIndex > 0) {\n // Swipe right - go to previous tab\n const prevTab = attrs.tabs[currentIndex - 1];\n if (!prevTab.disabled && !prevTab.href) {\n const newTabId = createId(prevTab.title, prevTab.id);\n state.activeTabId = newTabId;\n if (attrs.onTabChange) {\n attrs.onTabChange(newTabId);\n }\n }\n } else if (deltaX < 0 && currentIndex < attrs.tabs.length - 1) {\n // Swipe left - go to next tab\n const nextTab = attrs.tabs[currentIndex + 1];\n if (!nextTab.disabled && !nextTab.href) {\n const newTabId = createId(nextTab.title, nextTab.id);\n state.activeTabId = newTabId;\n if (attrs.onTabChange) {\n attrs.onTabChange(newTabId);\n }\n }\n }\n }\n\n state.isDragging = false;\n state.translateX = 0;\n };\n\n /** Initialize active tab - selectedTabId takes precedence, next active property or first available tab */\n const setActiveTabId = (anchoredTabs: AnchoredTabItem[], selectedTabId?: string): AnchoredTabItem | undefined => {\n const selectedTab = selectedTabId ? anchoredTabs.find((a) => a.tabId === selectedTabId) : undefined;\n if (selectedTab) {\n state.activeTabId = selectedTab.tabId;\n return selectedTab;\n }\n\n const curTab = state.activeTabId && anchoredTabs.find((a) => a.tabId === state.activeTabId);\n if (curTab) return curTab;\n\n // Default to first non-disabled tab\n const firstAvailableTab = anchoredTabs.find((a) => !a.disabled && !a.href);\n if (firstAvailableTab) {\n state.activeTabId = firstAvailableTab.tabId;\n return firstAvailableTab;\n }\n return undefined;\n };\n\n return {\n oninit: ({ attrs }) => {\n const anchoredTabs = attrs.tabs.map(toAnchored());\n setActiveTabId(anchoredTabs, attrs.selectedTabId);\n },\n\n oncreate: () => {\n updateIndicator();\n },\n\n view: ({ attrs }) => {\n const { tabWidth, tabs, className, style, swipeable = false } = attrs;\n const cn =\n [tabWidth === 'fill' ? 'tabs-fixed-width' : '', className].filter(Boolean).join(' ').trim() || undefined;\n\n const anchoredTabs = tabs.map(toAnchored());\n const activeTab = setActiveTabId(anchoredTabs, attrs.selectedTabId);\n updateIndicator();\n\n return m('.row', [\n // Tab headers\n m(\n '.col.s12',\n m(\n 'ul.tabs',\n {\n className: cn,\n style,\n },\n [\n ...anchoredTabs.map((tab) => {\n const { className: tabClassName, title, anchorId, tabId, disabled, target, href } = tab;\n const cn = ['tab', tabWidth === 'fixed' ? `col s${Math.floor(12 / tabs.length)}` : '', tabClassName]\n .filter(Boolean)\n .join(' ')\n .trim();\n\n return m(\n 'li',\n {\n key: tabId,\n id: tabId,\n className: cn,\n disabled,\n },\n m(\n 'a',\n {\n id: anchorId,\n className: tab.tabId === state.activeTabId ? 'active' : undefined,\n target,\n href: href || `#${anchorId}`,\n onclick:\n disabled || href\n ? undefined\n : (e: Event) => {\n e.preventDefault();\n handleTabClick(tabId, e.target as HTMLElement, attrs);\n },\n style: disabled ? { opacity: '0.6', cursor: 'not-allowed' } : undefined,\n },\n title\n )\n );\n }),\n // Add the indicator element\n m('li.indicator', {\n key: 'indicator',\n style: {\n display: state.activeTabId ? 'block' : 'none',\n left: state.indicatorStyle.left,\n width: state.indicatorStyle.width,\n transition: 'left 0.35s ease, width 0.35s ease',\n },\n }),\n ]\n ),\n activeTab &&\n m(\n '.col.s12',\n {\n ontouchstart: swipeable ? handleTouchStart : undefined,\n ontouchend: swipeable ? (e: TouchEvent) => handleTouchEnd(e, attrs) : undefined,\n style: swipeable ? { touchAction: 'pan-y' } : undefined,\n },\n\n m(\n '.tab-content',\n {\n className: activeTab.contentClass,\n },\n activeTab.vnode\n )\n )\n ),\n ]);\n },\n };\n};\n","import m, { Component } from 'mithril';\nimport { getDropdownStyles, uniqueId, sortOptions } from './utils';\nimport { MaterialIcon } from './material-icon';\nimport { SelectAttrs } from './select';\nimport { InputOption } from './option';\nimport {\n AsyncComboboxState,\n getComboboxKeyResult,\n getComboboxOptionId,\n getComboboxViewState,\n rejectAsyncComboboxRequest,\n resolveAsyncComboboxRequest,\n startAsyncComboboxRequest,\n} from './combobox';\n\nconst SelectedChip = <T extends string | number>({\n option,\n onRemove,\n}: {\n option: InputOption<T>;\n onRemove: (id: T) => void;\n}) =>\n m('.chip', [\n option.label || option.id.toString(),\n m(MaterialIcon, {\n name: 'close',\n className: 'close',\n onclick: (e: Event) => {\n e.stopPropagation();\n onRemove(option.id);\n },\n }),\n ]);\n\nconst DropdownOption = <T extends string | number>({\n option,\n index,\n optionId,\n selectedIds,\n isFocused,\n onToggle,\n onMouseOver,\n showCheckbox,\n}: {\n option: InputOption<T>;\n index: number;\n optionId: string;\n selectedIds: T[];\n isFocused: boolean;\n onToggle: (option: InputOption<T>) => void;\n onMouseOver: (index: number) => void;\n showCheckbox: boolean;\n}) => {\n const optionLabel = option.label || option.id.toString();\n\n return m(\n 'li',\n {\n id: optionId,\n role: 'option',\n 'aria-selected': selectedIds.includes(option.id) ? 'true' : 'false',\n class: `${option.disabled ? 'disabled' : ''} ${isFocused ? 'active' : ''}`.trim(),\n onmouseover: () => {\n if (!option.disabled) {\n onMouseOver(index);\n }\n },\n },\n m(\n 'label',\n {\n class: 'search-select-option-label',\n onclick: (e: Event) => {\n // A single-select row has no native checkbox to emit change.\n if (!showCheckbox) {\n e.preventDefault();\n onToggle(option);\n }\n },\n },\n [\n showCheckbox &&\n m('input', {\n type: 'checkbox',\n checked: selectedIds.includes(option.id),\n disabled: option.disabled,\n onchange: (e: Event) => {\n e.stopPropagation();\n onToggle(option);\n },\n }),\n m('span', optionLabel),\n ]\n )\n );\n};\n\n// Internationalization interface for SearchSelect\nexport interface SearchSelectI18n {\n /** Text shown when no options match the search */\n noOptionsFound?: string;\n /** Text shown while async options are loading */\n loadingOptions?: string;\n /** Text shown when async option loading fails */\n loadingError?: string;\n /** Prefix for adding new option */\n addNewPrefix?: string;\n /** Message template for truncated results. Use {shown} and {total} placeholders */\n showingXofY?: string;\n /** Message shown when max selections reached. Use {max} placeholder */\n maxSelectionsReached?: string;\n}\n\n// Extended SearchSelect attributes that inherit from SelectAttrs\nexport interface SearchSelectAttrs<T extends string | number> extends SelectAttrs<T> {\n /** Async options loader for remote/large data sets */\n loadOptions?: (query: string) => Promise<InputOption<T>[]>;\n /** Callback when user creates a new option: should return new ID */\n oncreateNewOption?: (term: string) => InputOption<T> | Promise<InputOption<T>>;\n /** Placeholder text for the search input, default 'Search options...' */\n searchPlaceholder?: string;\n /** When no options are left, displays this text, default 'No options found' */\n noOptionsFound?: string;\n /** Max height of the dropdown menu, default '400px', use 'none' to disable it */\n maxHeight?: string;\n /** Internationalization options */\n i18n?: SearchSelectI18n;\n /** Maximum number of options to display. When set, limits displayed options to improve performance with large datasets */\n maxDisplayedOptions?: number;\n /** Maximum number of options that can be selected. When max=1, checkboxes are hidden and behaves like single select */\n maxSelectedOptions?: number;\n /** Sort selected items: 'asc' (alphabetically A-Z), 'desc' (Z-A), 'none' (insertion order), or custom sort function */\n sortSelected?: 'asc' | 'desc' | 'none' | ((a: InputOption<T>, b: InputOption<T>) => number);\n}\n\n// Component state interface\ninterface SearchSelectState<T extends string | number> {\n id: string;\n listboxId: string;\n isOpen: boolean;\n searchTerm: string;\n inputRef: HTMLElement | null;\n dropdownRef: HTMLElement | null;\n focusedIndex: number;\n internalSelectedIds: T[];\n createdOptions: InputOption<T>[];\n asyncOptions: InputOption<T>[];\n isLoading: boolean;\n loadError: string | null;\n latestRequestId: number;\n}\n\n/**\n * Mithril Factory Component for Multi-Select Dropdown with search\n */\nexport const SearchSelect = <T extends string | number>(\n maybeVnode?: m.Vnode<\n SearchSelectAttrs<T>,\n {\n __searchSelectInstance?: Component<SearchSelectAttrs<T>, SearchSelectState<T>>;\n }\n >\n): Component<SearchSelectAttrs<T>, SearchSelectState<T>> => {\n const cachedInstance = maybeVnode?.state?.__searchSelectInstance;\n if (cachedInstance) {\n return cachedInstance;\n }\n\n // State initialization\n const state: SearchSelectState<T> = {\n id: '',\n listboxId: '',\n isOpen: false,\n searchTerm: '',\n inputRef: null,\n dropdownRef: null,\n focusedIndex: -1,\n internalSelectedIds: [],\n createdOptions: [],\n asyncOptions: [],\n isLoading: false,\n loadError: null,\n latestRequestId: 0,\n };\n\n const updateAsyncState = (nextState: AsyncComboboxState<InputOption<T>>) => {\n state.asyncOptions = nextState.options;\n state.isLoading = nextState.isLoading;\n state.loadError = nextState.error;\n state.latestRequestId = nextState.latestRequestId;\n };\n\n const readAsyncState = (): AsyncComboboxState<InputOption<T>> => ({\n options: state.asyncOptions,\n isLoading: state.isLoading,\n error: state.loadError,\n latestRequestId: state.latestRequestId,\n });\n\n const isControlled = (attrs: SearchSelectAttrs<T>) =>\n attrs.checkedId !== undefined && typeof attrs.onchange === 'function';\n\n const componentId = uniqueId();\n const searchInputId = `${componentId}-search`;\n\n // Handle click outside\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n const targetElement = e.target instanceof Element ? e.target : null;\n if (state.dropdownRef && state.dropdownRef.contains(target)) {\n // Click inside dropdown, do nothing\n return;\n }\n if (targetElement && targetElement.closest('.chips-container')) {\n // Click on trigger, do nothing\n return;\n }\n if (state.inputRef && state.inputRef.contains(target)) {\n // Click on trigger handled by onclick event\n return;\n } else {\n // Click outside, close dropdown\n state.isOpen = false;\n }\n m.redraw();\n };\n\n // Handle keyboard navigation through shared combobox primitive.\n const handleKeyDown = (e: KeyboardEvent, optionCount: number, includeActionRow: boolean) => {\n const result = getComboboxKeyResult({\n key: e.key,\n isOpen: state.isOpen,\n focusedIndex: state.focusedIndex,\n optionCount,\n includeActionRow,\n });\n\n if (result.preventDefault) {\n e.preventDefault();\n }\n\n state.isOpen = result.isOpen;\n state.focusedIndex = result.focusedIndex;\n return result.action;\n };\n\n const loadAsyncOptions = async (attrs: SearchSelectAttrs<T>, query: string) => {\n if (!attrs.loadOptions) {\n return;\n }\n\n const started = startAsyncComboboxRequest(readAsyncState());\n updateAsyncState(started.nextState);\n m.redraw();\n\n try {\n const loadedOptions = await attrs.loadOptions(query);\n const resolved = resolveAsyncComboboxRequest(readAsyncState(), started.requestId, loadedOptions);\n updateAsyncState(resolved);\n if (started.requestId !== state.latestRequestId) {\n return;\n }\n if (state.focusedIndex >= loadedOptions.length) {\n state.focusedIndex = -1;\n }\n } catch (error) {\n const rejected = rejectAsyncComboboxRequest(\n readAsyncState(),\n started.requestId,\n error instanceof Error ? error.message : 'Unable to load options'\n );\n updateAsyncState(rejected);\n if (started.requestId !== state.latestRequestId) {\n return;\n }\n state.focusedIndex = -1;\n } finally {\n m.redraw();\n }\n };\n\n // Create new option and add to state\n const createAndSelectOption = async (attrs: SearchSelectAttrs<T>) => {\n if (!attrs.oncreateNewOption || !state.searchTerm) return;\n\n const newOption = await attrs.oncreateNewOption(state.searchTerm);\n\n // Store the created option internally\n state.createdOptions.push(newOption);\n\n // Select the new option\n toggleOption(newOption, attrs);\n };\n\n // Toggle option selection\n const toggleOption = (option: InputOption<T>, attrs: SearchSelectAttrs<T>) => {\n if (option.disabled) return;\n\n const controlled = isControlled(attrs);\n const { maxSelectedOptions } = attrs;\n\n // Get current selected IDs from props or internal state\n const currentSelectedIds = controlled\n ? attrs.checkedId !== undefined\n ? Array.isArray(attrs.checkedId)\n ? attrs.checkedId\n : [attrs.checkedId]\n : []\n : state.internalSelectedIds;\n\n const isSelected = currentSelectedIds.includes(option.id);\n\n let newIds: T[];\n if (isSelected) {\n // Remove if already selected\n newIds = currentSelectedIds.filter((id) => id !== option.id);\n } else {\n // Check if we've reached the max selection limit\n if (maxSelectedOptions && currentSelectedIds.length >= maxSelectedOptions) {\n // If max=1, replace the selection\n if (maxSelectedOptions === 1) {\n newIds = [option.id];\n } else {\n // Otherwise, don't add more\n return;\n }\n } else {\n // Add to selection\n newIds = [...currentSelectedIds, option.id];\n }\n }\n\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalSelectedIds = newIds;\n }\n\n state.searchTerm = '';\n state.focusedIndex = -1;\n\n // Call onchange if provided\n if (attrs.onchange) {\n attrs.onchange(newIds);\n }\n };\n\n // Remove a selected option\n const removeOption = (optionId: T, attrs: SearchSelectAttrs<T>) => {\n const controlled = isControlled(attrs);\n\n // Get current selected IDs from props or internal state\n const currentSelectedIds = controlled\n ? attrs.checkedId !== undefined\n ? Array.isArray(attrs.checkedId)\n ? attrs.checkedId\n : [attrs.checkedId]\n : []\n : state.internalSelectedIds;\n\n const newIds = currentSelectedIds.filter((id) => id !== optionId);\n\n // Update internal state for uncontrolled mode\n if (!controlled) {\n state.internalSelectedIds = newIds;\n }\n\n // Call onchange if provided\n if (attrs.onchange) {\n attrs.onchange(newIds);\n }\n };\n\n const componentInstance: Component<SearchSelectAttrs<T>, SearchSelectState<T>> = {\n oninit: ({ attrs }) => {\n state.id = attrs.id || uniqueId();\n state.listboxId = `${state.id}-listbox`;\n\n // Initialize internal state for uncontrolled mode\n if (!isControlled(attrs)) {\n const defaultIds =\n attrs.defaultCheckedId !== undefined\n ? Array.isArray(attrs.defaultCheckedId)\n ? attrs.defaultCheckedId\n : [attrs.defaultCheckedId]\n : [];\n state.internalSelectedIds = defaultIds;\n }\n },\n oncreate() {\n document.addEventListener('click', handleClickOutside);\n },\n onremove() {\n document.removeEventListener('click', handleClickOutside);\n },\n view({ attrs }) {\n const controlled = isControlled(attrs);\n\n // Get selected IDs from props or internal state\n const selectedIds = controlled\n ? attrs.checkedId !== undefined\n ? Array.isArray(attrs.checkedId)\n ? attrs.checkedId\n : [attrs.checkedId]\n : []\n : state.internalSelectedIds;\n\n const {\n options = [],\n loadOptions,\n oncreateNewOption,\n className,\n placeholder,\n searchPlaceholder = 'Search options...',\n noOptionsFound = 'No options found',\n label,\n i18n = {},\n maxDisplayedOptions,\n maxSelectedOptions,\n maxHeight,\n } = attrs;\n\n // Use i18n values if provided, otherwise use defaults\n const texts = {\n noOptionsFound: i18n.noOptionsFound || noOptionsFound,\n loadingOptions: i18n.loadingOptions || 'Loading options...',\n loadingError: i18n.loadingError || 'Unable to load options',\n addNewPrefix: i18n.addNewPrefix || '+',\n showingXofY: i18n.showingXofY || 'Showing {shown} of {total} options',\n maxSelectionsReached: i18n.maxSelectionsReached || 'Maximum {max} selections reached',\n };\n\n // Check if max selections is reached\n const isMaxSelectionsReached = maxSelectedOptions && selectedIds.length >= maxSelectedOptions;\n\n // In async mode, the active list is sourced remotely.\n const sourceOptions = loadOptions ? state.asyncOptions : options;\n\n // Merge active options with internally created options\n const allOptions = [...sourceOptions, ...state.createdOptions];\n\n // Keep selected label lookups stable across static, async, and created sets.\n const lookupOptions = [...options, ...state.asyncOptions, ...state.createdOptions];\n\n // Get selected options for display\n const selectedOptionsUnsorted = lookupOptions.filter((opt) => selectedIds.includes(opt.id));\n const selectedOptions = sortOptions(selectedOptionsUnsorted, attrs.sortSelected);\n\n // Safely filter options\n const filteredOptions = allOptions.filter(\n (option) =>\n (option.label || option.id.toString()).toLowerCase().includes((state.searchTerm || '').toLowerCase()) &&\n !selectedIds.includes(option.id)\n );\n\n // Apply display limit if configured\n const totalFilteredCount = filteredOptions.length;\n const displayedOptions = maxDisplayedOptions ? filteredOptions.slice(0, maxDisplayedOptions) : filteredOptions;\n const isTruncated = maxDisplayedOptions && totalFilteredCount > maxDisplayedOptions;\n\n // Check if we should show the \"add new option\" element\n const showAddNew =\n oncreateNewOption &&\n state.searchTerm &&\n !displayedOptions.some((o) => (o.label || o.id.toString()).toLowerCase() === state.searchTerm.toLowerCase());\n\n const activeDescendantId =\n state.isOpen && state.focusedIndex >= 0 && state.focusedIndex < displayedOptions.length\n ? getComboboxOptionId(state.id, state.focusedIndex)\n : undefined;\n const viewState = getComboboxViewState({\n isLoading: state.isLoading,\n error: state.loadError,\n optionCount: displayedOptions.length,\n });\n\n // Render the dropdown\n return m('.input-field.multi-select-dropdown', { className }, [\n m(\n '.chips.chips-initial.chips-container',\n {\n oncreate: ({ dom }) => {\n state.inputRef = dom as HTMLElement;\n },\n onclick: (e: Event) => {\n // console.log('SearchSelect clicked', state.isOpen, e); // Debug log\n e.preventDefault();\n e.stopPropagation();\n const wasOpen = state.isOpen;\n state.isOpen = !state.isOpen;\n if (!wasOpen && state.isOpen && loadOptions) {\n void loadAsyncOptions(attrs, state.searchTerm);\n }\n // console.log('SearchSelect state changed to', state.isOpen); // Debug log\n },\n onkeydown: async (e: KeyboardEvent) => {\n const action = handleKeyDown(e, displayedOptions.length, !!showAddNew);\n if (action === 'open' && loadOptions) {\n await loadAsyncOptions(attrs, state.searchTerm);\n return;\n }\n if (action === 'selectAction' && oncreateNewOption) {\n await createAndSelectOption(attrs);\n }\n if (action === 'selectFocused' && state.focusedIndex < displayedOptions.length) {\n toggleOption(displayedOptions[state.focusedIndex], attrs);\n }\n },\n class: 'chips chips-container mm-layout-row mm-layout-row--wrap mm-layout-row--align-end',\n role: 'combobox',\n tabindex: 0,\n 'aria-expanded': state.isOpen ? 'true' : 'false',\n 'aria-haspopup': 'listbox',\n 'aria-controls': state.isOpen ? state.listboxId : undefined,\n 'aria-activedescendant': activeDescendantId,\n style: {\n cursor: 'pointer',\n position: 'relative',\n },\n },\n [\n // TODO FIXME Add to existing input\n // Hidden input for label association and accessibility\n m('input', {\n type: 'text',\n id: state.id,\n value: selectedOptions.map((o) => o.label || o.id.toString()).join(', '),\n readonly: true,\n class: 'sr-only',\n style: {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n padding: 0,\n border: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n whiteSpace: 'nowrap',\n },\n }),\n\n // Selected Options (chips)\n ...selectedOptions.map((option) =>\n SelectedChip({\n option: option as InputOption<T>,\n onRemove: (id: T) => removeOption(id, attrs),\n })\n ),\n\n // Placeholder when no options selected\n selectedOptions.length === 0 &&\n placeholder &&\n m(\n 'span.placeholder',\n {\n class: 'mm-layout-grow',\n style: {\n color: 'var(--mm-text-hint, #9e9e9e)',\n padding: '8px 0',\n },\n },\n placeholder\n ),\n\n // Spacer to push caret to the right\n m('span.spacer.mm-layout-grow'),\n\n m(MaterialIcon, {\n name: 'caret',\n direction: state.isOpen ? 'up' : 'down',\n class: 'caret mm-layout-ml-auto',\n style: { cursor: 'pointer' },\n }),\n ]\n ),\n // Label\n label &&\n m(\n 'label',\n {\n for: state.id,\n class: placeholder || selectedOptions.length > 0 ? 'active' : '',\n },\n label\n ),\n // Dropdown Menu\n state.isOpen &&\n m(\n 'ul.dropdown-content.select-dropdown',\n {\n id: state.listboxId,\n role: 'listbox',\n oncreate: ({ dom }) => {\n state.dropdownRef = dom as HTMLElement;\n },\n onremove: () => {\n state.dropdownRef = null;\n },\n style: {\n ...getDropdownStyles(state.inputRef),\n ...(maxHeight ? { maxHeight } : {}),\n },\n },\n [\n m(\n 'li', // Search Input\n {\n class: 'search-wrapper',\n },\n [\n m('input', {\n type: 'text',\n id: searchInputId,\n placeholder: searchPlaceholder,\n value: state.searchTerm || '',\n oncreate: ({ dom }) => {\n // Auto-focus the search input when dropdown opens\n (dom as HTMLInputElement).focus();\n },\n oninput: (e: InputEvent) => {\n state.searchTerm = (e.target as HTMLInputElement).value;\n state.focusedIndex = -1; // Reset focus when typing\n if (loadOptions) {\n void loadAsyncOptions(attrs, state.searchTerm);\n }\n },\n onkeydown: async (e: KeyboardEvent) => {\n const action = handleKeyDown(e, displayedOptions.length, !!showAddNew);\n if (action === 'open' && loadOptions) {\n await loadAsyncOptions(attrs, state.searchTerm);\n } else if (action === 'selectAction' && oncreateNewOption) {\n await createAndSelectOption(attrs);\n } else if (action === 'selectFocused' && state.focusedIndex < displayedOptions.length) {\n toggleOption(displayedOptions[state.focusedIndex], attrs);\n }\n },\n class: 'search-select-input',\n 'aria-autocomplete': 'list',\n 'aria-controls': state.listboxId,\n }),\n ]\n ),\n\n // Async loading status\n ...(viewState === 'loading'\n ? [m('li.search-select-loading-info', { role: 'status', 'aria-live': 'polite' }, texts.loadingOptions)]\n : []),\n\n // Async loading error\n ...(viewState === 'error' && state.loadError\n ? [\n m(\n 'li.search-select-error-info',\n { role: 'status', 'aria-live': 'assertive' },\n `${texts.loadingError}: ${state.loadError}`\n ),\n ]\n : []),\n\n // No options found message or list of options\n ...(viewState === 'empty' && !showAddNew ? [m('li.search-select-no-options', texts.noOptionsFound)] : []),\n\n // Truncation message\n ...(isTruncated\n ? [\n m(\n 'li.search-select-truncation-info',\n {\n style: {\n fontStyle: 'italic',\n color: 'var(--mm-text-hint, #9e9e9e)',\n padding: '8px 16px',\n cursor: 'default',\n },\n },\n texts.showingXofY\n .replace('{shown}', displayedOptions.length.toString())\n .replace('{total}', totalFilteredCount.toString())\n ),\n ]\n : []),\n\n // Max selections reached message\n ...(isMaxSelectionsReached\n ? [\n m(\n 'li.search-select-max-info',\n {\n style: {\n fontStyle: 'italic',\n color: 'var(--mm-text-hint, #9e9e9e)',\n padding: '8px 16px',\n cursor: 'default',\n },\n },\n texts.maxSelectionsReached.replace('{max}', maxSelectedOptions!.toString())\n ),\n ]\n : []),\n\n // Add new option item\n ...(showAddNew\n ? [\n m(\n 'li',\n {\n id: `${state.listboxId}-action`,\n role: 'option',\n 'aria-selected': 'false',\n onclick: async () => {\n await createAndSelectOption(attrs);\n },\n class: state.focusedIndex === displayedOptions.length ? 'active' : '',\n onmouseover: () => {\n state.focusedIndex = displayedOptions.length;\n },\n },\n [m('span', `${texts.addNewPrefix} \"${state.searchTerm}\"`)]\n ),\n ]\n : []),\n\n // List of filtered options\n ...displayedOptions.map((option, index) =>\n DropdownOption({\n option,\n index,\n optionId: getComboboxOptionId(state.id, index),\n selectedIds,\n isFocused: state.focusedIndex === index,\n onToggle: (opt) => toggleOption(opt, attrs),\n onMouseOver: (idx) => {\n state.focusedIndex = idx;\n },\n showCheckbox: maxSelectedOptions !== 1,\n })\n ),\n ]\n ),\n ]);\n },\n };\n\n if (maybeVnode?.state) {\n maybeVnode.state.__searchSelectInstance = componentInstance;\n }\n\n return componentInstance;\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { InputAttrs } from './input-options';\nimport { uniqueId, renderToPortal, clearPortal } from './utils';\nimport { TimeValue, addLeadingZero, parseTime, formatTime, timeToMinutes } from './time-utils';\nimport { DigitalClock } from './digital-clock';\nimport { AnalogClock } from './analog-clock';\n\ninterface TimeRangePickerState {\n id: string;\n currentSelection: 'start' | 'end';\n startTime: TimeValue;\n endTime: TimeValue;\n tempStartTime: TimeValue;\n tempEndTime: TimeValue;\n isPickerOpen: boolean;\n portalContainerId: string;\n currentView: 'hours' | 'minutes';\n\n // Display elements\n spanStartHours?: HTMLElement;\n spanStartMinutes?: HTMLElement;\n spanStartAmPm?: HTMLElement;\n spanEndHours?: HTMLElement;\n spanEndMinutes?: HTMLElement;\n spanEndAmPm?: HTMLElement;\n}\n\nexport interface TimepickerI18n {\n cancel?: string;\n clear?: string;\n done?: string;\n next?: string;\n}\n\nconst defaultI18n: Required<TimepickerI18n> = {\n cancel: 'Cancel',\n clear: 'Clear',\n done: 'Ok',\n next: 'Next',\n};\n\nexport interface TimeRangePickerAttrs extends Omit<InputAttrs<string>, 'defaultValue' | 'onchange'> {\n /** Starting time value in HH:MM or HH:MM AM/PM format */\n startValue?: string;\n\n /** Ending time value in HH:MM or HH:MM AM/PM format */\n endValue?: string;\n\n /** Enable validation: end time must be after start time */\n validateRange?: boolean;\n\n /** Callback when time range changes */\n onchange?: (startTime: string, endTime: string) => void;\n\n /** i18n for time range picker */\n i18n?: TimepickerI18n;\n\n /** Use 12-hour format with AM/PM */\n twelveHour?: boolean;\n\n /** Display mode: 'analog' or 'digital' (default: 'digital') */\n displayMode?: 'analog' | 'digital';\n\n /** Step for minute increments (default 5) */\n minuteStep?: number;\n\n /** Step for hour increments (default 1) */\n hourStep?: number;\n\n /** Minimum selectable time in HH:MM or HH:MM AM/PM format */\n minTime?: string;\n\n /** Maximum selectable time in HH:MM or HH:MM AM/PM format */\n maxTime?: string;\n\n /** Show clear button */\n showClearBtn?: boolean;\n\n /** Dial radius for analog clock (default: 135) */\n dialRadius?: number;\n\n /** Outer radius for analog clock (default: 105) */\n outerRadius?: number;\n\n /** Inner radius for analog clock (default: 70) */\n innerRadius?: number;\n\n /** Tick radius for analog clock (default: 20) */\n tickRadius?: number;\n\n /** Round by 5 minutes for analog clock (default: false) */\n roundBy5?: boolean;\n\n /** Vibrate on value change for analog clock (default: true) */\n vibrate?: boolean;\n}\n\n/**\n * TimeRangePicker component for selecting time ranges\n * Custom implementation with embedded digital clock picker\n */\nexport const TimeRangePicker: FactoryComponent<TimeRangePickerAttrs> = () => {\n let state: TimeRangePickerState;\n\n const calculateMinTime = (startTime: TimeValue, twelveHour: boolean): string | undefined => {\n if (!startTime) return undefined;\n\n let hours = startTime.hours;\n let minutes = startTime.minutes + 1;\n let amOrPm = startTime.amOrPm;\n\n if (minutes >= 60) {\n minutes = 0;\n hours++;\n\n if (twelveHour) {\n if (hours > 12) {\n hours = 1;\n amOrPm = amOrPm === 'AM' ? 'PM' : 'AM';\n } else if (hours === 12) {\n amOrPm = amOrPm === 'AM' ? 'PM' : 'AM';\n }\n } else {\n if (hours >= 24) hours = 0;\n }\n }\n\n return formatTime({ hours, minutes, amOrPm }, twelveHour);\n };\n\n const handleNextOrDone = (\n validateRange: boolean,\n twelveHour: boolean,\n onchange?: (startTime: string, endTime: string) => void\n ) => {\n if (state.currentSelection === 'start') {\n // Move to end time selection\n state.currentSelection = 'end';\n state.currentView = 'hours'; // Reset to hours view for end time\n\n // If validation is enabled and end time is before or equal to start time, reset end time\n if (validateRange) {\n const startMins = timeToMinutes(state.tempStartTime, twelveHour);\n const endMins = timeToMinutes(state.tempEndTime, twelveHour);\n if (endMins <= startMins) {\n // Reset end time to start time\n state.tempEndTime = { ...state.tempStartTime };\n }\n }\n } else {\n // Finalize selection\n state.startTime = { ...state.tempStartTime };\n state.endTime = { ...state.tempEndTime };\n state.isPickerOpen = false;\n state.currentSelection = 'start';\n\n // Call onchange callback\n if (onchange && state.startTime && state.endTime) {\n const startTimeStr = formatTime(state.startTime, twelveHour);\n const endTimeStr = formatTime(state.endTime, twelveHour);\n onchange(startTimeStr, endTimeStr);\n }\n }\n };\n\n const TimeRangePickerModal: FactoryComponent<{\n i18n: Required<TimepickerI18n>;\n showClearBtn: boolean;\n twelveHour: boolean;\n minuteStep: number;\n hourStep: number;\n minTime?: string;\n maxTime?: string;\n validateRange: boolean;\n onchange?: (startTime: string, endTime: string) => void;\n displayMode?: 'analog' | 'digital';\n dialRadius?: number;\n outerRadius?: number;\n innerRadius?: number;\n tickRadius?: number;\n roundBy5?: boolean;\n vibrate?: boolean;\n }> = () => {\n return {\n view: ({ attrs }) => {\n const {\n i18n,\n showClearBtn,\n twelveHour,\n minuteStep,\n hourStep,\n minTime,\n maxTime,\n validateRange,\n displayMode = 'digital',\n dialRadius = 135,\n outerRadius = 105,\n innerRadius = 70,\n tickRadius = 20,\n roundBy5 = false,\n vibrate = true,\n } = attrs;\n\n const isAnalogMode = displayMode === 'analog';\n\n // Calculate effective minTime for end time selection\n const effectiveMinTime =\n state.currentSelection === 'end' && validateRange\n ? calculateMinTime(state.tempStartTime, twelveHour)\n : minTime;\n\n return m('.modal-content.timepicker-container', [\n // Vertical time range display on the left\n m('.timerange-display-vertical', [\n m('.timerange-time-section', { class: state.currentSelection === 'start' ? 'active' : '' }, [\n m('.timerange-label', 'Start'),\n m('.timerange-time', [\n m(\n 'span.timerange-hours',\n {\n oncreate: (vnode) => {\n state.spanStartHours = vnode.dom as HTMLElement;\n state.spanStartHours.innerHTML = addLeadingZero(state.tempStartTime.hours);\n },\n },\n addLeadingZero(state.tempStartTime.hours)\n ),\n ':',\n m(\n 'span.timerange-minutes',\n {\n oncreate: (vnode) => {\n state.spanStartMinutes = vnode.dom as HTMLElement;\n state.spanStartMinutes.innerHTML = addLeadingZero(state.tempStartTime.minutes);\n },\n },\n addLeadingZero(state.tempStartTime.minutes)\n ),\n twelveHour &&\n m(\n 'span.timerange-ampm',\n {\n oncreate: (vnode) => {\n state.spanStartAmPm = vnode.dom as HTMLElement;\n state.spanStartAmPm.innerHTML = ` ${state.tempStartTime.amOrPm}`;\n },\n },\n ` ${state.tempStartTime.amOrPm}`\n ),\n ]),\n ]),\n m('.timerange-time-section', { class: state.currentSelection === 'end' ? 'active' : '' }, [\n m('.timerange-label', 'End'),\n m('.timerange-time', [\n m(\n 'span.timerange-hours',\n {\n oncreate: (vnode) => {\n state.spanEndHours = vnode.dom as HTMLElement;\n state.spanEndHours.innerHTML = addLeadingZero(state.tempEndTime.hours);\n },\n },\n addLeadingZero(state.tempEndTime.hours)\n ),\n ':',\n m(\n 'span.timerange-minutes',\n {\n oncreate: (vnode) => {\n state.spanEndMinutes = vnode.dom as HTMLElement;\n state.spanEndMinutes.innerHTML = addLeadingZero(state.tempEndTime.minutes);\n },\n },\n addLeadingZero(state.tempEndTime.minutes)\n ),\n twelveHour &&\n m(\n 'span.timerange-ampm',\n {\n oncreate: (vnode) => {\n state.spanEndAmPm = vnode.dom as HTMLElement;\n state.spanEndAmPm.innerHTML = ` ${state.tempEndTime.amOrPm}`;\n },\n },\n ` ${state.tempEndTime.amOrPm}`\n ),\n ]),\n ]),\n ]),\n\n // Clock picker (analog or digital mode)\n isAnalogMode\n ? m('.timepicker-analog-display', [\n m(\n '.timepicker-plate',\n m(AnalogClock, {\n key: state.currentSelection, // Force component recreation when switching between start/end\n hours: state.currentSelection === 'start' ? state.tempStartTime.hours : state.tempEndTime.hours,\n minutes:\n state.currentSelection === 'start' ? state.tempStartTime.minutes : state.tempEndTime.minutes,\n amOrPm: state.currentSelection === 'start' ? state.tempStartTime.amOrPm : state.tempEndTime.amOrPm,\n currentView: state.currentView,\n twelveHour,\n dialRadius,\n outerRadius,\n innerRadius,\n tickRadius,\n roundBy5,\n vibrate,\n onTimeChange: (hours, minutes) => {\n if (state.currentSelection === 'start') {\n state.tempStartTime = { ...state.tempStartTime, hours, minutes };\n if (state.spanStartHours) state.spanStartHours.innerHTML = addLeadingZero(hours);\n if (state.spanStartMinutes) state.spanStartMinutes.innerHTML = addLeadingZero(minutes);\n } else {\n state.tempEndTime = { ...state.tempEndTime, hours, minutes };\n if (state.spanEndHours) state.spanEndHours.innerHTML = addLeadingZero(hours);\n if (state.spanEndMinutes) state.spanEndMinutes.innerHTML = addLeadingZero(minutes);\n }\n },\n onViewChange: (view) => {\n state.currentView = view;\n },\n spanHours: state.currentSelection === 'start' ? state.spanStartHours : state.spanEndHours,\n spanMinutes: state.currentSelection === 'start' ? state.spanStartMinutes : state.spanEndMinutes,\n })\n ),\n // Footer (inside analog display)\n m('.timepicker-footer', [\n m(\n 'button.btn-flat.timepicker-clear.waves-effect',\n {\n type: 'button',\n style: showClearBtn ? '' : 'visibility: hidden;',\n onclick: () => {\n state.isPickerOpen = false;\n },\n },\n i18n.clear\n ),\n m('.confirmation-btns', [\n m(\n 'button.btn-flat.timepicker-close.waves-effect',\n {\n type: 'button',\n onclick: () => {\n state.isPickerOpen = false;\n state.currentSelection = 'start';\n state.currentView = 'hours'; // Reset to hours view\n },\n },\n i18n.cancel\n ),\n m(\n 'button.btn-flat.timepicker-close.waves-effect',\n {\n type: 'button',\n onclick: () => {\n handleNextOrDone(validateRange, twelveHour, attrs.onchange);\n },\n },\n state.currentSelection === 'start' ? i18n.next : i18n.done\n ),\n ]),\n ]),\n ])\n : m('.timepicker-digital-mode', [\n m(DigitalClock, {\n key: state.currentSelection, // Force component recreation when switching between start/end\n hours: state.currentSelection === 'start' ? state.tempStartTime.hours : state.tempEndTime.hours,\n minutes: state.currentSelection === 'start' ? state.tempStartTime.minutes : state.tempEndTime.minutes,\n amOrPm: state.currentSelection === 'start' ? state.tempStartTime.amOrPm : state.tempEndTime.amOrPm,\n twelveHour,\n minuteStep,\n hourStep,\n minTime: effectiveMinTime,\n maxTime,\n onTimeChange: (hours, minutes, amOrPm) => {\n if (state.currentSelection === 'start') {\n state.tempStartTime = { hours, minutes, amOrPm };\n if (state.spanStartHours) state.spanStartHours.innerHTML = addLeadingZero(hours);\n if (state.spanStartMinutes) state.spanStartMinutes.innerHTML = addLeadingZero(minutes);\n if (state.spanStartAmPm) state.spanStartAmPm.innerHTML = ` ${amOrPm}`;\n } else {\n state.tempEndTime = { hours, minutes, amOrPm };\n if (state.spanEndHours) state.spanEndHours.innerHTML = addLeadingZero(hours);\n if (state.spanEndMinutes) state.spanEndMinutes.innerHTML = addLeadingZero(minutes);\n if (state.spanEndAmPm) state.spanEndAmPm.innerHTML = ` ${amOrPm}`;\n }\n },\n spanHours: state.currentSelection === 'start' ? state.spanStartHours : state.spanEndHours,\n spanMinutes: state.currentSelection === 'start' ? state.spanStartMinutes : state.spanEndMinutes,\n spanAmPm: state.currentSelection === 'start' ? state.spanStartAmPm : state.spanEndAmPm,\n }),\n // Footer (inside digital mode)\n m('.timepicker-footer', { key: 'timepicker-footer' }, [\n m(\n 'button.btn-flat.timepicker-clear.waves-effect',\n {\n type: 'button',\n style: showClearBtn ? '' : 'visibility: hidden;',\n onclick: () => {\n state.isPickerOpen = false;\n },\n },\n i18n.clear\n ),\n m('.confirmation-btns', [\n m(\n 'button.btn-flat.timepicker-close.waves-effect',\n {\n type: 'button',\n onclick: () => {\n state.isPickerOpen = false;\n state.currentSelection = 'start';\n state.currentView = 'hours'; // Reset to hours view\n },\n },\n i18n.cancel\n ),\n m(\n 'button.btn-flat.timepicker-close.waves-effect',\n {\n type: 'button',\n onclick: () => {\n handleNextOrDone(validateRange, twelveHour, attrs.onchange);\n },\n },\n state.currentSelection === 'start' ? i18n.next : i18n.done\n ),\n ]),\n ]),\n ]),\n ]);\n },\n };\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && state.isPickerOpen) {\n state.isPickerOpen = false;\n clearPortal(state.portalContainerId);\n }\n };\n\n const renderPickerToPortal = (attrs: TimeRangePickerAttrs) => {\n const mergedI18n: Required<TimepickerI18n> = {\n ...defaultI18n,\n ...attrs.i18n,\n };\n\n const pickerModal = m(\n '.timepicker-modal-wrapper',\n {\n style: {\n position: 'fixed',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n },\n [\n // Modal overlay\n m('.modal-overlay', {\n style: {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: '1002',\n },\n onclick: () => {\n state.isPickerOpen = false;\n state.currentSelection = 'start';\n state.currentView = 'hours'; // Reset to hours view\n },\n }),\n\n // Modal content\n m(\n '.modal.timepicker-modal.open.timerange-modal',\n {\n style: {\n position: 'relative',\n zIndex: '1003',\n display: 'block',\n opacity: 1,\n top: 'auto',\n transform: 'scaleX(1) scaleY(1)',\n margin: '0 auto',\n },\n },\n [\n m(TimeRangePickerModal, {\n i18n: mergedI18n,\n showClearBtn: attrs.showClearBtn || false,\n twelveHour: attrs.twelveHour !== undefined ? attrs.twelveHour : true,\n minuteStep: attrs.minuteStep || 5,\n hourStep: attrs.hourStep || 1,\n minTime: attrs.minTime,\n maxTime: attrs.maxTime,\n validateRange: attrs.validateRange || false,\n onchange: attrs.onchange,\n displayMode: attrs.displayMode,\n dialRadius: attrs.dialRadius,\n outerRadius: attrs.outerRadius,\n innerRadius: attrs.innerRadius,\n tickRadius: attrs.tickRadius,\n roundBy5: attrs.roundBy5,\n vibrate: attrs.vibrate,\n }),\n ]\n ),\n ]\n );\n\n renderToPortal(state.portalContainerId, pickerModal, 1004);\n };\n\n return {\n oninit: (vnode) => {\n const attrs = vnode.attrs;\n const twelveHour = attrs.twelveHour !== undefined ? attrs.twelveHour : true;\n\n const startTime = parseTime(attrs.startValue || '', twelveHour);\n const endTime = parseTime(attrs.endValue || '', twelveHour);\n\n state = {\n id: uniqueId(),\n currentSelection: 'start',\n startTime,\n endTime,\n tempStartTime: { ...startTime },\n tempEndTime: { ...endTime },\n isPickerOpen: false,\n portalContainerId: `timerange-portal-${uniqueId()}`,\n currentView: 'hours',\n };\n\n document.addEventListener('keydown', handleKeyDown);\n },\n\n onremove: () => {\n document.removeEventListener('keydown', handleKeyDown);\n\n if (state.isPickerOpen) {\n clearPortal(state.portalContainerId);\n }\n },\n\n onupdate: ({ attrs }) => {\n if (state.isPickerOpen) {\n renderPickerToPortal(attrs);\n } else {\n clearPortal(state.portalContainerId);\n }\n },\n\n view: ({ attrs }) => {\n const {\n id = state.id,\n label,\n placeholder = 'Select time range',\n disabled,\n readonly,\n required,\n iconName,\n helperText,\n className: cn1,\n class: cn2,\n twelveHour = true,\n } = attrs;\n\n const className = cn1 || cn2 || 'col s12';\n\n const displayValue =\n state.startTime && state.endTime\n ? `${formatTime(state.startTime, twelveHour)} - ${formatTime(state.endTime, twelveHour)}`\n : state.startTime\n ? `${formatTime(state.startTime, twelveHour)} - ...`\n : '';\n\n return m('.input-field', { className }, [\n iconName && m('i.material-icons.prefix', iconName),\n\n // Display input\n m('input.timerangepicker', {\n id,\n type: 'text',\n value: displayValue,\n placeholder,\n readonly: true,\n disabled,\n required,\n onclick: () => {\n if (!disabled && !readonly) {\n state.isPickerOpen = true;\n state.currentSelection = 'start';\n state.currentView = 'hours'; // Reset to hours view when opening\n state.tempStartTime = { ...state.startTime };\n state.tempEndTime = { ...state.endTime };\n }\n },\n }),\n\n label &&\n m(\n 'label',\n {\n for: id,\n class: displayValue || placeholder ? 'active' : '',\n },\n label\n ),\n\n helperText && m('span.helper-text', helperText),\n ]);\n },\n };\n};\n","import { FactoryComponent } from 'mithril';\n\nexport interface ToastAction {\n /** Icon name for the action button */\n icon?: string;\n /** Text label for the action button (if no icon provided) */\n label?: string;\n /** Callback function called when action is clicked */\n onclick: () => void;\n /** Whether to use flat button style (default) or icon button style */\n variant?: 'flat' | 'icon';\n}\n\nexport interface ToastOptions {\n /** HTML content for the toast */\n html?: string;\n /** Display length in milliseconds */\n displayLength?: number;\n /** Animation in duration in milliseconds */\n inDuration?: number;\n /** Animation out duration in milliseconds */\n outDuration?: number;\n /**\n * Additional CSS classes\n * @deprecated Use className instead. This property will be removed in a future version.\n */\n classes?: string;\n /** Additional CSS classes (preferred over deprecated 'classes' property) */\n className?: string;\n /** Callback function called when toast is dismissed */\n completeCallback?: () => void;\n /** Activation percentage for swipe dismissal */\n activationPercent?: number;\n /** Optional action button (for simple confirmations or undo actions) */\n action?: ToastAction;\n}\n\ninterface ToastState {\n panning: boolean;\n timeRemaining: number;\n startingXPos: number;\n xPos: number;\n velocityX: number;\n time: number;\n deltaX: number;\n wasSwiped: boolean;\n counterInterval?: number;\n}\n\nexport class Toast {\n public el: HTMLElement;\n public options: Required<ToastOptions>;\n private state: ToastState;\n\n private static _toasts: Toast[] = [];\n private static _container: HTMLElement | null = null;\n private static _draggedToast: Toast | null = null;\n\n private static defaults: ToastOptions = {\n html: '',\n displayLength: 4000,\n inDuration: 300,\n outDuration: 375,\n classes: '',\n className: '',\n completeCallback: undefined,\n activationPercent: 0.8,\n action: undefined,\n };\n\n constructor(options: ToastOptions = {}) {\n this.options = { ...Toast.defaults, ...options } as Required<ToastOptions>;\n\n this.state = {\n panning: false,\n timeRemaining: this.options.displayLength,\n startingXPos: 0,\n xPos: 0,\n velocityX: 0,\n time: 0,\n deltaX: 0,\n wasSwiped: false,\n };\n\n if (Toast._toasts.length === 0) {\n Toast._createContainer();\n }\n\n // Create new toast\n Toast._toasts.push(this);\n this.el = this._createToast();\n this._animateIn();\n this._setTimer();\n }\n\n static getInstance(el: HTMLElement): Toast | undefined {\n return (el as any).M_Toast;\n }\n\n static _createContainer(): void {\n const container = document.createElement('div');\n container.setAttribute('id', 'toast-container');\n\n // Add event handlers\n container.addEventListener('touchstart', Toast._onDragStart);\n container.addEventListener('touchmove', Toast._onDragMove);\n container.addEventListener('touchend', Toast._onDragEnd);\n\n container.addEventListener('mousedown', Toast._onDragStart);\n document.addEventListener('mousemove', Toast._onDragMove);\n document.addEventListener('mouseup', Toast._onDragEnd);\n\n document.body.appendChild(container);\n Toast._container = container;\n }\n\n static _removeContainer(): void {\n document.removeEventListener('mousemove', Toast._onDragMove);\n document.removeEventListener('mouseup', Toast._onDragEnd);\n\n if (Toast._container) {\n Toast._container.remove();\n Toast._container = null;\n }\n }\n\n static _onDragStart = (e: Event): void => {\n const target = e.target as HTMLElement;\n const toastEl = target.closest('.toast') as HTMLElement;\n\n if (toastEl) {\n const toast = (toastEl as any).M_Toast as Toast;\n if (toast) {\n toast.state.panning = true;\n Toast._draggedToast = toast;\n toast.el.classList.add('panning');\n toast.el.style.transition = '';\n toast.state.startingXPos = Toast._xPos(e);\n toast.state.time = Date.now();\n toast.state.xPos = Toast._xPos(e);\n }\n }\n };\n\n static _onDragMove = (e: Event): void => {\n if (Toast._draggedToast) {\n e.preventDefault();\n const toast = Toast._draggedToast;\n toast.state.deltaX = Math.abs(toast.state.xPos - Toast._xPos(e));\n toast.state.xPos = Toast._xPos(e);\n toast.state.velocityX = toast.state.deltaX / (Date.now() - toast.state.time);\n toast.state.time = Date.now();\n\n const totalDeltaX = toast.state.xPos - toast.state.startingXPos;\n const activationDistance = toast.el.offsetWidth * toast.options.activationPercent;\n toast.el.style.transform = `translateX(${totalDeltaX}px)`;\n toast.el.style.opacity = String(1 - Math.abs(totalDeltaX / activationDistance));\n }\n };\n\n static _onDragEnd = (): void => {\n if (Toast._draggedToast) {\n const toast = Toast._draggedToast;\n toast.state.panning = false;\n toast.el.classList.remove('panning');\n\n const totalDeltaX = toast.state.xPos - toast.state.startingXPos;\n const activationDistance = toast.el.offsetWidth * toast.options.activationPercent;\n const shouldBeDismissed = Math.abs(totalDeltaX) > activationDistance || toast.state.velocityX > 1;\n\n if (shouldBeDismissed) {\n toast.state.wasSwiped = true;\n toast.dismiss();\n } else {\n toast.el.style.transition = 'transform .2s, opacity .2s';\n toast.el.style.transform = '';\n toast.el.style.opacity = '';\n }\n Toast._draggedToast = null;\n }\n };\n\n static _xPos(e: Event): number {\n const touchEvent = e as TouchEvent;\n const mouseEvent = e as MouseEvent;\n\n if (touchEvent.targetTouches && touchEvent.targetTouches.length >= 1) {\n return touchEvent.targetTouches[0].clientX;\n }\n return mouseEvent.clientX;\n }\n\n static dismissAll(): void {\n Toast._toasts.forEach((toast) => toast.dismiss());\n }\n\n _createToast(): HTMLElement {\n const toast = document.createElement('div');\n toast.classList.add('toast');\n\n // Add custom classes (prefer className over deprecated classes)\n const customClasses = this.options.className || this.options.classes;\n if (customClasses) {\n toast.classList.add(...customClasses.split(' ').filter((c) => c));\n }\n\n // Create content wrapper\n const contentWrapper = document.createElement('div');\n contentWrapper.style.cssText = 'display: flex; align-items: center; gap: 12px;';\n\n // Set message content\n const messageEl = document.createElement('div');\n messageEl.style.flex = '1';\n const message = this.options.html;\n if (typeof message === 'object' && message && 'nodeType' in message) {\n messageEl.appendChild(message);\n } else {\n messageEl.innerHTML = message;\n }\n contentWrapper.appendChild(messageEl);\n\n // Add action button if provided\n if (this.options.action) {\n const action = this.options.action;\n const actionBtn = document.createElement('button');\n actionBtn.className = 'btn-flat toast-action';\n actionBtn.style.cssText = 'margin: 0; padding: 0 8px; min-width: auto; height: 36px;';\n\n if (action.variant === 'icon' && action.icon) {\n // Icon button variant\n actionBtn.innerHTML = `<i class=\"material-icons\">${action.icon}</i>`;\n actionBtn.setAttribute('aria-label', action.label || action.icon);\n } else {\n // Flat button variant (default)\n if (action.icon) {\n actionBtn.innerHTML = `<i class=\"material-icons left\">${action.icon}</i>${action.label || ''}`;\n } else {\n actionBtn.textContent = action.label || '';\n }\n }\n\n actionBtn.onclick = (e) => {\n e.stopPropagation();\n action.onclick();\n this.dismiss();\n };\n\n contentWrapper.appendChild(actionBtn);\n }\n\n toast.appendChild(contentWrapper);\n\n // Store reference\n (toast as any).M_Toast = this;\n\n // Measure natural width BEFORE appending to avoid interference from other toasts\n // Temporarily append to body in an isolated position\n toast.style.cssText = 'position: absolute; visibility: hidden; left: -9999px; display: flex;';\n document.body.appendChild(toast);\n\n // Force layout and measure\n const naturalWidth = toast.offsetWidth;\n\n // Remove from body\n document.body.removeChild(toast);\n\n // Lock the width to prevent changes based on other toasts\n toast.style.cssText = `width: ${naturalWidth}px;`;\n\n // Append to container\n Toast._container!.appendChild(toast);\n return toast;\n }\n\n _animateIn(): void {\n // Width is already locked from _createToast\n // Set initial animation state (transitions are defined in CSS)\n this.el.style.transform = 'translateY(35px)';\n this.el.style.opacity = '0';\n\n // Trigger animation after a brief delay to ensure styles are applied\n setTimeout(() => {\n this.el.style.transform = 'translateY(0)';\n this.el.style.opacity = '1';\n }, 10);\n }\n\n _setTimer(): void {\n if (this.state.timeRemaining !== Infinity) {\n this.state.counterInterval = window.setInterval(() => {\n if (!this.state.panning) {\n this.state.timeRemaining -= 20;\n }\n\n if (this.state.timeRemaining <= 0) {\n this.dismiss();\n }\n }, 20);\n }\n }\n\n dismiss(): void {\n if (this.state.counterInterval) {\n window.clearInterval(this.state.counterInterval);\n }\n\n const activationDistance = this.el.offsetWidth * this.options.activationPercent;\n\n if (this.state.wasSwiped) {\n // Override transition temporarily for swipe\n this.el.style.transition = 'transform .05s, opacity .05s';\n this.el.style.transform = `translateX(${activationDistance}px)`;\n this.el.style.opacity = '0';\n\n // Reset transition after swipe animation\n setTimeout(() => {\n this.el.style.transition = `opacity ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1),\n max-height ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1),\n margin-top ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1),\n padding-top ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1),\n padding-bottom ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1)`;\n }, 50);\n } else {\n // Set collapse transition timing\n this.el.style.transition = `opacity ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1),\n max-height ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1),\n margin-top ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1),\n padding-top ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1),\n padding-bottom ${this.options.outDuration}ms cubic-bezier(0.165, 0.84, 0.44, 1)`;\n }\n\n // Animate out - collapse height smoothly\n this.el.style.opacity = '0';\n this.el.style.maxHeight = '0';\n this.el.style.marginTop = '0';\n this.el.style.paddingTop = '0';\n this.el.style.paddingBottom = '0';\n this.el.style.overflow = 'hidden';\n\n setTimeout(() => {\n // Call completion callback\n if (this.options.completeCallback) {\n this.options.completeCallback();\n }\n\n // Remove toast from DOM\n this.el.remove();\n\n // Remove from toasts array\n const index = Toast._toasts.indexOf(this);\n if (index > -1) {\n Toast._toasts.splice(index, 1);\n }\n\n // Remove container if no more toasts\n if (Toast._toasts.length === 0) {\n Toast._removeContainer();\n }\n }, this.options.outDuration);\n }\n}\n\n// Factory function for creating toasts\nexport const toast = (options: ToastOptions): Toast => {\n return new Toast(options);\n};\n\n// Component for declarative usage (optional)\nexport interface ToastComponentAttrs extends ToastOptions {\n /** Whether to show the toast */\n show?: boolean;\n}\n\nexport const ToastComponent: FactoryComponent<ToastComponentAttrs> = () => {\n let toastInstance: Toast | null = null;\n\n return {\n view: ({ attrs }) => {\n if (attrs.show && !toastInstance) {\n toastInstance = new Toast(attrs);\n } else if (!attrs.show && toastInstance) {\n toastInstance.dismiss();\n toastInstance = null;\n }\n\n return null; // This component doesn't render anything itself\n },\n\n onremove: () => {\n if (toastInstance) {\n toastInstance.dismiss();\n toastInstance = null;\n }\n },\n };\n};\n","import { FactoryComponent, Attributes } from 'mithril';\n\nexport interface TooltipOptions {\n /** Delay before tooltip appears on hover */\n enterDelay?: number;\n /** Delay before tooltip disappears after hover ends */\n exitDelay?: number;\n /** HTML content for the tooltip */\n html?: string | null;\n /** Margin from element */\n margin?: number;\n /** Animation in duration */\n inDuration?: number;\n /** Animation out duration */\n outDuration?: number;\n /** Position of tooltip */\n position?: 'top' | 'bottom' | 'left' | 'right';\n /** Movement during transition */\n transitionMovement?: number;\n}\n\ninterface TooltipState {\n isOpen: boolean;\n isHovered: boolean;\n isFocused: boolean;\n xMovement: number;\n yMovement: number;\n enterDelayTimeout?: number;\n exitDelayTimeout?: number;\n}\n\nexport class Tooltip {\n public el: HTMLElement;\n public tooltipEl!: HTMLElement;\n public options: Required<TooltipOptions>;\n private state: TooltipState;\n\n private static defaults: TooltipOptions = {\n exitDelay: 200,\n enterDelay: 0,\n html: null,\n margin: 5,\n inDuration: 250,\n outDuration: 200,\n position: 'bottom',\n transitionMovement: 10,\n };\n\n // Bound event handlers\n private _handleMouseEnterBound!: () => void;\n private _handleMouseLeaveBound!: () => void;\n private _handleFocusBound!: () => void;\n private _handleBlurBound!: () => void;\n\n constructor(el: HTMLElement, options: TooltipOptions = {}) {\n this.el = el;\n this.options = { ...Tooltip.defaults, ...options } as Required<TooltipOptions>;\n\n this.state = {\n isOpen: false,\n isHovered: false,\n isFocused: false,\n xMovement: 0,\n yMovement: 0,\n };\n\n (this.el as any).M_Tooltip = this;\n this._appendTooltipEl();\n this._setupEventHandlers();\n }\n\n static getInstance(el: HTMLElement): Tooltip | undefined {\n return (el as any).M_Tooltip;\n }\n\n destroy(): void {\n this.tooltipEl.remove();\n this._removeEventHandlers();\n (this.el as any).M_Tooltip = undefined;\n }\n\n _appendTooltipEl(): void {\n const tooltipEl = document.createElement('div');\n tooltipEl.classList.add('material-tooltip');\n this.tooltipEl = tooltipEl;\n\n const tooltipContentEl = document.createElement('div');\n tooltipContentEl.classList.add('tooltip-content');\n tooltipContentEl.innerHTML = this.options.html || '';\n tooltipEl.appendChild(tooltipContentEl);\n\n document.body.appendChild(tooltipEl);\n }\n\n _updateTooltipContent(): void {\n const contentEl = this.tooltipEl.querySelector('.tooltip-content');\n if (contentEl) {\n contentEl.innerHTML = this.options.html || '';\n }\n }\n\n _setupEventHandlers(): void {\n this._handleMouseEnterBound = this._handleMouseEnter.bind(this);\n this._handleMouseLeaveBound = this._handleMouseLeave.bind(this);\n this._handleFocusBound = this._handleFocus.bind(this);\n this._handleBlurBound = this._handleBlur.bind(this);\n\n this.el.addEventListener('mouseenter', this._handleMouseEnterBound);\n this.el.addEventListener('mouseleave', this._handleMouseLeaveBound);\n this.el.addEventListener('focus', this._handleFocusBound, true);\n this.el.addEventListener('blur', this._handleBlurBound, true);\n }\n\n _removeEventHandlers(): void {\n this.el.removeEventListener('mouseenter', this._handleMouseEnterBound);\n this.el.removeEventListener('mouseleave', this._handleMouseLeaveBound);\n this.el.removeEventListener('focus', this._handleFocusBound, true);\n this.el.removeEventListener('blur', this._handleBlurBound, true);\n }\n\n open(isManual: boolean = true): void {\n if (this.state.isOpen) {\n return;\n }\n\n this.state.isOpen = true;\n\n // Update tooltip content with data attributes\n this.options = { ...this.options, ...this._getAttributeOptions() };\n this._updateTooltipContent();\n this._setEnterDelayTimeout(isManual);\n }\n\n close(): void {\n if (!this.state.isOpen) {\n return;\n }\n\n this.state.isHovered = false;\n this.state.isFocused = false;\n this.state.isOpen = false;\n this._setExitDelayTimeout();\n }\n\n _setExitDelayTimeout(): void {\n if (this.state.exitDelayTimeout) {\n clearTimeout(this.state.exitDelayTimeout);\n }\n\n this.state.exitDelayTimeout = window.setTimeout(() => {\n if (this.state.isHovered || this.state.isFocused) {\n return;\n }\n this._animateOut();\n }, this.options.exitDelay);\n }\n\n _setEnterDelayTimeout(isManual: boolean): void {\n if (this.state.enterDelayTimeout) {\n clearTimeout(this.state.enterDelayTimeout);\n }\n\n this.state.enterDelayTimeout = window.setTimeout(() => {\n if (!this.state.isHovered && !this.state.isFocused && !isManual) {\n return;\n }\n this._animateIn();\n }, this.options.enterDelay);\n }\n\n _positionTooltip(): void {\n const origin = this.el;\n const tooltip = this.tooltipEl;\n const originHeight = origin.offsetHeight;\n const originWidth = origin.offsetWidth;\n const tooltipHeight = tooltip.offsetHeight;\n const tooltipWidth = tooltip.offsetWidth;\n const margin = this.options.margin;\n\n this.state.xMovement = 0;\n this.state.yMovement = 0;\n\n const originRect = origin.getBoundingClientRect();\n let targetTop = originRect.top + window.pageYOffset;\n let targetLeft = originRect.left + window.pageXOffset;\n\n switch (this.options.position) {\n case 'top':\n targetTop += -tooltipHeight - margin;\n targetLeft += originWidth / 2 - tooltipWidth / 2;\n this.state.yMovement = -this.options.transitionMovement;\n break;\n case 'right':\n targetTop += originHeight / 2 - tooltipHeight / 2;\n targetLeft += originWidth + margin;\n this.state.xMovement = this.options.transitionMovement;\n break;\n case 'left':\n targetTop += originHeight / 2 - tooltipHeight / 2;\n targetLeft += -tooltipWidth - margin;\n this.state.xMovement = -this.options.transitionMovement;\n break;\n case 'bottom':\n default:\n targetTop += originHeight + margin;\n targetLeft += originWidth / 2 - tooltipWidth / 2;\n this.state.yMovement = this.options.transitionMovement;\n break;\n }\n\n const repositioned = this._repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);\n this.tooltipEl.style.top = repositioned.y + 'px';\n this.tooltipEl.style.left = repositioned.x + 'px';\n }\n\n _repositionWithinScreen(x: number, y: number, width: number, height: number): { x: number; y: number } {\n const scrollLeft = window.pageXOffset;\n const scrollTop = window.pageYOffset;\n let newX = x - scrollLeft;\n let newY = y - scrollTop;\n\n const offset = this.options.margin + this.options.transitionMovement;\n\n // Check boundaries\n if (newX < offset) {\n newX = offset;\n } else if (newX + width > window.innerWidth - offset) {\n newX = window.innerWidth - width - offset;\n }\n\n if (newY < offset) {\n newY = offset;\n } else if (newY + height > window.innerHeight - offset) {\n newY = window.innerHeight - height - offset;\n }\n\n return {\n x: newX + scrollLeft,\n y: newY + scrollTop,\n };\n }\n\n _animateIn(): void {\n this._positionTooltip();\n this.tooltipEl.style.visibility = 'visible';\n\n // CSS animation\n this.tooltipEl.style.cssText += `\n opacity: 0;\n transform: translate(0, 0);\n transition: opacity ${this.options.inDuration}ms cubic-bezier(0.215, 0.61, 0.355, 1),\n transform ${this.options.inDuration}ms cubic-bezier(0.215, 0.61, 0.355, 1);\n `;\n\n setTimeout(() => {\n this.tooltipEl.style.opacity = '1';\n this.tooltipEl.style.transform = `translate(${this.state.xMovement}px, ${this.state.yMovement}px)`;\n }, 10);\n }\n\n _animateOut(): void {\n this.tooltipEl.style.cssText += `\n transition: opacity ${this.options.outDuration}ms cubic-bezier(0.215, 0.61, 0.355, 1),\n transform ${this.options.outDuration}ms cubic-bezier(0.215, 0.61, 0.355, 1);\n opacity: 0;\n transform: translate(0, 0);\n `;\n\n setTimeout(() => {\n this.tooltipEl.style.visibility = 'hidden';\n }, this.options.outDuration);\n }\n\n _handleMouseEnter(): void {\n this.state.isHovered = true;\n this.state.isFocused = false;\n this.open(false);\n }\n\n _handleMouseLeave(): void {\n this.state.isHovered = false;\n this.state.isFocused = false;\n this.close();\n }\n\n _handleFocus(): void {\n this.state.isFocused = true;\n this.open(false);\n }\n\n _handleBlur(): void {\n this.state.isFocused = false;\n this.close();\n }\n\n _getAttributeOptions(): Partial<TooltipOptions> {\n const attributeOptions: Partial<TooltipOptions> = {};\n const tooltipText = this.el.getAttribute('data-tooltip');\n const position = this.el.getAttribute('data-position') as TooltipOptions['position'];\n\n if (tooltipText) {\n attributeOptions.html = tooltipText;\n }\n\n if (position && ['top', 'bottom', 'left', 'right'].includes(position)) {\n attributeOptions.position = position;\n }\n\n return attributeOptions;\n }\n}\n\n// Mithril component for declarative usage\nexport interface TooltipComponentAttrs extends Attributes, TooltipOptions {\n /** Element selector or reference to attach tooltip to */\n targetSelector?: string;\n}\n\nexport const TooltipComponent: FactoryComponent<TooltipComponentAttrs> = () => {\n let tooltipInstance: Tooltip | null = null;\n\n return {\n oncreate: ({ attrs }) => {\n if (attrs.targetSelector) {\n const targetEl = document.querySelector(attrs.targetSelector) as HTMLElement;\n if (targetEl) {\n tooltipInstance = new Tooltip(targetEl, attrs);\n }\n }\n },\n\n onremove: () => {\n if (tooltipInstance) {\n tooltipInstance.destroy();\n tooltipInstance = null;\n }\n },\n\n view: () => null, // This component doesn't render anything itself\n };\n};\n\n// Helper function to initialize tooltips on elements\nexport const initTooltips = (selector: string = '[data-tooltip]', options: TooltipOptions = {}): Tooltip[] => {\n const elements = document.querySelectorAll(selector) as NodeListOf<HTMLElement>;\n const tooltips: Tooltip[] = [];\n\n elements.forEach((el) => {\n if (!(el as any).M_Tooltip) {\n tooltips.push(new Tooltip(el, options));\n }\n });\n\n return tooltips;\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { MaterialIcon } from './material-icon';\n\nexport type Theme = 'light' | 'dark' | 'auto';\n\nexport interface ThemeSwitcherI18n {\n /** Label for the theme switcher */\n theme?: string;\n /** Light theme label */\n light?: string;\n /** Dark theme label */\n dark?: string;\n /** Auto theme label */\n auto?: string;\n /** Light theme title/tooltip */\n lightTitle?: string;\n /** Dark theme title/tooltip */\n darkTitle?: string;\n /** Auto theme title/tooltip */\n autoTitle?: string;\n /** Toggle button title when switching to dark */\n switchToDark?: string;\n /** Toggle button title when switching to light */\n switchToLight?: string;\n}\n\nconst defaultI18n: Required<ThemeSwitcherI18n> = {\n theme: 'Theme:',\n light: 'Light',\n dark: 'Dark',\n auto: 'Auto',\n lightTitle: 'Light theme',\n darkTitle: 'Dark theme',\n autoTitle: 'Auto theme (system preference)',\n switchToDark: 'Switch to dark theme',\n switchToLight: 'Switch to light theme',\n};\n\nexport interface ThemeSwitcherAttrs {\n /** Current theme selection */\n theme?: Theme;\n /** Callback when theme changes */\n onThemeChange?: (theme: Theme) => void;\n /** Show labels on the toggle buttons */\n showLabels?: boolean;\n /** Custom class for the container */\n className?: string;\n /** Internationalization */\n i18n?: ThemeSwitcherI18n;\n}\n\n/**\n * Theme switching utilities and component\n */\nexport class ThemeManager {\n private static currentTheme: Theme = 'auto';\n private static useLocalStorage: boolean = true;\n\n /**\n * Configure whether ThemeManager should use localStorage for persistence.\n * When disabled, you can manage theme state externally and pass it via component attrs.\n * @param enabled - Whether to use localStorage (default: true)\n */\n static setUseLocalStorage(enabled: boolean): void {\n this.useLocalStorage = enabled;\n }\n\n /**\n * Check if localStorage persistence is enabled\n */\n static isUsingLocalStorage(): boolean {\n return this.useLocalStorage;\n }\n\n /**\n * Set the theme for the entire application\n * @param theme - The theme to set\n * @param persist - Override localStorage behavior for this call (optional)\n */\n static setTheme(theme: Theme, persist?: boolean): void {\n this.currentTheme = theme;\n const root = document.documentElement;\n\n if (theme === 'auto') {\n // Remove explicit theme, let CSS media query handle it\n root.removeAttribute('data-theme');\n } else {\n // Set explicit theme\n root.setAttribute('data-theme', theme);\n }\n\n // Store preference in localStorage if enabled\n const shouldPersist = persist ?? this.useLocalStorage;\n if (shouldPersist) {\n try {\n localStorage.setItem('mm-theme', theme);\n } catch (e) {\n // localStorage might not be available\n }\n }\n }\n\n /**\n * Get the current theme\n */\n static getTheme(): Theme {\n return this.currentTheme;\n }\n\n /**\n * Get the effective theme (resolves 'auto' to actual theme)\n */\n static getEffectiveTheme(): 'light' | 'dark' {\n if (this.currentTheme !== 'auto') {\n return this.currentTheme;\n }\n\n // Check CSS media query for auto mode\n if (typeof window !== 'undefined' && window.matchMedia) {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n return 'light';\n }\n\n /**\n * Initialize theme from localStorage or system preference.\n * If localStorage is disabled, initializes to the provided default or 'auto'.\n * @param defaultTheme - Default theme to use when localStorage is disabled or empty\n */\n static initialize(defaultTheme: Theme = 'auto'): void {\n let savedTheme: Theme = defaultTheme;\n\n if (this.useLocalStorage) {\n try {\n const stored = localStorage.getItem('mm-theme') as Theme;\n if (stored && ['light', 'dark', 'auto'].includes(stored)) {\n savedTheme = stored;\n }\n } catch (e) {\n // localStorage might not be available\n }\n }\n\n this.setTheme(savedTheme);\n }\n\n /**\n * Toggle between light and dark themes\n */\n static toggle(): void {\n const current = this.getEffectiveTheme();\n this.setTheme(current === 'light' ? 'dark' : 'light');\n }\n\n /**\n * Clear the stored theme from localStorage\n */\n static clearStoredTheme(): void {\n try {\n localStorage.removeItem('mm-theme');\n } catch (e) {\n // localStorage might not be available\n }\n }\n}\n\n/**\n * Theme Switcher Component\n * Provides UI controls for changing themes\n */\nexport const ThemeSwitcher: FactoryComponent<ThemeSwitcherAttrs> = () => {\n return {\n oninit: () => {\n // Initialize theme manager if not already done\n if (typeof window !== 'undefined') {\n ThemeManager.initialize();\n }\n },\n\n view: ({ attrs = {} }) => {\n const { theme = ThemeManager.getTheme(), onThemeChange, showLabels = true, className, i18n } = attrs;\n const labels = { ...defaultI18n, ...i18n };\n\n const handleThemeChange = (newTheme: Theme) => {\n ThemeManager.setTheme(newTheme);\n if (onThemeChange) {\n onThemeChange(newTheme);\n }\n };\n\n return m('.theme-switcher', { className }, [\n showLabels && m('span.theme-switcher-label', labels.theme),\n\n m('.theme-switcher-buttons', [\n m(\n 'button.btn-flat',\n {\n type: 'button',\n class: theme === 'light' ? 'active' : '',\n onclick: () => handleThemeChange('light'),\n title: labels.lightTitle,\n },\n [m(MaterialIcon, { name: 'light_mode' }), showLabels && m('span', labels.light)]\n ),\n\n m(\n 'button.btn-flat',\n {\n type: 'button',\n class: theme === 'auto' ? 'active' : '',\n onclick: () => handleThemeChange('auto'),\n title: labels.autoTitle,\n },\n [m('i.material-icons', 'brightness_auto'), showLabels && m('span', labels.auto)]\n ),\n\n m(\n 'button.btn-flat',\n {\n type: 'button',\n class: theme === 'dark' ? 'active' : '',\n onclick: () => handleThemeChange('dark'),\n title: labels.darkTitle,\n },\n [m(MaterialIcon, { name: 'dark_mode' }), showLabels && m('span', labels.dark)]\n ),\n ]),\n ]);\n },\n };\n};\n\n/**\n * Simple theme toggle button (just switches between light/dark)\n */\nexport const ThemeToggle: FactoryComponent<{ className?: string; i18n?: ThemeSwitcherI18n }> = () => {\n return {\n oninit: () => {\n // Initialize theme manager if not already done\n if (typeof window !== 'undefined') {\n ThemeManager.initialize();\n }\n },\n\n view: ({ attrs = {} }) => {\n const currentTheme = ThemeManager.getEffectiveTheme();\n const labels = { ...defaultI18n, ...attrs.i18n };\n\n return m(\n 'button.btn-flat.theme-toggle',\n {\n type: 'button',\n class: attrs.className || '',\n onclick: () => {\n ThemeManager.toggle();\n },\n title: currentTheme === 'light' ? labels.switchToDark : labels.switchToLight,\n },\n [\n m(MaterialIcon, {\n name: currentTheme === 'light' ? 'dark_mode' : 'light_mode',\n }),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\n\nexport interface FileUploadI18n {\n /** Default label text for upload area */\n label?: string;\n /** Text for selected files section */\n selectedFiles?: string;\n /** Text for accepted file types */\n acceptedTypes?: string;\n /** Remove file button title */\n removeFile?: string;\n /** File size limit error message template (use {maxSize} placeholder) */\n fileSizeExceeds?: string;\n /** File type not accepted error message template (use {accept} placeholder) */\n fileTypeNotAccepted?: string;\n /** File size units */\n fileSizeUnits?: {\n bytes?: string;\n kb?: string;\n mb?: string;\n gb?: string;\n };\n}\n\nconst defaultI18n: Required<FileUploadI18n> = {\n label: 'Choose files or drag them here',\n selectedFiles: 'Selected Files:',\n acceptedTypes: 'Accepted:',\n removeFile: 'Remove file',\n fileSizeExceeds: 'File size exceeds {maxSize}MB limit',\n fileTypeNotAccepted: 'File type not accepted. Accepted: {accept}',\n fileSizeUnits: {\n bytes: 'B',\n kb: 'KB',\n mb: 'MB',\n gb: 'GB',\n },\n};\n\nexport interface FileUploadAttrs extends Attributes {\n /** Accept specific file types (e.g., \"image/*\", \".pdf,.doc\") */\n accept?: string;\n /** Allow multiple file selection */\n multiple?: boolean;\n /** Maximum file size in bytes */\n maxSize?: number;\n /** Maximum number of files (for multiple uploads) */\n maxFiles?: number;\n /** Callback when files are selected/dropped */\n onFilesSelected?: (files: File[]) => void;\n /** Callback for upload progress (if implementing upload) */\n onProgress?: (progress: number, file: File) => void;\n /** Callback when files are removed */\n onFileRemoved?: (file: File) => void;\n /** Disable the upload area */\n disabled?: boolean;\n /** Custom label text */\n label?: string;\n /** Helper text */\n helperText?: string;\n /** Show file preview for images */\n showPreview?: boolean;\n /** Custom class */\n className?: string;\n /** Validation error message */\n error?: string;\n /** Internationalization */\n i18n?: FileUploadI18n;\n}\n\ninterface FileWithPreview extends File {\n preview?: string;\n uploadProgress?: number;\n uploadError?: string;\n}\n\ninterface FileUploadState {\n id: string;\n files: FileWithPreview[];\n isDragOver: boolean;\n isUploading: boolean;\n}\n\n/**\n * File Upload Component with Drag and Drop\n * Supports multiple files, file type validation, size limits, and image preview\n */\nexport const FileUpload: FactoryComponent<FileUploadAttrs> = () => {\n let state: FileUploadState;\n\n const validateFile = (file: File, attrs: FileUploadAttrs, labels: Required<FileUploadI18n>): string | null => {\n // Check file size\n if (attrs.maxSize && file.size > attrs.maxSize) {\n const maxSizeMB = (attrs.maxSize / (1024 * 1024)).toFixed(1);\n return labels.fileSizeExceeds.replace('{maxSize}', maxSizeMB);\n }\n\n // Check file type\n if (attrs.accept) {\n const acceptedTypes = attrs.accept.split(',').map((type) => type.trim());\n const isAccepted = acceptedTypes.some((acceptedType) => {\n if (acceptedType.startsWith('.')) {\n // Extension check\n return file.name.toLowerCase().endsWith(acceptedType.toLowerCase());\n } else {\n // MIME type check\n return file.type.match(acceptedType.replace('*', '.*'));\n }\n });\n\n if (!isAccepted) {\n return labels.fileTypeNotAccepted.replace('{accept}', attrs.accept);\n }\n }\n\n return null;\n };\n\n const createFilePreview = (file: FileWithPreview): void => {\n if (file.type.startsWith('image/')) {\n const reader = new FileReader();\n reader.onload = (e) => {\n file.preview = e.target?.result as string;\n m.redraw();\n };\n reader.readAsDataURL(file);\n }\n };\n\n const handleFiles = (fileList: FileList, attrs: FileUploadAttrs, labels: Required<FileUploadI18n>): void => {\n const newFiles: FileWithPreview[] = Array.from(fileList);\n const validFiles: FileWithPreview[] = [];\n\n // Validate each file\n for (const file of newFiles) {\n const error = validateFile(file, attrs, labels);\n if (error) {\n file.uploadError = error;\n } else {\n validFiles.push(file);\n if (attrs.showPreview) {\n createFilePreview(file);\n }\n }\n }\n\n // Check max files limit\n if (attrs.maxFiles) {\n const totalFiles = state.files.length + validFiles.length;\n if (totalFiles > attrs.maxFiles) {\n const allowedCount = attrs.maxFiles - state.files.length;\n validFiles.splice(allowedCount);\n }\n }\n\n // Add valid files to state\n if (attrs.multiple) {\n state.files = [...state.files, ...validFiles];\n } else {\n state.files = validFiles.slice(0, 1);\n }\n\n // Notify parent component\n if (attrs.onFilesSelected) {\n attrs.onFilesSelected(state.files.filter((f) => !f.uploadError));\n }\n };\n\n const removeFile = (fileToRemove: FileWithPreview, attrs: FileUploadAttrs): void => {\n state.files = state.files.filter((file) => file !== fileToRemove);\n\n if (attrs.onFileRemoved) {\n attrs.onFileRemoved(fileToRemove);\n }\n };\n\n const formatFileSize = (bytes: number, labels: Required<FileUploadI18n>): string => {\n if (bytes === 0) return `0 ${labels.fileSizeUnits.bytes}`;\n const k = 1024;\n const sizes = [labels.fileSizeUnits.bytes, labels.fileSizeUnits.kb, labels.fileSizeUnits.mb, labels.fileSizeUnits.gb];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n };\n\n return {\n oninit: () => {\n state = {\n id: uniqueId(),\n files: [],\n isDragOver: false,\n isUploading: false,\n };\n },\n\n view: ({ attrs }) => {\n const {\n accept,\n multiple = false,\n disabled = false,\n label,\n helperText,\n showPreview = true,\n className = '',\n error,\n i18n,\n } = attrs;\n\n const labels = { ...defaultI18n, ...i18n };\n const displayLabel = label || labels.label;\n\n return m('.file-upload-container', { class: className }, [\n // Upload area\n m(\n '.file-upload-area',\n {\n class:\n [\n state.isDragOver ? 'drag-over' : '',\n disabled ? 'disabled' : '',\n error ? 'error' : '',\n state.files.length > 0 ? 'has-files' : '',\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n ondragover: (e: DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n state.isDragOver = true;\n },\n ondragleave: (e: DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n state.isDragOver = false;\n },\n ondrop: (e: DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n state.isDragOver = false;\n\n if (e.dataTransfer?.files) {\n handleFiles(e.dataTransfer.files, attrs, labels);\n }\n },\n onclick: () => {\n if (disabled) return;\n const input = document.getElementById(state.id) as HTMLInputElement;\n input?.click();\n },\n },\n [\n m('input[type=\"file\"]', {\n id: state.id,\n accept,\n multiple,\n disabled,\n style: { display: 'none' },\n onchange: (e: Event) => {\n const target = e.target as HTMLInputElement;\n if (target.files) {\n handleFiles(target.files, attrs, labels);\n }\n },\n }),\n\n m('.file-upload-content', [\n m('i.material-icons.file-upload-icon', 'cloud_upload'),\n m('p.file-upload-label', displayLabel),\n helperText && m('p.file-upload-helper', helperText),\n accept && m('p.file-upload-types', `${labels.acceptedTypes} ${accept}`),\n ]),\n ]\n ),\n\n // Error message\n error && m('.file-upload-error', error),\n\n // File list\n state.files.length > 0 &&\n m('.file-upload-list', [\n m('h6', labels.selectedFiles),\n state.files.map((file) =>\n m('.file-upload-item', { key: file.name + file.size }, [\n // Preview thumbnail\n showPreview && file.preview && m('.file-preview', [m('img', { src: file.preview, alt: file.name })]),\n\n // File info\n m('.file-info', [\n m('.file-name', file.name),\n m('.file-details', [\n m('span.file-size', formatFileSize(file.size, labels)),\n file.type && m('span.file-type', file.type),\n ]),\n\n // Progress bar (if uploading)\n file.uploadProgress !== undefined &&\n m('.file-progress', [\n m('.progress', [\n m('.determinate', {\n style: { width: `${file.uploadProgress}%` },\n }),\n ]),\n ]),\n\n // Error message\n file.uploadError && m('.file-error', file.uploadError),\n ]),\n\n // Remove button\n m(\n 'button.btn-flat.file-remove',\n {\n onclick: (e: Event) => {\n e.stopPropagation();\n removeFile(file, attrs);\n },\n title: labels.removeFile,\n },\n [m('i.material-icons', 'close')]\n ),\n ])\n ),\n ]),\n ]);\n },\n };\n};\n","import m, { Attributes, FactoryComponent } from 'mithril';\n\nexport interface ValidationSummaryError {\n /** The ID of the invalid field. Used to link and focus the field from the summary. */\n fieldId?: string;\n /** Use a custom target when the error does not belong to a focusable field. */\n href?: string;\n /** Error text shown in the summary. */\n message: m.Children;\n}\n\nexport interface FieldsetAttrs extends Attributes {\n /** Accessible label for the group of controls. */\n legend: m.Children;\n /** Optional explanatory text below the legend. */\n description?: m.Children;\n /** Mark the group as required. */\n required?: boolean;\n /** Disable native controls contained in the group. */\n disabled?: boolean;\n /** Group-level validation message. */\n error?: m.Children;\n}\n\n/** A semantic native fieldset for related controls. */\nexport const Fieldset: FactoryComponent<FieldsetAttrs> = () => ({\n view: ({ attrs, children }) => {\n const { legend, description, required, disabled, error, className, ...params } = attrs;\n const descriptionId = params.id ? `${params.id}-description` : undefined;\n const errorId = params.id ? `${params.id}-error` : undefined;\n const describedBy = [description && descriptionId, error && errorId].filter(Boolean).join(' ') || undefined;\n\n return m('fieldset.mm-fieldset', { ...params, className, disabled, 'aria-describedby': describedBy }, [\n m('legend.mm-fieldset__legend', [legend, required && m('span.mm-fieldset__required[aria-hidden=true]', ' *')]),\n description && m('p.mm-fieldset__description', { id: descriptionId }, description),\n children,\n error && m('p.mm-fieldset__error[role=alert]', { id: errorId }, error),\n ]);\n },\n});\n\nexport interface FormSectionAttrs extends Attributes {\n /** Visible section heading. */\n title?: m.Children;\n /** Optional explanatory text below the heading. */\n description?: m.Children;\n /** Errors supplied by the application's form validation state. */\n errors?: ValidationSummaryError[];\n /** Heading used by the validation summary. */\n summaryTitle?: m.Children;\n}\n\nconst focusErrorTarget = (fieldId?: string) => {\n if (!fieldId || typeof document === 'undefined') return;\n document.getElementById(fieldId)?.focus();\n};\n\n/** A visual form section with an optional accessible validation summary. */\nexport const FormSection: FactoryComponent<FormSectionAttrs> = () => ({\n view: ({ attrs, children }) => {\n const { title, description, errors = [], summaryTitle = 'Please correct the following errors', className, ...params } = attrs;\n\n return m('section.mm-form-section', { ...params, className }, [\n (title || description) &&\n m('.mm-form-section__header', [\n title && m('h3.mm-form-section__title', title),\n description && m('p.mm-form-section__description', description),\n ]),\n errors.length > 0 &&\n m('div.mm-validation-summary[role=alert][aria-live=assertive]', [\n m('p.mm-validation-summary__title', summaryTitle),\n m(\n 'ul.mm-validation-summary__list',\n errors.map((error, index) => {\n const href = error.href ?? (error.fieldId ? `#${error.fieldId}` : undefined);\n return m('li', { key: `${error.fieldId ?? href ?? 'error'}-${index}` },\n href\n ? m('a', { href, onclick: () => focusErrorTarget(error.fieldId) }, error.message)\n : error.message\n );\n })\n ),\n ]),\n children,\n ]);\n },\n});\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\nimport { MaterialIcon } from './material-icon';\nimport { ComponentStyle } from './types';\n\n/** Icon definition - supports material icon name, inline SVG, or image URL */\nexport type IconDefinition = string | { type: 'svg' | 'image'; content: string };\n\nexport interface NavbarSubItemAttrs {\n /** Text content of the submenu item */\n text: string;\n /** Optional icon - material icon name, SVG object, or image object */\n icon?: IconDefinition;\n /** Whether this submenu item is selected */\n selected?: boolean;\n /** Value for the submenu item */\n value?: any;\n /** Selection callback */\n onSelect?: (value: any, selected: boolean) => void;\n}\n\nexport interface SidenavAttrs extends Attributes {\n /** Unique ID for the sidenav */\n id?: string;\n /** Whether the sidenav is open */\n isOpen?: boolean;\n /** Callback when sidenav open state changes */\n onToggle?: (isOpen: boolean) => void;\n /** Position of the sidenav */\n position?: 'left' | 'right';\n /** Whether sidenav should overlay content or push it */\n mode?: 'overlay' | 'push';\n /** Width of the sidenav in pixels (when expanded) */\n width?: number;\n /** Custom class for the sidenav */\n className?: string;\n /** Whether to show backdrop overlay */\n showBackdrop?: boolean;\n /** Close sidenav when backdrop is clicked */\n closeOnBackdropClick?: boolean;\n /** Close sidenav when escape key is pressed */\n closeOnEscape?: boolean;\n /** Animation duration in milliseconds */\n animationDuration?: number;\n /** Fixed sidenav (always visible on larger screens) */\n fixed?: boolean;\n /** Breakpoint for responsive behavior (in pixels) */\n breakpoint?: number;\n /** Show hamburger toggle button */\n showHamburger?: boolean;\n /** Enable collapse/expand functionality */\n expandable?: boolean;\n /** Whether the sidenav is expanded (shows icons + text) */\n isExpanded?: boolean;\n /** Callback when expand state changes */\n onExpandChange?: (expanded: boolean) => void;\n /** Header item displayed before expand/collapse toggle */\n header?: SidenavItemAttrs;\n /** Footer item displayed at the bottom of the sidenav */\n footer?: SidenavItemAttrs;\n /** Custom vnode content rendered in the header slot (first item, before hamburger) */\n headerContent?: m.Children;\n /** Custom vnode content rendered in the footer slot (last item, pushed to the bottom) */\n footerContent?: m.Children;\n}\n\nexport interface SidenavItemAttrs {\n /** Text content of the item */\n text?: string;\n /** Icon - material icon name, SVG object, or image object */\n icon?: IconDefinition;\n /** Whether this item is active */\n active?: boolean;\n /** Whether this item is disabled */\n disabled?: boolean;\n /** Click handler */\n onclick?: (e: Event) => void;\n /** Href for link items */\n href?: string;\n /** Custom class */\n className?: string;\n /** Native title attribute text shown on hover */\n title?: string;\n /** Alias for title; used when title is not provided */\n tooltip?: string;\n /** Show tooltip only while sidenav is collapsed, @default true */\n tooltipWhenCollapsedOnly?: boolean;\n /** Whether this is a divider */\n divider?: boolean;\n /** Whether this is a subheader */\n subheader?: boolean;\n /** Submenu items */\n submenu?: NavbarSubItemAttrs[];\n /** Submenu selection mode - 'checkbox' for multi-select, 'radio' for single-select, 'none' for no indicators */\n submenuMode?: 'checkbox' | 'radio' | 'none';\n /** @internal - Whether the sidenav is expanded (passed from parent) */\n _isExpanded?: boolean;\n /** @internal - Position of the sidenav (passed from parent) */\n _position?: 'left' | 'right';\n}\n\ninterface SidenavState {\n id: string;\n isOpen: boolean;\n isAnimating: boolean;\n isExpanded: boolean;\n activeItemIndex: number | null;\n selectedSubmenuItems: Map<number, Set<any>>;\n}\n\n// List of MaterialIcon SVG icons that are available\nconst materialIconSvgNames = [\n 'caret',\n 'close',\n 'chevron',\n 'chevron_left',\n 'chevron_right',\n 'menu',\n 'expand',\n 'collapse',\n 'check',\n 'radio_checked',\n 'radio_unchecked',\n 'light_mode',\n 'dark_mode',\n] as const;\n\n/**\n * Helper function to render icons based on IconDefinition type\n */\nconst renderIcon = (icon: IconDefinition | undefined, style?: ComponentStyle): m.Children => {\n if (!icon) return null;\n const objectStyle = typeof style === 'string' ? undefined : style;\n\n if (typeof icon === 'string') {\n // Check if this is a MaterialIcon SVG name\n if (materialIconSvgNames.includes(icon as any)) {\n return m(MaterialIcon as any, { name: icon, style });\n }\n // Fall back to Material Icons font for other icon names\n return m('i.material-icons', { style }, icon);\n }\n\n if (icon.type === 'svg') {\n // Inline SVG\n return m.trust(icon.content);\n }\n\n if (icon.type === 'image') {\n // Image URL\n return m('img', {\n src: icon.content,\n style: { ...objectStyle, width: '24px', height: '24px', objectFit: 'contain' },\n });\n }\n\n return null;\n};\n\n/**\n * Sidenav Header/Footer Item Component\n */\nconst SidenavHeaderFooterItem: FactoryComponent<\n SidenavItemAttrs & {\n _isExpanded: boolean;\n _position: 'left' | 'right';\n }\n> = () => {\n return {\n view: ({ attrs }) => {\n const {\n text,\n icon,\n onclick,\n href,\n className = '',\n title,\n tooltip,\n tooltipWhenCollapsedOnly = true,\n _isExpanded = true,\n _position = 'left',\n } = attrs;\n const isRightAligned = _position === 'right';\n const tooltipText = title || tooltip || text;\n const shouldShowTooltip = tooltipWhenCollapsedOnly ? !_isExpanded : true;\n\n const handleClick = (e: Event) => {\n if (onclick) {\n e.preventDefault();\n onclick(e);\n }\n };\n\n const content = isRightAligned\n ? [\n _isExpanded && m('span.sidenav-item-text.mm-layout-grow.mm-layout-mr-8.left-align', text),\n renderIcon(icon, { 'min-width': '24px', width: '24px' }),\n ]\n : [\n renderIcon(icon, { 'min-width': '24px', width: '24px' }),\n _isExpanded && m('span.sidenav-item-text.mm-layout-grow.mm-layout-ml-8', text),\n ];\n\n const linkStyle = {\n padding: _isExpanded ? '12px 16px' : '12px 18px',\n 'justify-content': _isExpanded ? (isRightAligned ? 'flex-end' : 'flex-start') : 'center',\n };\n\n const linkClass = 'mm-layout-row mm-layout-row--center';\n\n return m(\n 'li',\n { class: className },\n m(\n 'a',\n {\n href: href || '#!',\n onclick: handleClick,\n class: linkClass,\n style: linkStyle,\n title: shouldShowTooltip ? tooltipText : undefined,\n 'aria-label': shouldShowTooltip ? tooltipText : undefined,\n },\n content\n )\n );\n },\n };\n};\n\n/**\n * Sidenav Component\n * A responsive navigation drawer that slides in from the side\n */\nexport const Sidenav: FactoryComponent<SidenavAttrs> = () => {\n let state: SidenavState;\n\n const handleBackdropClick = (attrs: SidenavAttrs) => {\n if (attrs.closeOnBackdropClick !== false && attrs.onToggle) {\n attrs.onToggle(false);\n }\n };\n\n const handleEscapeKey = (e: KeyboardEvent, attrs: SidenavAttrs) => {\n if (e.key === 'Escape' && attrs.closeOnEscape !== false && attrs.onToggle) {\n attrs.onToggle(false);\n m.redraw();\n }\n };\n\n const setBodyOverflow = (isOpen: boolean, mode: string, fixed: boolean) => {\n if (typeof document !== 'undefined') {\n document.body.style.overflow = isOpen && mode === 'overlay' && !fixed ? 'hidden' : '';\n }\n };\n\n const toggleExpanded = (attrs: SidenavAttrs) => {\n const newExpandedState = !(attrs.isExpanded !== false);\n if (attrs.onExpandChange) {\n attrs.onExpandChange(newExpandedState);\n }\n };\n\n const toggleHamburger = (attrs: SidenavAttrs) => {\n const newOpenState = !state.isOpen;\n if (attrs.onToggle) {\n attrs.onToggle(newOpenState);\n }\n };\n\n return {\n oninit: ({ attrs }) => {\n state = {\n id: attrs.id || uniqueId(),\n isOpen: attrs.isOpen || false,\n isAnimating: false,\n isExpanded: attrs.isExpanded !== false,\n activeItemIndex: null,\n selectedSubmenuItems: new Map(),\n };\n\n // Set up keyboard listener\n if (typeof document !== 'undefined' && attrs.closeOnEscape !== false) {\n document.addEventListener('keydown', (e) => handleEscapeKey(e, attrs));\n }\n },\n\n onbeforeupdate: ({ attrs }) => {\n const wasOpen = state.isOpen;\n const isOpen = attrs.isOpen || false;\n\n if (wasOpen !== isOpen) {\n state.isOpen = isOpen;\n state.isAnimating = true;\n setBodyOverflow(isOpen, attrs.mode || 'overlay', attrs.fixed || false);\n\n // Clear animation state after animation completes\n setTimeout(() => {\n state.isAnimating = false;\n m.redraw();\n }, attrs.animationDuration || 300);\n }\n },\n\n onremove: ({ attrs }) => {\n // Clean up\n setBodyOverflow(false, attrs.mode || 'overlay', attrs.fixed || false);\n if (typeof document !== 'undefined' && attrs.closeOnEscape !== false) {\n document.removeEventListener('keydown', (e) => handleEscapeKey(e, attrs));\n }\n },\n\n view: ({ attrs, children }) => {\n const {\n position = 'left',\n mode = 'overlay',\n width = 300,\n className = '',\n showBackdrop = true,\n animationDuration = 300,\n fixed = false,\n showHamburger = false,\n expandable = false,\n } = attrs;\n\n const isOpen = state.isOpen;\n const collapsedWidth = 60;\n const isExpanded = attrs.isExpanded !== false;\n const currentWidth = expandable && !isExpanded ? collapsedWidth : width;\n\n return [\n // Backdrop (using existing materialize class) - only for overlay mode\n showBackdrop &&\n mode === 'overlay' &&\n !fixed &&\n m('.sidenav-overlay', {\n style: {\n display: isOpen ? 'block' : 'none',\n opacity: isOpen ? '1' : '0',\n },\n onclick: () => handleBackdropClick(attrs),\n }),\n\n // Sidenav (using existing materialize structure)\n m(\n 'ul.sidenav',\n {\n id: state.id,\n class:\n [\n position === 'right' ? 'right-aligned' : '',\n fixed ? 'sidenav-fixed' : '',\n mode === 'push' ? 'sidenav-push' : '',\n expandable && !isExpanded ? 'sidenav-collapsed' : '',\n 'mm-layout-stack',\n className,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n style: {\n width: `${currentWidth}px`,\n transform: isOpen ? 'translateX(0)' : position === 'left' ? 'translateX(-105%)' : 'translateX(105%)',\n 'transition-duration': `${animationDuration}ms`,\n 'transition-property': 'transform, width',\n },\n },\n [\n // Header content slot (rendered first, before hamburger)\n attrs.headerContent &&\n m(\n 'li.sidenav-header-slot',\n {\n style: {\n 'flex-shrink': 0,\n 'list-style': 'none',\n height: 'auto',\n 'line-height': 'normal',\n padding: 0,\n },\n },\n attrs.headerContent\n ),\n\n // Hamburger toggle button (inside sidenav, at the top)\n showHamburger &&\n m(\n 'li.sidenav-hamburger-item',\n {\n class: `mm-layout-row mm-layout-row--center ${position === 'right' ? 'mm-layout-row--justify-end' : 'mm-layout-row--justify-start'}`,\n style: {\n padding: '12px 16px',\n cursor: 'pointer',\n 'border-bottom': '1px solid rgba(0,0,0,0.1)',\n },\n onclick: () => toggleHamburger(attrs),\n },\n m(MaterialIcon, {\n name: 'menu',\n style: { width: '24px', height: '24px' },\n })\n ),\n\n // Header item (if provided, appears before expand/collapse toggle)\n attrs.header &&\n m(SidenavHeaderFooterItem, {\n ...attrs.header,\n _isExpanded: isExpanded,\n _position: position,\n }),\n\n // Expand/collapse toggle button (if expandable, right below hamburger)\n expandable &&\n m(\n 'li.sidenav-expand-toggle',\n {\n class: `mm-layout-row mm-layout-row--center ${position === 'right' ? 'mm-layout-row--justify-end' : 'mm-layout-row--justify-start'}`,\n style: {\n padding: '12px 16px',\n cursor: 'pointer',\n 'border-bottom': '1px solid rgba(0,0,0,0.1)',\n },\n onclick: () => toggleExpanded(attrs),\n },\n m(MaterialIcon, {\n name:\n position === 'right'\n ? isExpanded\n ? 'chevron_right'\n : 'chevron_left'\n : isExpanded\n ? 'chevron_left'\n : 'chevron_right',\n style: { width: '24px', height: '24px' },\n })\n ),\n\n // Children (menu items) - inject internal props\n Array.isArray(children)\n ? children.map((child) => {\n if (child && typeof child === 'object' && 'tag' in child) {\n // Clone the vnode and add internal props\n return {\n ...child,\n attrs: {\n ...child.attrs,\n _isExpanded: isExpanded,\n _position: position,\n },\n };\n }\n return child;\n })\n : children,\n\n // Footer item (if provided, appears at the bottom)\n attrs.footer &&\n m(SidenavHeaderFooterItem, {\n ...attrs.footer,\n _isExpanded: isExpanded,\n _position: position,\n className: ['sidenav-footer-item', attrs.footer.className].filter(Boolean).join(' '),\n }),\n\n // Footer content slot (rendered last, pushed to bottom via margin-top: auto)\n attrs.footerContent &&\n m(\n 'li.sidenav-footer-slot',\n {\n style: {\n 'margin-top': 'auto',\n 'flex-shrink': 0,\n 'list-style': 'none',\n height: 'auto',\n 'line-height': 'normal',\n padding: 0,\n },\n },\n attrs.footerContent\n ),\n ]\n ),\n ];\n },\n };\n};\n\n/**\n * Sidenav Submenu Item Component\n */\nconst NavbarSubItem: FactoryComponent<\n NavbarSubItemAttrs & {\n mode: 'checkbox' | 'radio' | 'none';\n isExpanded: boolean;\n position: 'left' | 'right';\n }\n> = () => {\n return {\n view: ({ attrs }) => {\n const { text, icon, selected = false, value, onSelect, mode, isExpanded, position = 'left' } = attrs;\n\n const handleClick = () => {\n if (onSelect) {\n onSelect(value !== undefined ? value : text, !selected);\n }\n };\n\n const isRightAligned = position === 'right';\n\n // Render indicator icon for checkbox/radio modes\n const indicatorIcon =\n mode !== 'none'\n ? m(MaterialIcon, {\n name:\n mode === 'checkbox' ? (selected ? 'check' : 'close') : selected ? 'radio_checked' : 'radio_unchecked',\n style: {\n width: '18px',\n height: '18px',\n opacity: mode === 'checkbox' && !selected ? '0.3' : '1',\n },\n })\n : null;\n\n const submenuContent = isRightAligned\n ? [\n // Right-aligned: text on left, icons on right\n isExpanded && m('span.mm-layout-grow.left-align', text),\n icon && isExpanded && renderIcon(icon, { 'font-size': '18px' }),\n indicatorIcon,\n ]\n : [\n // Left-aligned: indicator on left, text and icon on right\n indicatorIcon,\n icon && isExpanded && renderIcon(icon, { 'font-size': '18px', 'margin-left': indicatorIcon ? '8px' : '0' }),\n isExpanded && m('span', { class: icon || indicatorIcon ? 'mm-layout-ml-8' : undefined }, text),\n ];\n\n return m(\n 'li.sidenav-subitem',\n {\n class:\n [\n selected ? 'selected' : '',\n 'mm-layout-row',\n 'mm-layout-row--center',\n 'mm-layout-gap-sm',\n isRightAligned ? 'mm-layout-row--justify-between' : 'mm-layout-row--justify-start',\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n style: {\n padding: isExpanded ? '0 16px 0 48px' : '0 16px',\n cursor: 'pointer',\n 'font-size': '0.9em',\n height: '48px',\n 'min-height': '48px',\n },\n onclick: handleClick,\n },\n submenuContent\n );\n },\n };\n};\n\n/**\n * Sidenav Item Component\n * Individual items for the sidenav menu\n */\nexport const SidenavItem: FactoryComponent<SidenavItemAttrs> = () => {\n let isSubmenuOpen = false;\n\n return {\n view: ({ attrs, children }) => {\n const {\n text,\n icon,\n active = false,\n disabled = false,\n onclick,\n href,\n className = '',\n divider = false,\n subheader = false,\n submenu = [],\n submenuMode = 'checkbox',\n title,\n tooltip,\n tooltipWhenCollapsedOnly = true,\n } = attrs;\n\n if (divider) {\n return m('li.divider');\n }\n\n if (subheader) {\n return m('li.subheader', text || children);\n }\n\n const hasSubmenu = submenu && submenu.length > 0;\n const itemClasses =\n [active ? 'active' : '', disabled ? 'disabled' : '', hasSubmenu ? 'has-submenu' : '', className]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const handleMainClick = (e: Event) => {\n if (hasSubmenu) {\n e.preventDefault();\n isSubmenuOpen = active ? !isSubmenuOpen : true;\n }\n if (onclick && !disabled) {\n e.preventDefault();\n onclick(e);\n }\n };\n\n // Get internal props passed from parent Sidenav\n const isExpanded = attrs._isExpanded !== false;\n const position = attrs._position || 'left';\n const isRightAligned = position === 'right';\n const tooltipText = title || tooltip || text;\n const shouldShowTooltip = tooltipWhenCollapsedOnly ? !isExpanded : true;\n\n // In expanded mode, icons are at the outside edge\n // In collapsed mode, icons are centered\n const content = isRightAligned\n ? [\n // Right-aligned: text on left, icon on right\n isExpanded && m('span.sidenav-item-text.mm-layout-grow.mm-layout-mr-8.left-align', text || children),\n renderIcon(icon, { 'min-width': '24px', width: '24px' }),\n ]\n : [\n // Left-aligned: icon on left, text on right\n renderIcon(icon, { 'min-width': '24px', width: '24px' }),\n isExpanded && m('span.sidenav-item-text.mm-layout-grow.mm-layout-ml-8', text || children),\n ];\n\n const linkStyle = {\n padding: isExpanded ? '12px 16px' : '12px 18px',\n 'justify-content': isExpanded ? (isRightAligned ? 'flex-end' : 'flex-start') : 'center',\n };\n\n const linkClass = 'mm-layout-row mm-layout-row--center';\n\n const mainItem =\n href && !disabled\n ? m('li', { class: itemClasses }, [\n m(\n 'a',\n {\n href,\n onclick: handleMainClick,\n class: linkClass,\n style: linkStyle,\n title: shouldShowTooltip ? tooltipText : undefined,\n 'aria-label': shouldShowTooltip ? tooltipText : undefined,\n },\n content\n ),\n ])\n : m('li', { class: itemClasses }, [\n m(\n 'a',\n {\n onclick: handleMainClick,\n href: '#!',\n class: linkClass,\n style: linkStyle,\n title: shouldShowTooltip ? tooltipText : undefined,\n 'aria-label': shouldShowTooltip ? tooltipText : undefined,\n },\n content\n ),\n ]);\n\n // Return main item with submenu if applicable\n if (hasSubmenu && active && isSubmenuOpen) {\n return [\n mainItem,\n submenu.map((subItem) =>\n m(NavbarSubItem, {\n ...subItem,\n mode: submenuMode,\n isExpanded,\n position,\n })\n ),\n ];\n }\n\n return mainItem;\n },\n };\n};\n\n/**\n * Sidenav utilities for programmatic control\n */\nexport class SidenavManager {\n /**\n * Open a sidenav by ID\n */\n static open(id: string): void {\n const element = document.getElementById(id);\n if (element) {\n element.classList.add('open');\n element.classList.remove('closed');\n }\n }\n\n /**\n * Close a sidenav by ID\n */\n static close(id: string): void {\n const element = document.getElementById(id);\n if (element) {\n element.classList.remove('open');\n element.classList.add('closed');\n }\n }\n\n /**\n * Toggle a sidenav by ID\n */\n static toggle(id: string): void {\n const element = document.getElementById(id);\n if (element) {\n const isOpen = element.classList.contains('open');\n if (isOpen) {\n this.close(id);\n } else {\n this.open(id);\n }\n }\n }\n}\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface BreadcrumbItemAttrs {\n /** Text content of the breadcrumb item */\n text?: string;\n /** URL for the breadcrumb item */\n href?: string;\n /** Whether this item is the current/active item */\n active?: boolean;\n /** Click handler for the breadcrumb item */\n onclick?: (e: Event) => void;\n /** Icon name (material icons) */\n icon?: string;\n /** Custom class for the item */\n className?: string;\n /** Whether this item is disabled */\n disabled?: boolean;\n}\n\nexport interface BreadcrumbAttrs extends Attributes {\n /** Array of breadcrumb items */\n items: BreadcrumbItemAttrs[];\n /** Custom separator between items */\n separator?: string;\n /** Custom class for the breadcrumb container */\n className?: string;\n /** Whether to show icons */\n showIcons?: boolean;\n /** Maximum number of items to show before collapsing */\n maxItems?: number;\n /** Whether to show home icon for first item */\n showHome?: boolean;\n}\n\n/**\n * Breadcrumb Component\n * Displays a navigation path showing the user's location within a site hierarchy\n */\nexport const Breadcrumb: FactoryComponent<BreadcrumbAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const {\n items = [],\n separator = 'chevron_right',\n className = '',\n showIcons = false,\n maxItems,\n showHome = false,\n } = attrs;\n\n if (items.length === 0) {\n return null;\n }\n\n let displayItems = [...items];\n\n // Handle max items with ellipsis\n if (maxItems && items.length > maxItems) {\n const firstItem = items[0];\n const lastItems = items.slice(-(maxItems - 2));\n\n displayItems = [firstItem, { text: '...', disabled: true, className: 'breadcrumb-ellipsis' }, ...lastItems];\n }\n\n return m('nav.breadcrumb', { class: className }, [\n m(\n 'ol.breadcrumb-list',\n displayItems\n .map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const isFirst = index === 0;\n\n return [\n // Breadcrumb item\n m(\n 'li.breadcrumb-item',\n {\n class:\n [item.active || isLast ? 'active' : '', item.disabled ? 'disabled' : '', item.className || '']\n .filter(Boolean)\n .join(' ') || undefined,\n },\n [\n item.href && !item.disabled && !isLast\n ? // Link item\n m(\n 'a.breadcrumb-link',\n {\n href: item.href,\n onclick: item.onclick,\n },\n [\n showIcons && item.icon && m('i.material-icons.breadcrumb-icon', item.icon),\n showHome && isFirst && !item.icon && m('i.material-icons.breadcrumb-icon', 'home'),\n m('span.breadcrumb-text', item.text),\n ]\n )\n : // Text item (active or disabled)\n m(\n 'span.breadcrumb-text',\n {\n onclick: item.disabled ? undefined : item.onclick,\n },\n [\n showIcons && item.icon && m('i.material-icons.breadcrumb-icon', item.icon),\n showHome && isFirst && !item.icon && m('i.material-icons.breadcrumb-icon', 'home'),\n item.text,\n ]\n ),\n ]\n ),\n\n // Separator (except for last item)\n !isLast && m('li.breadcrumb-separator', [m('i.material-icons', separator)]),\n ];\n })\n .reduce((acc, val) => acc.concat(val), [])\n ),\n ]);\n },\n };\n};\n\n/**\n * Simple Breadcrumb utility for common use cases\n */\nexport const createBreadcrumb = (path: string, basePath = '/'): BreadcrumbItemAttrs[] => {\n const segments = path.split('/').filter(Boolean);\n const items: BreadcrumbItemAttrs[] = [];\n\n // Add home item\n items.push({\n text: 'Home',\n href: basePath,\n icon: 'home',\n });\n\n // Add path segments\n let currentPath = basePath;\n segments.forEach((segment, index) => {\n currentPath += (currentPath.endsWith('/') ? '' : '/') + segment;\n const isLast = index === segments.length - 1;\n\n items.push({\n text: segment.charAt(0).toUpperCase() + segment.slice(1).replace(/-/g, ' '),\n href: isLast ? undefined : currentPath,\n active: isLast,\n });\n });\n\n return items;\n};\n\n/**\n * Breadcrumb utilities\n */\nexport class BreadcrumbManager {\n /**\n * Create breadcrumb items from a route path\n */\n static fromRoute(route: string, routeConfig: Record<string, string> = {}): BreadcrumbItemAttrs[] {\n const segments = route.split('/').filter(Boolean);\n const items: BreadcrumbItemAttrs[] = [];\n\n // Add home\n items.push({\n text: 'Home',\n href: '/',\n icon: 'home',\n });\n\n let currentPath = '';\n segments.forEach((segment, index) => {\n currentPath += '/' + segment;\n const isLast = index === segments.length - 1;\n\n // Use custom text from config or format segment\n const text = routeConfig[currentPath] || segment.charAt(0).toUpperCase() + segment.slice(1).replace(/-/g, ' ');\n\n items.push({\n text,\n href: isLast ? undefined : currentPath,\n active: isLast,\n });\n });\n\n return items;\n }\n\n /**\n * Create breadcrumb items from a hierarchical object\n */\n static fromHierarchy(hierarchy: any[], textKey = 'name', pathKey = 'path'): BreadcrumbItemAttrs[] {\n return hierarchy.map((item, index) => ({\n text: item[textKey],\n href: index === hierarchy.length - 1 ? undefined : item[pathKey],\n active: index === hierarchy.length - 1,\n }));\n }\n}\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\nimport { uniqueId } from './utils';\n\nexport interface WizardStep {\n /** Unique identifier for the step */\n id?: string;\n /** Title of the step */\n title: string;\n /** Optional subtitle or description */\n subtitle?: string;\n /** Icon for the step (material icons) */\n icon?: string;\n /** Whether this step is optional */\n optional?: boolean;\n /** Whether this step is disabled */\n disabled?: boolean;\n /** Custom validation function */\n validate?: () => boolean | Promise<boolean>;\n /** Content to render for this step - function that returns vnode(s) */\n vnode: () => Vnode<any, any> | Vnode<any, any>[];\n}\n\nexport interface WizardAttrs extends Attributes {\n /** Array of wizard steps */\n steps: WizardStep[];\n /** Current active step index */\n currentStep?: number;\n /** Callback when step changes */\n onStepChange?: (stepIndex: number, stepId: string) => void;\n /** Callback when wizard is completed */\n onComplete?: () => void;\n /** Whether to show step numbers */\n showStepNumbers?: boolean;\n /** Whether navigation is linear (cannot skip steps) */\n linear?: boolean;\n /** Custom class for the wizard container */\n className?: string;\n /** Whether to show navigation buttons */\n showNavigation?: boolean;\n /** Custom labels for navigation buttons */\n labels?: {\n next?: string;\n previous?: string;\n complete?: string;\n skip?: string;\n optional?: string;\n };\n /** Orientation of the stepper */\n orientation?: 'horizontal' | 'vertical';\n /** Whether to allow clicking on step headers to navigate */\n allowHeaderNavigation?: boolean;\n}\n\ninterface WizardState {\n id: string;\n currentStep: number;\n isValidating: boolean;\n completedSteps: Set<number>;\n errorSteps: Set<number>;\n}\n\n/**\n * Wizard/Stepper Component\n * A multi-step interface for guiding users through a process\n */\nexport const Wizard: FactoryComponent<WizardAttrs> = () => {\n let state: WizardState;\n\n const validateStep = async (stepIndex: number, steps: WizardStep[]): Promise<boolean> => {\n const step = steps[stepIndex];\n if (!step || !step.validate) return true;\n \n state.isValidating = true;\n try {\n const isValid = await step.validate();\n if (isValid) {\n state.completedSteps.add(stepIndex);\n state.errorSteps.delete(stepIndex);\n } else {\n state.errorSteps.add(stepIndex);\n state.completedSteps.delete(stepIndex);\n }\n return isValid;\n } catch (error) {\n state.errorSteps.add(stepIndex);\n state.completedSteps.delete(stepIndex);\n return false;\n } finally {\n state.isValidating = false;\n }\n };\n \n const goToStep = async (stepIndex: number, attrs: WizardAttrs): Promise<boolean> => {\n const { linear = true, onStepChange, steps } = attrs;\n \n if (stepIndex < 0 || stepIndex >= steps.length) return false;\n \n // Check if step is disabled\n if (steps[stepIndex].disabled) return false;\n \n // In linear mode, validate all previous steps\n if (linear && stepIndex > state.currentStep) {\n for (let i = state.currentStep; i < stepIndex; i++) {\n const isValid = await validateStep(i, steps);\n if (!isValid && !steps[i].optional) {\n return false;\n }\n }\n }\n \n // Validate current step before moving forward\n if (stepIndex > state.currentStep) {\n const isValid = await validateStep(state.currentStep, steps);\n if (!isValid && !steps[state.currentStep].optional) {\n return false;\n }\n }\n \n const oldStep = state.currentStep;\n state.currentStep = stepIndex;\n \n // Always call onStepChange when step changes\n if (onStepChange && oldStep !== stepIndex) {\n onStepChange(stepIndex, steps[stepIndex].id || `step-${stepIndex}`);\n }\n \n return true;\n };\n \n const nextStep = async (attrs: WizardAttrs): Promise<void> => {\n const { steps } = attrs;\n // Check if we're on the last step\n if (state.currentStep === steps.length - 1) {\n // This is the complete action\n if (attrs.onComplete) {\n attrs.onComplete();\n }\n return;\n }\n \n // Try to move to next step\n await goToStep(state.currentStep + 1, attrs);\n };\n \n const previousStep = (attrs: WizardAttrs): void => {\n goToStep(state.currentStep - 1, attrs);\n };\n \n const skipStep = (attrs: WizardAttrs): void => {\n const { steps } = attrs;\n const currentStepData = steps[state.currentStep];\n if (currentStepData && currentStepData.optional) {\n goToStep(state.currentStep + 1, attrs);\n }\n };\n \n return {\n oninit: ({ attrs }) => {\n state = {\n id: uniqueId(),\n currentStep: attrs.currentStep || 0,\n isValidating: false,\n completedSteps: new Set(),\n errorSteps: new Set()\n };\n },\n \n onbeforeupdate: ({ attrs }) => {\n // Sync external currentStep changes\n if (typeof attrs.currentStep === 'number' && attrs.currentStep !== state.currentStep) {\n state.currentStep = Math.max(0, attrs.currentStep);\n }\n },\n \n view: ({ attrs }) => {\n const {\n steps,\n showStepNumbers = true,\n className = '',\n showNavigation = true,\n labels = {},\n orientation = 'horizontal',\n allowHeaderNavigation = false\n } = attrs;\n \n // Ensure currentStep is within bounds\n if (state.currentStep >= steps.length) {\n state.currentStep = Math.max(0, steps.length - 1);\n }\n \n const currentStepData = steps[state.currentStep];\n const isFirstStep = state.currentStep === 0;\n const isLastStep = state.currentStep === steps.length - 1;\n const activeContent = currentStepData?.vnode ? currentStepData.vnode() : null;\n \n return m('.wizard', { class: `${orientation} ${className}` }, [\n // Step indicator\n m('.wizard-header', [\n m('.wizard-steps', \n steps.map((step, index) => {\n const isActive = index === state.currentStep;\n const isCompleted = state.completedSteps.has(index);\n const hasError = state.errorSteps.has(index);\n \n return m('.wizard-step', {\n class: [\n isActive ? 'active' : '',\n isCompleted ? 'completed' : '',\n hasError ? 'error' : '',\n step.disabled ? 'disabled' : '',\n step.optional ? 'optional' : ''\n ].filter(Boolean).join(' ') || undefined,\n onclick: allowHeaderNavigation && !step.disabled ? \n () => goToStep(index, attrs) : undefined\n }, [\n // Step number/icon\n m('.wizard-step-indicator', [\n isCompleted ? \n m('i.material-icons', 'check') :\n hasError ?\n m('i.material-icons', 'error') :\n step.icon ? \n m('i.material-icons', step.icon) :\n showStepNumbers ? \n m('span.wizard-step-number', index + 1) :\n null\n ]),\n \n // Step content\n m('.wizard-step-content', [\n m('.wizard-step-title', step.title),\n step.subtitle && m('.wizard-step-subtitle', step.subtitle),\n step.optional && m('.wizard-step-optional', labels.optional || 'Optional')\n ]),\n \n // Connector line (except for last step in horizontal mode)\n orientation === 'horizontal' && index < steps.length - 1 && \n m('.wizard-step-connector')\n ]);\n })\n )\n ]),\n \n // Step content\n m('.wizard-body', [\n activeContent && m('.wizard-step-panel', {\n key: currentStepData?.id || `step-${state.currentStep}`\n }, activeContent)\n ]),\n \n // Navigation\n showNavigation && m('.wizard-footer', [\n m('.wizard-navigation', [\n // Previous button\n !isFirstStep && m('button.btn-flat.wizard-btn-previous', {\n onclick: () => previousStep(attrs),\n disabled: state.isValidating\n }, labels.previous || 'Previous'),\n \n // Skip button (for optional steps)\n currentStepData && currentStepData.optional && !isLastStep && \n m('button.btn-flat.wizard-btn-skip', {\n onclick: () => skipStep(attrs),\n disabled: state.isValidating\n }, labels.skip || 'Skip'),\n \n // Next/Complete button\n m('button.btn.wizard-btn-next', {\n onclick: () => nextStep(attrs),\n disabled: state.isValidating,\n class: isLastStep ? 'wizard-btn-complete' : ''\n }, [\n state.isValidating && m('i.material-icons.left', 'hourglass_empty'),\n isLastStep ? (labels.complete || 'Complete') : (labels.next || 'Next')\n ])\n ])\n ])\n ]);\n }\n };\n};\n\n/**\n * Simple linear stepper for forms\n */\nexport const Stepper: FactoryComponent<Pick<WizardAttrs, 'steps' | 'currentStep' | 'onStepChange' | 'className'>> = () => {\n return {\n view: ({ attrs }) => {\n return m(Wizard, {\n ...attrs,\n linear: true,\n showNavigation: false,\n allowHeaderNavigation: false,\n orientation: 'horizontal'\n });\n }\n };\n};","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\nimport { MaterialIcon } from './material-icon';\nimport { EventHandler, SelectionMode, ComponentStyle } from './types';\n\nexport interface TreeNode {\n id: string;\n label: string;\n icon?: string;\n disabled?: boolean;\n expanded?: boolean;\n children?: TreeNode[];\n}\n\nexport type TreeIconType = 'caret' | 'chevron' | 'plus-minus' | 'triangle';\n\n// Utility function to check if a node is the last in its branch\nconst isNodeLastInBranch = (nodePath: number[], rootNodes: TreeNode[]): boolean => {\n // Navigate to the node's position and check if it's the last child at every level\n let currentNodes = rootNodes;\n for (let i = 0; i < nodePath.length; i++) {\n const index = nodePath[i];\n const isLastAtThisLevel = index === currentNodes.length - 1;\n\n // If this is not the last child at this level, then this node is not last in branch\n if (!isLastAtThisLevel) {\n return false;\n }\n\n // Move to the next level if it exists\n if (i < nodePath.length - 1) {\n const currentNode = currentNodes[index];\n if (currentNode.children) {\n currentNodes = currentNode.children;\n }\n }\n }\n return true;\n};\n\nexport interface TreeViewAttrs<T extends TreeNode = TreeNode> extends Attributes {\n /** Tree data structure */\n data: T[];\n /** Selection mode - none, single, or multiple */\n selectionMode?: SelectionMode;\n /** Currently selected node IDs */\n selectedIds?: string[];\n /** Called when selection changes */\n onselection?: EventHandler<string[]>;\n /** Called when node is expanded/collapsed */\n onexpand?: EventHandler<{ nodeId: string; expanded: boolean }>;\n /** Icon type for expand/collapse indicators */\n iconType?: TreeIconType;\n /** Show connecting lines between tree levels (VSCode-style) */\n showConnectors?: boolean;\n /** Allow keyboard navigation */\n keyboardNavigation?: boolean;\n /** Optional CSS class */\n className?: string;\n /** Optional inline styles */\n style?: ComponentStyle;\n /** Component ID */\n id?: string;\n}\n\ninterface TreeViewState {\n selectedIds: Set<string>;\n expandedIds: Set<string>;\n focusedNodeId: string | null;\n treeMap: Map<string, TreeNode>;\n}\n\ninterface TreeNodeComponentAttrs {\n node: TreeNode;\n level: number;\n isSelected: boolean;\n isExpanded: boolean;\n isFocused: boolean;\n showConnectors: boolean;\n iconType: TreeIconType;\n selectionMode: SelectionMode;\n onToggleExpand: (nodeId: string) => void;\n onToggleSelect: (nodeId: string) => void;\n onFocus: (nodeId: string) => void;\n isLastInBranch?: boolean;\n currentPath?: number[];\n treeState?: TreeViewState;\n treeAttrs?: TreeViewAttrs;\n}\n\nconst TreeNodeComponent: FactoryComponent<TreeNodeComponentAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const {\n node,\n level,\n isSelected,\n isExpanded,\n isFocused,\n showConnectors,\n iconType,\n selectionMode,\n onToggleExpand,\n onToggleSelect,\n onFocus,\n } = attrs;\n\n const hasChildren = node.children && node.children.length > 0;\n const indentLevel = level * 24; // 24px per level\n\n return m(\n 'li.tree-node',\n {\n class:\n [\n isSelected && 'selected',\n isFocused && 'focused',\n node.disabled && 'disabled',\n hasChildren && 'has-children',\n attrs.isLastInBranch && 'tree-last-in-branch',\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n 'data-node-id': node.id,\n 'data-level': level,\n },\n [\n // Node content\n m(\n '.tree-node-content',\n {\n style: {\n paddingLeft: `${indentLevel}px`,\n },\n onclick: node.disabled\n ? undefined\n : () => {\n if (selectionMode !== 'none') {\n onToggleSelect(node.id);\n }\n onFocus(node.id);\n },\n onkeydown: (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!node.disabled && selectionMode !== 'none') {\n onToggleSelect(node.id);\n }\n }\n },\n tabindex: node.disabled ? -1 : 0,\n role: selectionMode === 'multiple' ? 'option' : 'treeitem',\n 'aria-selected': selectionMode !== 'none' ? isSelected.toString() : undefined,\n 'aria-expanded': hasChildren ? isExpanded.toString() : undefined,\n 'aria-disabled': node.disabled ? 'true' : undefined,\n },\n [\n // Connector lines\n showConnectors &&\n level > 0 &&\n m(\n '.tree-connectors',\n Array.from({ length: level }, (_, i) =>\n m('.tree-connector', {\n key: i,\n style: { left: `${i * 24 + 12}px` },\n })\n )\n ),\n\n // Expand/collapse icon or spacer\n hasChildren\n ? m(\n '.tree-expand-icon',\n {\n onclick: (e: Event) => {\n e.stopPropagation();\n if (!node.disabled) {\n onToggleExpand(node.id);\n }\n },\n class: iconType,\n },\n [\n iconType === 'plus-minus'\n ? m('span.tree-plus-minus', isExpanded ? '−' : '+')\n : iconType === 'triangle'\n ? m('span.tree-triangle', { class: isExpanded ? 'expanded' : undefined }, '▶')\n : iconType === 'chevron'\n ? m(MaterialIcon, {\n name: 'chevron',\n direction: isExpanded ? 'down' : 'right',\n class: 'tree-chevron-icon',\n })\n : m(MaterialIcon, {\n name: 'caret',\n direction: isExpanded ? 'down' : 'right',\n class: 'tree-caret-icon',\n }),\n ]\n )\n : m('.tree-expand-spacer'), // Spacer for alignment\n\n // Selection indicator for multiple selection\n selectionMode === 'multiple' &&\n m('.tree-selection-indicator', [\n m('input[type=checkbox]', {\n checked: isSelected,\n disabled: node.disabled,\n onchange: () => {\n if (!node.disabled) {\n onToggleSelect(node.id);\n }\n },\n onclick: (e: Event) => e.stopPropagation(),\n }),\n ]),\n\n // Node icon (optional)\n node.icon && m('i.tree-node-icon.material-icons', node.icon),\n\n // Node label\n m('span.tree-node-label', node.label),\n ]\n ),\n\n // Children (recursive)\n hasChildren &&\n isExpanded &&\n m(\n 'ul.tree-children',\n {\n role: 'group',\n 'aria-expanded': 'true',\n },\n node.children!.map((child, childIndex) => {\n // Calculate state for each child using treeState\n const childIsSelected = attrs.treeState?.selectedIds.has(child.id) ?? false;\n const childIsExpanded = attrs.treeState?.expandedIds.has(child.id) ?? false;\n const childIsFocused = attrs.treeState?.focusedNodeId === child.id;\n\n // Calculate if this child is last in branch\n const childPath = [...(attrs.currentPath || []), childIndex];\n const childIsLastInBranch = attrs.treeAttrs?.data\n ? isNodeLastInBranch(childPath, attrs.treeAttrs.data)\n : false;\n\n return m(TreeNodeComponent, {\n key: child.id,\n node: child,\n level: level + 1,\n isSelected: childIsSelected,\n isExpanded: childIsExpanded,\n isFocused: childIsFocused,\n showConnectors,\n iconType,\n selectionMode,\n onToggleExpand,\n onToggleSelect,\n onFocus,\n isLastInBranch: childIsLastInBranch,\n currentPath: childPath,\n treeState: attrs.treeState,\n treeAttrs: attrs.treeAttrs,\n });\n })\n ),\n ]\n );\n },\n };\n};\n\nexport const TreeView: FactoryComponent<TreeViewAttrs> = () => {\n const state: TreeViewState = {\n selectedIds: new Set(),\n expandedIds: new Set(),\n focusedNodeId: null,\n treeMap: new Map(),\n };\n\n const buildTreeMap = (nodes: TreeNode[], map: Map<string, TreeNode>) => {\n nodes.forEach((node) => {\n map.set(node.id, node);\n if (node.children) {\n buildTreeMap(node.children, map);\n }\n });\n };\n\n const initializeExpandedNodes = (nodes: TreeNode[]) => {\n nodes.forEach((node) => {\n if (node.expanded) {\n state.expandedIds.add(node.id);\n }\n if (node.children) {\n initializeExpandedNodes(node.children);\n }\n });\n };\n\n const handleToggleExpand = (nodeId: string, attrs: TreeViewAttrs) => {\n const isExpanded = state.expandedIds.has(nodeId);\n if (isExpanded) {\n state.expandedIds.delete(nodeId);\n } else {\n state.expandedIds.add(nodeId);\n }\n\n attrs.onexpand?.({ nodeId, expanded: !isExpanded });\n };\n\n const handleToggleSelect = (nodeId: string, attrs: TreeViewAttrs) => {\n const { selectionMode = 'single' } = attrs;\n\n if (selectionMode === 'single') {\n state.selectedIds.clear();\n state.selectedIds.add(nodeId);\n } else if (selectionMode === 'multiple') {\n if (state.selectedIds.has(nodeId)) {\n state.selectedIds.delete(nodeId);\n } else {\n state.selectedIds.add(nodeId);\n }\n }\n\n attrs.onselection?.(Array.from(state.selectedIds));\n };\n\n const handleFocus = (nodeId: string) => {\n state.focusedNodeId = nodeId;\n };\n\n const renderNodes = (\n nodes: TreeNode[],\n attrs: TreeViewAttrs,\n level = 0,\n parentPath: number[] = []\n ): Vnode<any, any>[] => {\n return nodes.map((node, index) => {\n const isSelected = state.selectedIds.has(node.id);\n const isExpanded = state.expandedIds.has(node.id);\n const isFocused = state.focusedNodeId === node.id;\n const currentPath = [...parentPath, index];\n const isLastInBranch = isNodeLastInBranch(currentPath, attrs.data);\n\n return m(TreeNodeComponent, {\n key: node.id,\n node,\n level,\n isSelected,\n isExpanded,\n isFocused,\n showConnectors: attrs.showConnectors ?? true,\n iconType: attrs.iconType ?? 'caret',\n selectionMode: attrs.selectionMode ?? 'single',\n onToggleExpand: (nodeId: string) => handleToggleExpand(nodeId, attrs),\n onToggleSelect: (nodeId: string) => handleToggleSelect(nodeId, attrs),\n onFocus: handleFocus,\n isLastInBranch,\n currentPath,\n // Pass state and attrs for recursive rendering\n treeState: state,\n treeAttrs: attrs,\n });\n });\n };\n\n return {\n oninit: ({ attrs }) => {\n // Build internal tree map for efficient lookups\n buildTreeMap(attrs.data, state.treeMap);\n\n // Initialize expanded nodes from data\n initializeExpandedNodes(attrs.data);\n\n // Initialize selected nodes from props\n if (attrs.selectedIds) {\n state.selectedIds = new Set(attrs.selectedIds);\n }\n },\n\n onupdate: ({ attrs }) => {\n // Sync selectedIds prop with internal state\n if (attrs.selectedIds) {\n const newSelection = new Set(attrs.selectedIds);\n if (\n newSelection.size !== state.selectedIds.size ||\n !Array.from(newSelection).every((id) => state.selectedIds.has(id))\n ) {\n state.selectedIds = newSelection;\n }\n }\n },\n\n view: ({ attrs }) => {\n const { data, className, style, id, selectionMode = 'single', showConnectors = true } = attrs;\n\n return m(\n 'div.tree-view',\n {\n class: [className, showConnectors && 'show-connectors'].filter(Boolean).join(' ') || undefined,\n style,\n id,\n role: selectionMode === 'multiple' ? 'listbox' : 'tree',\n 'aria-multiselectable': selectionMode === 'multiple' ? 'true' : 'false',\n },\n [\n m(\n 'ul.tree-root',\n {\n role: 'group',\n },\n renderNodes(data, attrs)\n ),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface TimelineItemAttrs {\n /** Unique identifier for the timeline item */\n id?: string;\n /** Main label/title for the timeline item */\n label?: string;\n /** Optional description text */\n description?: string;\n /** Timestamp for the item (string or Date object) */\n timestamp?: string | Date;\n /** Custom content to render instead of label/description */\n content?: m.Children;\n /** Material icon name for the timeline dot */\n icon?: string;\n /** Color theme for the timeline item */\n color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n /** Click handler for the timeline item */\n onclick?: (item: TimelineItemAttrs, event: Event) => void;\n /** Whether the item is disabled */\n disabled?: boolean;\n /** Custom CSS class for the item */\n className?: string;\n}\n\nexport interface TimelineAttrs extends Attributes {\n /** Array of timeline items to display */\n items: TimelineItemAttrs[];\n /** Position of content relative to the timeline line (vertical only) */\n position?: 'left' | 'right' | 'alternate';\n /** Whether to show the connecting line between items */\n showConnector?: boolean;\n /** Custom CSS class for the timeline container */\n className?: string;\n /** Whether to show timestamps */\n showTimestamps?: boolean;\n /** Compact mode with reduced spacing */\n compact?: boolean;\n}\n\n/**\n * Timeline Component\n * Displays a sequence of events in chronological order with connecting lines\n * Supports both vertical and horizontal orientations with Material Design styling\n */\nexport const Timeline: FactoryComponent<TimelineAttrs> = () => {\n const formatTimestamp = (timestamp?: string | Date): string => {\n if (!timestamp) return '';\n if (typeof timestamp === 'string') return timestamp;\n return timestamp.toLocaleDateString();\n };\n\n const getColorClass = (color?: string): string => {\n switch (color) {\n case 'primary':\n return 'timeline-primary';\n case 'secondary':\n return 'timeline-secondary';\n case 'success':\n return 'timeline-success';\n case 'warning':\n return 'timeline-warning';\n case 'error':\n return 'timeline-error';\n case 'info':\n return 'timeline-info';\n default:\n return 'timeline-default';\n }\n };\n\n return {\n view: ({ attrs }) => {\n const {\n items = [],\n orientation = 'vertical',\n position = 'right',\n showConnector = true,\n className = '',\n showTimestamps = true,\n compact = false,\n } = attrs;\n\n const timelineClasses =\n [\n 'timeline',\n `timeline-${orientation}`,\n `timeline-${position}`,\n showConnector ? 'timeline-connector' : '',\n compact ? 'timeline-compact' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return m('div', { className: timelineClasses }, [\n items.map((item, index) => {\n const isAlternate = position === 'alternate';\n const itemPosition = isAlternate ? (index % 2 === 0 ? 'right' : 'left') : position;\n\n const itemClasses =\n [\n 'timeline-item',\n `timeline-item-${itemPosition}`,\n getColorClass(item.color),\n item.disabled ? 'timeline-item-disabled' : '',\n item.className || '',\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const handleItemClick = (e: Event) => {\n if (item.disabled) return;\n if (item.onclick) {\n e.preventDefault();\n item.onclick(item, e);\n }\n };\n\n const isVertical = orientation === 'vertical';\n\n return m(\n 'div',\n {\n key: item.id || index,\n className: itemClasses,\n onclick: item.onclick ? handleItemClick : undefined,\n role: item.onclick ? 'button' : undefined,\n tabindex: item.onclick && !item.disabled ? 0 : undefined,\n 'aria-disabled': item.disabled ? 'true' : undefined,\n },\n [\n // Timestamp (on opposite side of content from bullet)\n isVertical &&\n showTimestamps &&\n item.timestamp &&\n m(\n `.timeline-timestamp-separate${!item.icon ? '.timeline-dot-small' : ''}`,\n formatTimestamp(item.timestamp)\n ),\n\n // Timeline separator containing dot and connector\n m('.timeline-separator', [\n // Timeline dot/icon\n m(`.timeline-dot${!item.icon ? '.timeline-dot-small' : ''}`, [\n item.icon ? m('i.material-icons.timeline-icon', item.icon) : m('.timeline-marker'),\n ]),\n\n // Timeline connector (only show if not the last item and connectors are enabled)\n showConnector && index < items.length - 1 && m('.timeline-connector'),\n ]),\n\n // Content container\n m('.timeline-content', [\n // Timestamp for horizontal layout or when not shown separately\n !isVertical &&\n showTimestamps &&\n item.timestamp &&\n m('.timeline-timestamp', formatTimestamp(item.timestamp)),\n\n // Main content\n item.content\n ? item.content\n : m('.timeline-text', [\n item.label && m('.timeline-label', item.label),\n item.description && m('.timeline-description', item.description),\n ]),\n ]),\n ]\n );\n }),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\n\nexport interface MasonryBreakpoints {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n}\n\nexport interface MasonryAttrs extends Attributes {\n columns?: number | MasonryBreakpoints;\n spacing?: number | string;\n className?: string;\n onItemClick?: (index: number, event: Event) => void;\n cssOnly?: boolean;\n animationDelay?: number;\n}\n\nexport const Masonry: FactoryComponent<MasonryAttrs> = () => {\n let containerRef: HTMLElement | null = null;\n const itemHeights: number[] = []; // measured heights\n let resizeObserver: ResizeObserver | null = null;\n\n const defaultBreakpoints = { xs: 1, sm: 2, md: 3, lg: 4, xl: 5 };\n\n const getColumnsCount = (columns: number | MasonryBreakpoints = 3): number => {\n if (typeof columns === 'number') return columns;\n const breakpoints = { ...defaultBreakpoints, ...columns };\n const width = window.innerWidth;\n if (width >= 1200) return breakpoints.xl || 5;\n if (width >= 992) return breakpoints.lg || 4;\n if (width >= 768) return breakpoints.md || 3;\n if (width >= 576) return breakpoints.sm || 2;\n return breakpoints.xs || 1;\n };\n\n const setupResizeObserver = () => {\n if (resizeObserver) return;\n if (typeof ResizeObserver === 'undefined') return;\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const el = entry.target as HTMLElement;\n const index = Number(el.dataset.index);\n if (!isNaN(index)) {\n const h = el.offsetHeight;\n if (itemHeights[index] !== h) {\n itemHeights[index] = h;\n m.redraw();\n }\n }\n }\n });\n };\n\n const cleanup = () => {\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n };\n\n return {\n onremove: cleanup,\n\n view: ({ attrs, children }: Vnode<MasonryAttrs>) => {\n const { columns = 3, spacing = 16, className = '', onItemClick, cssOnly = false, animationDelay } = attrs;\n\n const gap = typeof spacing === 'number' ? spacing : parseInt(spacing, 10) || 16;\n const columnsCount = typeof columns === 'number' ? columns : getColumnsCount(columns);\n\n const containerClasses = [\n 'masonry',\n cssOnly ? 'masonry-css' : 'masonry-js',\n animationDelay ? 'masonry-animated' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const containerStyle: Record<string, any> = { position: 'relative' };\n\n // --- CSS-only fallback ---\n if (cssOnly) {\n containerStyle.display = 'grid';\n containerStyle.gridTemplateColumns = `repeat(${columnsCount}, 1fr)`;\n containerStyle.gap = `${gap}px`;\n return m('div', { className: containerClasses, style: containerStyle }, children);\n }\n\n // --- JS Masonry ---\n const containerWidth = containerRef?.offsetWidth || 800;\n const totalGapWidth = gap * (columnsCount - 1);\n const columnWidth = (containerWidth - totalGapWidth) / columnsCount;\n\n const columnHeights = new Array(columnsCount).fill(0);\n const positionedChildren: m.Vnode[] = [];\n\n (Array.isArray(children) ? children : [children]).forEach((child, index) => {\n const shortestColumnIndex = columnHeights.indexOf(Math.min(...columnHeights));\n const x = shortestColumnIndex * (columnWidth + gap);\n const y = columnHeights[shortestColumnIndex];\n\n const itemHeight = itemHeights[index] ?? 200; // fallback until measured\n columnHeights[shortestColumnIndex] += itemHeight + gap;\n\n const itemStyle: Record<string, any> = {\n position: 'absolute',\n left: `${x}px`,\n top: `${y}px`,\n width: `${columnWidth}px`,\n transition: 'all 0.3s ease',\n animationDelay: animationDelay ? `${index * animationDelay}ms` : undefined,\n };\n\n positionedChildren.push(\n m(\n 'div',\n {\n key: `masonry-item-${index}`,\n className: 'masonry-item',\n style: itemStyle,\n 'data-index': index,\n onclick: onItemClick ? (e: Event) => onItemClick(index, e) : undefined,\n oncreate: ({ dom }) => {\n const el = dom as HTMLElement;\n setupResizeObserver();\n resizeObserver?.observe(el);\n const h = el.offsetHeight;\n if (itemHeights[index] !== h) {\n itemHeights[index] = h;\n m.redraw();\n }\n },\n onremove: ({ dom }) => {\n resizeObserver?.unobserve(dom as HTMLElement);\n },\n },\n child\n )\n );\n });\n\n containerStyle.height = `${Math.max(...columnHeights) - gap}px`;\n\n return m(\n 'div',\n {\n className: containerClasses,\n style: containerStyle,\n oncreate: ({ dom }) => {\n containerRef = dom as HTMLElement;\n },\n },\n positionedChildren\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface ImageListActionButton {\n /** Material icon name for the action button */\n icon: string;\n /** Click handler for the action button */\n onclick: (item: ImageListItemAttrs, event: Event) => void;\n /** Accessibility label for the button */\n ariaLabel?: string;\n /** Button position */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n}\n\nexport interface ImageListItemAttrs {\n /** Image source URL */\n src: string;\n /** Alternative text for accessibility */\n alt?: string;\n /** Title text (appears in tooltip and overlay) */\n title?: string;\n /** Subtitle text for overlay */\n subtitle?: string;\n /** Number of columns this item should span */\n cols?: number;\n /** Number of rows this item should span */\n rows?: number;\n /** Whether this is a featured/highlighted item */\n featured?: boolean;\n /** Click handler for the image item */\n onclick?: (item: ImageListItemAttrs, event: Event) => void;\n /** Action button configuration */\n actionButton?: ImageListActionButton;\n /** Custom CSS class for the item */\n className?: string;\n /** Loading state for the image */\n loading?: 'lazy' | 'eager';\n /** Custom aspect ratio (width/height) */\n aspectRatio?: number;\n}\n\nexport interface ImageListBreakpoints {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n}\n\nexport interface ImageListAttrs extends Attributes {\n /** Array of image items to display */\n items: ImageListItemAttrs[];\n /** Layout variant */\n variant?: 'standard' | 'quilted' | 'masonry' | 'woven';\n /** Number of columns or responsive configuration */\n cols?: number | ImageListBreakpoints;\n /** Gap between items */\n gap?: number | string;\n /** Row height (auto for dynamic height) */\n rowHeight?: number | 'auto';\n /** Custom CSS class for the container */\n className?: string;\n /** Loading behavior for images */\n loading?: 'lazy' | 'eager';\n /** Whether to show image titles as overlay */\n showTitles?: boolean;\n /** Whether to show action buttons */\n showActions?: boolean;\n}\n\n/**\n * ImageList Component\n * Displays a collection of images in various grid layouts\n * Supports standard grid, quilted (varied sizes), masonry, and woven patterns\n */\nexport const ImageList: FactoryComponent<ImageListAttrs> = () => {\n const defaultBreakpoints = {\n xs: 1,\n sm: 2, \n md: 3,\n lg: 4,\n xl: 5\n };\n\n const getColumnsCount = (cols: number | ImageListBreakpoints = 3): number => {\n if (typeof cols === 'number') return cols;\n \n const breakpoints = { ...defaultBreakpoints, ...cols };\n const width = typeof window !== 'undefined' ? window.innerWidth : 1024;\n \n if (width >= 1200) return breakpoints.xl || 5;\n if (width >= 992) return breakpoints.lg || 4;\n if (width >= 768) return breakpoints.md || 3;\n if (width >= 576) return breakpoints.sm || 2;\n return breakpoints.xs || 1;\n };\n\n const handleImageLoad = (e: Event) => {\n const img = e.target as HTMLImageElement;\n img.classList.add('loaded');\n };\n\n const handleImageError = (e: Event) => {\n const img = e.target as HTMLImageElement;\n img.classList.add('error');\n // Could set a placeholder image here\n img.alt = 'Failed to load image';\n };\n\n const renderImage = (item: ImageListItemAttrs, index: number, options: ImageListAttrs) => {\n const {\n src,\n alt = '',\n title,\n subtitle,\n onclick,\n actionButton,\n className = '',\n loading = options.loading || 'lazy',\n aspectRatio,\n cols = 1,\n rows = 1,\n featured = false\n } = item;\n\n const itemClasses = [\n 'image-list-item',\n featured ? 'image-list-item-featured' : '',\n onclick ? 'image-list-item-clickable' : '',\n className\n ].filter(Boolean).join(' ');\n\n const itemStyle: Record<string, any> = {};\n \n // Quilted layout with fixed alternating pattern\n if (options.variant === 'quilted') {\n if (featured || index % 7 === 0) {\n itemStyle.gridColumnEnd = 'span 2';\n itemStyle.gridRowEnd = 'span 2';\n } else if (index % 3 === 0) {\n itemStyle.gridColumnEnd = 'span 2';\n itemStyle.gridRowEnd = 'span 1';\n } else {\n itemStyle.gridColumnEnd = 'span 1';\n itemStyle.gridRowEnd = 'span 1';\n }\n }\n \n // Woven layout with varied sizes based on item properties\n if (options.variant === 'woven') {\n itemStyle.gridColumnEnd = `span ${cols}`;\n itemStyle.gridRowEnd = `span ${rows}`;\n }\n\n // Masonry layout - prevent break inside items\n if (options.variant === 'masonry') {\n itemStyle.breakInside = 'avoid';\n itemStyle.marginBottom = typeof options.gap === 'number' ? `${options.gap}px` : options.gap || '4px';\n itemStyle.display = 'inline-block';\n itemStyle.width = '100%';\n }\n\n // Custom aspect ratio\n if (aspectRatio && options.variant !== 'masonry') {\n itemStyle.aspectRatio = aspectRatio.toString();\n }\n\n const handleItemClick = (e: Event) => {\n if (onclick) {\n e.preventDefault();\n onclick(item, e);\n }\n };\n\n const handleActionClick = (e: Event) => {\n e.stopPropagation();\n if (actionButton?.onclick) {\n actionButton.onclick(item, e);\n }\n };\n\n return m(`.${itemClasses}`, {\n key: `image-${index}`,\n style: itemStyle,\n onclick: onclick ? handleItemClick : undefined,\n role: onclick ? 'button' : undefined,\n tabindex: onclick ? 0 : undefined,\n }, [\n m('.image-list-item-img', [\n m('img', {\n src,\n alt,\n loading,\n onload: handleImageLoad,\n onerror: handleImageError,\n draggable: false,\n }),\n \n // Loading placeholder\n m('.image-list-item-placeholder'),\n ]),\n \n // Title overlay\n (options.showTitles && (title || subtitle)) && \n m('.image-list-item-bar', [\n m('.image-list-item-title-wrap', [\n title && m('.image-list-item-title', title),\n subtitle && m('.image-list-item-subtitle', subtitle)\n ])\n ]),\n \n // Action button\n (options.showActions && actionButton) &&\n m('button.image-list-item-action', {\n class: `image-list-action-${actionButton.position || 'top-right'}`,\n onclick: handleActionClick,\n 'aria-label': actionButton.ariaLabel || `Action for ${title || alt}`,\n }, [\n m('i.material-icons', actionButton.icon)\n ])\n ]);\n };\n\n return {\n view: ({ attrs }) => {\n const {\n items = [],\n variant = 'standard',\n cols = 3,\n gap = 4,\n rowHeight = 'auto',\n className = '',\n showTitles = false,\n showActions = false\n } = attrs;\n\n const columnsCount = getColumnsCount(cols);\n const gapValue = typeof gap === 'number' ? `${gap}px` : gap;\n \n const containerClasses = [\n 'image-list',\n `image-list-${variant}`,\n showTitles ? 'image-list-with-titles' : '',\n showActions ? 'image-list-with-actions' : '',\n className\n ].filter(Boolean).join(' ');\n\n const containerStyle: Record<string, any> = {\n gap: gapValue\n };\n\n // Set up grid based on variant\n switch (variant) {\n case 'standard':\n containerStyle.display = 'grid';\n containerStyle.gridTemplateColumns = `repeat(${columnsCount}, 1fr)`;\n if (rowHeight !== 'auto') {\n containerStyle.gridAutoRows = typeof rowHeight === 'number' ? `${rowHeight}px` : rowHeight;\n }\n break;\n \n case 'quilted':\n // Fixed pattern like woven\n containerStyle.display = 'grid';\n containerStyle.gridTemplateColumns = `repeat(${Math.max(columnsCount * 2, 4)}, 1fr)`;\n containerStyle.gridAutoRows = typeof rowHeight === 'number' ? `${rowHeight}px` : '150px';\n containerStyle.gridAutoFlow = 'dense';\n break;\n \n case 'masonry':\n // Use CSS columns for masonry effect \n containerStyle.display = 'block';\n containerStyle.columnCount = columnsCount;\n containerStyle.columnGap = gapValue;\n containerStyle.columnFill = 'balance';\n containerStyle.orphans = 1;\n containerStyle.widows = 1;\n break;\n \n case 'woven':\n // Varied sizes based on item cols/rows\n containerStyle.display = 'grid';\n containerStyle.gridTemplateColumns = `repeat(${columnsCount}, 1fr)`;\n containerStyle.gridAutoRows = typeof rowHeight === 'number' ? `${rowHeight}px` : '200px';\n containerStyle.gridAutoFlow = 'dense';\n break;\n }\n\n return m(`.${containerClasses}`, {\n style: containerStyle\n }, [\n items.map((item, index) => renderImage(item, index, attrs))\n ]);\n }\n };\n};","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\nimport { ComponentStyle } from './types';\n\n/** Rating component size options */\nexport type RatingSize = 'small' | 'medium' | 'large';\n\n/** Rating component density options */\nexport type RatingDensity = 'compact' | 'standard' | 'comfortable';\n\n/** Custom icon configuration */\nexport interface RatingIconConfig {\n /** Custom filled icon component or string */\n filled?: string | m.Component;\n /** Custom empty icon component or string */\n empty?: string | m.Component;\n /** Custom half-filled icon component or string (for fractional ratings) */\n half?: string | m.Component;\n}\n\n/** Rating component attributes */\nexport interface RatingAttrs extends Attributes {\n /** Current rating value */\n value?: number;\n /** Maximum rating value (default: 5) */\n max?: number;\n /** Step size for rating increments (default: 1, can be 0.5 for half-steps) */\n step?: number;\n /** Initial value for uncontrolled mode */\n defaultValue?: number;\n /** Whether the rating is read-only */\n readonly?: boolean;\n /** Whether the rating is disabled */\n disabled?: boolean;\n /** Whether the rating can be cleared/reset to 0 */\n clearable?: boolean;\n /** Size variant */\n size?: RatingSize;\n /** Density variant */\n density?: RatingDensity;\n /** Custom icon configuration */\n icon?: RatingIconConfig;\n /** Class name for the container */\n className?: string;\n /** Additional CSS styles */\n style?: ComponentStyle;\n /** Callback when rating changes */\n onchange?: (value: number) => void;\n /** Callback when rating is hovered (preview mode) */\n onmouseover?: (value: number) => void;\n /** Function to get label text for accessibility */\n getLabelText?: (value: number, max: number) => string;\n /** Whether to show tooltips on hover */\n showTooltips?: boolean;\n /** Custom tooltip labels for each rating value */\n tooltipLabels?: string[];\n /** Whether to allow fractional display (e.g., 3.5 stars) */\n allowHalfSteps?: boolean;\n /** Name for form submission */\n name?: string;\n /** HTML ID for the component */\n id?: string;\n /** ARIA label for the component */\n 'aria-label'?: string;\n /** ARIA label for the component (camelCase alternative) */\n ariaLabel?: string;\n /** ARIA labelledby reference */\n 'aria-labelledby'?: string;\n}\n\n/** Default star icons */\nconst DEFAULT_ICONS = {\n filled: '★',\n empty: '☆',\n half: '☆', // We'll handle half-fill with CSS\n};\n\n/** Create a Rating component */\nexport const Rating: FactoryComponent<RatingAttrs> = () => {\n const state = {\n id: uniqueId(),\n internalValue: 0,\n hoverValue: null as number | null,\n isHovering: false,\n isFocused: false,\n };\n\n const isControlled = (attrs: RatingAttrs) =>\n typeof attrs.value !== 'undefined' && typeof attrs.onchange === 'function';\n\n const getCurrentValue = (attrs: RatingAttrs) => {\n const controlled = isControlled(attrs);\n const isNonInteractive = attrs.readonly || attrs.disabled;\n\n if (controlled) {\n return attrs.value || 0;\n }\n\n // Non-interactive components: prefer defaultValue, fallback to value\n if (isNonInteractive) {\n return attrs.defaultValue ?? attrs.value ?? 0;\n }\n\n // Interactive uncontrolled: use internal state (user can change it)\n return state.internalValue ?? attrs.defaultValue ?? 0;\n };\n\n const getDisplayValue = (attrs: RatingAttrs) =>\n state.isHovering && state.hoverValue !== null ? state.hoverValue : getCurrentValue(attrs);\n\n const getLabelText = (value: number, max: number, getLabelFn?: RatingAttrs['getLabelText']): string => {\n if (getLabelFn) {\n return getLabelFn(value, max);\n }\n if (value === 0) {\n return `No rating`;\n }\n if (value === 1) {\n return `1 star out of ${max}`;\n }\n return `${value} stars out of ${max}`;\n };\n\n const getSizeClass = (size: RatingSize = 'medium'): string => {\n switch (size) {\n case 'small':\n return 'rating--small';\n case 'large':\n return 'rating--large';\n default:\n return 'rating--medium';\n }\n };\n\n const getDensityClass = (density: RatingDensity = 'standard'): string => {\n switch (density) {\n case 'compact':\n return 'rating--compact';\n case 'comfortable':\n return 'rating--comfortable';\n default:\n return 'rating--standard';\n }\n };\n\n const handleItemClick = (attrs: RatingAttrs, clickValue: number) => {\n if (attrs.readonly || attrs.disabled) return;\n\n const currentValue = getCurrentValue(attrs);\n const newValue = attrs.clearable && currentValue === clickValue ? 0 : clickValue;\n\n if (!isControlled(attrs)) {\n state.internalValue = newValue;\n }\n\n attrs.onchange?.(newValue);\n };\n\n const handleItemHover = (attrs: RatingAttrs, hoverValue: number) => {\n if (attrs.readonly || attrs.disabled) return;\n\n state.hoverValue = hoverValue;\n state.isHovering = true;\n attrs.onmouseover?.(hoverValue);\n };\n\n const handleMouseLeave = (attrs: RatingAttrs) => {\n if (attrs.readonly || attrs.disabled) return;\n\n state.isHovering = false;\n state.hoverValue = null;\n };\n\n const handleKeyDown = (attrs: RatingAttrs, e: KeyboardEvent) => {\n if (attrs.readonly || attrs.disabled) return;\n\n const max = attrs.max || 5;\n const step = attrs.step || 1;\n const currentValue = getCurrentValue(attrs);\n let newValue = currentValue;\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n e.preventDefault();\n newValue = Math.min(max, currentValue + step);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n e.preventDefault();\n newValue = Math.max(0, currentValue - step);\n break;\n case 'Home':\n e.preventDefault();\n newValue = attrs.clearable ? 0 : step;\n break;\n case 'End':\n e.preventDefault();\n newValue = max;\n break;\n case ' ':\n case 'Enter':\n e.preventDefault();\n // If focused and not hovering, increment by step\n if (!state.isHovering) {\n newValue = currentValue + step > max ? (attrs.clearable ? 0 : step) : currentValue + step;\n }\n break;\n case 'Escape':\n if (attrs.clearable) {\n e.preventDefault();\n newValue = 0;\n }\n break;\n default:\n return;\n }\n\n if (newValue !== currentValue) {\n if (!isControlled(attrs)) {\n state.internalValue = newValue;\n }\n attrs.onchange?.(newValue);\n }\n };\n\n interface RatingItemAttrs {\n index: number;\n displayValue: number;\n step: number;\n icons: { filled: string | m.Component; empty: string | m.Component; half: string | m.Component };\n allowHalfSteps?: boolean;\n disabled?: boolean;\n showTooltip?: boolean;\n tooltipLabel?: string;\n onclick: () => void;\n onmouseover: () => void;\n }\n\n const RatingItem: FactoryComponent<RatingItemAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const {\n index,\n displayValue,\n step,\n icons,\n allowHalfSteps,\n disabled,\n showTooltip,\n tooltipLabel,\n onclick,\n onmouseover,\n } = attrs;\n const itemValue = (index + 1) * step;\n\n // Calculate fill state based on displayValue vs itemValue\n const diff = displayValue - itemValue;\n\n const fillState: 'empty' | 'half' | 'full' =\n diff >= 0 ? 'full' : allowHalfSteps && diff >= -step / 2 ? 'half' : 'empty';\n\n return m(\n '.rating__item.no-select',\n {\n className: [\n fillState === 'full' ? 'rating__item--filled' : '',\n fillState === 'half' ? 'rating__item--half' : '',\n fillState !== 'empty' ? 'rating__item--active' : '',\n disabled ? 'rating__item--disabled' : '',\n ]\n .filter(Boolean)\n .join(' '),\n onclick,\n onmouseover,\n },\n [\n // Empty icon (background)\n m(\n '.rating__icon.rating__icon--empty',\n { 'aria-hidden': 'true' },\n typeof icons.empty === 'string' ? icons.empty : m(icons.empty as m.ComponentTypes)\n ),\n\n // Filled icon (foreground)\n m(\n '.rating__icon.rating__icon--filled',\n {\n 'aria-hidden': 'true',\n style: {\n clipPath: fillState === 'half' ? 'inset(0 50% 0 0)' : undefined,\n },\n },\n typeof icons.filled === 'string' ? icons.filled : m(icons.filled as m.ComponentTypes)\n ),\n\n // Tooltip\n showTooltip && tooltipLabel && m('.rating__tooltip', tooltipLabel),\n ]\n );\n },\n };\n };\n\n return {\n oninit: ({ attrs }) => {\n const controlled = isControlled(attrs);\n const isNonInteractive = attrs.readonly || attrs.disabled;\n\n // Warn developer for improper controlled usage\n if (attrs.value !== undefined && !controlled && !isNonInteractive) {\n console.warn(\n `Rating component received 'value' prop without 'onchange' handler. ` +\n `Use 'defaultValue' for uncontrolled components or add 'onchange' for controlled components.`\n );\n }\n\n if (!controlled) {\n state.internalValue = attrs.defaultValue || 0;\n }\n },\n\n view: ({ attrs }) => {\n const {\n max = 5,\n step = 1,\n size = 'medium',\n density = 'standard',\n className = '',\n style = {},\n readonly: readonly = false,\n disabled = false,\n id = state.id,\n name,\n ...ariaAttrs\n } = attrs;\n\n const currentValue = getCurrentValue(attrs);\n const displayValue = getDisplayValue(attrs);\n const itemCount = Math.ceil(max / step);\n\n return m(\n '.rating',\n {\n className: [\n 'rating',\n getSizeClass(size),\n getDensityClass(density),\n readonly ? 'rating--read-only' : '',\n disabled ? 'rating--disabled' : '',\n state.isFocused ? 'rating--focused' : '',\n className,\n ]\n .filter(Boolean)\n .join(' '),\n style,\n id,\n role: readonly ? 'img' : 'slider',\n tabindex: readonly || disabled ? -1 : 0,\n 'aria-valuemin': 0,\n 'aria-valuemax': max,\n 'aria-valuenow': currentValue,\n 'aria-valuetext': getLabelText(currentValue, max, attrs.getLabelText),\n 'aria-label':\n ariaAttrs['aria-label'] ||\n attrs.ariaLabel ||\n `Rating: ${getLabelText(currentValue, max, attrs.getLabelText)}`,\n 'aria-labelledby': ariaAttrs['aria-labelledby'],\n 'aria-readonly': readonly,\n 'aria-disabled': disabled,\n onkeydown: (e: KeyboardEvent) => handleKeyDown(attrs, e),\n onfocus: () => {\n state.isFocused = true;\n },\n onblur: () => {\n state.isFocused = false;\n handleMouseLeave(attrs);\n },\n onmouseleave: () => handleMouseLeave(attrs),\n },\n [\n // Hidden input for form submission\n name &&\n m('input', {\n type: 'hidden',\n name,\n value: currentValue,\n }),\n\n // Rating items\n m(\n '.rating__items',\n {\n className: 'rating__items',\n },\n // Array.from({ length: itemCount }, (_, i) => renderRatingItem(attrs, i))\n [...Array(itemCount)].map((_, i) => {\n const itemValue = (i + 1) * step;\n return m(RatingItem, {\n key: `rating-item-${i}`,\n index: i,\n displayValue: displayValue,\n step,\n icons: { ...DEFAULT_ICONS, ...attrs.icon },\n allowHalfSteps: attrs.allowHalfSteps,\n disabled: attrs.disabled,\n showTooltip: attrs.showTooltips,\n tooltipLabel: attrs.tooltipLabels?.[i],\n onclick: () => handleItemClick(attrs, itemValue),\n onmouseover: () => handleItemHover(attrs, itemValue),\n });\n })\n ),\n\n // Screen reader text\n m(\n '.rating__sr-only',\n {\n className: 'rating__sr-only',\n 'aria-live': 'polite',\n 'aria-atomic': 'true',\n },\n getLabelText(displayValue, max, attrs.getLabelText)\n ),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\nimport { ComponentStyle } from './types';\n\n/** Likert scale component size options */\nexport type LikertScaleSize = 'small' | 'medium' | 'large';\n\n/** Likert scale component density options */\nexport type LikertScaleDensity = 'compact' | 'standard' | 'comfortable';\n\n/** Likert scale layout options */\nexport type LikertScaleLayout = 'horizontal' | 'vertical' | 'responsive';\n\nconst MOBILE_LAYOUT_BREAKPOINT = 600;\n\n/** Likert scale component attributes */\nexport interface LikertScaleAttrs<T extends number = number> extends Attributes {\n // Scale configuration\n /** Minimum scale value (default: 1) */\n min?: number;\n /** Maximum scale value (default: 5) */\n max?: number;\n /** Step size for scale increments (default: 1) */\n step?: number;\n\n // State management (consistent with Rating)\n /** Current value for controlled mode */\n value?: T;\n /** Initial value for uncontrolled mode */\n defaultValue?: T;\n /** Callback when value changes */\n onchange?: (value: T) => void;\n\n // Labels\n /** Question/prompt text */\n label?: string;\n /** Helper text description */\n description?: string;\n /** Anchor label for minimum value (e.g., \"Very Unhappy\") */\n startLabel?: string;\n /** Anchor label for middle value (optional, e.g., \"Neutral\") */\n middleLabel?: string;\n /** Anchor label for maximum value (e.g., \"Very Happy\") */\n endLabel?: string;\n\n // Display options\n /** Whether to display numeric values (default: false) */\n showNumbers?: boolean;\n /** Whether to show tooltips on hover (default: false) */\n showTooltips?: boolean;\n /** Custom tooltip labels for each value */\n tooltipLabels?: string[];\n\n // Size and density (consistent with Rating)\n /** Density variant (default: 'standard') */\n density?: LikertScaleDensity;\n /** Size variant (default: 'medium') */\n size?: LikertScaleSize;\n\n // Layout\n /** Layout mode (default: 'responsive' = horizontal on desktop, vertical on mobile) */\n layout?: LikertScaleLayout;\n\n // Form integration\n /** HTML ID for the component */\n id?: string;\n /** Name for form submission */\n name?: string;\n /** Whether the component is disabled */\n disabled?: boolean;\n /** Whether the component is read-only */\n readonly?: boolean;\n /** If true, add a mandatory '*' after the label */\n isMandatory?: boolean;\n\n // Accessibility (consistent with Rating)\n /** ARIA label for the component */\n 'aria-label'?: string;\n /** ARIA label for the component (camelCase alternative) */\n ariaLabel?: string;\n /** ARIA labelledby reference */\n 'aria-labelledby'?: string;\n /** Function to get label text for accessibility */\n getLabelText?: (value: number, min: number, max: number) => string;\n\n // Styling\n /** Class name for the container */\n className?: string;\n /** Additional CSS styles */\n style?: ComponentStyle;\n\n // Multi-question alignment\n /** Use CSS grid for label/scale alignment in multi-question surveys (default: false) */\n alignLabels?: boolean;\n}\n\n/** Create a LikertScale component */\nexport const LikertScale: FactoryComponent<LikertScaleAttrs> = () => {\n const state = {\n id: uniqueId(),\n groupId: uniqueId(),\n internalValue: undefined as number | undefined,\n isFocused: false,\n };\n\n const isControlled = (attrs: LikertScaleAttrs) =>\n typeof attrs.value !== 'undefined' && typeof attrs.onchange === 'function';\n\n const getCurrentValue = (attrs: LikertScaleAttrs) => {\n const controlled = isControlled(attrs);\n const isNonInteractive = attrs.readonly || attrs.disabled;\n\n if (controlled) {\n return attrs.value;\n }\n\n // Non-interactive components: prefer defaultValue, fallback to value\n if (isNonInteractive) {\n return attrs.defaultValue ?? attrs.value;\n }\n\n // Interactive uncontrolled: use internal state (user can change it)\n return state.internalValue ?? attrs.defaultValue;\n };\n\n const getLabelText = (\n value: number | undefined,\n min: number,\n max: number,\n getLabelFn?: LikertScaleAttrs['getLabelText']\n ): string => {\n if (getLabelFn && value !== undefined) {\n return getLabelFn(value, min, max);\n }\n if (value === undefined) {\n return `No selection, please choose a value between ${min} and ${max}`;\n }\n return `Selected ${value} out of ${min} to ${max}`;\n };\n\n const getSizeClass = (size: LikertScaleSize = 'medium'): string => {\n switch (size) {\n case 'small':\n return 'likert-scale--small';\n case 'large':\n return 'likert-scale--large';\n default:\n return 'likert-scale--medium';\n }\n };\n\n const getDensityClass = (density: LikertScaleDensity = 'standard'): string => {\n switch (density) {\n case 'compact':\n return 'likert-scale--compact';\n case 'comfortable':\n return 'likert-scale--comfortable';\n default:\n return 'likert-scale--standard';\n }\n };\n\n const getLayoutClass = (layout: LikertScaleLayout = 'responsive'): string => {\n switch (layout) {\n case 'horizontal':\n return 'likert-scale--horizontal';\n case 'vertical':\n return 'likert-scale--vertical';\n default:\n return 'likert-scale--responsive';\n }\n };\n\n const isVerticalLayout = (layout: LikertScaleLayout): boolean => {\n if (layout === 'vertical') return true;\n if (layout === 'horizontal') return false;\n return typeof window !== 'undefined' ? window.innerWidth <= MOBILE_LAYOUT_BREAKPOINT : false;\n };\n\n const getInlineAnchorLabel = (\n value: number,\n min: number,\n max: number,\n middleValue: number | undefined,\n startLabel?: string,\n middleLabel?: string,\n endLabel?: string\n ): string | undefined => {\n if (value === min && startLabel) return startLabel;\n if (middleLabel && middleValue !== undefined && value === middleValue) return middleLabel;\n if (value === max && endLabel) return endLabel;\n return undefined;\n };\n\n const handleChange = (attrs: LikertScaleAttrs, newValue: number) => {\n if (attrs.readonly || attrs.disabled) return;\n\n if (!isControlled(attrs)) {\n state.internalValue = newValue;\n }\n\n attrs.onchange?.(newValue);\n };\n\n const handleKeyDown = (attrs: LikertScaleAttrs, e: KeyboardEvent) => {\n if (attrs.readonly || attrs.disabled) return;\n\n const min = attrs.min || 1;\n const max = attrs.max || 5;\n const step = attrs.step || 1;\n const currentValue = getCurrentValue(attrs);\n let newValue = currentValue;\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n e.preventDefault();\n newValue = currentValue !== undefined ? Math.min(max, currentValue + step) : min;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n e.preventDefault();\n newValue = currentValue !== undefined ? Math.max(min, currentValue - step) : min;\n break;\n case 'Home':\n e.preventDefault();\n newValue = min;\n break;\n case 'End':\n e.preventDefault();\n newValue = max;\n break;\n default:\n return;\n }\n\n if (newValue !== currentValue) {\n handleChange(attrs, newValue);\n }\n };\n\n interface LikertScaleItemAttrs {\n value: number;\n currentValue: number | undefined;\n showNumber?: boolean;\n showTooltip?: boolean;\n tooltipLabel?: string;\n groupId: string;\n name?: string;\n disabled?: boolean;\n readonly?: boolean;\n anchorLabel?: string;\n onchange: (value: number) => void;\n }\n\n const LikertScaleItem: FactoryComponent<LikertScaleItemAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const {\n value,\n currentValue,\n showNumber,\n showTooltip,\n tooltipLabel,\n groupId,\n name,\n disabled,\n readonly,\n anchorLabel,\n onchange,\n } = attrs;\n const radioId = `${groupId}-${value}`;\n const isChecked = currentValue === value;\n\n return m(\n '.likert-scale__item.no-select',\n {\n className: [\n isChecked ? 'likert-scale__item--checked' : '',\n disabled ? 'likert-scale__item--disabled' : '',\n readonly ? 'likert-scale__item--readonly' : '',\n ]\n .filter(Boolean)\n .join(' '),\n },\n [\n // Number label (optional)\n showNumber && m('.likert-scale__number', value),\n\n // Radio button input\n m('input[type=radio].likert-scale__input', {\n id: radioId,\n name: name || groupId,\n value: value,\n checked: isChecked,\n disabled: disabled || readonly,\n onchange: () => onchange(value),\n }),\n\n // Label for radio button\n m('label.likert-scale__label', {\n for: radioId,\n }),\n\n anchorLabel && m('.likert-scale__item-anchor', anchorLabel),\n\n // Tooltip (optional)\n showTooltip && tooltipLabel && m('.likert-scale__tooltip', tooltipLabel),\n ]\n );\n },\n };\n };\n\n return {\n oninit: ({ attrs }) => {\n const controlled = isControlled(attrs);\n const isNonInteractive = attrs.readonly || attrs.disabled;\n\n // Warn developer for improper controlled usage\n if (attrs.value !== undefined && !controlled && !isNonInteractive) {\n console.warn(\n `LikertScale component received 'value' prop without 'onchange' handler. ` +\n `Use 'defaultValue' for uncontrolled components or add 'onchange' for controlled components.`\n );\n }\n\n if (!controlled) {\n state.internalValue = attrs.defaultValue;\n }\n },\n\n view: ({ attrs }) => {\n const {\n min = 1,\n max = 5,\n step = 1,\n size = 'medium',\n density = 'standard',\n layout = 'responsive',\n className = '',\n style = {},\n readonly = false,\n disabled = false,\n id = state.id,\n name,\n label,\n description,\n isMandatory,\n startLabel,\n middleLabel,\n endLabel,\n showNumbers = false,\n showTooltips = false,\n tooltipLabels,\n alignLabels = false,\n ...ariaAttrs\n } = attrs;\n\n const currentValue = getCurrentValue(attrs);\n const itemCount = Math.floor((max - min) / step) + 1;\n const useInlineAnchors = isVerticalLayout(layout);\n const middleValue = middleLabel ? min + Math.floor((itemCount - 1) / 2) * step : undefined;\n\n // Generate scale values\n const scaleValues = Array.from({ length: itemCount }, (_, i) => min + i * step);\n\n return m(\n '.likert-scale',\n {\n className: [\n 'likert-scale',\n getSizeClass(size),\n getDensityClass(density),\n getLayoutClass(layout),\n readonly ? 'likert-scale--readonly' : '',\n disabled ? 'likert-scale--disabled' : '',\n state.isFocused ? 'likert-scale--focused' : '',\n alignLabels ? 'likert-scale--aligned' : '',\n className,\n ]\n .filter(Boolean)\n .join(' '),\n style,\n id,\n role: 'radiogroup',\n 'aria-label': ariaAttrs['aria-label'] || attrs.ariaLabel || label || `Rating scale from ${min} to ${max}`,\n 'aria-labelledby': ariaAttrs['aria-labelledby'],\n 'aria-readonly': readonly,\n 'aria-disabled': disabled,\n onkeydown: (e: KeyboardEvent) => handleKeyDown(attrs, e),\n onfocus: () => {\n state.isFocused = true;\n },\n onblur: () => {\n state.isFocused = false;\n },\n tabindex: readonly || disabled ? -1 : 0,\n },\n [\n // Label section (only text label, not the description)\n label &&\n m('.likert-scale__question-label', [\n m('span', label + (isMandatory ? ' *' : '')),\n description && m('.likert-scale__description', m.trust(description)),\n ]),\n\n // Scale section container\n m('.likert-scale__scale-container', [\n // Scale items with numbers\n m(\n '.likert-scale__scale',\n scaleValues.map((value) =>\n m(LikertScaleItem, {\n key: `likert-item-${value}`,\n value,\n currentValue,\n showNumber: showNumbers,\n showTooltip: showTooltips,\n tooltipLabel: tooltipLabels?.[value - min],\n anchorLabel: useInlineAnchors\n ? getInlineAnchorLabel(value, min, max, middleValue, startLabel, middleLabel, endLabel)\n : undefined,\n groupId: state.groupId,\n name,\n disabled,\n readonly,\n onchange: (v) => handleChange(attrs, v),\n })\n )\n ),\n\n // Scale anchors\n !useInlineAnchors &&\n (startLabel || middleLabel || endLabel) &&\n m('.likert-scale__anchors', [\n startLabel && m('.likert-scale__anchor.likert-scale__anchor--start', startLabel),\n middleLabel && m('.likert-scale__anchor.likert-scale__anchor--middle', middleLabel),\n endLabel && m('.likert-scale__anchor.likert-scale__anchor--end', endLabel),\n ]),\n ]),\n\n // Screen reader text\n m(\n '.likert-scale__sr-only',\n {\n className: 'likert-scale__sr-only',\n 'aria-live': 'polite',\n 'aria-atomic': 'true',\n },\n getLabelText(currentValue, min, max, attrs.getLabelText)\n ),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\nimport { Icon } from './icon';\nimport { WavesEffect } from './waves';\n\n/**\n * Attributes for the ToggleButton component.\n *\n * A toggle button is a button that can be in a checked or unchecked state.\n * It is typically used within a ToggleGroup to create button groups where\n * one or more buttons can be selected.\n */\nexport interface ToggleButtonAttrs extends Attributes {\n /** The value of the button. This is returned when the button is selected. */\n value: string | number;\n /** The label text to display next to the icon. */\n label?: string;\n /** The name of the Material Design icon to display. */\n iconName?: string;\n /** A custom SVG icon vnode to display instead of a Material icon. */\n icon?: Vnode<any, any>;\n /** Additional CSS class for the icon element. */\n iconClass?: string;\n /** Whether the button is in a checked/selected state. */\n checked?: boolean;\n /** Whether the button is disabled and cannot be interacted with. */\n disabled?: boolean;\n /** Optional tooltip text to display on hover. */\n tooltip?: string;\n /** Callback function invoked when the button is clicked. */\n onchange?: () => void;\n}\n\n/**\n * ToggleButton component.\n *\n * A button that can be toggled on/off. Typically used within a ToggleGroup\n * to create grouped button controls where one or more buttons can be selected.\n *\n * @example\n * ```typescript\n * m(ToggleButton, {\n * value: 'bold',\n * iconName: 'format_bold',\n * checked: true,\n * tooltip: 'Bold',\n * onchange: () => console.log('Toggled')\n * })\n * ```\n */\nexport const ToggleButton: FactoryComponent<ToggleButtonAttrs> = () => {\n return {\n view: ({ attrs }) => {\n const { checked, iconName, icon, label, onchange, className, tooltip, ...rest } = attrs;\n const classes = [className, checked ? 'checked' : ''].filter(Boolean).join(' ');\n return m(\n 'button.btn-flat.waves-effect.toggle-button',\n {\n ...rest,\n className: classes,\n title: tooltip,\n onclick: () => {\n if (onchange) {\n onchange();\n }\n },\n onmousedown: WavesEffect.onMouseDown,\n onmouseup: WavesEffect.onMouseUp,\n onmouseleave: WavesEffect.onMouseLeave,\n ontouchstart: WavesEffect.onTouchStart,\n ontouchend: WavesEffect.onTouchEnd,\n },\n [icon, iconName && m(Icon, { iconName, className: attrs.iconClass }), label]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { ToggleButton, ToggleButtonAttrs } from './toggle-button';\n\n/**\n * Attributes for the ToggleGroup component.\n *\n * A toggle group is a container for multiple toggle buttons that manages their\n * selection state. It can operate in single-select or multi-select mode.\n */\nexport interface ToggleGroupAttrs extends Attributes {\n /**\n * The current value(s) of the toggle group (controlled mode).\n * - Single-select: a single value\n * - Multi-select: an array of values\n */\n value?: string | number | Array<string | number>;\n /**\n * The default value(s) for uncontrolled mode.\n * Use this when you want the component to manage its own state.\n */\n defaultValue?: string | number | Array<string | number>;\n /** Whether all buttons in the group are disabled. */\n disabled?: boolean;\n /**\n * Callback invoked when the selection changes.\n * @param value - The new value (single value or array depending on `multiple`)\n */\n onchange?: (value: string | number | Array<string | number>) => void;\n /**\n * Array of button configurations to display in the group.\n * Each item can have its own icon, label, tooltip, and disabled state.\n */\n items: Array<ToggleButtonAttrs>;\n /**\n * Whether to allow multiple buttons to be selected simultaneously.\n * - false (default): only one button can be selected at a time\n * - true: multiple buttons can be selected\n */\n multiple?: boolean;\n}\n\n/**\n * ToggleGroup component.\n *\n * A group of toggle buttons that can operate in single-select or multi-select mode.\n * The component supports both controlled and uncontrolled modes.\n *\n * **Controlled mode**: Manage the state externally using the `value` prop.\n * **Uncontrolled mode**: Let the component manage its own state using `defaultValue`.\n *\n * @example\n * ```typescript\n * // Single-select, controlled mode\n * let selected = 'left';\n * m(ToggleGroup, {\n * value: selected,\n * onchange: (v) => selected = v,\n * items: [\n * { value: 'left', iconName: 'format_align_left', tooltip: 'Align Left' },\n * { value: 'center', iconName: 'format_align_center', tooltip: 'Align Center' },\n * { value: 'right', iconName: 'format_align_right', tooltip: 'Align Right' }\n * ]\n * });\n *\n * // Multi-select, controlled mode\n * let selected = ['bold', 'italic'];\n * m(ToggleGroup, {\n * multiple: true,\n * value: selected,\n * onchange: (v) => selected = v,\n * items: [\n * { value: 'bold', iconName: 'format_bold', tooltip: 'Bold' },\n * { value: 'italic', iconName: 'format_italic', tooltip: 'Italic' },\n * { value: 'underline', iconName: 'format_underlined', tooltip: 'Underline' }\n * ]\n * });\n *\n * // Uncontrolled mode\n * m(ToggleGroup, {\n * defaultValue: 'left',\n * onchange: (v) => console.log('Changed to:', v),\n * items: [...]\n * });\n * ```\n */\nexport const ToggleGroup: FactoryComponent<ToggleGroupAttrs> = () => {\n let internalValue: string | number | Array<string | number> | undefined;\n\n const handleSelect = (\n attrs: ToggleGroupAttrs,\n item: ToggleButtonAttrs,\n currentValue: string | number | Array<string | number> | undefined\n ) => {\n if (attrs.disabled || item.disabled) {\n return;\n }\n const { value, multiple, onchange } = attrs;\n const isControlled = value !== undefined;\n\n if (multiple) {\n const currentValues = (Array.isArray(currentValue) ? currentValue : currentValue !== undefined ? [currentValue] : []) as Array<\n string | number\n >;\n const newValues = currentValues.includes(item.value)\n ? currentValues.filter((v) => v !== item.value)\n : [...currentValues, item.value];\n if (!isControlled) {\n internalValue = newValues;\n }\n if (onchange) {\n onchange(newValues);\n }\n } else {\n const newValue = item.value;\n if (!isControlled) {\n internalValue = newValue;\n }\n if (onchange) {\n onchange(newValue);\n }\n }\n };\n\n return {\n oninit: ({ attrs }) => {\n internalValue = attrs.defaultValue;\n },\n view: ({ attrs }) => {\n const { value, items, multiple } = attrs;\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n return m(\n '.toggle-group',\n items.map((item) =>\n m(ToggleButton, {\n ...item,\n checked: multiple && Array.isArray(currentValue)\n ? currentValue.includes(item.value)\n : currentValue === item.value,\n onchange: () => handleSelect(attrs, item, currentValue),\n })\n )\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\nimport { MaterialColor, ColorIntensity, ComponentStyle } from './types';\n\n/** Progress mode - determinate shows specific progress, indeterminate shows loading animation */\nexport type ProgressMode = 'determinate' | 'indeterminate';\n\n/** Progress size options */\nexport type ProgressSize = 'small' | 'medium' | 'large';\n\n/** CircularProgress component attributes */\nexport interface CircularProgressAttrs extends Attributes {\n /** Progress mode (default: 'indeterminate') */\n mode?: ProgressMode;\n /** Current progress value (0-100) for determinate mode */\n value?: number;\n /** Maximum progress value (default: 100) */\n max?: number;\n /** Size variant (default: 'medium') */\n size?: ProgressSize;\n /** Materialize color (default: 'teal') */\n color?: MaterialColor;\n /** Color intensity modifier */\n colorIntensity?: ColorIntensity;\n /** Label to display inside the circle */\n label?: string | number;\n /** Auto-show percentage inside circle for determinate mode (default: false) */\n showPercentage?: boolean;\n /** Additional CSS class names */\n className?: string;\n /** Additional CSS styles */\n style?: ComponentStyle;\n /** HTML ID for the component */\n id?: string;\n /** ARIA label for accessibility */\n 'aria-label'?: string;\n /** ARIA valuemin (default: 0) */\n 'aria-valuemin'?: number;\n /** ARIA valuemax (default: 100) */\n 'aria-valuemax'?: number;\n /** ARIA valuenow (current value) */\n 'aria-valuenow'?: number;\n /** ARIA valuetext (custom text description) */\n 'aria-valuetext'?: string;\n}\n\n/** Size dimensions in pixels */\nconst SIZE_MAP: Record<ProgressSize, number> = {\n small: 36,\n medium: 50,\n large: 64,\n};\n\n/** Stroke width in pixels */\nconst STROKE_WIDTH = 3;\n\n/** Create a CircularProgress component */\nexport const CircularProgress: FactoryComponent<CircularProgressAttrs> = () => {\n const state = {\n id: uniqueId(),\n };\n\n /**\n * Calculate SVG stroke properties for determinate progress\n */\n const calculateStrokeProperties = (size: number, value: number, max: number) => {\n const radius = (size - STROKE_WIDTH) / 2;\n const circumference = 2 * Math.PI * radius;\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n const strokeDashoffset = circumference - (percentage / 100) * circumference;\n\n return {\n radius,\n circumference,\n strokeDashoffset,\n percentage,\n };\n };\n\n /**\n * Get size class name\n */\n const getSizeClass = (size: ProgressSize = 'medium'): string => {\n return `circular-progress--${size}`;\n };\n\n /**\n * Get color class name\n */\n const getColorClass = (color?: MaterialColor, intensity?: ColorIntensity): string => {\n if (!color) return '';\n return intensity ? `circular-progress--${color} circular-progress--${intensity}` : `circular-progress--${color}`;\n };\n\n return {\n view: ({ attrs }) => {\n const {\n mode = 'indeterminate',\n value = 0,\n max = 100,\n size = 'medium',\n color = 'teal',\n colorIntensity,\n label,\n showPercentage = false,\n className = '',\n style = {},\n id = state.id,\n 'aria-label': ariaLabel,\n 'aria-valuemin': ariaValueMin = 0,\n 'aria-valuemax': ariaValueMax = max,\n 'aria-valuenow': ariaValueNow,\n 'aria-valuetext': ariaValueText,\n ...params\n } = attrs;\n\n const isDeterminate = mode === 'determinate';\n const sizePixels = SIZE_MAP[size];\n const styleValue =\n typeof style === 'string'\n ? `width:${sizePixels}px;height:${sizePixels}px;${style}`\n : {\n width: `${sizePixels}px`,\n height: `${sizePixels}px`,\n ...style,\n };\n const { radius, circumference, strokeDashoffset, percentage } = isDeterminate\n ? calculateStrokeProperties(sizePixels, value, max)\n : { radius: 0, circumference: 0, strokeDashoffset: 0, percentage: 0 };\n\n // Determine label content\n const labelContent =\n label !== undefined ? label : showPercentage && isDeterminate ? `${Math.round(percentage)}%` : '';\n\n // Build class names\n const classNames = [\n 'circular-progress',\n getSizeClass(size),\n getColorClass(color, colorIntensity),\n `circular-progress--${mode}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // ARIA attributes\n const ariaAttrs = isDeterminate\n ? {\n 'aria-valuenow': ariaValueNow !== undefined ? ariaValueNow : value,\n 'aria-valuemin': ariaValueMin,\n 'aria-valuemax': ariaValueMax,\n 'aria-valuetext': ariaValueText || `${Math.round(percentage)}%`,\n }\n : {\n 'aria-valuetext': ariaValueText || label || 'Loading',\n };\n\n return m(\n '.circular-progress',\n {\n ...params,\n className: classNames,\n style: styleValue,\n id,\n role: 'progressbar',\n 'aria-label': ariaLabel || (isDeterminate ? `Progress: ${Math.round(percentage)}%` : 'Loading'),\n ...ariaAttrs,\n },\n [\n // SVG circle\n m(\n 'svg.circular-progress__svg',\n {\n viewBox: `0 0 ${sizePixels} ${sizePixels}`,\n xmlns: 'http://www.w3.org/2000/svg',\n },\n [\n // Background track circle\n m('circle.circular-progress__circle.circular-progress__circle--track', {\n cx: sizePixels / 2,\n cy: sizePixels / 2,\n r: radius || (sizePixels - STROKE_WIDTH) / 2,\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': STROKE_WIDTH,\n }),\n\n // Progress indicator circle\n m('circle.circular-progress__circle.circular-progress__circle--indicator', {\n cx: sizePixels / 2,\n cy: sizePixels / 2,\n r: radius || (sizePixels - STROKE_WIDTH) / 2,\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': STROKE_WIDTH,\n 'stroke-dasharray': isDeterminate ? circumference : undefined,\n 'stroke-dashoffset': isDeterminate ? strokeDashoffset : undefined,\n 'stroke-linecap': 'round',\n }),\n ]\n ),\n\n // Label inside circle\n labelContent &&\n m(\n '.circular-progress__label',\n {\n 'aria-hidden': 'true',\n },\n labelContent\n ),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\nimport { MaterialColor, ColorIntensity, ComponentStyle } from './types';\nimport { ProgressMode, ProgressSize } from './circular-progress';\n\n/** LinearProgress component attributes */\nexport interface LinearProgressAttrs extends Attributes {\n /** Progress mode (default: 'indeterminate') */\n mode?: ProgressMode;\n /** Current progress value (0-100) for determinate mode */\n value?: number;\n /** Maximum progress value (default: 100) */\n max?: number;\n /** Size variant (default: 'medium') */\n size?: ProgressSize;\n /** Materialize color (default: 'teal') */\n color?: MaterialColor;\n /** Color intensity modifier */\n colorIntensity?: ColorIntensity;\n /** Label to display at the end (right side) */\n label?: string | number;\n /** Auto-show percentage at the end for determinate mode (default: false) */\n showPercentage?: boolean;\n /** Additional CSS class names */\n className?: string;\n /** Additional CSS styles */\n style?: ComponentStyle;\n /** HTML ID for the component */\n id?: string;\n /** ARIA label for accessibility */\n 'aria-label'?: string;\n /** ARIA valuemin (default: 0) */\n 'aria-valuemin'?: number;\n /** ARIA valuemax (default: 100) */\n 'aria-valuemax'?: number;\n /** ARIA valuenow (current value) */\n 'aria-valuenow'?: number;\n /** ARIA valuetext (custom text description) */\n 'aria-valuetext'?: string;\n}\n\n/** Create a LinearProgress component */\nexport const LinearProgress: FactoryComponent<LinearProgressAttrs> = () => {\n const state = {\n id: uniqueId(),\n };\n\n /**\n * Get size class name\n */\n const getSizeClass = (size: ProgressSize = 'medium'): string => {\n return `linear-progress__track--${size}`;\n };\n\n /**\n * Get color class name\n */\n const getColorClass = (color?: MaterialColor, intensity?: ColorIntensity): string => {\n if (!color) return '';\n return intensity ? `linear-progress--${color} linear-progress--${intensity}` : `linear-progress--${color}`;\n };\n\n return {\n view: ({ attrs }) => {\n const {\n mode = 'indeterminate',\n value = 0,\n max = 100,\n size = 'medium',\n color = 'teal',\n colorIntensity,\n label,\n showPercentage = false,\n className = '',\n style = {},\n id = state.id,\n 'aria-label': ariaLabel,\n 'aria-valuemin': ariaValueMin = 0,\n 'aria-valuemax': ariaValueMax = max,\n 'aria-valuenow': ariaValueNow,\n 'aria-valuetext': ariaValueText,\n ...params\n } = attrs;\n\n const isDeterminate = mode === 'determinate';\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n\n // Determine label content\n const labelContent =\n label !== undefined ? label : showPercentage && isDeterminate ? `${Math.round(percentage)}%` : '';\n\n // Build class names\n const classNames = ['linear-progress', getColorClass(color, colorIntensity), className].filter(Boolean).join(' ');\n\n // ARIA attributes\n const ariaAttrs = isDeterminate\n ? {\n 'aria-valuenow': ariaValueNow !== undefined ? ariaValueNow : value,\n 'aria-valuemin': ariaValueMin,\n 'aria-valuemax': ariaValueMax,\n 'aria-valuetext': ariaValueText || `${Math.round(percentage)}%`,\n }\n : {\n 'aria-valuetext': ariaValueText || label || 'Loading',\n };\n\n return m(\n '.linear-progress',\n {\n ...params,\n className: classNames,\n style,\n id,\n },\n [\n // Progress track container\n m(\n '.linear-progress__track',\n {\n className: `linear-progress__track ${getSizeClass(size)}`,\n role: 'progressbar',\n 'aria-label': ariaLabel || (isDeterminate ? `Progress: ${Math.round(percentage)}%` : 'Loading'),\n ...ariaAttrs,\n },\n [\n // Progress bar\n m('.linear-progress__bar', {\n className: `linear-progress__bar ${isDeterminate ? '' : 'linear-progress__bar--indeterminate'}`,\n style: isDeterminate ? { width: `${percentage}%` } : undefined,\n }),\n ]\n ),\n\n // Label at the end (right side)\n labelContent &&\n m(\n '.linear-progress__label',\n {\n 'aria-hidden': 'true',\n },\n labelContent\n ),\n ]\n );\n },\n };\n};\n","/**\n * @fileoverview Core TypeScript utility types for mithril-materialized library\n * These types improve type safety and developer experience across all components\n */\n\n// ============================================================================\n// UTILITY TYPES\n// ============================================================================\n\n/**\n * Component size variants used throughout the library\n * @example\n * ```typescript\n * const buttonSize: ComponentSize = 'medium';\n * const iconSize: ComponentSize = 'small';\n * ```\n */\nexport type ComponentSize = 'tiny' | 'small' | 'medium' | 'large';\n\n/**\n * Material Design positioning options\n * @example\n * ```typescript\n * const tooltipPosition: MaterialPosition = 'top';\n * const dropdownPosition: MaterialPosition = 'bottom';\n * ```\n */\nexport type MaterialPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Extended positioning including corners and center\n */\nexport type ExtendedPosition = MaterialPosition | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center';\n\n/**\n * Validation result - either success (true/empty string) or error (false/error message)\n * @example\n * ```typescript\n * const validator = (value: string): ValidationResult => {\n * return value.length >= 3 || 'Must be at least 3 characters';\n * };\n * ```\n */\nexport type ValidationSuccess = true | '';\nexport type ValidationError = false | string;\nexport type ValidationResult = ValidationSuccess | ValidationError;\n\n/**\n * Shared style prop type used by component attrs.\n * Supports CSS text strings and Mithril style objects.\n */\nexport type ComponentStyle = string | Record<string, string | number | undefined>;\n\n/**\n * Generic event handler type with proper typing for value and optional event\n * @template T - The type of the value being handled\n */\nexport interface EventHandler<T = any> {\n (value: T, event?: Event): void;\n}\n\n/**\n * Keyboard event handler with proper typing\n * @template T - The type of the associated value\n */\nexport interface KeyboardEventHandler<T = string> {\n (event: KeyboardEvent, value?: T): void;\n}\n\n/**\n * Valid ID types for components - allows strings and numbers\n */\nexport type ValidId = string | number;\n\n/**\n * Component ID type - string branded for type safety\n */\nexport type ComponentId = string & { readonly __componentId: unique symbol };\n\n/**\n * Conditional type to make ID required or optional\n * @template T - The base type\n * @template Required - Whether ID should be required\n */\nexport type WithId<T, Required extends boolean = false> = Required extends true\n ? T & { id: ComponentId }\n : T & { id?: ComponentId };\n\n/**\n * Validation function interface\n * @template T - The type of value being validated\n */\nexport interface ValidatorFunction<T> {\n /**\n * Validates a value\n * @param value - The value to validate\n * @param element - Optional HTML element for context\n * @returns True/empty string for success, false/error message for failure\n */\n (value: T, element?: HTMLInputElement): ValidationResult;\n}\n\n/**\n * Type guard to check if validation result indicates success\n * @param result - The validation result to check\n * @returns True if validation passed\n */\nexport const isValidationSuccess = (result: ValidationResult): result is ValidationSuccess =>\n result === true || result === '';\n\n/**\n * Type guard to check if validation result indicates an error\n * @param result - The validation result to check\n * @returns True if validation failed\n */\nexport const isValidationError = (result: ValidationResult): result is ValidationError => !isValidationSuccess(result);\n\n// ============================================================================\n// COMPONENT-SPECIFIC TYPES\n// ============================================================================\n\n/**\n * Button type - determines the HTML button behavior\n * @example\n * ```typescript\n * // Standard clickable button (default)\n * variant: 'button'\n *\n * // Form submission button\n * variant: 'submit'\n *\n * // Form reset button\n * variant: 'reset'\n * ```\n */\nexport type ButtonVariant = 'button' | 'submit' | 'reset';\n\n/**\n * Input type union with proper HTML input types\n */\nexport type InputType =\n | 'text'\n | 'email'\n | 'password'\n | 'tel'\n | 'url'\n | 'search'\n | 'number'\n | 'range'\n | 'date'\n | 'datetime-local'\n | 'month'\n | 'time'\n | 'week'\n | 'color'\n | 'file'\n | 'hidden';\n\n/**\n * Input value type based on input type\n * @template T - The input type\n */\nexport type InputValue<T extends InputType> = T extends 'number' | 'range'\n ? number\n : T extends 'date' | 'datetime-local' | 'month' | 'time' | 'week'\n ? Date | string\n : T extends 'file'\n ? FileList | File[]\n : string;\n\n/**\n * Icon class using template literal types for better IntelliSense\n */\nexport type IconClass = ComponentSize | MaterialPosition | `${ComponentSize} ${MaterialPosition}` | string;\n\n/**\n * Modal type discriminated union\n */\nexport type ModalType =\n | { type: 'standard'; fixedFooter?: never; bottomSheet?: never }\n | { type: 'fixed-footer'; fixedFooter: true; bottomSheet?: never }\n | { type: 'bottom-sheet'; bottomSheet: true; fixedFooter?: never };\n\n/**\n * Selection mode for components that support item selection\n */\nexport type SelectionMode = 'none' | 'single' | 'multiple';\n\n/**\n * Sort direction for sortable components\n */\nexport type SortDirection = 'asc' | 'desc';\n\n/**\n * Theme variant for components that support theming\n */\nexport type ThemeVariant = 'light' | 'dark' | 'auto';\n\n/**\n * Color palette based on Material Design\n */\nexport type MaterialColor =\n | 'red'\n | 'pink'\n | 'purple'\n | 'deep-purple'\n | 'indigo'\n | 'blue'\n | 'light-blue'\n | 'cyan'\n | 'teal'\n | 'green'\n | 'light-green'\n | 'lime'\n | 'yellow'\n | 'amber'\n | 'orange'\n | 'deep-orange'\n | 'brown'\n | 'grey'\n | 'blue-grey';\n\n/**\n * Color intensity levels\n */\nexport type ColorIntensity =\n | 'lighten-5'\n | 'lighten-4'\n | 'lighten-3'\n | 'lighten-2'\n | 'lighten-1'\n | 'base'\n | 'darken-1'\n | 'darken-2'\n | 'darken-3'\n | 'darken-4'\n | 'accent-1'\n | 'accent-2'\n | 'accent-3'\n | 'accent-4';\n\n/**\n * Full color specification with intensity\n */\nexport type MaterialColorSpec = MaterialColor | `${MaterialColor} ${ColorIntensity}`;\n\n// ============================================================================\n// ADVANCED UTILITY TYPES\n// ============================================================================\n\n/**\n * Makes specified keys required while keeping others optional\n * @template T - The base type\n * @template K - Keys to make required\n */\nexport type RequiredKeys<T, K extends keyof T> = T & Required<Pick<T, K>>;\n\n/**\n * Makes specified keys optional while keeping others as-is\n * @template T - The base type\n * @template K - Keys to make optional\n */\nexport type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n/**\n * Extracts function parameter types\n * @template T - The function type\n */\nexport type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;\n\n/**\n * Creates a deep readonly version of a type\n * @template T - The type to make readonly\n */\nexport type DeepReadonly<T> = {\n readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];\n};\n\n/**\n * Represents a component that can be focused\n */\nexport interface Focusable {\n focus(): void;\n blur(): void;\n}\n\n/**\n * Represents a component that can be validated\n */\nexport interface Validatable<T = any> {\n validate(): ValidationResult;\n readonly isValid: boolean;\n readonly value: T;\n}\n\n/**\n * Configuration for components with validation\n * @template T - The type of value being validated\n */\nexport interface ValidationConfig<T = any> {\n /** Whether the field is required */\n required?: boolean;\n /** Minimum length for string values */\n minLength?: number;\n /** Maximum length for string values */\n maxLength?: number;\n /** Pattern to match for validation */\n pattern?: RegExp;\n /** Custom validation function */\n validator?: ValidatorFunction<T>;\n /** Whether to show validation messages inline */\n showValidationMessage?: boolean;\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\n// All types are already exported via individual export declarations above\n"],"names":["CollectionMode","defaultI18n"],"mappings":"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","x_google_ignoreList":[0]}