mithril-materialized 1.4.2 → 2.0.0-beta.2

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 (82) hide show
  1. package/README.md +112 -351
  2. package/dist/autocomplete.d.ts +12 -4
  3. package/dist/button.d.ts +10 -10
  4. package/dist/carousel.d.ts +26 -7
  5. package/dist/chip.d.ts +2 -2
  6. package/dist/code-block.d.ts +2 -3
  7. package/dist/collapsible.d.ts +12 -7
  8. package/dist/collection.d.ts +8 -8
  9. package/dist/dropdown.d.ts +5 -5
  10. package/dist/floating-action-button.d.ts +9 -5
  11. package/dist/icon.d.ts +2 -2
  12. package/dist/index.css +7968 -2
  13. package/dist/index.d.ts +1 -2
  14. package/dist/index.esm.js +4211 -2
  15. package/dist/index.js +4265 -2
  16. package/dist/index.umd.js +4269 -2
  17. package/dist/input-options.d.ts +3 -1
  18. package/dist/input.d.ts +17 -12
  19. package/dist/label.d.ts +4 -5
  20. package/dist/material-box.d.ts +22 -4
  21. package/dist/material-icon.d.ts +14 -0
  22. package/dist/modal.d.ts +23 -7
  23. package/dist/option.d.ts +12 -11
  24. package/dist/pagination.d.ts +5 -9
  25. package/dist/parallax.d.ts +8 -6
  26. package/dist/pickers.d.ts +129 -5
  27. package/dist/radio.d.ts +10 -6
  28. package/dist/search-select.d.ts +2 -2
  29. package/dist/select.d.ts +5 -5
  30. package/dist/switch.d.ts +4 -5
  31. package/dist/tabs.d.ts +18 -5
  32. package/dist/utils.d.ts +17 -0
  33. package/package.json +35 -10
  34. package/sass/components/_badges.scss +59 -0
  35. package/sass/components/_buttons.scss +327 -0
  36. package/sass/components/_cards.scss +197 -0
  37. package/sass/components/_carousel.scss +92 -0
  38. package/sass/components/_chips.scss +92 -0
  39. package/sass/components/_collapsible.scss +94 -0
  40. package/sass/components/_color-classes.scss +34 -0
  41. package/sass/components/_color-variables.scss +371 -0
  42. package/sass/components/_datepicker.scss +251 -0
  43. package/sass/components/_dropdown.scss +90 -0
  44. package/sass/components/_global.scss +775 -0
  45. package/sass/components/_grid.scss +160 -0
  46. package/sass/components/_icons-material-design.scss +5 -0
  47. package/sass/components/_materialbox.scss +43 -0
  48. package/sass/components/_modal.scss +97 -0
  49. package/sass/components/_navbar.scss +211 -0
  50. package/sass/components/_normalize.scss +447 -0
  51. package/sass/components/_preloader.scss +336 -0
  52. package/sass/components/_pulse.scss +34 -0
  53. package/sass/components/_sidenav.scss +213 -0
  54. package/sass/components/_slider.scss +94 -0
  55. package/sass/components/_table_of_contents.scss +36 -0
  56. package/sass/components/_tabs.scss +102 -0
  57. package/sass/components/_tapTarget.scss +105 -0
  58. package/sass/components/_timepicker.scss +170 -0
  59. package/sass/components/_toast.scss +61 -0
  60. package/sass/components/_tooltip.scss +32 -0
  61. package/sass/components/_transitions.scss +13 -0
  62. package/sass/components/_typography.scss +61 -0
  63. package/sass/components/_variables.scss +352 -0
  64. package/sass/components/_waves.scss +114 -0
  65. package/sass/components/forms/_checkboxes.scss +203 -0
  66. package/sass/components/forms/_file-input.scss +50 -0
  67. package/sass/components/forms/_form-groups.scss +28 -0
  68. package/sass/components/forms/_forms.scss +24 -0
  69. package/sass/components/forms/_input-fields.scss +361 -0
  70. package/sass/components/forms/_radio-buttons.scss +118 -0
  71. package/sass/components/forms/_range.scss +164 -0
  72. package/sass/components/forms/_select.scss +193 -0
  73. package/sass/components/forms/_switches.scss +92 -0
  74. package/sass/materialize.scss +41 -0
  75. package/dist/index.css.map +0 -1
  76. package/dist/index.esm.js.map +0 -1
  77. package/dist/index.js.map +0 -1
  78. package/dist/index.modern.js +0 -2
  79. package/dist/index.modern.js.map +0 -1
  80. package/dist/index.umd.js.map +0 -1
  81. package/dist/map-editor.d.ts +0 -63
  82. package/dist/timeline.d.ts +0 -24
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/utils.ts","../src/collection.ts","../src/label.ts","../src/autocomplete.ts","../src/icon.ts","../src/button.ts","../src/carousel.ts","../src/code-block.ts","../src/collapsible.ts","../src/floating-action-button.ts","../src/input.ts","../src/option.ts","../src/pagination.ts","../src/pickers.ts","../src/radio.ts","../src/switch.ts","../src/timeline.ts","../src/chip.ts","../src/dropdown.ts","../src/map-editor.ts","../src/material-box.ts","../src/modal.ts","../src/parallax.ts","../src/search-select.ts","../src/select.ts","../src/tabs.ts"],"sourcesContent":["/**\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 * 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","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 ICollectionItem {\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 */\n content?: string;\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: ICollectionItem) => void;\n /** Any other virtual element properties, including attributes and event handlers. */\n [property: string]: any;\n}\n\nexport interface ICollection extends Attributes {\n /** Optional header */\n header?: string;\n /** The list of items */\n items: ICollectionItem[];\n /** Mode of operation */\n mode?: CollectionMode;\n}\n\nconst isNonLocalRoute = (url?: string) => url && /https?:\\/\\//.test(url);\n\nexport const SecondaryContent: FactoryComponent<ICollectionItem> = () => {\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: ICollectionItem; 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 m('p', m.trust(content)),\n m(SecondaryContent, item),\n ]\n )\n : m(\n 'li.collection-item',\n {\n className: active ? 'active' : '',\n },\n iconName ? m('div', [title, m(SecondaryContent, item)]) : title\n );\n },\n };\n};\n\nconst BasicCollection: FactoryComponent<ICollection> = () => {\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: ICollectionItem }> = () => {\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<ICollection> = () => {\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<ICollection> = () => {\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, Component, Attributes } from 'mithril';\nimport './styles/input.css';\n\nexport const Mandatory: Component = { view: ({ attrs }) => m('span.mandatory', attrs, '*') };\n\nexport interface IMaterialLabel 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}\n\n/** Simple label element, used for most components. */\nexport const Label: FactoryComponent<IMaterialLabel> = () => {\n return {\n view: ({ attrs: { label, id, isMandatory, isActive, className, ...params } }) =>\n label\n ? m(\n 'label',\n {\n ...params,\n className: [className, isActive ? 'active' : ''].filter(Boolean).join(' ').trim(),\n for: id,\n },\n [m.trust(label), isMandatory ? m(Mandatory) : undefined]\n )\n : undefined,\n };\n};\n\nexport interface IHelperTextOptions 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<IHelperTextOptions> = () => {\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 helperText ? m.trust(helperText) : ''\n )\n : undefined;\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { uniqueId } from './utils';\nimport { IInputOptions } from './input-options';\nimport { Label, HelperText } from './label';\n\nexport interface IAutoCompleteOptions extends Partial<M.AutocompleteOptions>, IInputOptions<string> {}\n\n/** Component to auto complete your text input */\nexport const Autocomplete: FactoryComponent<IAutoCompleteOptions> = () => {\n const state = { id: uniqueId() };\n return {\n view: ({ attrs }) => {\n const id = attrs.id || state.id;\n // const attributes = toAttrs(attrs);\n const {\n label,\n helperText,\n initialValue,\n onchange,\n newRow,\n className = 'col s12',\n style,\n iconName,\n isMandatory,\n ...params\n } = attrs;\n const cn = newRow ? className + ' clear' : className;\n return m(`.input-field${newRow ? '.clear' : ''}`, { className: cn, style }, [\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 oncreate: ({ dom }) => {\n M.Autocomplete.init(dom, attrs);\n },\n onchange: onchange\n ? (e: Event) => {\n if (e.target && (e.target as HTMLInputElement).value) {\n onchange((e.target as HTMLInputElement).value);\n }\n }\n : undefined,\n value: initialValue,\n }),\n m(Label, { label, id, isMandatory, isActive: initialValue }),\n m(HelperText, { helperText }),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface IMaterialIcon 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<IMaterialIcon> = () => ({\n view: ({ attrs: { iconName, ...passThrough } }) => m('i.material-icons', passThrough, iconName),\n});\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { Icon } from './icon';\n\nexport interface IHtmlAttributes {\n id?: string;\n for?: string;\n placeholder?: string;\n autofocus?: boolean;\n disabled?: boolean;\n type?: 'submit' | 'button' | 'text' | 'textarea' | 'number';\n}\n\nexport interface IMaterialButton extends Attributes {\n /** Optional (e.g. in case you only want to use an icon) button label */\n label?: string;\n /** Optional icon material-icons name, @see https://materializecss.com/icons.html */\n iconName?: string;\n /** Optional icon class, e.g. tiny (1em), small (2em), medium (4em), large (6em), or 'tiny right' */\n iconClass?: string;\n /**\n * If the button is intended to open a modal, specify its modal id so we can trigger it,\n * @see https://materializecss.com/modals.html\n */\n modalId?: string;\n /** Some additional HTML attributes that can be attached to the button */\n attr?: IHtmlAttributes;\n /** Optional text-based tooltip, @see https://materializecss.com/tooltips.html */\n tooltip?: string;\n /** Optional location for the tooltip */\n tooltipPostion?: 'top' | 'bottom' | 'left' | 'right';\n}\n\n/**\n * A factory to create new buttons.\n *\n * @example FlatButton = ButtonFactory('a.waves-effect.waves-teal.btn-flat');\n */\nexport const ButtonFactory = (\n element: string,\n defaultClassNames: string,\n type: string = ''\n): FactoryComponent<IMaterialButton> => {\n return () => {\n return {\n view: ({ attrs }) => {\n const { modalId, tooltip, tooltipPostion, iconName, iconClass, label, className, attr, ...params } = attrs;\n const cn = [modalId ? 'modal-trigger' : '', tooltip ? 'tooltipped' : '', defaultClassNames, className]\n .filter(Boolean)\n .join(' ')\n .trim();\n return m(\n element,\n {\n ...params,\n ...attr,\n className: cn,\n href: modalId ? `#${modalId}` : undefined,\n 'data-position': tooltip ? tooltipPostion || 'top' : undefined,\n 'data-tooltip': tooltip || undefined,\n type,\n },\n // `${dca}${modalId ? `.modal-trigger[href=#${modalId}]` : ''}${\n // tooltip ? `.tooltipped[data-position=${tooltipPostion || 'top'}][data-tooltip=${tooltip}]` : ''\n // }${toAttributeString(attr)}`, {}\n iconName ? m(Icon, { iconName, className: iconClass || 'left' }) : undefined,\n label ? label : undefined\n );\n },\n };\n };\n};\n\nexport const Button = ButtonFactory('a', 'waves-effect waves-light btn', 'button');\nexport const LargeButton = ButtonFactory('a', 'waves-effect waves-light btn-large', 'button');\nexport const SmallButton = ButtonFactory('a', 'waves-effect waves-light btn-small', 'button');\nexport const FlatButton = ButtonFactory('a', 'waves-effect waves-teal btn-flat', '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');\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface ICarouselItem 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 ICarousel extends Partial<M.CarouselOptions>, Attributes {\n /** The list of images */\n items: ICarouselItem[];\n}\n\nexport const CarouselItem: FactoryComponent<ICarouselItem> = () => {\n return {\n view: ({ attrs: { href, src, alt, ...params } }) => {\n return m('a.carousel-item', { ...params, href }, m('img', { src, alt }));\n },\n };\n};\n\n/**\n * Creates a collabsible or accordion (via the accordion option, default true) component.\n * @see https://materializecss.com/carousel.html\n */\nexport const Carousel: FactoryComponent<ICarousel> = () => {\n return {\n view: ({ attrs }) => {\n const { items } = attrs;\n return items && items.length > 0\n ? m(\n '.carousel',\n {\n oncreate: ({ dom }) => {\n M.Carousel.init(dom, attrs);\n },\n },\n items.map((item) => m(CarouselItem, item))\n )\n : undefined;\n },\n };\n};\n","import './styles/codeblock.css';\nimport m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface ICodeBlock 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<ICodeBlock> = () => ({\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();\n return m(`pre.codeblock${newRow ? '.clear' : ''}`, attrs, [\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 ICollapsibleItem 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 ICollapsible extends Partial<M.CollapsibleOptions>, Attributes {\n /** The list of accordeon/collabsible items */\n items: ICollapsibleItem[];\n}\n\nexport const CollapsibleItem: FactoryComponent<ICollapsibleItem> = () => {\n return {\n view: ({ attrs: { header, body, active, iconName } }) => {\n return m(active ? 'li.active' : 'li', [\n header || iconName\n ? m('.collapsible-header', [\n iconName ? m('i.material-icons', iconName) : undefined,\n header ? (typeof header === 'string' ? m('span', header) : header) : undefined,\n ])\n : undefined,\n body ? m('.collapsible-body', typeof body === 'string' ? body : body) : undefined,\n ]);\n },\n };\n};\n\n/**\n * Creates a collabsible or accordion (via the accordion option, default true) component.\n * @see https://materializecss.com/collapsible.html\n */\nexport const Collapsible: FactoryComponent<ICollapsible> = () => {\n return {\n oncreate: ({ dom, attrs }) => {\n M.Collapsible.init(dom, attrs);\n },\n view: ({ attrs }) => {\n const { items, class: c, className, style, id } = attrs;\n return items && items.length > 0\n ? m(\n 'ul.collapsible',\n {\n class: c || className,\n style,\n id,\n },\n items.map((item) => m(CollapsibleItem, item))\n )\n : undefined;\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\n\nexport interface IFloatingActionButton extends Partial<M.FloatingActionButtonOptions> {\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?: string;\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}\n\n/**\n * A Floating Action Button.\n *\n * @example FlatButton = ButtonFactory('a.waves-effect.waves-teal.btn-flat');\n */\nexport const FloatingActionButton: FactoryComponent<IFloatingActionButton> = () => {\n return {\n view: ({\n attrs: {\n className,\n iconName,\n iconClass = 'large',\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 ...options\n },\n }) => {\n const fab = m(\n '.fixed-action-btn',\n {\n style,\n oncreate: ({ dom }) => M.FloatingActionButton.init(dom, options),\n },\n [\n m('a.btn-floating.btn-large', { className }, m('i.material-icons', { classNames: iconClass }, iconName)),\n buttons\n ? m(\n 'ul',\n buttons.map(b =>\n m(\n 'li',\n m(\n 'a.btn-floating',\n { className: b.className, onclick: (e: UIEvent) => b.onClick && b.onClick(e) },\n m('i.material-icons', { className: b.iconClass }, b.iconName)\n )\n )\n )\n )\n : undefined,\n ]\n );\n return position === 'inline-right' || position === 'inline-left'\n ? m('div', { style: 'position: relative; height: 70px;' }, fab)\n : fab;\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\nimport { IInputOptions } from './input-options';\nimport { Label, HelperText } from './label';\nimport './styles/input.css';\n\n/** Create a TextArea */\nexport const TextArea: FactoryComponent<IInputOptions<string>> = () => {\n const state = { id: uniqueId() };\n return {\n view: ({ attrs }) => {\n const {\n className = 'col s12',\n helperText,\n iconName,\n id = state.id,\n initialValue,\n isMandatory,\n label,\n onchange,\n onkeydown,\n onkeypress,\n onkeyup,\n onblur,\n style,\n ...params\n } = attrs;\n // const attributes = toAttrs(params);\n return 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 oncreate: ({ dom }) => {\n M.textareaAutoResize(dom);\n if (attrs.maxLength) {\n M.CharacterCounter.init(dom);\n }\n },\n onchange: onchange\n ? (e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target && typeof target.value === 'string' ? target.value : '';\n onchange(value);\n }\n : undefined,\n value: initialValue,\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 onblur,\n }),\n m(Label, { label, id, isMandatory, isActive: initialValue || attrs.placeholder }),\n m(HelperText, { helperText }),\n ]);\n },\n };\n};\n\nexport type InputType = 'url' | 'color' | 'text' | 'number' | 'email' | 'range' | 'password';\n\n/** Default component for all kinds of input fields. */\nconst InputField =\n <T>(type: InputType, defaultClass = ''): FactoryComponent<IInputOptions<T>> =>\n () => {\n const state = { id: uniqueId() };\n const getValue = (target: HTMLInputElement) => {\n const val = target.value as any as T;\n return (val ? (type === 'number' || type === 'range' ? +val : val) : val) as T;\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 const focus = ({ autofocus }: IInputOptions<T>) =>\n autofocus ? (typeof autofocus === 'boolean' ? autofocus : autofocus()) : false;\n\n return {\n view: ({ attrs }) => {\n const {\n className = 'col s12',\n dataError,\n dataSuccess,\n helperText,\n iconName,\n id = state.id,\n initialValue,\n isMandatory,\n label,\n maxLength,\n newRow,\n onchange,\n onkeydown,\n onkeypress,\n onkeyup,\n onblur,\n style,\n validate,\n ...params\n } = attrs;\n // const attributes = toAttrs(params);\n const cn = [newRow ? 'clear' : '', defaultClass, className].filter(Boolean).join(' ').trim();\n return m('.input-field', { className: cn, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : undefined,\n m('input.validate', {\n ...params,\n type,\n tabindex: 0,\n id,\n // attributes,\n oncreate: ({ dom }) => {\n if (focus(attrs)) {\n (dom as HTMLElement).focus();\n }\n if (maxLength) {\n M.CharacterCounter.init(dom);\n }\n if (type === 'range') {\n M.Range.init(dom);\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 onblur,\n onupdate: validate\n ? ({ dom }) => {\n const target = dom as HTMLInputElement;\n setValidity(target, validate(getValue(target), target));\n }\n : undefined,\n onchange: (e: UIEvent) => {\n const target = e.target as HTMLInputElement;\n if (target) {\n const value = getValue(target);\n if (onchange) {\n onchange(value);\n }\n if (validate) {\n setValidity(target, validate(value, target));\n }\n }\n },\n value: initialValue,\n }),\n m(Label, {\n label,\n id,\n isMandatory,\n isActive:\n typeof initialValue !== 'undefined' ||\n attrs.placeholder ||\n type === 'number' ||\n type === 'color' ||\n type === 'range'\n ? true\n : false,\n }),\n m(HelperText, { helperText, dataError, dataSuccess }),\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 IFileInputOptions extends Attributes {\n /** Displayed on the button, @default File */\n label?: string;\n /** Current value of the file input, write only */\n initialValue?: 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<IFileInputOptions> = () => {\n let canClear = false;\n let i: HTMLInputElement;\n return {\n view: ({ attrs }) => {\n const {\n multiple,\n disabled,\n initialValue,\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 (initialValue) i.value = initialValue;\n },\n })\n ),\n (canClear || initialValue) &&\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('i.material-icons', 'clear')\n ),\n ]\n );\n },\n };\n};\n","import m, { Vnode, FactoryComponent, Attributes, Component } from 'mithril';\nimport { Label, HelperText } from './label';\n\nexport interface IInputCheckbox 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}\n\n/** Component to show a check box */\nexport const InputCheckbox: FactoryComponent<IInputCheckbox> = () => {\n return {\n view: ({ attrs: { className = 'col s12', onchange, label, checked, disabled, description, style } }) => {\n return m(\n `div`,\n { className, style },\n m('label', [\n m('input[type=checkbox][tabindex=0]', {\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 IInputOption<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 IOptions<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: IInputOption<T>[];\n /** Event handler that is called when an option is changed */\n onchange?: (checkedId: T[]) => void;\n /**\n * Selected id or ids (in case of multiple options)\n * @deprecated Please use initialValue instead\n */\n checkedId?: T | T[];\n /** Selected id or ids (in case of multiple options) */\n initialValue?: 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}\n\n/** A list of checkboxes */\nexport const Options = <T extends string | number>(): Component<IOptions<T>> => {\n const state = {} as {\n checkedId?: T | T[];\n checkedIds: T[];\n };\n\n const isChecked = (id: T) => state.checkedIds.indexOf(id) >= 0;\n\n return {\n oninit: ({ attrs: { initialValue, checkedId } }) => {\n const iv = checkedId || initialValue;\n state.checkedId = checkedId;\n state.checkedIds = iv ? (iv instanceof Array ? [...iv] : [iv]) : [];\n },\n view: ({\n attrs: {\n label,\n id,\n options,\n checkedId,\n description,\n className = 'col s12',\n style,\n disabled,\n checkboxClass,\n newRow,\n isMandatory,\n onchange: callback,\n },\n }) => {\n if (checkedId && state.checkedId !== checkedId) {\n state.checkedId = checkedId;\n state.checkedIds = checkedId instanceof Array ? checkedId : [checkedId];\n }\n const onchange = callback\n ? (propId: T, checked: boolean) => {\n const checkedIds = state.checkedIds.filter((i) => i !== propId);\n if (checked) {\n checkedIds.push(propId);\n }\n state.checkedIds = checkedIds;\n callback(checkedIds);\n }\n : undefined;\n const cn = [newRow ? 'clear' : '', className].filter(Boolean).join(' ').trim();\n return m('div', { className: cn, style }, [\n m('div', { className: 'input-field options' }, m(Label, { id, label, isMandatory })),\n m(HelperText, { helperText: description }),\n ...options.map((option) =>\n m(InputCheckbox, {\n disabled: disabled || option.disabled,\n label: option.label,\n onchange: onchange ? (v: boolean) => onchange(option.id, v) : undefined,\n className: option.className || checkboxClass,\n checked: isChecked(option.id),\n description: option.description,\n })\n ),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\n\nexport interface IInternalPaginationOption extends IPaginationOption {\n active?: boolean;\n title: number | Vnode<any, any>;\n}\n\nexport interface IPaginationOption extends Attributes {\n href: string;\n disabled?: boolean;\n}\n\nconst PaginationItem: FactoryComponent<IInternalPaginationOption> = () => ({\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 IPaginationOptions 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: IPaginationOption[];\n}\n\nexport const Pagination: FactoryComponent<IPaginationOptions> = () => {\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 | IPaginationOption\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 } from 'mithril';\nimport { IInputOptions } from './input-options';\nimport { uniqueId } from './utils';\nimport { Label, HelperText } from './label';\n\n/** Component to pick a date */\nexport const DatePicker: FactoryComponent<IInputOptions<Date> & Partial<M.DatepickerOptions>> = () => {\n const state = { id: uniqueId() } as { id: string; dp: M.Datepicker };\n return {\n view: ({\n attrs: {\n label,\n helperText,\n initialValue,\n newRow,\n className = 'col s12',\n iconName,\n isMandatory,\n onchange,\n disabled,\n ...props\n },\n }) => {\n const id = state.id;\n // const attributes = toAttrs(props);\n const onClose = onchange ? () => state.dp && onchange(state.dp.date) : undefined;\n const cn = [newRow ? 'clear' : '', className].filter(Boolean).join(' ').trim();\n return m(\n '.input-field',\n {\n className: cn,\n onremove: () => {\n return state.dp && state.dp.destroy();\n },\n },\n [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m('input', {\n ...props,\n type: 'text',\n tabindex: 0,\n className: 'datepicker',\n id,\n // attributes,\n disabled,\n oncreate: ({ dom }) => {\n state.dp = M.Datepicker.init(dom, {\n format: 'yyyy/mm/dd',\n showClearBtn: true,\n setDefaultDate: true,\n defaultDate: initialValue ? new Date(initialValue) : new Date(),\n // onSelect: onchange,\n ...props,\n onClose,\n } as Partial<M.DatepickerOptions>);\n },\n }),\n m(Label, { label, id, isMandatory, isActive: !!initialValue }),\n m(HelperText, { helperText }),\n ]\n );\n },\n };\n};\n\n/** Component to pick a time */\nexport const TimePicker: FactoryComponent<IInputOptions & Partial<M.TimepickerOptions>> = () => {\n const state = { id: uniqueId() } as { id: string; tp: M.Timepicker };\n return {\n view: ({\n attrs: {\n label,\n helperText,\n initialValue,\n newRow,\n className = 'col s12',\n iconName,\n isMandatory,\n onchange,\n disabled,\n ...props\n },\n }) => {\n const id = state.id;\n // const attributes = toAttrs(props);\n const now = new Date();\n const onCloseEnd = onchange\n ? () => state.tp && onchange(state.tp.time || initialValue || `${now.getHours()}:${now.getMinutes()}`)\n : undefined;\n const cn = ['input-field', 'timepicker', newRow ? 'clear' : '', className].filter(Boolean).join(' ').trim();\n return m(\n 'div',\n {\n className: cn,\n onremove: () => state.tp && state.tp.destroy(),\n },\n [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m('input', {\n ...props,\n type: 'text',\n tabindex: 0,\n id,\n disabled,\n value: initialValue,\n oncreate: ({ dom }) => {\n state.tp = M.Timepicker.init(dom, {\n twelveHour: false,\n showClearBtn: true,\n defaultTime: initialValue,\n // onSelect: onchange ? (hours: number, minutes: number) => onchange(`${hours}:${minutes}`) : undefined,\n ...props,\n onCloseEnd,\n } as Partial<M.TimepickerOptions>);\n },\n }),\n m(Label, { label, id, isMandatory, isActive: initialValue }),\n m(HelperText, { helperText }),\n ]\n );\n },\n };\n};\n","import m, { Attributes, Component } from 'mithril';\nimport { uniqueId } from './utils';\nimport { IInputOption } from './option';\nimport { Label } from './label';\n\nexport interface IRadioButtons<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: IInputOption<T>[];\n /** Event handler that is called when an option is changed */\n onchange: (id: T) => void;\n /** Selected id (in oninit lifecycle) */\n initialValue?: T;\n /** Selected id (in oninit and onupdate lifecycle) */\n checkedId?: 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}\n\nexport interface IRadioButton<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}\n\nexport const RadioButton = <T extends string | number>(): Component<IRadioButton<T>> => ({\n view: ({ attrs: { id, groupId, label, onchange, className = 'col s12', checked, disabled } }) => {\n return m(\n 'div',\n { className },\n m('label', [\n m('input[type=radio][tabindex=0]', {\n name: groupId,\n disabled,\n checked,\n onclick: onchange ? () => onchange(id) : undefined,\n }),\n m('span', m.trust(label)),\n ])\n );\n },\n});\n\n/** Component to show a list of radio buttons, from which you can choose one. */\n// export const RadioButtons: FactoryComponent<IRadioButtons<T>> = () => {\nexport const RadioButtons = <T extends string | number>(): Component<IRadioButtons<T>> => {\n const state = { groupId: uniqueId() } as {\n groupId: string;\n oldCheckedId?: T;\n checkedId?: T;\n onchange: (id: T) => void;\n };\n return {\n oninit: ({ attrs: { checkedId, initialValue } }) => {\n state.oldCheckedId = checkedId;\n state.checkedId = checkedId || initialValue;\n },\n view: ({\n attrs: {\n id,\n checkedId: cid,\n newRow,\n className = 'col s12',\n label = '',\n disabled,\n description,\n options,\n isMandatory,\n checkboxClass,\n onchange: callback,\n },\n }) => {\n if (state.oldCheckedId !== cid) {\n state.oldCheckedId = state.checkedId = cid;\n }\n const { groupId, checkedId } = state;\n const onchange = (propId: T) => {\n state.checkedId = propId;\n if (callback) {\n callback(propId);\n }\n };\n\n if (newRow) className += ' clear';\n return m('div', { id, className }, [\n m('div', { className: 'input-field options' }, m(Label, { id, label, isMandatory })),\n description ? m('p.helper-text', m.trust(description)) : '',\n ...options.map((r) =>\n m(RadioButton, {\n ...r,\n onchange,\n groupId,\n disabled,\n className: checkboxClass,\n checked: r.id === checkedId,\n } as IRadioButton<T>)\n ),\n ]);\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { uniqueId } from './utils';\nimport { IInputOptions } from './input-options';\nimport { Label } from './label';\nimport './styles/switch.css';\n\nexport interface ISwitchOptions extends Partial<IInputOptions<boolean>> {\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<ISwitchOptions> = () => {\n const state = { id: uniqueId() };\n return {\n view: ({ attrs }) => {\n const id = attrs.id || state.id;\n const {\n label,\n left,\n right,\n disabled,\n newRow,\n onchange,\n checked,\n isMandatory,\n className = 'col s12',\n ...params\n } = attrs;\n const cn = ['input-field', newRow ? 'clear' : '', className].filter(Boolean).join(' ').trim();\n return m('div', { className: cn }, [\n label ? m(Label, { label: label || '', id, isMandatory, className: 'active' }) : undefined,\n m(\n '.switch',\n params,\n m('label', [\n left || 'Off',\n m('input[type=checkbox]', {\n id,\n disabled,\n checked,\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 m('span.lever'),\n right || 'On',\n ])\n ),\n ]);\n },\n };\n};\n","import m, { Vnode, FactoryComponent, Attributes } from 'mithril';\nimport './styles/timeline.css';\nimport { padLeft } from './utils';\n\nexport interface ITimelineItem {\n id?: string;\n title?: Vnode<any, any> | string;\n datetime: Date;\n iconName?: string;\n active?: boolean;\n content?: Vnode<any, any> | string;\n}\n\ninterface IInternalTimelineItem extends ITimelineItem {\n /** Formatter for the dates, normally specified by Timeline component */\n dateFormatter: (d: Date) => string;\n /** Formatter for the time, normally specified by Timeline component */\n timeFormatter: (d: Date) => string;\n /** When an item is selected, call this function */\n onSelect?: (ti: ITimelineItem) => void;\n}\n\nexport interface ITimeline extends Attributes {\n items: ITimelineItem[];\n /** When an item is selected, call this function */\n onSelect?: (ti: ITimelineItem) => void;\n /** Formatter for the dates, @default date/month/year in UTC */\n dateFormatter?: (d: Date) => string;\n /** Formatter for the time @default HH:mm in UTC */\n timeFormatter?: (d: Date) => string;\n}\n\nconst TimelineItem: FactoryComponent<IInternalTimelineItem> = () => {\n return {\n view: ({ attrs: { id, title, datetime, active, content, iconName, dateFormatter, timeFormatter, onSelect } }) => {\n const onclick = onSelect ? () => onSelect({ id, title, datetime, active, content }) : undefined;\n const style = onSelect ? 'cursor: pointer;' : undefined;\n return m('li', { id, className: active ? 'active' : undefined, onclick, style }, [\n m('.mm_time', { datetime }, [m('span', dateFormatter(datetime)), m('span', timeFormatter(datetime))]),\n iconName ? m('.mm_icon', m('i.material-icons', iconName)) : undefined,\n m('.mm_label', [\n title ? (typeof title === 'string' ? m('h5', title) : title) : undefined,\n content ? (typeof content === 'string' ? m('p', content) : content) : undefined,\n ]),\n ]);\n },\n };\n};\n\n/**\n * A timeline component to generate a simple vertical timeline based on Codrops' Vertical Timeline.\n * @see https://tympanus.net/codrops/2013/05/02/vertical-timeline/\n */\nexport const Timeline: FactoryComponent<ITimeline> = () => {\n const df = (d: Date) => `${d.getUTCDate()}/${d.getUTCMonth() + 1}/${d.getUTCFullYear()}`;\n const tf = (d: Date) => `${padLeft(d.getUTCHours())}:${padLeft(d.getUTCMinutes())}`;\n return {\n view: ({ attrs: { items, onSelect, timeFormatter = tf, dateFormatter = df } }) => {\n return m(\n 'ul.mm_timeline',\n items.map((item) => m(TimelineItem, { onSelect, dateFormatter, timeFormatter, ...item }))\n );\n },\n };\n};\n","import m from 'mithril';\nimport { uniqueId } from './utils';\nimport { HelperText, Label } from './label';\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 IChipsOptions {\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<IChipsOptions> = () => {\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<IChipsOptions, 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 m.redraw();\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 m.redraw();\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' : '',\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(\n 'i.material-icons.close',\n {\n onclick: (e: MouseEvent) => {\n e.stopPropagation();\n deleteChip(index);\n },\n },\n 'close'\n ),\n ]\n )\n ),\n\n // Input\n m('input.chips-input.input', {\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 m.redraw();\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: '#fff',\n boxShadow:\n '0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 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 ? '#eee' : 'transparent',\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","import m, { Component, Attributes } from 'mithril';\nimport { HelperText } from './label';\nimport { uniqueId } from './utils';\n\nexport interface IDropdownOption<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 IDropdownOptions<T extends string | number> extends Partial<M.DropdownOptions>, 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: IDropdownOption<T>[];\n /**\n * Selected value or name\n * @deprecated Use initialValue instead\n */\n checkedId?: T;\n /** Selected value or name */\n initialValue?: T;\n /** When a value or name is selected */\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}\n\n/** Dropdown component */\nexport const Dropdown = <T extends string | number>(): Component<IDropdownOptions<T>> => {\n // export const Dropdown: FactoryComponent<IDropdownOptions> = () => {\n const state = {} as {\n initialValue?: T;\n id: T;\n };\n return {\n oninit: ({ attrs: { id = uniqueId(), initialValue, checkedId } }) => {\n state.id = id as T;\n state.initialValue = initialValue || checkedId;\n },\n view: ({\n attrs: {\n key,\n label,\n onchange,\n disabled = false,\n items,\n iconName,\n helperText,\n style,\n className = 'col s12',\n ...props\n },\n }) => {\n const { id, initialValue } = state;\n const selectedItem = initialValue\n ? items.filter((i: IDropdownOption<T>) => (i.id ? i.id === initialValue : i.label === initialValue)).shift()\n : undefined;\n const title = selectedItem ? selectedItem.label : label || 'Select';\n return m('.input-field', { className, key, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : undefined,\n m(HelperText, { helperText }),\n m(\n 'a.dropdown-trigger.btn.truncate[href=#]',\n {\n 'data-target': id,\n disabled,\n className: 'col s12',\n style: style || (iconName ? 'margin: 0.2em 0 0 3em;' : undefined),\n oncreate: ({ dom }) => {\n M.Dropdown.init(dom, props);\n },\n },\n title\n ),\n m(\n 'ul.dropdown-content',\n { id },\n items.map((i) =>\n m(\n 'li[tabindex=-1]',\n {\n className: i.divider ? 'divider' : '',\n },\n i.divider\n ? undefined\n : m(\n 'a',\n {\n onclick: onchange\n ? () => {\n state.initialValue = (i.id || i.label) as T;\n onchange(state.initialValue);\n }\n : undefined,\n },\n [i.iconName ? m('i.material-icons', i.iconName) : undefined, i.label]\n )\n )\n )\n ),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport './styles/map-editor.css';\nimport { ICollectionItem, Collection, CollectionMode } from './collection';\nimport { InputCheckbox } from './option';\nimport { uniqueId } from './utils';\nimport { Label } from './label';\nimport { TextArea, TextInput, NumberInput } from './input';\nimport { FlatButton } from './button';\n\nexport interface IMapEditor extends Attributes {\n /** Optional ID of the element */\n id?: string;\n /** If true, displays a header over the map */\n header?: string;\n /** Instead of a header, use a label */\n label?: string;\n /** Places a required * after the label */\n isMandatory?: boolean;\n /**\n * Optional value for the key label\n * @default: \"Key\"\n */\n labelKey?: string;\n /**\n * Optional value for the value label\n * @default: \"Value\"\n */\n labelValue?: string;\n /** If true, the item cannot be edited */\n disabled?: boolean;\n /** Icon for the properties' collection */\n iconName?: string;\n /** Icon for the key editor: if none provided, and the iconName is set, uses 'label' */\n iconNameKey?: string;\n /** If true, do not parse arrays like [1, 2, 3] into number[] or [a, b, c] into a string[] */\n disallowArrays?: boolean;\n /** The actual map of key-value pairs supports numbers, strings, booleans and arrays of strings and numbers. */\n properties: { [key: string]: number | string | boolean | Array<string | number> };\n /**\n * Called when the properties collection has changed. Not needed if you are performing a direct edit on the\n * properties object, but in case you have created a mapping, this allows you to convert the object back again.\n */\n onchange?: (properties: { [key: string]: number | string | boolean | Array<string | number> }) => void;\n /**\n * In order to create a boolean, you first have to enter a truthy or falsy value.\n * Default 'true' and 'false', but you can add more options.\n */\n truthy?: string[];\n /**\n * In order to create a boolean, you first have to enter a truthy or falsy value.\n * Default 'true' and 'false', but you can add more options.\n */\n falsy?: string[];\n /**\n * Optional function to replace the render function of a key-value pair.\n * The ICollectionItems's title may be a Vnode.\n */\n keyValueConverter?: (key: string, value: number | string | boolean | Array<string | number>) => ICollectionItem;\n /** Optional class to apply to the key column, @default .col.s4 */\n keyClass?: string;\n /** Optional class to apply to the value column, @default .col.s8 */\n valueClass?: string;\n}\n\n/** A simple viewer and/or editor for a map of key - value pairs */\nexport const MapEditor: FactoryComponent<IMapEditor> = () => {\n const parseArray = (v?: string, disallowArrays = false) => {\n if (disallowArrays) {\n return v;\n }\n const extractArrayData = /\\s*\\[(.*)\\]\\s*/gi;\n if (!v) {\n return undefined;\n }\n const match = extractArrayData.exec(v);\n if (!match || match.length !== 2) {\n return undefined;\n }\n return match[1]\n .split(',')\n .map(i => i.trim())\n .map(i => (/^\\d+$/g.test(i) ? +i : i));\n };\n\n const kvc = (\n key: string,\n value: number | string | boolean | Array<string | number>,\n options: { keyClass?: string; valueClass?: string }\n ) => {\n const { keyClass = '.col.s4', valueClass = '.col.s8' } = options;\n const displayValue =\n value instanceof Array\n ? value.join(', ')\n : typeof value === 'boolean'\n ? m(InputCheckbox, { label: ' ', checked: value, disabled: true, className: 'checkbox-in-collection' })\n : value.toString();\n const title = m('.row', { style: 'margin-bottom: 0' }, [m(keyClass, m('b', key)), m(valueClass, displayValue)]);\n return {\n title,\n } as ICollectionItem;\n };\n\n const onclick = (key: string) => (state.curKey = state.id = key);\n\n const kvcWrapper = (key: string, item: ICollectionItem) => {\n const clickHandler = item.onclick;\n item.id = item.id || key;\n item.active = key === state.curKey;\n item.onclick = clickHandler ? () => onclick(key) && clickHandler(item) : () => onclick(key);\n return item;\n };\n\n const toCollectionArray = (\n properties: { [key: string]: number | string | boolean | Array<string | number> },\n options: { keyClass?: string; valueClass?: string }\n ) =>\n Object.keys(properties)\n .map(key => ({ key, value: properties[key] }))\n .map(item =>\n kvcWrapper(\n item.key,\n state.kvc(item.key, item.value, { keyClass: options.keyClass, valueClass: options.valueClass })\n )\n );\n\n const isTruthy = (i: string, truthy: string[], falsy: string[]) =>\n truthy.indexOf(i) >= 0 ? true : falsy.indexOf(i) >= 0 ? false : undefined;\n\n const state = {\n elementId: uniqueId(),\n id: '',\n curKey: '',\n kvc,\n };\n\n const resetInputs = () => {\n state.id = '';\n state.curKey = '';\n };\n\n return {\n oninit: ({ attrs: { keyValueConverter, id } }) => {\n if (keyValueConverter) {\n state.kvc = keyValueConverter;\n }\n if (id) {\n state.elementId = id;\n }\n },\n view: ({\n attrs: {\n className = 'col s12',\n disabled,\n disallowArrays,\n header,\n iconName,\n iconNameKey = iconName ? 'label' : undefined,\n isMandatory,\n label,\n labelKey = 'Key',\n labelValue = 'Value',\n properties,\n keyClass,\n valueClass,\n onchange,\n falsy = ['false'],\n truthy = ['true'],\n },\n }) => {\n const notify = () => (onchange ? onchange(properties) : undefined);\n const items = toCollectionArray(properties, { keyClass, valueClass });\n const key = state.curKey;\n const prop = properties[key];\n const value =\n typeof prop === 'boolean' || typeof prop === 'number'\n ? prop\n : prop\n ? prop instanceof Array\n ? `[${prop.join(', ')}]`\n : prop\n : '';\n const id = state.elementId;\n return [\n m(\n '.map-editor',\n m('.input-field', { className, style: 'min-height: 1.5em;' }, [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m(Label, { label, isMandatory, isActive: items.length > 0 }),\n m(Collection, { id, items, mode: CollectionMode.LINKS, header }),\n ])\n ),\n disabled\n ? undefined\n : [\n m(TextInput, {\n label: labelKey,\n iconName: iconNameKey,\n className: 'col s5',\n initialValue: key,\n onchange: (v: string) => {\n state.curKey = v;\n if (state.id) {\n delete properties[state.id];\n properties[v] = prop;\n state.id = v;\n }\n notify();\n },\n }),\n typeof value === 'string'\n ? m(TextArea, {\n label: labelValue,\n initialValue: value,\n className: 'col s7',\n onchange: (v: string) => {\n const b = isTruthy(v, truthy, falsy);\n const n = typeof b === 'undefined' ? (/^\\s*\\d+\\s*$/i.test(v) ? +v : undefined) : undefined;\n properties[key] =\n typeof b === 'boolean' ? b : typeof n === 'number' ? n : parseArray(v, disallowArrays) || v;\n notify();\n },\n })\n : typeof value === 'number'\n ? m(NumberInput, {\n label: labelValue,\n initialValue: value,\n className: 'col s7',\n onchange: (v: number) => {\n properties[key] = v;\n notify();\n },\n })\n : m(InputCheckbox, {\n label: labelValue,\n checked: value,\n className: 'input-field col s7',\n onchange: (v: boolean) => {\n properties[key] = v;\n notify();\n },\n }),\n m('.col.s12.right-align', [\n m(FlatButton, {\n iconName: 'add',\n onclick: resetInputs,\n }),\n m(FlatButton, {\n iconName: 'delete',\n disabled: !key,\n onclick: () => {\n delete properties[key];\n resetInputs();\n notify();\n },\n }),\n ]),\n ],\n ];\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface IMaterialBox extends Partial<M.MaterialboxOptions>, Attributes {\n /** Source image path */\n src: 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}\n\n/**\n * Create an image box, that, when clicked upon, fills the screen.\n * @see https://materializecss.com/media.html\n */\nexport const MaterialBox: FactoryComponent<IMaterialBox> = () => {\n return {\n oncreate: ({ dom, attrs }) => {\n M.Materialbox.init(dom, attrs);\n },\n view: ({ attrs }) => m('img.materialboxed', attrs),\n };\n};\n","import m, { FactoryComponent, Vnode, Attributes } from 'mithril';\nimport { FlatButton } from './button';\n\nexport interface IMaterialModal 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 /** Materialize css' modal options */\n options?: Partial<M.ModalOptions>;\n /** Menu buttons, from left to right */\n buttons?: Array<{ label: string; iconName?: string; disabled?: boolean; onclick?: (e: UIEvent) => void }>;\n /** Get the modal instance, so you can control it programmatically */\n onCreate?: (modal: M.Modal) => void;\n}\n\n/** Builds a modal panel, which can be triggered using its id */\nexport const ModalPanel: FactoryComponent<IMaterialModal> = () => ({\n oncreate: ({ dom, attrs: { options, onCreate } }) => {\n const modal = M.Modal.init(dom, options);\n if (onCreate) {\n onCreate(modal);\n }\n },\n view: ({ attrs: { id, title, description, fixedFooter, bottomSheet, buttons, richContent, className } }) => {\n const cn = [className, fixedFooter ? 'modal-fixed-footer' : '', bottomSheet ? 'bottom-sheet' : '']\n .filter(Boolean)\n .join(' ')\n .trim();\n return m(\n '.modal',\n {\n id,\n className: cn,\n },\n [\n m('.modal-content', [\n m('h4', title),\n richContent && typeof description === 'string'\n ? m.trust(description || '')\n : typeof description === 'string'\n ? m('p', description)\n : description,\n ]),\n buttons\n ? m(\n '.modal-footer',\n buttons.map((props) => m(FlatButton, { ...props, className: 'modal-close' }))\n )\n : undefined,\n ]\n );\n },\n});\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface IParallax extends Partial<M.ParallaxOptions>, Attributes {\n /** Image source */\n src: string;\n}\n\n/**\n * Parallax component:\n * Parallax is an effect where the background content or image in this case,\n * is moved at a different speed than the foreground content while scrolling.\n * @see https://materializecss.com/parallax.html\n */\nexport const Parallax: FactoryComponent<IParallax> = () => {\n return {\n oncreate: ({ dom, attrs }) => {\n M.Parallax.init(dom, attrs);\n },\n view: ({ attrs: { src } }) => (src ? m('.parallax-container', m('.parallax', m('img', { src }))) : undefined),\n };\n};\n","import m, { Attributes, Component } from 'mithril';\n\n// Option interface for type safety\nexport interface Option<T extends string | number> {\n id: T;\n label?: string;\n disabled?: boolean;\n}\n\n// Component attributes interface\nexport interface SearchSelectAttrs<T extends string | number> extends Attributes {\n /** Options to display in the select */\n options?: Option<T>[];\n /** Initial value */\n initialValue?: T[];\n /** Callback when user selects or deselects an option */\n onchange?: (selectedOptions: T[]) => void | Promise<void>;\n /** Callback when user creates a new option: should return new ID */\n oncreateNewOption?: (term: string) => Option<T> | Promise<Option<T>>;\n /** Label for the search select, no default */\n label?: string;\n /** Placeholder text for the search input, no default */\n placeholder?: string;\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 '25rem' */\n maxHeight?: string;\n}\n\n// Component state interface\ninterface SearchSelectState<T extends string | number> {\n isOpen: boolean;\n selectedOptions: Option<T>[];\n searchTerm: string;\n options: Option<T>[];\n inputRef: HTMLElement | null;\n dropdownRef: HTMLElement | null;\n focusedIndex: number;\n onchange: any;\n}\n\n/**\n * Mithril Factory Component for Multi-Select Dropdown with search\n */\nexport const SearchSelect = <T extends string | number>(): Component<SearchSelectAttrs<T>, SearchSelectState<T>> => {\n // (): <T extends string | number>(): Component<SearchSelectAttrs<T>, SearchSelectState<T>> => {\n // State initialization\n const state: SearchSelectState<string | number> = {\n isOpen: false,\n selectedOptions: [], //options.filter((o) => iv.includes(o.id)),\n searchTerm: '',\n options: [],\n inputRef: null,\n dropdownRef: null,\n focusedIndex: -1,\n onchange: null,\n };\n\n // Handle click outside\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n if (state.inputRef && state.inputRef.contains(target)) {\n state.isOpen = !state.isOpen;\n m.redraw();\n } else if (state.dropdownRef && !state.dropdownRef.contains(target)) {\n state.isOpen = false;\n m.redraw();\n }\n };\n\n // Handle keyboard navigation\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!state.isOpen) return;\n\n const filteredOptions = state.options.filter(\n (option) =>\n (option.label || option.id.toString()).toLowerCase().includes((state.searchTerm || '').toLowerCase()) &&\n !state.selectedOptions.some((selected) => selected.id === option.id)\n );\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n state.focusedIndex = Math.min(state.focusedIndex + 1, filteredOptions.length - 1);\n m.redraw();\n break;\n case 'ArrowUp':\n e.preventDefault();\n state.focusedIndex = Math.max(state.focusedIndex - 1, -1);\n m.redraw();\n break;\n case 'Enter':\n e.preventDefault();\n if (state.focusedIndex >= 0 && state.focusedIndex < filteredOptions.length) {\n toggleOption(filteredOptions[state.focusedIndex]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n state.isOpen = false;\n state.focusedIndex = -1;\n m.redraw();\n break;\n }\n };\n\n // Toggle option selection\n const toggleOption = (option: Option<string | number>) => {\n if (option.disabled) return;\n\n state.selectedOptions = state.selectedOptions.some((item) => item.id === option.id)\n ? state.selectedOptions.filter((item) => item.id !== option.id)\n : [...state.selectedOptions, option];\n state.searchTerm = '';\n state.focusedIndex = -1;\n state.onchange && state.onchange(state.selectedOptions.map((o) => o.id));\n m.redraw();\n };\n\n // Remove a selected option\n const removeOption = (option: Option<string | number>) => {\n state.selectedOptions = state.selectedOptions.filter((item) => item.id !== option.id);\n state.onchange && state.onchange(state.selectedOptions.map((o) => o.id));\n m.redraw();\n };\n\n return {\n oninit: ({ attrs: { options = [], initialValue = [], onchange } }) => {\n state.options = options;\n state.selectedOptions = options.filter((o) => initialValue.includes(o.id));\n state.onchange = onchange;\n },\n oncreate() {\n document.addEventListener('click', handleClickOutside);\n document.addEventListener('keydown', handleKeyDown);\n },\n onremove() {\n document.removeEventListener('click', handleClickOutside);\n document.removeEventListener('keydown', handleKeyDown);\n },\n view({\n attrs: {\n // onchange,\n oncreateNewOption,\n className,\n placeholder,\n searchPlaceholder = 'Search options...',\n noOptionsFound = 'No options found',\n label,\n maxHeight = '25rem',\n },\n }) {\n // Safely filter options\n const filteredOptions = state.options.filter(\n (option) =>\n (option.label || option.id.toString()).toLowerCase().includes((state.searchTerm || '').toLowerCase()) &&\n !state.selectedOptions.some((selected) => selected.id === option.id)\n );\n\n // Check if we should show the \"add new option\" element\n const showAddNew =\n oncreateNewOption &&\n state.searchTerm &&\n !filteredOptions.some((o) => (o.label || o.id.toString()).toLowerCase() === state.searchTerm.toLowerCase());\n\n // Render the dropdown\n return m('.multi-select-dropdown.input-field', { className }, [\n m(\n 'label',\n {\n class: placeholder || state.selectedOptions.length > 0 ? 'active' : '',\n },\n label\n ),\n m(\n '.dropdown-trigger',\n {\n oncreate: ({ dom }) => {\n state.inputRef = dom as HTMLElement;\n },\n style: {\n borderBottom: '2px solid #d1d5db',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: 'pointer',\n },\n },\n [\n // Selected Options\n m(\n '.selected-options',\n {\n style: {\n display: 'flex',\n flexWrap: 'wrap',\n minHeight: '50px',\n paddingTop: '12px',\n },\n },\n state.selectedOptions.length === 0\n ? [m('span', placeholder)]\n : state.selectedOptions.map((option) =>\n m('.chip', [\n option.label || option.id.toString(),\n m(\n 'button',\n {\n onclick: (e: Event) => {\n e.stopPropagation();\n removeOption(option);\n },\n style: {\n marginLeft: '0.25rem',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n },\n },\n '×'\n ),\n ])\n )\n ),\n // Dropdown Icon\n m(\n 'svg.caret',\n {\n class: 'caret',\n height: '24',\n viewBox: '0 0 24 24',\n width: '24',\n xmlns: 'http://www.w3.org/2000/svg',\n },\n [m('path', { d: 'M7 10l5 5 5-5z' }), m('path', { d: 'M0 0h24v24H0z', fill: 'none' })]\n ),\n ]\n ),\n // Dropdown Menu\n state.isOpen &&\n m(\n '.dropdown-menu',\n {\n oncreate: ({ dom }) => {\n state.dropdownRef = dom as HTMLElement;\n },\n onremove: () => {\n state.dropdownRef = null;\n },\n style: {\n position: 'absolute',\n width: '98%',\n marginTop: '0.4rem',\n zIndex: 1000,\n },\n },\n [\n // Options List\n m(\n 'ul.dropdown-content.select-dropdown',\n {\n style: {\n maxHeight,\n opacity: 1,\n display: 'block',\n width: '100%',\n },\n },\n [\n m(\n 'li', // Search Input\n {\n class: 'search-wrapper',\n style: { padding: '0 16px', position: 'relative' },\n },\n [\n m('input', {\n type: 'text',\n placeholder: searchPlaceholder,\n value: state.searchTerm || '',\n oninput: (e: InputEvent) => {\n state.searchTerm = (e.target as HTMLInputElement).value;\n state.focusedIndex = -1; // Reset focus when typing\n m.redraw();\n },\n style: {\n width: '100%',\n outline: 'none',\n fontSize: '0.875rem',\n },\n }),\n ]\n ),\n\n // No options found message or list of options\n ...(filteredOptions.length === 0 && !showAddNew\n ? [\n m(\n 'li',\n {\n style: {\n padding: '0.5rem',\n textAlign: 'center',\n color: '#9ca3af',\n },\n },\n noOptionsFound\n ),\n ]\n : []),\n\n // Add new option item\n ...(showAddNew\n ? [\n m(\n 'li',\n {\n onclick: async () => {\n const option = await oncreateNewOption(state.searchTerm);\n toggleOption(option);\n },\n style: {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n background: state.focusedIndex === filteredOptions.length ? '#f3f4f6' : '',\n },\n },\n [m('span', `+ \"${state.searchTerm}\"`)]\n ),\n ]\n : []),\n\n // List of filtered options\n ...filteredOptions.map((option, index) =>\n m(\n 'li',\n {\n onclick: () => toggleOption(option),\n class: option.disabled ? 'disabled' : undefined,\n style: {\n display: 'flex',\n alignItems: 'center',\n cursor: option.disabled ? 'not-allowed' : 'pointer',\n background: state.focusedIndex === index ? '#f3f4f6' : '',\n },\n },\n m('span', [\n m('input', {\n type: 'checkbox',\n checked: state.selectedOptions.some((selected) => selected.id === option.id),\n style: { marginRight: '0.5rem' },\n }),\n option.label || option.id.toString(),\n ])\n )\n ),\n ]\n ),\n ]\n ),\n ]);\n },\n };\n};\n","import m, { Attributes, Component } from 'mithril';\nimport { isNumeric } from './utils';\nimport { Label, HelperText } from './label';\nimport { IInputOption } from './option';\n\nexport interface ISelectOptions<T extends string | number> extends Attributes, Partial<M.FormSelectOptions> {\n /** Options to select from */\n options: IInputOption<T>[];\n /** Called when the value is changed, either contains a single or all selected (checked) ids */\n onchange: (checkedIds: T[]) => void;\n /**\n * Selected id or ids (in case of multiple options). Processed in the oninit and onupdate lifecycle.\n * When the checkedId property changes (using a shallow compare), the selections are updated accordingly.\n */\n checkedId?: T | T[];\n /** Selected id or ids (in case of multiple options). Only processed in the oninit lifecycle. */\n initialValue?: 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?: string;\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}\n\n/** Component to select from a list of values in a dropdowns */\nexport const Select = <T extends string | number>(): Component<ISelectOptions<T>> => {\n const state = {} as {\n checkedId?: T | T[];\n initialValue?: T[];\n instance?: M.FormSelect;\n /** Only initialized when multiple select */\n wrapper?: HTMLDivElement;\n /** Only initialized when multiple select */\n inputEl?: HTMLInputElement;\n /** Concatenation of all options IDs, to see if the options have changed and we need to re-init the select */\n ids?: string;\n };\n const optionsIds = (options: IInputOption<T>[]) => options.map((o) => o.id).join('');\n\n const isSelected = (id?: T, checkedId?: T[], selected = false) =>\n selected ||\n (checkedId instanceof Array && (id || typeof id === 'number') ? checkedId.indexOf(id) >= 0 : checkedId === id);\n\n return {\n oninit: ({ attrs: { checkedId, initialValue, options } }) => {\n state.ids = optionsIds(options);\n const iv = checkedId || initialValue;\n state.checkedId = checkedId instanceof Array ? [...checkedId] : checkedId;\n state.initialValue =\n iv !== null && typeof iv !== 'undefined'\n ? iv instanceof Array\n ? iv.filter((i) => i !== null && typeof i !== 'undefined')\n : [iv]\n : [];\n },\n view: ({\n attrs: {\n id,\n newRow,\n className = 'col s12',\n checkedId,\n key,\n options,\n multiple,\n label,\n helperText,\n placeholder = '',\n isMandatory,\n iconName,\n disabled,\n classes = '',\n dropdownOptions,\n // showClearButton,\n onchange: callback,\n },\n }) => {\n if (state.checkedId !== checkedId) {\n state.initialValue = checkedId ? (checkedId instanceof Array ? checkedId : [checkedId]) : undefined;\n }\n const { initialValue } = state;\n const onchange = callback\n ? multiple\n ? () => {\n const values = state.instance && state.instance.getSelectedValues();\n const v = values\n ? values.length > 0 && isNumeric(values[0])\n ? values.map((n) => +n)\n : values.filter((i) => i !== null || typeof i !== 'undefined')\n : undefined;\n state.initialValue = v ? (v as T[]) : [];\n callback(state.initialValue);\n }\n : (e: Event) => {\n if (e && e.currentTarget) {\n const b = e.currentTarget as HTMLButtonElement;\n const v = (isNumeric(b.value) ? +b.value : b.value) as T;\n state.initialValue = typeof v !== undefined ? [v] : [];\n }\n state.initialValue && callback(state.initialValue);\n }\n : undefined;\n if (newRow) className += ' clear';\n const noValidSelection = !options.some((o) => isSelected(o.id, initialValue));\n const groups = options.reduce((acc, cur) => {\n if (cur.group && acc.indexOf(cur.group) < 0) acc.push(cur.group);\n return acc;\n }, [] as string[]);\n\n return m(\n '.input-field.select-space',\n {\n className,\n key,\n oncreate: multiple ? ({ dom }) => (state.wrapper = dom as HTMLDivElement) : undefined,\n },\n [\n iconName && m('i.material-icons.prefix', iconName),\n m(\n 'select',\n {\n id,\n title: label,\n disabled,\n multiple,\n oncreate: ({ dom }) => {\n state.instance = M.FormSelect.init(dom, { classes, dropdownOptions });\n },\n onupdate: ({ dom }) => {\n if (multiple) {\n const i = iconName ? 1 : 0;\n // Ugly hack to remove the placeholder when only one item is selected.\n if (\n !state.inputEl &&\n state.wrapper &&\n state.wrapper.childNodes &&\n state.wrapper.childNodes.length > 0 &&\n state.wrapper.childNodes[i].childNodes &&\n state.wrapper.childNodes[i].childNodes[0]\n ) {\n state.inputEl = state.wrapper.childNodes[i].childNodes[0] as HTMLInputElement;\n }\n if (state.inputEl && state.inputEl.value && state.inputEl.value.startsWith(`${placeholder}, `)) {\n state.inputEl.value = state.inputEl.value.replace(`${placeholder}, `, '');\n }\n }\n const ids = optionsIds(options);\n let reinit = checkedId && state.checkedId !== checkedId.toString();\n if (state.ids !== ids) {\n state.ids = ids;\n reinit = true;\n }\n if (\n state.checkedId instanceof Array && checkedId instanceof Array\n ? state.checkedId.join() !== checkedId.join()\n : state.checkedId !== checkedId\n ) {\n state.checkedId = checkedId;\n reinit = true;\n }\n if (reinit) {\n state.instance = M.FormSelect.init(dom, { classes, dropdownOptions });\n }\n },\n onchange,\n },\n // groups.length === 0 &&\n m('option', { value: '', disabled: true, selected: noValidSelection ? true : undefined }, placeholder),\n groups.length === 0\n ? options.map((o, i) =>\n m(\n 'option',\n {\n value: o.id,\n title: o.title || undefined,\n disabled: o.disabled ? 'true' : undefined,\n 'data-icon': o.img || undefined,\n selected: isSelected(o.id, initialValue, i === 0 && noValidSelection && !placeholder),\n },\n o.label?.replace('&amp;', '&')\n )\n )\n : groups.map((g) =>\n m(\n 'optgroup',\n { label: g },\n options\n .filter((o) => o.group === g)\n .map((o, i) =>\n m(\n 'option',\n {\n value: o.id,\n title: o.title || undefined,\n disabled: o.disabled ? 'true' : undefined,\n 'data-icon': o.img || undefined,\n selected: isSelected(o.id, initialValue, i === 0 && noValidSelection && !placeholder),\n },\n o.label?.replace('&amp;', '&')\n )\n )\n )\n )\n ),\n m(Label, { label, isMandatory }),\n helperText && m(HelperText, { helperText }),\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 ITabItem {\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 active */\n active?: boolean;\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 ITabs extends Partial<M.TabsOptions>, Attributes {\n /** Selected tab id */\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: ITabItem[];\n}\n\nexport const Tabs: FactoryComponent<ITabs> = () => {\n const state = {} as { instance: M.Tabs };\n\n const createId = (title: string, id?: string) => (id ? id : title.replace(/ /g, '').toLowerCase());\n return {\n view: ({\n attrs: { tabWidth, selectedTabId, tabs, className, style, duration, onShow, swipeable, responsiveThreshold },\n }) => {\n const activeTab = tabs.filter((t) => t.active).shift();\n const select = selectedTabId || (activeTab ? createId(activeTab.title, activeTab.id) : '');\n const cn = [tabWidth === 'fill' ? 'tabs-fixed-width' : '', className].filter(Boolean).join(' ').trim();\n return m('.row', [\n m(\n '.col.s12',\n m(\n 'ul.tabs',\n {\n className: cn,\n style,\n oncreate: ({ dom }) => {\n state.instance = M.Tabs.init(dom, {\n duration,\n onShow,\n responsiveThreshold,\n swipeable,\n });\n },\n onupdate: () => {\n if (select) {\n const el = document.getElementById(`tab_${select}`);\n if (el) {\n el.click();\n }\n }\n },\n onremove: () => state.instance.destroy(),\n },\n tabs.map(({ className, title, id, active, disabled, target, href }) => {\n const cn = [tabWidth === 'fixed' ? `col s${Math.floor(12 / tabs.length)}` : '', className]\n .filter(Boolean)\n .join(' ')\n .trim();\n const anchorId = createId(title, id);\n const tabId = `tab_${anchorId}`;\n const cnA = active ? 'active' : '';\n return m(\n 'li.tab',\n {\n className: cn,\n disabled,\n },\n m('a', { id: tabId, className: cnA, target, href: href || `#${anchorId}` }, title)\n );\n })\n )\n ),\n tabs\n .filter(({ href }) => typeof href === 'undefined')\n .map(({ id, title, vnode, contentClass }) =>\n m('.col.s12', { id: createId(title, id), className: contentClass }, vnode)\n ),\n ]);\n },\n };\n};\n"],"names":["CollectionMode","uniqueId","replace","Math","random","toString","isNumeric","n","isNaN","parseFloat","isFinite","padLeft","width","z","String","padStart","_excluded","Mandatory","view","_ref","m","attrs","Label","_ref2","_ref2$attrs","label","id","isMandatory","isActive","className","params","_objectWithoutPropertiesLoose","_extends","filter","Boolean","join","trim","for","trust","undefined","HelperText","_ref3","_ref3$attrs","helperText","dataError","dataSuccess","Icon","_ref$attrs","iconName","passThrough","ButtonFactory","element","defaultClassNames","type","modalId","tooltip","tooltipPostion","iconClass","attr","cn","href","Button","LargeButton","SmallButton","FlatButton","RoundIconButton","SubmitButton","CarouselItem","src","alt","CollapsibleItem","header","body","active","isNonLocalRoute","url","test","SecondaryContent","_attrs$iconName","onclick","_attrs$style","style","props","cursor","route","Link","avatarIsImage","avatar","ListItem","item","title","_item$content","content","mode","AVATAR","BasicCollection","items","_ref3$attrs$mode","BASIC","collectionItems","map","key","AnchorItem","_ref4","_excluded2","LinksCollection","_ref5","_ref5$attrs","_excluded3","Collection","_ref6","_ref6$attrs","_ref6$attrs$mode","_excluded4","length","LINKS","TextArea","state","_attrs$className","_attrs$id","initialValue","onchange","onkeydown","onkeypress","onkeyup","onblur","tabindex","oncreate","dom","M","textareaAutoResize","maxLength","CharacterCounter","init","e","target","value","ev","placeholder","InputField","defaultClass","getValue","val","setValidity","validationResult","setCustomValidity","_attrs$className2","_attrs$id2","newRow","validate","autofocus","focus","Range","onupdate","TextInput","PasswordInput","NumberInput","UrlInput","ColorInput","RangeInput","EmailInput","InputCheckbox","_ref$attrs$className","description","checked","disabled","PaginationItem","RadioButton","name","groupId","TimelineItem","datetime","timeFormatter","onSelect","dateFormatter","Autocomplete","Carousel","chipsData","selectedChip","focused","inputValue","inputId","autocompleteItems","selectedAutocompleteIndex","showAutocomplete","currentVnode","updateAutocomplete","_currentVnode","autocompleteOptions","data","_currentVnode$attrs$a","_currentVnode$attrs$a2","minLength","input","toLowerCase","allOptions","Array","isArray","tag","Object","entries","text","processAutocompleteData","filtered","option","includes","slice","limit","Infinity","selectAutocompleteItem","addChip","image","chip","_currentVnode$attrs","_currentVnode$attrs$l","onChipAdd","currentChips","some","c","isValid","concat","deleteChip","index","_currentVnode$attrs2","onChipDelete","_","i","selectChip","onChipSelect","handleKeydown","_currentVnode2","preventDefault","min","selectedItem","querySelector","scrollIntoView","block","redraw","_currentVnode3","max","oninit","vnode","onremove","_attrs$isMandatory","required","secondaryPlaceholder","class","newIndex","_currentVnode4","handleChipKeydown","stopPropagation","oninput","onfocus","setTimeout","display","opacity","transform","position","left","top","maxHeight","overflow","zIndex","backgroundColor","boxShadow","padding","onmousedown","onmouseover","height","marginRight","verticalAlign","code","language","lang","cb","Collapsible","onClose","dp","date","destroy","Datepicker","format","showClearBtn","setDefaultDate","defaultDate","Date","_ref$attrs$id","checkedId","_ref2$attrs$disabled","_ref2$attrs$className","shift","Dropdown","divider","canClear","_ref7","multiple","_attrs$className3","acceptedFiles","accept","_attrs$label","files","_ref8","float","_ref$attrs$iconClass","_ref$attrs$style","buttons","options","fab","FloatingActionButton","classNames","b","onClick","curKey","elementId","kvc","_options$keyClass","keyClass","_options$valueClass","valueClass","displayValue","resetInputs","keyValueConverter","disallowArrays","_ref2$attrs$iconNameK","iconNameKey","_ref2$attrs$labelKey","labelKey","_ref2$attrs$labelValu","labelValue","properties","_ref2$attrs$falsy","falsy","_ref2$attrs$truthy","truthy","notify","keys","clickHandler","kvcWrapper","toCollectionArray","prop","v","indexOf","isTruthy","match","exec","split","parseArray","Materialbox","onCreate","modal","Modal","richContent","fixedFooter","bottomSheet","isChecked","checkedIds","iv","_ref3$attrs$className","checkboxClass","callback","propId","push","pagIndex","_ref2$attrs$curPage","curPage","_ref2$attrs$size","size","startPage","endPage","canGoBack","canGoForward","displayedItems","Parallax","oldCheckedId","cid","_ref3$attrs$label","r","isOpen","selectedOptions","searchTerm","inputRef","dropdownRef","focusedIndex","handleClickOutside","contains","handleKeyDown","filteredOptions","selected","toggleOption","o","_ref$attrs$options","_ref$attrs$initialVal","document","addEventListener","removeEventListener","oncreateNewOption","_ref2$attrs$searchPla","searchPlaceholder","_ref2$attrs$noOptions","noOptionsFound","_ref2$attrs$maxHeight","showAddNew","borderBottom","justifyContent","alignItems","flexWrap","minHeight","paddingTop","removeOption","marginLeft","background","border","viewBox","xmlns","d","fill","marginTop","outline","fontSize","textAlign","color","Promise","resolve","then","reject","optionsIds","isSelected","ids","_ref2$attrs$placehold","_ref2$attrs$classes","classes","dropdownOptions","values","instance","getSelectedValues","currentTarget","noValidSelection","groups","reduce","acc","cur","group","wrapper","FormSelect","inputEl","childNodes","startsWith","reinit","_o$label","img","g","_o$label2","right","createId","tabWidth","selectedTabId","tabs","duration","onShow","swipeable","responsiveThreshold","activeTab","t","select","Tabs","el","getElementById","click","floor","anchorId","contentClass","now","onCloseEnd","tp","time","getHours","getMinutes","Timepicker","twelveHour","defaultTime","df","getUTCDate","getUTCMonth","getUTCFullYear","tf","getUTCHours","getUTCMinutes","_ref2$attrs$timeForma","_ref2$attrs$dateForma"],"mappings":"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"}
@@ -1,63 +0,0 @@
1
- import { FactoryComponent, Attributes } from 'mithril';
2
- import './styles/map-editor.css';
3
- import { ICollectionItem } from './collection';
4
- export interface IMapEditor extends Attributes {
5
- /** Optional ID of the element */
6
- id?: string;
7
- /** If true, displays a header over the map */
8
- header?: string;
9
- /** Instead of a header, use a label */
10
- label?: string;
11
- /** Places a required * after the label */
12
- isMandatory?: boolean;
13
- /**
14
- * Optional value for the key label
15
- * @default: "Key"
16
- */
17
- labelKey?: string;
18
- /**
19
- * Optional value for the value label
20
- * @default: "Value"
21
- */
22
- labelValue?: string;
23
- /** If true, the item cannot be edited */
24
- disabled?: boolean;
25
- /** Icon for the properties' collection */
26
- iconName?: string;
27
- /** Icon for the key editor: if none provided, and the iconName is set, uses 'label' */
28
- iconNameKey?: string;
29
- /** If true, do not parse arrays like [1, 2, 3] into number[] or [a, b, c] into a string[] */
30
- disallowArrays?: boolean;
31
- /** The actual map of key-value pairs supports numbers, strings, booleans and arrays of strings and numbers. */
32
- properties: {
33
- [key: string]: number | string | boolean | Array<string | number>;
34
- };
35
- /**
36
- * Called when the properties collection has changed. Not needed if you are performing a direct edit on the
37
- * properties object, but in case you have created a mapping, this allows you to convert the object back again.
38
- */
39
- onchange?: (properties: {
40
- [key: string]: number | string | boolean | Array<string | number>;
41
- }) => void;
42
- /**
43
- * In order to create a boolean, you first have to enter a truthy or falsy value.
44
- * Default 'true' and 'false', but you can add more options.
45
- */
46
- truthy?: string[];
47
- /**
48
- * In order to create a boolean, you first have to enter a truthy or falsy value.
49
- * Default 'true' and 'false', but you can add more options.
50
- */
51
- falsy?: string[];
52
- /**
53
- * Optional function to replace the render function of a key-value pair.
54
- * The ICollectionItems's title may be a Vnode.
55
- */
56
- keyValueConverter?: (key: string, value: number | string | boolean | Array<string | number>) => ICollectionItem;
57
- /** Optional class to apply to the key column, @default .col.s4 */
58
- keyClass?: string;
59
- /** Optional class to apply to the value column, @default .col.s8 */
60
- valueClass?: string;
61
- }
62
- /** A simple viewer and/or editor for a map of key - value pairs */
63
- export declare const MapEditor: FactoryComponent<IMapEditor>;
@@ -1,24 +0,0 @@
1
- import { Vnode, FactoryComponent, Attributes } from 'mithril';
2
- import './styles/timeline.css';
3
- export interface ITimelineItem {
4
- id?: string;
5
- title?: Vnode<any, any> | string;
6
- datetime: Date;
7
- iconName?: string;
8
- active?: boolean;
9
- content?: Vnode<any, any> | string;
10
- }
11
- export interface ITimeline extends Attributes {
12
- items: ITimelineItem[];
13
- /** When an item is selected, call this function */
14
- onSelect?: (ti: ITimelineItem) => void;
15
- /** Formatter for the dates, @default date/month/year in UTC */
16
- dateFormatter?: (d: Date) => string;
17
- /** Formatter for the time @default HH:mm in UTC */
18
- timeFormatter?: (d: Date) => string;
19
- }
20
- /**
21
- * A timeline component to generate a simple vertical timeline based on Codrops' Vertical Timeline.
22
- * @see https://tympanus.net/codrops/2013/05/02/vertical-timeline/
23
- */
24
- export declare const Timeline: FactoryComponent<ITimeline>;