@mantic-ui/angular
Version:
mantic UI for Angular
1 lines • 798 kB
Source Map (JSON)
{"version":3,"file":"mantic-ui-angular.mjs","sources":["../../../projects/mantic-ui/src/lib/helpers/to-boolean.ts","../../../projects/mantic-ui/src/lib/services/sorted-classes.service.ts","../../../projects/mantic-ui/src/lib/base/destroyable.ts","../../../projects/mantic-ui/src/lib/base/base.component.ts","../../../projects/mantic-ui/src/lib/helpers/transformable-model.ts","../../../projects/mantic-ui/src/lib/base/invertible.component.ts","../../../projects/mantic-ui/src/lib/base/button-base.component.ts","../../../projects/mantic-ui/src/lib/base/base.directive.ts","../../../projects/mantic-ui/src/lib/components/animation/animation.component.ts","../../../projects/mantic-ui/src/lib/components/animation/animation.component.html","../../../projects/mantic-ui/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../projects/mantic-ui/src/lib/components/breadcrumb/breadcrumb.component.html","../../../projects/mantic-ui/src/lib/models/key.ts","../../../projects/mantic-ui/src/lib/components/toggle-button/toggle-button.component.ts","../../../projects/mantic-ui/src/lib/components/toggle-button/toggle-button.component.html","../../../projects/mantic-ui/src/lib/components/button-group/button-group.component.ts","../../../projects/mantic-ui/src/lib/components/button-group/button-group.component.html","../../../projects/mantic-ui/src/lib/components/icon/icon.component.ts","../../../projects/mantic-ui/src/lib/components/icon/icon.component.html","../../../projects/mantic-ui/src/lib/components/label/label.component.ts","../../../projects/mantic-ui/src/lib/components/label/label.component.html","../../../projects/mantic-ui/src/lib/components/button/button.component.ts","../../../projects/mantic-ui/src/lib/components/button/button.component.html","../../../projects/mantic-ui/src/lib/components/button/button-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/button/button.directive.ts","../../../projects/mantic-ui/src/lib/components/card/card.component.ts","../../../projects/mantic-ui/src/lib/components/card/card.component.html","../../../projects/mantic-ui/src/lib/components/card-group/card-group.component.ts","../../../projects/mantic-ui/src/lib/components/card-group/card-group.component.html","../../../projects/mantic-ui/src/lib/helpers/math2.ts","../../../projects/mantic-ui/src/lib/models/field-size.ts","../../../projects/mantic-ui/src/lib/components/cell/cell.component.ts","../../../projects/mantic-ui/src/lib/components/cell/cell.component.html","../../../projects/mantic-ui/src/lib/components/checkbox/checkbox.component.ts","../../../projects/mantic-ui/src/lib/components/checkbox/checkbox.component.html","../../../projects/mantic-ui/src/lib/components/checkbox/checkbox-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/chat-message/chat-message.component.ts","../../../projects/mantic-ui/src/lib/components/chat-message/chat-message.component.html","../../../projects/mantic-ui/src/lib/directives/fallback-for.directive.ts","../../../projects/mantic-ui/src/lib/components/icon-button/icon-button.component.ts","../../../projects/mantic-ui/src/lib/components/icon-button/icon-button.component.html","../../../projects/mantic-ui/src/lib/components/label-dropdown/label-dropdown.component.ts","../../../projects/mantic-ui/src/lib/components/label-dropdown/label-dropdown.component.html","../../../projects/mantic-ui/src/lib/base/labeled-base.component.ts","../../../projects/mantic-ui/src/lib/components/input/input-base.component.ts","../../../projects/mantic-ui/src/lib/components/input/text/input.component.ts","../../../projects/mantic-ui/src/lib/components/input/text/input.component.html","../../../projects/mantic-ui/src/lib/components/chat/chat.component.ts","../../../projects/mantic-ui/src/lib/components/chat/chat.component.html","../../../projects/mantic-ui/src/lib/components/chat/chat-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/circular-progress/circular-progress.component.ts","../../../projects/mantic-ui/src/lib/components/circular-progress/circular-progress.component.html","../../../projects/mantic-ui/src/lib/directives/to-body.directive.ts","../../../projects/mantic-ui/src/lib/components/menu/menu.component.ts","../../../projects/mantic-ui/src/lib/components/menu/menu.component.html","../../../projects/mantic-ui/src/lib/components/context-menu/context-menu.component.ts","../../../projects/mantic-ui/src/lib/components/context-menu/context-menu.component.html","../../../projects/mantic-ui/src/lib/components/menu-item/menu-item.component.ts","../../../projects/mantic-ui/src/lib/components/menu-item/menu-item.component.html","../../../projects/mantic-ui/src/lib/components/context-menu/item/context-menu-item.component.ts","../../../projects/mantic-ui/src/lib/components/context-menu/item/context-menu-item.component.html","../../../projects/mantic-ui/src/lib/components/dimmer/dimmer.component.ts","../../../projects/mantic-ui/src/lib/components/dimmer/dimmer.component.html","../../../projects/mantic-ui/src/lib/components/dimmer/dimmer-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/data-source/data-source-request.ts","../../../projects/mantic-ui/src/lib/components/data-source/data-source.component.ts","../../../projects/mantic-ui/src/lib/components/divider/divider.component.ts","../../../projects/mantic-ui/src/lib/components/divider/divider.component.html","../../../projects/mantic-ui/src/lib/helpers/object-helper.ts","../../../projects/mantic-ui/src/lib/components/dynamic-component/component-parser.ts","../../../projects/mantic-ui/src/lib/components/dynamic-component/dynamic-component.component.ts","../../../projects/mantic-ui/src/lib/components/dynamic-component/provider.ts","../../../projects/mantic-ui/src/lib/components/dropdown/dropdown-selection.service.ts","../../../projects/mantic-ui/src/lib/components/dropdown-item/dropdown-item.component.ts","../../../projects/mantic-ui/src/lib/components/dropdown-item/dropdown-item.component.html","../../../projects/mantic-ui/src/lib/components/dropdown/dropdown-value.ts","../../../projects/mantic-ui/src/lib/components/dropdown/dropdown.component.ts","../../../projects/mantic-ui/src/lib/components/dropdown/dropdown.component.html","../../../projects/mantic-ui/src/lib/components/dropdown/dropdown-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/header/header.component.ts","../../../projects/mantic-ui/src/lib/components/header/header.component.html","../../../projects/mantic-ui/src/lib/components/dropdown-group/dropdown-group.component.ts","../../../projects/mantic-ui/src/lib/components/dropdown-group/dropdown-group.component.html","../../../projects/mantic-ui/src/lib/components/document-title/document-title.component.ts","../../../projects/mantic-ui/src/lib/components/document-title/document-title.component.html","../../../projects/mantic-ui/src/lib/components/document-no-index/document-no-index.component.ts","../../../projects/mantic-ui/src/lib/components/loader/loader.component.ts","../../../projects/mantic-ui/src/lib/components/loader/loader.component.html","../../../projects/mantic-ui/src/lib/components/message/message.component.ts","../../../projects/mantic-ui/src/lib/components/message/message.component.html","../../../projects/mantic-ui/src/lib/components/error/error.component.ts","../../../projects/mantic-ui/src/lib/components/error/error.component.html","../../../projects/mantic-ui/src/lib/components/flex/fill/fill.component.ts","../../../projects/mantic-ui/src/lib/components/flex/fill/fill.component.html","../../../projects/mantic-ui/src/lib/components/flex/flex.directive.ts","../../../projects/mantic-ui/src/lib/components/flex/flex.component.ts","../../../projects/mantic-ui/src/lib/components/expander/expander-header.component.ts","../../../projects/mantic-ui/src/lib/components/expander/expander.component.ts","../../../projects/mantic-ui/src/lib/components/expander/expander.component.html","../../../projects/mantic-ui/src/lib/components/expander/expander-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/expander-icon/expander-icon.component.ts","../../../projects/mantic-ui/src/lib/components/expander-icon/expander-icon.component.html","../../../projects/mantic-ui/src/lib/components/expander-part/expander-part.component.ts","../../../projects/mantic-ui/src/lib/components/expander-part/expander-part.component.html","../../../projects/mantic-ui/src/lib/components/flag/flag.component.ts","../../../projects/mantic-ui/src/lib/components/flag/flag.component.html","../../../projects/mantic-ui/src/lib/helpers/timespan.ts","../../../projects/mantic-ui/src/lib/helpers/date-helper.ts","../../../projects/mantic-ui/src/lib/components/input/date/date-input.component.ts","../../../projects/mantic-ui/src/lib/components/input/date/date-input.component.html","../../../projects/mantic-ui/src/lib/components/input/numeric/numeric-input.component.ts","../../../projects/mantic-ui/src/lib/components/input/numeric/numeric-input.component.html","../../../projects/mantic-ui/src/lib/services/radio.service.ts","../../../projects/mantic-ui/src/lib/components/radio/radio.component.ts","../../../projects/mantic-ui/src/lib/components/radio/radio.component.html","../../../projects/mantic-ui/src/lib/components/slider/slider.component.ts","../../../projects/mantic-ui/src/lib/components/slider/slider.component.html","../../../projects/mantic-ui/src/lib/components/textarea/textarea.component.ts","../../../projects/mantic-ui/src/lib/components/textarea/textarea.component.html","../../../projects/mantic-ui/src/lib/components/toggle/toggle.component.ts","../../../projects/mantic-ui/src/lib/components/toggle/toggle.component.html","../../../projects/mantic-ui/src/lib/components/field/field-format-errors.pipe.ts","../../../projects/mantic-ui/src/lib/components/field/field.component.ts","../../../projects/mantic-ui/src/lib/components/field/field.component.html","../../../projects/mantic-ui/src/lib/components/field-group/field-group.component.ts","../../../projects/mantic-ui/src/lib/components/field-group/field-group.component.html","../../../projects/mantic-ui/src/lib/components/field/field-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/flex/auto/auto.component.ts","../../../projects/mantic-ui/src/lib/components/flex/auto/auto.component.html","../../../projects/mantic-ui/src/lib/components/flex/auto/auto.directive.ts","../../../projects/mantic-ui/src/lib/components/flex/fill/fill.directive.ts","../../../projects/mantic-ui/src/lib/components/flex/shrink/shrink.component.ts","../../../projects/mantic-ui/src/lib/components/flex/shrink/shrink.component.html","../../../projects/mantic-ui/src/lib/components/flex/shrink/shrink.directive.ts","../../../projects/mantic-ui/src/lib/components/flex/grow/grow.component.ts","../../../projects/mantic-ui/src/lib/components/flex/grow/grow.component.html","../../../projects/mantic-ui/src/lib/components/flex/grow/grow.directive.ts","../../../projects/mantic-ui/src/lib/components/overflow/overflow.directive.ts","../../../projects/mantic-ui/src/lib/components/footer/footer.component.ts","../../../projects/mantic-ui/src/lib/components/footer/footer.component.html","../../../projects/mantic-ui/src/lib/models/template-target.ts","../../../projects/mantic-ui/src/lib/services/layout.service.ts","../../../projects/mantic-ui/src/lib/components/footer-link/footer-link-template.directive.ts","../../../projects/mantic-ui/src/lib/components/footer-link/footer-link.component.ts","../../../projects/mantic-ui/src/lib/components/footer-link/footer-link.component.html","../../../projects/mantic-ui/src/lib/components/form/form-validation-notifier.ts","../../../projects/mantic-ui/src/lib/components/form/form.component.ts","../../../projects/mantic-ui/src/lib/components/form/form.component.html","../../../projects/mantic-ui/src/lib/components/form/form-defaults.component.ts","../../../projects/mantic-ui/src/lib/directives/header.directive.ts","../../../projects/mantic-ui/src/lib/components/grid/grid.component.ts","../../../projects/mantic-ui/src/lib/components/grid/grid.component.html","../../../projects/mantic-ui/src/lib/components/info/info.component.ts","../../../projects/mantic-ui/src/lib/components/info/info.component.html","../../../projects/mantic-ui/src/lib/components/warning/warning.component.ts","../../../projects/mantic-ui/src/lib/components/warning/warning.component.html","../../../projects/mantic-ui/src/lib/components/form-renderer/form-renderer.service.ts","../../../projects/mantic-ui/src/lib/components/form-element-renderer/form-element-renderer2.component.ts","../../../projects/mantic-ui/src/lib/components/form-element-renderer/form-element-renderer2.component.html","../../../projects/mantic-ui/src/lib/components/form-element-renderer/form-element-renderer.component.ts","../../../projects/mantic-ui/src/lib/components/form-element-renderer/form-element-renderer.component.html","../../../projects/mantic-ui/src/lib/components/form-renderer/form-renderer.component.ts","../../../projects/mantic-ui/src/lib/components/form-renderer/form-renderer.component.html","../../../projects/mantic-ui/src/lib/components/form-element-renderer/form-element.decorator.ts","../../../projects/mantic-ui/src/lib/components/form-renderer/provide-form-element.ts","../../../projects/mantic-ui/src/lib/components/header/header-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/image-upload/image-upload.component.ts","../../../projects/mantic-ui/src/lib/components/image-upload/image-upload.component.html","../../../projects/mantic-ui/src/lib/components/input/file/file-input.component.ts","../../../projects/mantic-ui/src/lib/components/input/file/file-input.component.html","../../../projects/mantic-ui/src/lib/components/input/time/time-input.component.ts","../../../projects/mantic-ui/src/lib/components/input/time/time-input.component.html","../../../projects/mantic-ui/src/lib/components/input/input-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/label-dropdown/label-dropdown-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/layout/layout.component.ts","../../../projects/mantic-ui/src/lib/components/layout/layout.component.html","../../../projects/mantic-ui/src/lib/components/layout/layout-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/localize/localize.ts","../../../projects/mantic-ui/src/lib/components/localize/localize.component.ts","../../../projects/mantic-ui/src/lib/components/localize/localize.component.html","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-bold.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-code.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-code-block.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-custom-element.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-empty.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-header.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-image.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-italic.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-link.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-list.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-paragraph.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-separator.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-strikethrough.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/models/markdown-text.ts","../../../projects/mantic-ui/src/lib/helpers/cast.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/services/markdown-parser.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/markdown-renderer.component.ts","../../../projects/mantic-ui/src/lib/components/markdown-renderer/markdown-renderer.component.html","../../../projects/mantic-ui/src/lib/components/menu-header/menu-header.component.ts","../../../projects/mantic-ui/src/lib/components/menu-header/menu-header.component.html","../../../projects/mantic-ui/src/lib/components/menu-item/menu-item.directive.ts","../../../projects/mantic-ui/src/lib/components/menu-link/menu-link-template.directive.ts","../../../projects/mantic-ui/src/lib/components/menu-link/menu-link.component.ts","../../../projects/mantic-ui/src/lib/components/menu-link/menu-link.component.html","../../../projects/mantic-ui/src/lib/components/message/message-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/modal/modal-footer.component.ts","../../../projects/mantic-ui/src/lib/components/modal/modal-header.component.ts","../../../projects/mantic-ui/src/lib/components/modal/modal.component.ts","../../../projects/mantic-ui/src/lib/components/modal/modal.component.html","../../../projects/mantic-ui/src/lib/components/modal/modal-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/notification/models/async-action.ts","../../../projects/mantic-ui/src/lib/components/notification/models/notification-ref.ts","../../../projects/mantic-ui/src/lib/components/notification/services/notification.service.ts","../../../projects/mantic-ui/src/lib/components/notification/notification-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/notification/models/notification-token.ts","../../../projects/mantic-ui/src/lib/components/notification/notification-injector.pipe.ts","../../../projects/mantic-ui/src/lib/components/notification/notification.component.ts","../../../projects/mantic-ui/src/lib/components/notification/notification.component.html","../../../projects/mantic-ui/src/lib/components/or/or.component.ts","../../../projects/mantic-ui/src/lib/components/row/row.component.ts","../../../projects/mantic-ui/src/lib/components/row/row.component.html","../../../projects/mantic-ui/src/lib/components/segment/segment.component.ts","../../../projects/mantic-ui/src/lib/components/segment/segment.component.html","../../../projects/mantic-ui/src/lib/components/segment/segment-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/segment-group/segment-group.component.ts","../../../projects/mantic-ui/src/lib/components/segment-group/segment-group.component.html","../../../projects/mantic-ui/src/lib/components/sidebar/sidebar.component.ts","../../../projects/mantic-ui/src/lib/components/sidebar/sidebar.component.html","../../../projects/mantic-ui/src/lib/components/submit/submit.component.ts","../../../projects/mantic-ui/src/lib/components/submit/submit.component.html","../../../projects/mantic-ui/src/lib/components/table/table.component.ts","../../../projects/mantic-ui/src/lib/components/table/table.component.html","../../../projects/mantic-ui/src/lib/components/table/table-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/tab/tab.component.ts","../../../projects/mantic-ui/src/lib/components/tab/tab.component.html","../../../projects/mantic-ui/src/lib/components/tab-group/models/named-url-segment.ts","../../../projects/mantic-ui/src/lib/components/tab-group/tab-group.component.ts","../../../projects/mantic-ui/src/lib/components/tab-group/tab-group.component.html","../../../projects/mantic-ui/src/lib/components/tab-group/tab-group-defaults.component.ts","../../../projects/mantic-ui/src/lib/services/template.service.ts","../../../projects/mantic-ui/src/lib/components/template/template.component.ts","../../../projects/mantic-ui/src/lib/components/template/template.component.html","../../../projects/mantic-ui/src/lib/components/template-outlet/template-outlet.component.ts","../../../projects/mantic-ui/src/lib/components/template-outlet/template-outlet.component.html","../../../projects/mantic-ui/src/lib/components/text-container/text-container.component.ts","../../../projects/mantic-ui/src/lib/components/text-container/text-container.component.html","../../../projects/mantic-ui/src/lib/components/textarea/textarea-defaults.component.ts","../../../projects/mantic-ui/src/lib/components/title-strategy/mantic-title-strategy.ts","../../../projects/mantic-ui/src/lib/components/title-strategy/mantic-title-strategy.module.ts","../../../projects/mantic-ui/src/lib/components/title-strategy/provider.ts","../../../projects/mantic-ui/src/lib/directives/hide-on-empty-template.directive.ts","../../../projects/mantic-ui/src/lib/directives/hide-on-existing-template.directive.ts","../../../projects/mantic-ui/src/lib/directives/to-template.directive.ts","../../../projects/mantic-ui/src/lib/directives/position-absolute.directive.ts","../../../projects/mantic-ui/src/lib/helpers/external-route.component.ts","../../../projects/mantic-ui/src/lib/helpers/lower-case-url-serializer.ts","../../../projects/mantic-ui/src/lib/helpers/lower-case-url-serializer.module.ts","../../../projects/mantic-ui/src/lib/helpers/mantic.ts","../../../projects/mantic-ui/src/lib/helpers/map-void.ts","../../../projects/mantic-ui/src/lib/helpers/provide-locale.ts","../../../projects/mantic-ui/src/lib/models/form-validation.ts","../../../projects/mantic-ui/src/lib/pipes/allowed-chars.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/array.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/ceil.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/debug.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/debugger.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/floor.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/is-email.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/is-filled.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/log.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/pad-end.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/pad-start.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/round.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/safe.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/slice.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/title.pipe.ts","../../../projects/mantic-ui/src/lib/pipes/to-boolean.pipe.ts","../../../projects/mantic-ui/src/lib/services/base-href.service.ts","../../../projects/mantic-ui/src/lib/services/environment.service.ts","../../../projects/mantic-ui/src/lib/services/favicon.service.ts","../../../projects/mantic-ui/src/lib/services/theme.service.ts","../../../projects/mantic-ui/src/mantic-ui-angular.ts"],"sourcesContent":["import { BooleanLike } from '../models/boolean-like';\r\n\r\nexport const toBoolean = (value: BooleanLike): boolean => {\r\n return value === '' || value === true || value?.toString().toLowerCase() === 'true';\r\n};\r\n\r\nexport const toBooleanWithUndefined = (value: BooleanLike): boolean | undefined => {\r\n return value === undefined ? undefined : toBoolean(value);\r\n};\r\n","import { ElementRef, inject, Injectable } from '@angular/core';\r\n\r\ninterface Entry {\r\n key: string;\r\n order: number;\r\n value: string;\r\n fixed?: boolean;\r\n ignore?: boolean;\r\n previous?: string[];\r\n}\r\n\r\n@Injectable()\r\nexport class SortedClassesService {\r\n private readonly entries = new Map<string, Entry>();\r\n private readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n /**\r\n * Registers one or more keys. The keys will only registered if they are not already registered.\r\n */\r\n public registerFallback(...keys: string[]): SortedClassesService {\r\n for (const key of keys) {\r\n if (this.has(key)) {\r\n continue;\r\n }\r\n this.registerEntry(key);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Registers one or more keys. If they are already registered, the order will be updated.\r\n */\r\n public register(...keys: string[]): SortedClassesService {\r\n for (const key of keys) {\r\n const existingEntry = this.getEntry(key);\r\n if (existingEntry) {\r\n for (let [_, entry] of this.entries) {\r\n if (entry.order > existingEntry.order) {\r\n entry.order--;\r\n }\r\n }\r\n existingEntry.order = this.entries.size - 1;\r\n }\r\n else {\r\n this.registerEntry(key);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n public registerFixed(...keys: string[]): SortedClassesService {\r\n for (const key of keys) {\r\n this.registerEntry(key, { fixed: true });\r\n }\r\n return this;\r\n }\r\n\r\n public unregister(...keys: string[]): SortedClassesService {\r\n for (const key of keys) {\r\n this.entries.delete(key.toLocaleLowerCase());\r\n }\r\n return this;\r\n }\r\n\r\n public ignore(...keys: string[]): SortedClassesService {\r\n for (const key of keys) {\r\n this.registerEntry(key, { ignore: true });\r\n }\r\n return this;\r\n }\r\n\r\n private registerEntry(key: string, options?: Partial<Entry>): void {\r\n if (!key) {\r\n return;\r\n }\r\n if (this.has(key)) {\r\n console.warn(`'${key}' is already registered on <${this.elementRef.nativeElement.tagName}>.`);\r\n }\r\n const entry: Entry = {\r\n ...options,\r\n key: key.toLocaleLowerCase(),\r\n value: options?.fixed ? key : options?.value ?? '',\r\n order: this.entries.size\r\n };\r\n this.entries.set(entry.key, entry);\r\n }\r\n\r\n private getEntry(key: string): Entry | undefined {\r\n key = key.toLocaleLowerCase();\r\n return this.entries.get(key);\r\n }\r\n\r\n public set(key: string, value: unknown, options?: { refresh: boolean }): SortedClassesService {\r\n let entry = this.getEntry(key);\r\n if (!entry) {\r\n console.warn(`Set an unregistered value '${key}' on <${this.elementRef.nativeElement.tagName}> is not recommended. Call register(key) method once, before using set(...) method.`);\r\n entry = this.register(key).getEntry(key);\r\n }\r\n if (!entry) {\r\n throw new Error('Entry not found #dki3kjk');\r\n }\r\n if (entry.fixed) {\r\n console.error(`Can not change an fixed value '${key} on <${this.elementRef.nativeElement.tagName}>. Use register(key) instead of registerFixed(key)`);\r\n return this;\r\n }\r\n if (value === true) {\r\n entry.value = key;\r\n }\r\n else if (value === false || value === undefined || value === null) {\r\n entry.value = '';\r\n }\r\n else {\r\n entry.value = value.toString();\r\n }\r\n if (options?.refresh !== false) {\r\n this.updateEntry(entry);\r\n }\r\n return this;\r\n }\r\n\r\n public get(key: string): unknown {\r\n return this.getEntry(key)?.value;\r\n }\r\n\r\n public has(key: string): boolean {\r\n return !!this.getEntry(key);\r\n }\r\n\r\n public toString(): string {\r\n return Array.from(this.entries.values())\r\n .sort(SortedClassesService.sortByOrder)\r\n .map(entry => entry.value)\r\n .filter(value => value)\r\n .join(' ');\r\n }\r\n\r\n public update(): void {\r\n Array.from(this.entries.values())\r\n .filter(entry => !entry.ignore)\r\n .sort(SortedClassesService.sortByOrder)\r\n .forEach(entry => this.updateEntry(entry));\r\n }\r\n\r\n private updateEntry(entry: Entry): void {\r\n const classList = this.elementRef.nativeElement.classList;\r\n if (entry.previous) {\r\n classList.remove(...entry.previous);\r\n }\r\n const values = entry.value.split(' ').filter(x => !!x);\r\n classList.add(...values);\r\n entry.previous = values;\r\n }\r\n\r\n private static sortByOrder(left: Entry, right: Entry): number {\r\n return left.order > right.order ? 1 : left.order < right.order ? -1 : 0;\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { MonoTypeOperatorFunction, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport abstract class Destroyable implements OnDestroy {\r\n private readonly destroySubject = new Subject<void>();\r\n\r\n /**\r\n * An observable that emits when the component is destroyed.\r\n */\r\n public readonly destroy = this.destroySubject.asObservable();\r\n\r\n /**\r\n * Pipe this method to a subject to take values until the component is destroyed.\r\n * Example: `observable.pipe(this.takeUntilDestroy()).subscribe(...);`\r\n * Equals to `observable.pipe(takeUntil(this.destroy)).subscribe(...);`.\r\n */\r\n public takeUntilDestroy<T>(): MonoTypeOperatorFunction<T> {\r\n return takeUntil(this.destroy);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroySubject.next();\r\n }\r\n}\r\n","import { Directive, ElementRef, inject, Inject, OnInit, Optional } from '@angular/core';\r\nimport { toBoolean } from '../helpers/to-boolean';\r\nimport { BooleanLike } from '../models/boolean-like';\r\nimport { SortedClassesService } from '../services/sorted-classes.service';\r\nimport { Destroyable } from './destroyable';\r\n\r\n@Directive({\r\n providers: BaseComponent.providers\r\n})\r\nexport abstract class BaseComponent extends Destroyable implements OnInit {\r\n protected static readonly providers = [SortedClassesService];\r\n protected readonly classes = inject(SortedClassesService, { self: true });\r\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private noClassesValue = false;\r\n private initialized = false;\r\n protected readonly tag = this.elementRef.nativeElement.tagName.toLowerCase();\r\n protected validateAttributes = true;\r\n\r\n protected get noClasses(): boolean {\r\n return this.noClassesValue;\r\n }\r\n\r\n protected set noClasses(value: boolean) {\r\n this.noClassesValue = value;\r\n this.refreshClasses();\r\n }\r\n\r\n protected constructor(\r\n // eslint-disable-next-line @angular-eslint/prefer-inject\r\n @Optional() @Inject('none') useUiClass = true\r\n ) {\r\n super();\r\n if (useUiClass) {\r\n this.classes.registerFixed('ui');\r\n }\r\n this.classes.register('style');\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.initialized = true;\r\n this.readPropertiesFromAttributes();\r\n this.refreshClasses();\r\n }\r\n\r\n private readPropertiesFromAttributes(): void {\r\n if (!this.validateAttributes) {\r\n return;\r\n }\r\n for (const attribute of this.elementRef.nativeElement.attributes) {\r\n if (attribute.name.startsWith('_ng') || attribute.name.startsWith('ng-') || attribute.name.startsWith('m-') || attribute.name === 'class' || attribute.name === 'title') {\r\n continue;\r\n }\r\n if (!this.classes.has(attribute.name)) {\r\n console.warn(`Unknown attribute '${attribute.name}' on <${this.tag}> found.`, this.elementRef.nativeElement);\r\n }\r\n }\r\n }\r\n\r\n // TODO: Check usage\r\n protected refreshClasses(): void {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.classes.update();\r\n }\r\n\r\n protected toBoolean(value: BooleanLike): boolean {\r\n return toBoolean(value);\r\n }\r\n}\r\n","import { linkedSignal, OutputEmitterRef, Signal } from '@angular/core';\n\nexport interface TransformableModel<TRead, TWrite> extends Signal<TRead> {\n set(value: TWrite): void;\n update(updateFn: (value: TRead) => TRead): void;\n asReadonly(): Signal<TRead>;\n}\n\n/**\n * A writable signal that behaves like `model()` but supports a `transform`.\n *\n * `input()` and `output()` are compiler-recognised initializer APIs and must stay as direct\n * class-field initializers — they cannot be created inside a helper. So declare them on the class\n * and hand them to this factory, which wires up the writable state and the change emission:\n *\n * ```ts\n * public readonly activeInput = input<boolean, BooleanLike>(false, { alias: 'active', transform: toBoolean });\n * public readonly activeChange = output<boolean>();\n * public readonly active = transformableModel(this.activeInput, this.activeChange, toBoolean);\n * ```\n *\n * Read with `active()`, write with `active.set(<BooleanLike>)`. A binding on the aliased input flows\n * in (already coerced by the input's own transform) and resets the value WITHOUT re-emitting; an\n * imperative `set`/`update` coerces the value and emits the change output (model two-way semantics).\n */\nexport const transformableModel = <TRead, TWrite>(\n source: Signal<TRead>,\n change: OutputEmitterRef<TRead>,\n transform: (value: TWrite) => TRead\n): TransformableModel<TRead, TWrite> => {\n const state = linkedSignal(() => source());\n const setState = state.set.bind(state);\n const model = state as unknown as TransformableModel<TRead, TWrite>;\n model.set = (value: TWrite): void => {\n const next = transform(value);\n if (Object.is(next, state())) {\n return;\n }\n setState(next);\n change.emit(next);\n };\n model.update = (updateFn: (value: TRead) => TRead): void => {\n const next = updateFn(state());\n if (Object.is(next, state())) {\n return;\n }\n setState(next);\n change.emit(next);\n };\n return model;\n};\n","import { computed, Directive, effect, Inject, input, Optional, signal } from '@angular/core';\nimport { toBoolean } from '../helpers/to-boolean';\nimport { BooleanLike } from '../models/boolean-like';\nimport { BaseComponent } from './base.component';\n\n@Directive()\nexport abstract class InvertibleComponent extends BaseComponent {\n protected static override readonly providers = [...BaseComponent.providers];\n private readonly invertedDefault = signal(false);\n public readonly invertedInput = input<boolean | undefined, BooleanLike>(undefined, { alias: 'inverted', transform: toBoolean });\n public readonly inverted = computed(() => this.invertedInput() ?? this.invertedDefault());\n\n protected constructor(\n // eslint-disable-next-line @angular-eslint/prefer-inject\n @Optional() @Inject('none') useUiClass = true\n ) {\n super(useUiClass);\n this.classes.register('inverted');\n effect(() => this.classes.set('inverted', this.inverted()));\n }\n\n protected refreshInverted(value: boolean): void {\n this.invertedDefault.set(value);\n }\n}\n","import { Directive, effect, input, output } from '@angular/core';\nimport { toBoolean } from '../helpers/to-boolean';\nimport { transformableModel } from '../helpers/transformable-model';\nimport { BooleanLike } from '../models/boolean-like';\nimport { ColorName } from '../models/color';\nimport { InvertibleComponent } from './invertible.component';\n\n@Directive({\n providers: ButtonBaseComponent.providers,\n host: {\n '[class.primary]': 'primary()',\n '[class.secondary]': 'secondary()',\n '[class.positive]': 'positive()',\n '[class.negative]': 'negative()',\n '[class.circular]': 'circular()',\n '[class.left]': 'attachedLeft()',\n '[class.top]': 'attachedTop()',\n '[class.right]': 'attachedRight()',\n '[class.bottom]': 'attachedBottom()',\n '[class.attached]': 'attached'\n }\n})\nexport abstract class ButtonBaseComponent extends InvertibleComponent {\n protected static override readonly providers = [...InvertibleComponent.providers];\n public readonly primary = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly secondary = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly positive = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly negative = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly size = input('');\n public readonly circular = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly attachedLeft = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly attachedTop = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly attachedRight = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly attachedBottom = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly color = input<ColorName | undefined>(undefined);\n public readonly basic = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly disabled = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly loading = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly activeInput = input<boolean, BooleanLike>(false, { alias: 'active', transform: toBoolean });\n public readonly activeChange = output<boolean>();\n public readonly active = transformableModel(this.activeInput, this.activeChange, toBoolean);\n\n protected get attached(): boolean {\n return this.attachedTop() || this.attachedBottom() || this.attachedLeft() || this.attachedRight();\n }\n\n protected constructor() {\n super();\n this.elementRef.nativeElement.setAttribute('tabindex', '0');\n this.classes.register('color', 'basic', 'disabled', 'loading', 'active', 'size', 'primary', 'secondary', 'positive', 'negative', 'circular', 'tabindex', 'attachedLeft', 'attachedRight', 'attachedTop', 'attachedBottom')\n .registerFixed('button');\n effect(() => this.classes.set('color', this.color()));\n effect(() => this.classes.set('basic', this.basic()));\n effect(() => this.classes.set('disabled', this.disabled()));\n effect(() => this.classes.set('loading', this.loading()));\n effect(() => this.classes.set('active', this.active()));\n effect(() => this.classes.set('size', this.size()));\n }\n}\n","import { Directive, ElementRef, Inject, inject, OnInit, Optional, TypeProvider } from '@angular/core';\r\nimport { toBoolean } from '../helpers/to-boolean';\r\nimport { BooleanLike } from '../models/boolean-like';\r\nimport { SortedClassesService } from '../services/sorted-classes.service';\r\nimport { Destroyable } from './destroyable';\r\n\r\n@Directive()\r\nexport abstract class BaseDirective extends Destroyable implements OnInit {\r\n protected static readonly providers: TypeProvider[] = [SortedClassesService];\r\n protected readonly classes = inject(SortedClassesService, { self: true });\r\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef, { self: true });\r\n private noClassesValue = false;\r\n private initialized = false;\r\n protected tag: string;\r\n protected validateAttributes = true;\r\n\r\n protected get noClasses(): boolean {\r\n return this.noClassesValue;\r\n }\r\n\r\n protected set noClasses(value: boolean) {\r\n this.noClassesValue = value;\r\n this.refreshClasses();\r\n }\r\n\r\n protected constructor(\r\n // eslint-disable-next-line @angular-eslint/prefer-inject\r\n @Optional() @Inject('none') useUiClass = true\r\n ) {\r\n super();\r\n this.tag = this.elementRef.nativeElement.tagName.toLowerCase();\r\n if (useUiClass) {\r\n this.classes.registerFixed('ui');\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.initialized = true;\r\n this.readPropertiesFromAttributes();\r\n this.refreshClasses();\r\n }\r\n\r\n private readPropertiesFromAttributes(): void {\r\n if (!this.validateAttributes) {\r\n return;\r\n }\r\n for (const attribute of this.elementRef.nativeElement.attributes) {\r\n if (attribute.name.startsWith('_ng') || attribute.name.startsWith('ng-') || attribute.name.startsWith('m-') || attribute.name === 'class' || attribute.name === 'title') {\r\n continue;\r\n }\r\n if (!this.classes.has(attribute.name)) {\r\n console.warn(`Unknown attribute '${attribute.name}' on <${this.tag}> found.`, this.elementRef.nativeElement);\r\n }\r\n }\r\n }\r\n\r\n protected refreshClasses(): void {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.classes.update();\r\n }\r\n\r\n protected toBoolean(value: BooleanLike): boolean {\r\n return toBoolean(value);\r\n }\r\n\r\n}\r\n\r\n","import { Component, input } from '@angular/core';\r\nimport { BaseComponent } from '../../base/base.component';\r\nimport { AnimationDirection } from './models/animation-direction';\r\n\r\n@Component({\r\n selector: 'm-animation',\r\n templateUrl: './animation.component.html',\r\n styleUrls: ['./animation.component.scss'],\r\n host: { '[class.hidden]': 'hidden()' },\r\n providers: [...BaseComponent.providers]\r\n})\r\nexport class AnimationComponent extends BaseComponent {\r\n public readonly hidden = input(true);\r\n public readonly direction = input<AnimationDirection>();\r\n\r\n public constructor() {\r\n super(false);\r\n this.classes.registerFixed('content');\r\n this.classes.register('hidden', 'direction');\r\n }\r\n}\r\n","<ng-content />","import { Component } from '@angular/core';\r\nimport { BaseComponent } from '../../base/base.component';\r\n\r\n@Component({\r\n selector: 'm-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n providers: [...BaseComponent.providers]\r\n})\r\nexport class BreadcrumbComponent extends BaseComponent {\r\n\r\n public constructor() {\r\n super();\r\n this.classes.registerFixed('breadcrumb');\r\n }\r\n}\r\n","<!-- TODO: Not yet implemented -->\r\n<!-- <a class=\"section\">Home</a>-->\r\n<!-- <i class=\"right angle icon divider\"></i>-->\r\n<!-- <a class=\"section\">Store</a>-->\r\n<!-- <i class=\"right angle icon divider\"></i>-->\r\n<!-- <div class=\"active section\">T-Shirt</div>-->\r\n","export declare type KeyCode = 'Space' | 'Enter' | 'Escape';\r\n\r\nexport class Key {\r\n public static readonly space = new Key('Space');\r\n public static readonly enter = new Key('Enter');\r\n public static readonly escape = new Key('Escape');\r\n\r\n public constructor(\r\n public readonly code: string\r\n ) {\r\n }\r\n\r\n public is(event: KeyboardEvent): boolean {\r\n return Key.is(event, this);\r\n }\r\n\r\n public static is(event: KeyboardEvent, ...keys: (KeyCode | Key)[]): boolean {\r\n return keys.some(key => event.key === (typeof key === 'string' ? key : key.code));\r\n }\r\n}\r\n","import { NgIfContext } from '@angular/common';\r\nimport { Component, contentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { ButtonBaseComponent } from '../../base/button-base.component';\r\nimport { BooleanLike } from '../../models/boolean-like';\r\nimport { Key } from '../../models/key';\r\n\r\n@Component({\r\n selector: 'm-toggle-button',\r\n templateUrl: './toggle-button.component.html',\r\n styleUrls: ['./toggle-button.component.scss'],\r\n imports: [],\r\n providers: [...ButtonBaseComponent.providers],\r\n host: {\r\n '[class.checked]': 'checked',\r\n '(click)': 'toggle()',\r\n '(keydown)': 'onKeyDown($event)'\r\n }\r\n})\r\nexport class ToggleButtonComponent extends ButtonBaseComponent {\r\n public readonly activeTemplate = contentChild<TemplateRef<NgIfContext<boolean>> | null>('active');\r\n\r\n public get checked(): boolean {\r\n return this.active();\r\n }\r\n\r\n // Kept as accessor: assigned imperatively inside the class (check()/uncheck()) and has a paired checkedChange output; signal inputs are read-only.\r\n @Input()\r\n public set checked(value: BooleanLike) {\r\n this.active.set(value);\r\n }\r\n\r\n @Output()\r\n public readonly checkedChange = new EventEmitter<boolean>();\r\n\r\n public constructor() {\r\n super();\r\n this.classes.register('checked')\r\n .registerFixed('toggle');\r\n }\r\n\r\n protected toggle(): void {\r\n if (this.checked) {\r\n this.uncheck();\r\n }\r\n else {\r\n this.check();\r\n }\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent): void {\r\n if (Key.is(event, Key.space, Key.enter)) {\r\n this.toggle();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n public check(): void {\r\n if (this.checked) {\r\n return;\r\n }\r\n this.checked = true;\r\n this.checkedChange.emit(this.checked);\r\n }\r\n\r\n public uncheck(): void {\r\n if (!this.checked) {\r\n return;\r\n }\r\n this.checked = false;\r\n this.checkedChange.emit(this.checked);\r\n }\r\n}\r\n","@if (!active() || !activeTemplate()) {\n <ng-content></ng-content>\n} @else {\n <ng-template [ngTemplateOutlet]=\"activeTemplate()\"></ng-template>\n}\n","import { Component, computed, contentChildren, effect, input } from '@angular/core';\nimport { BaseComponent } from '../../base/base.component';\nimport { toBoolean } from '../../helpers/to-boolean';\nimport { BooleanLike } from '../../models/boolean-like';\nimport { ColorName } from '../../models/color';\nimport { ToggleButtonComponent } from '../toggle-button/toggle-button.component';\n\n@Component({\n selector: 'm-button-group',\n templateUrl: './button-group.component.html',\n styleUrls: ['./button-group.component.scss'],\n providers: [...BaseComponent.providers],\n host: {\n '[class.left]': 'attachedLeft()',\n '[class.top]': 'attachedTop()',\n '[class.right]': 'attachedRight()',\n '[class.bottom]': 'attachedBottom()',\n '[class.attached]': 'attached()'\n }\n})\nexport class ButtonGroupComponent extends BaseComponent {\n public readonly attachedLeft = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly attachedTop = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly attachedRight = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly attachedBottom = input<boolean, BooleanLike>(false, { transform: toBoolean });\n public readonly color = input<ColorName | undefined>(undefined);\n protected readonly toggleButtons = contentChildren(ToggleButtonComponent);\n protected readonly attached = computed(() => this.attachedTop() || this.attachedBottom() || this.attachedLeft() || this.attachedRight());\n\n public constructor() {\n super();\n this.classes.register('color')\n .registerFixed('buttons');\n effect(() => this.classes.set('color', this.color()));\n effect(onCleanup => {\n const subscriptions = this.toggleButtons().map(button => button.checkedChange.subscribe(value => value ? this.uncheckOthers(button) : this.keepOneChecked()));\n onCleanup(() => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n });\n });\n }\n\n private uncheckOthers(button: ToggleButtonComponent): void {\n for (const x of this.toggleButtons().filter(x => x !== button)) {\n x.uncheck();\n }\n }\n\n private keepOneChecked(): void {\n const buttons = this.toggleButtons();\n if (buttons.length > 0 && buttons.every(button => !button.checked)) {\n buttons[0].check();\n }\n }\n}\n","<ng-content />","import { NgClass } from '@angular/common';\nimport { Component, computed, input } from '@angular/core';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { SizeProp } from '@fortawesome/fontawesome-svg-core';\nimport { IconSize, ManticIconSize } from './models/icon-size';\nimport { IconType } from './models/icon-type';\n\n@Component({\n selector: 'm-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n imports: [FontAwesomeModule, NgClass]\n})\nexport class IconComponent {\n public readonly icon = input<IconType>();\n public readonly size = input<IconSize>();\n public readonly iconClass = input<string | undefined>('icon');\n protected readonly mIcon = computed(() => {\n const icon = this.icon();\n return typeof icon === 'string' ? icon : undefined;\n });\n protected readonly faIcon = computed(() => {\n const icon = this.icon();\n return typeof icon === 'string' ? undefined : icon;\n });\n private readonly mappedSize = computed(() => IconComponent.mapSize(this.size()));\n protected readonly mSize = computed(() => this.mappedSize().mSize);\n protected readonly faSize = computed(() => this.mappedSize().faSize);\n\n private static mapSize(value: IconSize): { mSize: ManticIcon